1、单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,6,章信息管理系统分析与设计,本章导读:,本章本章从软件工程的角度介绍了信息管理系统设计的基本过程和各阶段的关键内容,本章主要知识点:,(,1,)信息管理系统的分类,(,2,)信息管理系统的开发过程和各阶段主要任务,(,3,)系统分析、系统设计、系统实施与维护,管理信息系统开发分为哪几个阶段,各阶段的主要步骤及其内容,.,第,6,章信息管理系统分析与设计,6.1,概述,6.2,系统分析,6.3,系统设计,6.4,系统实施与维护,6.1,概述,6.1.1,信息管理系统分类,6.1.2,信息管理系统开发过程
2、6.1,概述,6.1.1,信息管理系统分类,1,办公自动化系统,办公自动化系统是用信息管理技术来提高办公室工作效率,对办公室工作人员进行支持的系统。其主要功能如下:,(,1,)收文管理。包括外来文件的收文输入、登记、流转、审阅、批示、检索等功能。,(,2,)拟文管理。包括内部草拟文稿的输入登记、审阅、会签、核稿、签发、清稿、成文登记、排版打印、发文登记、检索查询等功能。,(,3,)呈报文管理。包括呈批件的文稿输入、流转、审阅、批示、检索和存档等功能。,6.1,概述,6.1.1,信息管理系统分类,(,4,)档案管理。包括收文、拟文处理完毕后的文件自动转入档案管理系统进行归档、立卷处理等功能。,
3、5,)电子邮件系统。利用电子邮件实现公文和其它文件的传送、接收、下载等功能。,(,6,)个人事务管理。包括个人事务的安排管理,如名片管理、会议、工作日程安排、重大事件提醒等功能。,(,7,)系统管理。根据系统使用部门、人员的变动进行用户管理,包括用户名单的增、删,权限设定、修改等功能。,另外,还应该注意提高办公自动化系统的安全保密性。,6.1,概述,6.1.1,信息管理系统分类,2,管理信息系统,管理信息系统(,Management Information System,,,MIS,),是一个由人和计算机组成的能进行组织内部和外部信息的收集、传递、存储、加工、维护和使用,支持组织的作业控制
4、计划管理和辅助决策的信息管理系统。管理信息系统主要指数据库管理系统,利用数据库技术实现各种管理业务。,6.1,概述,6.1.1,信息管理系统分类,2,管理信息系统,主要功能,(,1,)数据处理功能。包括数据的输入,/,输出、删除、修改、传输、存储、加工、查询。,(,2,)计划功能。根据用户的目标和环境条件,制订各部门的工作计划。,(,3,)控制功能。根据收集到的信息,对计划的执行情况进行监督、检查和控制。,(,4,)预测功能。对企业效益、市场的变化情况及各种计划完成的可能性做出预测。,(,5,)辅助决策功能,为企业的决策人提供可靠的决策信息和决策方案。,6.1,概述,6.1.1,信息管理系统
5、分类,3.,决策支持系统,决策支持系统(,Decision Supporting System,,,DSS,),产生于,20,世纪,70,年代。是在管理信息系统(,MIS,),的基础上发展起来的,主要强调为管理者提供辅助决策的能力。,决策支持系统以模型库为主体,通过定量分析进行辅助决策。,返回本节目录,6.1,概述,6.1.2,信息管理系统开发过程,软件的生命周期:,软件开发过程是由一系列相关活动组成的,包括从提出要求,经过研制,到交付使用,在使用过程中不断的增补修订,直到最后因被新的软件所代替而淘汰的全部过程。,阶段划分,系统分析,系统设计,系统实施与维护,6.1,概述,6.1.2,信息管理
6、系统开发过程,阶段划分,系统分析,该时期的任务是确定信息管理系统的总目标、确定系统的可行性、确定系统的实现方案、确定系统必须完成的功能以及完成该系统需要的资源和成本,并且制定系统完成的预计进度,写出系统分析报告。,通常划分为三个阶段:问题定义、可行性研究和需求分析。由分析人员负责完成。,系统设计,该时期的任务是根据系统分析时期的结果,逐步完成系统的设计开发工作,最终得到运行良好的软件。通常由软件设计、软件编码、软件测试三个阶段组成。,系统实施与维护,主要任务是为保证软件长久的满足用户的需要而对软件进行的一系列修改工作。,返回本章目录,6.2,系统分析,6.2.1,问题定义,6.2.2,可行性研
7、究,6.2.3,需求分析,6.2,系统分析,6.2.1,问题定义,问题定义阶段必须回答的关键问题是:“系统要解决的问题是什么”。,系统分析员应该提出关于问题性质、工程目标和规模的书面报告。即软件计划。,返回本节目录,6.2,系统分析,6.2.2,可行性研究,关键问题是:“对上一阶段提出的问题有可行的解决方案吗?”。,可行性研究的任务,可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。,可行性研究的内容:,经济可行性,:,预计利润是否大于开发成本,;,达到利益的目标,技术可行性,法律可行性,开发方案的选择,6.2,系统分析,6.2.2,可行性研究,可行性研究的步骤,明确新系
8、统的实现目标,研究旧系统,分析问题,导出新系统模型,确定系统开发计划,完成可行性研究报告,返回本节目录,6.2,系统分析,6.2.3,需求分析,需求分析的任务,确定目标系统的具体要求,运行环境要求:硬件环境、软件环境,系统的性能要求,:,技术性能指标,系统功能要求,可靠性、安全保密性、用户界面等,建立目标系统的逻辑模型,分析系统的数据需求,并利用图形工具描述数据结构,并用数据流图、数据字典及处理算法描述目标系统的逻辑模型。,6.2,系统分析,6.2.3,需求分析,需求分析的任务,修正系统的开发计划,通过需求分析,可对目标系统更深入更具体的了解,因而可以更准确地估计系统的开发成本和进度,修正前阶
9、段制定的开发计划。,制定初步的系统测试计划,为了验证系统是否满足用户的需求,必须对系统功能进行测试。在系统开发早期就制定测试计划,这有利于明确设计目标、保证设计正确。,编写初步的用户手册,6.2,系统分析,6.2.3,需求分析,需求分析的步骤,进行调查研究,调查研究是需求分析的主要手段。分析员对可行性研究报告中描述的目标系统的运行环境、功能、性能等要和用户进行详细的交流,对各项内容进一步细化并取得一致意见。,分析和描述系统的逻辑模型,分析员把来自用户的信息加以分析去掉不合理部分,增加需要部分。最后抽象出系统的详细逻辑模型。,评审,6.2.3,需求分析,评审,为了保证需求分析的质量,应对软件功能
10、的正确性、完整性、清晰性,以及其它需求给与评价并提出修改意见,修改完成后,需要再次进行评审、修改,直到评审通过为止。,评审的主要内容,1.,系统定义的目标是否与用户的要求一致。,2.,系统需求分析阶段提供的文档资料是否齐全。,3,.,文档中所有描述是否完整、清晰、准确反映用户要求。,4,.,与所有其它系统成分的重要接口是否都已经描述。,5,.,所开发项目的数据流与数据结构是否足够、确定。,6.2,系统分析,6.2,系统分析,6.2.3,需求分析,评审的主要内容,6.,所有图表是否清楚,在不补充说明时是否能够理解。,7.,主要功能是否已包含在规定的软件范围之内,是否都已充分说明。,8.,设计的约
11、束条件和限制条件是否符合实际。,9.,开发的技术风险是什么。,l0.,是否考虑过软件需求的其它方案。,11.,是否考虑过软件将来可能会提出的其它需求。,12.,是否详细制定了检验标准,它们对系统定义是否能成功进行确认。,13.,有没有遗漏、重复或不一致的地方。,14.,用户是否审查了初步的用户手册。,15.,软件开发计划中的估算是否受到了影响。,返回本章目录,6.3,系统设计,6.3.1,软件设计,6.3.2,编码,6.3.3,软件测试,6.3,系统设计,6.3.1,软件设计,任务是确定系统“怎么做”的问题。,划分,总体设计又称为概要设计或结构设计。总体设计阶段重要任务之一就是确定系统的总体结
12、构,即确定系统由哪些模块组成以及各模块之间的调用关系和接口说明。,详细设计:设计每个模块的内部实现细节。详细设计又称为过程设计。,6.3,系统设计,6.3.1,软件设计,软件设计的过程,确定目标系统的各种可能的不同的方案,.,分析员向用户推荐最佳实现方案,并制订详细的实现计划,在得到用户认可后可进入下面阶段。,设计软件结构。首先进行总体设计,确定系统由哪些模块组成,以及模块之间的相互关系。然后进行详细设计,确定每个模块的实现算法和处理过程。,数据库设计。对于涉及数据库技术的软件系统,要根据需求分析的结果设计数据库的结构。,制订测试计划。在软件开发的早期提前考虑测试计划,能够促使设计人员注意软件
13、的测试问题,有利于提高软件的可测试性。,编写文档。总体设计说明书(包括系统实现方案和软件结构)、详细设计说明书、测试计划(包括测试策略、测试方案、预期的测试结果、测试进度计划等)、初步的用户操作手册、详细的实现计划和数据库设计的结果。,复审。在总体设计和详细设计结束时要进行严格的技术审查和管理复审。,6.3,系统设计,6.3.1,软件设计,模块,模块是能够单独命名并且能够独立完成一定功能的数据说明和程序语句的集合。模块能够通过名字来访问,如过程、函数、子程序等。,模块划分的原则,尽量提高模块的独立性:应尽量使每一个模块完成一个相对独立的功能,参数传递应尽量使用简单数据类型,而不要使用结构类型变
14、量,尽量少使用全局变量,降低接口的复杂程度。,模块的规模应该适中:不要太大,不要太小,模块的规模最好以一页纸(高级语言,50,行左右)为宜,降低模块接口的复杂性,模块之间传递的参数个数应尽量少,类型应尽量简单。,设计单入口、单出口的模块。,6.3,系统设计,6.3.1,软件设计,总体设计的图形描述工具,层次图、,HIPO,图(层次图,+,输入,/,处理,/,输出图)、结构图。,结构图,用一个方框代表一个模块,框内注明模块的名字或主要功能;方框之间用箭头或直线表示模块的调用关系;用带注释的箭头表示模块调用时传递的信息,箭头方向表示数据传递方向,箭头尾部用空心圆表示传递的是数据信息,实心圆表示传递
15、的是控制信息;,结构图的基本符号,结构图举例,图,6-2,产生最佳解的结构图,6.3,系统设计,6.3.1,软件设计,详细设计的图形描述工具,常用工具有:程序流程图、盒图(,N-S,图)、,PAD,图、过程设计语言,PDL,、,判定表、判定树、,Jackson,图等。它们都可以形象的描述程序的控制流程、处理过程、数据组织以及各方面的实现细节,作为编码的依据。,程序流程图,程,序,流,程,图,的,基,本,符,号,6.3,系统设计,6.3.1,软件设计,详细设计的图形描述工具,盒图,:,又称,N-S,图,是,1973,年由,Nassi,和,Shneiderman,提出的,它撇弃了程序流程图控制转移
16、的随意性,以结构化的方式严格控制处理之间的转移,。,图,6-4,N-S,图,的,基,本,符,号,返回本节目录,6.3,系统设计,6.3.2,编码,软件编码是系统设计过程的继续,是将软件设计转换成用程序设计语言编写的源程序的过程。为了保证程序设计的质量,程序员必须熟练掌握并正确运用程序设计语言的语法规则。此外,还要求源程序应有良好的结构和良好的程序设计风格。,6.3,系统设计,6.3.2,编码,1,结构化程序设计的设计原则,使用语言中的顺序、选择、循环等有限的基本控制结构表示程序逻辑。,选用的控制结构只有一个入口、一个出口。,程序语句组成容易识别的块,每块只有一个入口和一个出口。,复杂结构应用基
17、本控制结构进行组合嵌套来实现。,程序中没有的控制结构,可用一段等价的程序段来模拟,但要求程序段在整个系统中应前后一致。,6.3,系统设计,6.3.2,编码,2,程序设计语言的选择,除了选择结构化的程序设计语言,还应该考虑如下几个方面:,l,系统应用领域。,l,算法和计算的复杂性。,l,软件执行环境。,l,性能考虑,程序设计语言能否达到软件系统的需求。,l,数据结构的复杂性。,l,软件开发人员的知识水平和心理因素等。,6.3,系统设计,6.3.2,编码,2,程序设计语言的选择,项目的应用领域是选择语言的关键因素,不同的应用领域有适应该领域软件特点的不同的程序设计语言开发环境。如在科学计算领域多使
18、用,FORTRAN,语言,在数据库应用领域主要使用,PowerBuilder,、,SQL Server,、,ORACLE,、,ACCESS,、,Sybase,等,网页设计主要采用,JavaScript,、,VBScript,、,ASP,、,PHP,、,JSP,等程序设计语言,对于实时性较高的应用系统一般采用汇编语言、,C,语言、,C+,等。,6.3,系统设计,6.3.2,编码,3,程序设计风格,良好的程序设计风格主要有四个方面:源程序文档化、数据说明、语句结构和输入,/,输出技术。,(,1,)源程序文档化,标识符的命名,标识符指表示模块名、变量名、常量名、子程序名、函数名等的名字。,名字命名应
19、符合其表示的实际意义。例如,用,number,表示编号,用,name,表示姓名,用,sum,表示总和,用,average,表示平均值等等,通常是采用单词缩写的形式(如用,num,表示编号),但要注意缩写规则要一致,并应该给每个标识符加上适当的注释。特殊情况还可以使用汉语拼音或汉语拼音缩写的形式定义标识符,但要保证在程序中的定义规则一致。,6.3,系统设计,6.3.2,编码,3,程序设计风格,(,1,)源程序文档化,程序注释,程序的注释能够帮助读者理解程序,是程序员和日后的程序读者之间通信的重要手段,为后续的测试和维护工作的顺利进行提供了有利保证。,序言性注释:序言性注释置于模块的开头部分,包括
20、模块的功能说明、接口说明(调用形式、参数描述、子程序清单等)、模块位置、主要算法、开发简历(编码者、复审者、复审日期,最后修改日期等);,功能性注释。功能性注释嵌在源程序体内,用于描述一些程序段的功能。,6.3,系统设计,6.3.2,编码,3,程序设计风格,(,1,)源程序文档化,程序的形象化组织,使用空格、空行和移行来改善视觉效果,使程序,的结构清晰,层次分明,易于理解。,例:写法一,float score;char degree;if(score90)degree=A;else if(score80)degree=B;else,写法二:,float score;,char degree;,
21、if(score90),degree=A;,else,if(score80),degree=B;,else,显然,写法二中程序的结构则更清晰,便于理解和查错、改错。,6.3,系统设计,6.3.2,编码,3,程序设计风格,(,2,)数据说明,数据说明的次序应当规范化,规定说明的先后次序。例如,常量说明、简单变量类型说明、数组说明、结构类型说明、函数说明等。在类型说明中,还可以进一步要求,如按照整型变量、实型变量、字符型变量、指针变量的顺序进行。,当多个变量名用一个语句说明时,应对这些变量按字母表的顺序排列。,如果设计了一个复杂的数据结构,应当使用注释,说明在程序实现时这个数据结构的固有特点。,6
22、3,系统设计,6.3.2,编码,3,程序设计风格,(,3,)语句结构,语句结构应力求简单、直接,不能片面追求效率而使结构语句复杂化。,注意以下几个方面:,在一行内只写一条语句,并且采用适当的移行格式,使程序的逻辑和功能变得更加明确。,程序的编写应当首先考虑清晰性,不要刻意追求技巧性,使程序编写的过于紧凑。,程序编写的要简单,写清楚,直截了当的说明程序员的用意。,除非对效率有特殊的要求,程序编写要做到清晰第一,效率第二。,首先要保证正确性,然后才要求提高速度。,6.3.2,编码,3,程序设计风格,(,3,)语句结构,注意方面:,尽可能使用库函数。,避免使用临时变量而使可读性下降。,尽量用公共过
23、程或子程序去代替重复的功能代码段。,使用括号清晰的表达、算术表达式和逻辑表达式的运算顺序。,避免不必要的转移。,用逻辑表达式代替分之嵌套。,避免使用空的,else,语句和,IF.THEN.IF,语句。,避免使用,ELSE GOTO,和,ELSE RETURN,语句。,使与判定相联系的动作尽可能的紧跟着判定。,尽量减少使用“否定”条件的条件语句。,避免过多的循环嵌套和条件嵌套。,不要使,GOTO,语句相互交叉。,对递归定义的数据结构尽量使用递归过程。,经常反躬自省:“如果我不是编码的人,我能看懂它吗?”,考虑他的可理解性达到什么程度。,6.3.2,编码,3,程序设计风格,(,4,)输入,/,输出
24、I/O,),技术,输入,/,输出规则:,对所有输入数据都应进行校验。,检查输入项,重要组合,的合法性。,保持输入格式简单。,使用数据结束标记,,不要要求用户指定数据的数目。,应给用户明确的输入提示。,应允许缺省值。,给所有输出数据加标志,并设计输出报表格式。,返回本节目录,6.3,系统设计,6.3.3,软件测试,1,软件测试的目标,G,Myers,给出了如下一些观点,可以作为测试的目标或定义:,(,1,)测试是为了发现程序中的错误而执行程序的过程。,(,2,)好的测试方案是即可能发现迄今为止尚未发现的错误。,(,3,)成功的测试是发现了至今为止尚未发现的错误的测试。,错误观点:,“测试是为
25、了证明程序是正确的”、“测试时没有发现错误则证明程序是正确的”,6.3,系统设计,6.3.3,软件测试,2,软件测试的原则,(,1,)应当尽早地、不断地进行软件测试。,(,2,)测试用例应由测试输入数据和预期的输出结果两部分组成。,(,3,)程序员应避免检查自己的程序,开发小组和测试小组分开。,(,4,)注意测试中的群集现象,即程序中的错误往往集中在少量的模块中。如果在某些模块中发现的错误数较多,应当对这些模块进行重点测试。,(,5,)测试用例应当包含合理的输入数据和不合理的输入数据。,6.3,系统设计,6.3.3,软件测试,2,软件测试的原则,(,6,)严格执行测试计划,避免测试的随意性。,
26、7,)应当对每一测试结果作全面检查。否则可能会遗漏错误。,(,8,)在程序修改之后要进行回归测试。因为在改正错误的同时可能会引入新的错误,因此在程序修改后,应对以前的测试用例重新进行测试(称为回归测试),以便发现程序中新引进的错误。,(,9,)要妥善保管测试计划、测试用例、修改记录、出错统计和最终分析报告,为维护提供方便。,6.3,系统设计,6.3.3,软件测试,3,软件测试的步骤,(,1,)单元测试,程序员编写完源代码以后,首先对自己编写的模块进行初步的测试,称为单元测试,又称模块测试。主要测试单个模块的功能是否达到了预定的功能要求。多个模块的单元测试可以同时进行。,(,2,)集成测试,
27、又称组装测试,将多个模块组装在一起进行测试,主要测试模块间接口是否正确、模块之间能否协调工作。根据系统的规模,又可以分为子系统测试和系统测试两个步骤。,(,3,)确认测试,又称验收测试或有效性测试,该阶段是在开发环境下和用户的参与下、使用真实的数据进行验收,测试系统的整体功能和性能是否达到了用户的要求。,(,4,)平行运行,又称系统测试,是将软件安装到用户的实际使用环境下试运行,并且和旧系统或手工操作方式同时运行,用以检验新软件的功能和性能,以便发现错误。,6.3,系统设计,6.3.3,软件测试,4,测试方法,(,1,)静态分析,静态测试是指对系统分析、系统设计各阶段的文档进行分析、检查,而不
28、在实际的计算机运行环境下运行程序的过程。通常采取程序审查会和人工运行的方法组织测试工作。实践证明,这种方法对发现文档和程序中的错误是十分有效的。,(,2,)动态测试,动态测试是指利用测试数据作为输入在计算机环境下运行程序,根据实际的输出与预期的输出结果是否一致来确认程序是否有错的测试过程。,动态测试的测试方法有黑盒测试法和白盒测试法。,6.3,系统设计,6.3.3,软件测试,4,测试方法,黑盒测试法,是指将程序模块看成是一个不透明的黑盒子,完全不考虑程序的内部结构和处理过程,只检查程序的功能是否按照需求说明书的规定正常使用,能否适当的接收数据并产生正确的输出信息,并保持外部信息(如数据库或文件
29、的完整性。因此,黑盒测试法又称为功能测试,是在模块的接口处进行的测试。,白盒测试法,将程序模块看成是一个透明的白盒子,测试人员能够清楚的看到程序的内部结构和处理过程,因此可以按照程序的内部逻辑结构进行测试,检验程序中的每一条路经能否按照预定的要求正常工作。因此白盒测试又称为结构测试。,6.3,系统设计,6.3.3,软件测试,5,测试和调试,软件测试是为了发现错误而执行程序的过程。,调试则是在进行了成功的测试之后才开始进行的,其目的是为了进一步诊断和改正程序中,潜在的,错误。,软件调试工作包含两部分内容:,(,1,)确定程序中错误的确切性质和位置。,(,2,)对程序(设计、编码)进行修改,排除
30、错误。,因此调试是测试工作的延续。,返回本章目录,6.4,系统实施与维护,6.4.1,维护的分类,6.4.2,提高软件可维护性的方法,6.4.3,维护的过程,6.4,系统实施与维护,系统实施与维护是软件开发周期中最后一个阶段。,软件实施:当软件经过充分的测试后可交付用户使用,即系统实施。,软件维护:在使用过程中,不可避免的会发现一些错误,为了保证软件能够长期的有效运行需要对软件作进一步的修改,这就是维护的工作。,系统实施与维护是交替进行的,通常把它们作为一个阶段。,6.4,系统实施与维护,6.4.1,维护的分类,维护:在系统实施与维护阶段对软件产品进行的修改。,分类:,1,改正性维护,因为软件
31、测试不可能发现大型软件中潜藏的所有错误,在用户使用过程中,必然会在特定的环境下暴露出来。为了识别和纠正软件错误、改正软件性能上的缺陷、排除实施中的误使用而进行的诊断和改正软件错误的过程,称为改正性维护。,2,适应性维护,随着计算机的飞速发展,计算机的软、硬件环境都可能会发生变化,为了适应新的运行环境而修改软件的过程称为适应性维护。例如,将某个软件从,DOS,环境移植到,Windows,环境。,6.4,系统实施与维护,6.4.1,维护的分类,3,完善性维护,在软件的使用过程中,用户往往提出新的功能或修改已有功能的要求。为了达到扩充软件功能、增强软件性能、提高工作效率或提高软件可维护性等要求而进行
32、的维护活动称为完善性维护。,4,预防性维护,为了提高软件的可维护性、可靠性等,或为未来改进软件提供更好的基础而修改软件的维护活动称为预防性维护。目前这种维护活动相对来说比较少。,国外的统计数字表明。完善性维护占全部维护活动的,50,66%,,改正性维护占,17,21%,,适应性维护占,18,25%,,其它维护活动只占,4%,左右。,返回本节目录,6.4,系统实施与维护,6.4.2,提高软件可维护性的方法,定义:,软件可维护性指维护人员理解、修改或改进软件的难易程度。,衡量:可以从软件的可理解性、可测试性、可修改性以及可移植性四个方面来衡量。,提高可维护性可采取的措施:,l,严格按信息管理系统开
33、发,过程,组织软件开发活动。,l,利用先进的软件技术和工具。,l,选择可维护的程序设计语言。,l,改进和完善软件文档。,返回本节目录,本章小结,系统分析,过程完成问题定义、可行性研究和需求分析工作,确定系统要解决的问题、可行的方案和系统要实现功能的确切定义,。,系统设计,过程是将分析的结果逐步实现的过程,包括系统设计(总体设计和详细设计)、编码和测试。体现了对复杂问题逐步求精的设计思路,简化了设计工作并提高工作效率。总体设计的工具,结构图和详细设计的工具,程序流程图、盒图能够很好的描述设计成果。,系统维护,是保证在软件投入使用后能够长时间正常运行的有效手段,需要的工作量相当大,必须引起软件人员的重视。这部分主要掌握软件维护的定义、维护的种类(改正性维护、适应性维护、完善性维护、预防性维护)和维护的过程。,返回本章目录,






