1、第 2 章 可行性研究,2.1 可行性研究2.1.1 可行性研究的任务首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,把它们清楚地列举出来。然后, 分析员进行简要的需求分析,抽象出该项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的主要解决办法,对每种解决方法都要研究它的可行性。可从以下三方面分析研究每种解决方法的可行性。,1. 技术可行性对要开发项目的功能、 性能和限制条件进行分析, 确定在现有的资源条件下,技术风险有多大,项目是否能实现,这些即为技术可行性研究的内容。这里的资源包括已有的或可以搞到的硬件、软件资源,现有技术人员的
2、技术水平和已有的工作基础。技术可行性常常是最难解决的方法,因为项目的目标、功能和性能比较模糊。技术可行性一般要考虑的情况包括:(1) 开发的风险: 在给出的限制范围内, 能否设计出系统并实现必须的功能和性能?(2) 资源的有效性: 可用于开发的人员是否存在问题? 可用于建立系统的其他资源是否具备?,(3) 技术: 相关技术的发展是否支持这个系统?开发人员在评估技术可行性时, 一旦估计错误, 将会出现灾难性后果。 2. 经济可行性进行开发成本的估算以及了解取得效益的评估, 确定要开发的项目是否值得投资开发,这些即为经济可行性研究的内容对于大多数系统,一般衡量经济上是否合算,应考虑一个“底线”,经
3、济可行性研究范围较广,包括成本效益分析, 长期公司经营策略, 开发所需的成本和资源,潜在的市场前景。,3. 社会可行性研究要开发的项目是否存在任何侵犯、妨碍等责任问题, 要开发项目的运行方式在用户组绢内是否行得通,现有管理制度、人员素质和操作方式是否可行, 这些即为社会可行性研究的内容。社会可行性所涉及的范围也比较广,它包括合同、责任、 侵权、用户组织的管理模式及规范,其他一些技术人员常常不了解的陷阱等。,2.1.2 可行性研究的具体步骤典型的可行性研究有下列步骤:(1) 确定项目规模和目标。分析员对有关人员进行调查访问,仔细阅读和分析有关的材料,对项目的规模和目标进行定义和确认,清晰地描述项
4、目的一切限制和约束,确保分析员正在解决的问题确实是要解决的问题。(2) 研究正在运行的系统。正在运行的系统可能是一个人工操作的系统,也可能是旧的计算机系统,因而需要开发一个新的计算机系统来代替现有系统。现有的系统是信息的重要来源。人们需要研究它的基本功能,存在什么问题,运行现有系统需要多少费用,对新系统有什么新的功能要求,新系统运行时能否关不管使用费用等。,应该收集、研究和分析现有系统的文档资料,实地考察现有系统,在考察的基础上,访问有关人员,然后描绘现在系统的高层系统流程图(见2.1.3节), 与有关人员一起审查该系统流程图是否正确。系统流程图反映了现有系统的基本功能和处理流程。(3) 建立
5、新系统的高层逻辑模型。根据对现有系统的分析研究,逐渐明确新系统的功能、处理流程以及所受的约束,然后使用建立逻辑模型的工具数据流图和数据字典(见8.3、8.4节)来描述数据在系统中的流动和处理情况。注意,现在还不是软件需求分析阶段,不是完整、详细的描述,只是概括地描述高层的数据处理和流动。,(4) 导出和评价各种方案。分析员建立了新系统的高层逻辑模型之后,要从技术角度出发,提出实现高层逻辑模型的不同方案,即导现若干较高层次的物理解法。 根据技术可行性、经济可行性和社会可行性对各种方案进行评估, 去掉行不的解法,就得到了可行的解法。(5) 推荐可行的方案。根据上述可行性研究的结果, 应该决定该项目
6、是否值得去开发。 若值得开发,那么可行的解决方案是什么,并且说明该方案是可行的原因和理由。该项目是否值得开发的主要因素是从经济上看是否合算,这就要求分析员对推荐的可行方案进行成本效益分析。,(6) 编写可行性研究报告。将上述可行性研究过程的结果写成相应的文档,即可行性研究报告,提请用户和使用部门仔细审查,从而决定该项目是否进行开发,是否接受可行的实现方案。,2.1.3系统流程图1. 系统流程图的作用系统流程图是描述物理系统的工具。所谓物理系统,就是一个具体实现的系统,也就是描述一个单位、组织的信息处理的具体实现的系统。在可行性研究中,可以通过画出系统流程图来了解要开发的项目的大概处理流程、 范
7、围和功能等。 系统流程图不仅能用于可行性研究,还能用于需求分析阶段。系统流程图可用图形符号来表示系统中的各个元素, 例如,人工处理、数据处理、数据库、文件和设备等。它表达了系统中各个元素之间的信息流动的情况。,画系统流程图时,首先要搞清业务处理过程以及处理中的各个元素,同时要理解系统的流程图的各个符号的含义, 选择相应的符号来代表系统中的各个元素。所画的系统流程图要反映出系统的处理流程。在进行可行性研究过程中,要以概括的形式描述现有系统的高层逻辑模型,并通过概要的设计变成所建议系统的物理模型, 可以用系统流程图来描述所建议系统的物理模型。2. 系统流程图的符号系统流程图的符号如表 2 - 1
8、所示。,3. 系统流程图的示例下面以某工厂的库房管理为例, 说明系统流程图的使用。 某工厂有一个库房, 存放该厂生产需要的物品, 库房中的各种物品的数量及各种物品库存量临界值等数据记录在库存文件上,当库房中物品数量有变化时,应更新库存文件。若某种物品的库存量少于库存临界值,则报告采购部门以便其订货, 每天向采购部门送一份采购报告。库房可使用一台微机处理更新库存文件和产生订货报告的任务。物品的发放和接受称为变更记录,由键盘录入到微机中。 系统中的库存管理模块对变更记录进行处理,更新存储在磁盘上的库存文件,并把订货信息记录到联机存储中。每天由报告生成模块读一次订货信息,并打印出订货报告。图 2.1
9、 给出了该系统的系统流程图。,图 2.1 库存管理系统的系统流程图,2.4 数据流图,定义:数据流图(Data Flow Diagram, 简称DFD), 是描绘系统的逻辑模型,描绘信息在系统中的流动和处理情况。是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程。由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。 图2.2是一个飞机机票预订系统的数据流图,其功能为旅行社把预订机票的旅客信息(姓名、年龄、单位、身份证号码、 旅行时间及目的地等)输入机票预订系统。系统为旅客安排航班,打印出取票通知单(付有应交的账款)。旅客在飞机起飞的前一天凭取票通知
10、等交款取票, 系统检验无误,输出机票给旅客。,图 2.2 飞机机票预订系统,2.4.1基本图形符号数据流图有以下 4 种基本图形符号: : 箭头, 表示数据流。: 圆或椭圆, 表示数据处理。=: 双杠, 表示数据存储。: 方框, 表示数据的源点或终点。 1. 数据流数据流是数据在系统内传播的路径,由一组成分固定的数据项组成。如订票单由旅客姓名、年龄、单位、身份证号、 日期及目的地等数据项组成。,由于数据流是流动中的数据,所以必须有流向,即在加工之间、 加工与源点终点之间、加工与数据存储之间流动。 除了与数据存储之间的数据流不用命名外,数据流应该用名词或名词短语命名。 2. 数据处理对数据流进行
11、某些操作或变换。每个数据处理也要有名字,通常是动词短语,简明地描述完成什么处理。 在分层的数据流图中, 数据处理还应编号。 3. 数据存储数据存储指暂时保存的数据,它可以是数据库文件或任何形式的数据组织。流向数据存储的数据流可理解为写入文件,或查询文件,从数据存储流出的数据可理解为从文件读数据或得到查询结果。 ,4. 数据源点和终点数据源点和终点是软件系统外部环境中的实体(包括人员、 组织或其他软件系统),统称外部实体。它们是为了帮助理解系统界面而引入的,一般只出现在数据流图的顶层图中,表示了系统中数据的来源和去处。 有时为了增加数据流图的清晰性,防止数据流的箭头线太长,在一张图上可重复画同名
12、的源/终点(如某个外部实体既是源点也是终点的情况),在方框的右下角加斜线则表示是一个实体。有时数据存储也需重复标识。,数据流图的分层细化原则和方法,(1)保持信息的连续性,也就是细化前后对应功能的输入输出数据必须相同。 (2)当进一步细化时,将涉及如何具体地实现一个功能时,就不应再细化。 分层子图的画法及编号:,2.4.2画数据流图的步骤为了表达较为复杂问题的数据处理过程, 用一张数据流图是不够的。 要按照问题的层次结构进行逐步分解, 并以一套分层的数据流图反映这种结构关系。 1. 画系统的输入输出画系统的输入输出即先画顶层数据流图。顶层流图只包含一个加工,用以标识被开发的系统,然后考虑该系统
13、有哪些输入数据,这些输入数据从哪里来;有哪些输出数据,输出到哪里去。这样就定义了系统的输入、输出数据流。顶层图的作用在于表明被开发系统的范围以及它和周围环境的数据交换关系, 顶层图只有一张。图2.3为飞机机票预订系统的顶层图。 ,图 2.3 飞机机票预订系统顶层图,2. 画系统内部画系统内部即画下层数据流图。一般将层号从0开始编号, 采用自顶向下,由外向内的原则。画0层数据流图时,一般根据当前系统工作分组情况,并按新系统应有的外部功能,分解顶层流图的系统为若干子系统,决定每个子系统间的数据接口和活动关系。如机票预订系统按功能可分成两部分,一部分为旅行社预订机票,另一部分为旅客取票,两部分通过机
14、票文件的数据存储联系起来,0层数据流图如图2.4。画更下层数据流图时, 则分解上层图中的加工,一般沿着输入流的方向,凡数据流的组成或值发生变化的地方则设置一个加工,这样一直进行到输出数据流(也可从输出流到输入流方向画)。,图 2.4 飞机机票预订系统0层图,如果加工的内部还有数据流,则对此加工在下层图中继续分解,直到每一个加工足够简单,不能再分解为止。不再分解的加工称为基本加工。 3. 注意事项画数据流图的注意事项有以下几点:(1) 命名:不论数据流、数据存储还是加工,合适的命名使人们易于理解其含义。数据流的名字代表整个数据流的内容, 而不仅仅是它的某些成分,不使用缺乏具体含义的名字,如“数据
15、”、 “信息”等。加工名也应反映整个处理的功能, 不使用“处理”、 “操作”这些笼统的词。 ,(2) 画数据流而不是控制流: 数据流图反映系统“做什么”, 不反映“如何做”,因此箭头上的数据流名称只能是名词或名词短语, 整个图中不反映加工的执行顺序。 (3) 一般不画物质流: 数据流反映能用计算机处理的数据, 并不是实物,因此对目标系统的数据流图上一般不要画物流, 如机票预订系统中,人民币也在流动, 但并未画出,因为交款是“人工”行为。 (4) 每个加工至少有一个输入数据流和一个输出数据流, 反映出此加工数据的来源与加工的结果。 (5) 编号: 如果一张数据流图中的某个加工分解成另一张数据流图
16、时, 则上层图为父图,直接下层图为子图。子图应编号, 子图上的所有加工也应编号,子图的编号就是父图中相应加工的编号,加工的编号由子图号、小数点及局部号组成, 如图8.5所示。,图 2.5 父图与子图(1),(6) 父图与子图的平衡:子图的输入、输出数据流同父图相应加工的输入、输出数据流必须一致,此即父图与子图的平衡。 图2.5中子图2.1与父图2相应加工2.1的输入、输出数据流的数目、名称完全相同, 即一个输入流a,两个输出流b和c。 再看图2.6,好像父图与子图不平衡,因为父图加工4与子图输入输出数据流数目不相等,但是借助于数据字典(见2.)中数据流的描述可知, 父图的数据流“订货单”由“客
17、户”、“账号”及“数量”三部分数据组成,即子图是父图中加工、数据流同时分解而来, 因此这两张图也是平衡的。 ,图2.6 父图与子图的平衡,有时考虑平衡可忽略一些枝节性的数据流(如出错处理)。 父图与子图的平衡, 是分层数据流图中的重要性质,保证了数据流图的一致性, 便于分析人员的阅读与理解。 (7) 局部数据存储:当某层数据流图中的数据存储不是父图中相应加工的外部接口,而只是本图中某些加工之间的数据接口, 则称这些数据存储为局部数据存储,一个局部数据存储只有当它作为某些加工的数据接口或某个加工特定的输入或输出时,就把它画出来,这样有助于实现信息隐蔽。 (8) 提高数据流图的易理解性:注意合理分
18、解,要把一个加工分解成几个功能相对独立的子加工, 这样可以减少加工之间输入、输出数据流的数目,增加数据流图的可理解性。,分解时要注意子加工的独立性、均匀性,特别是画上层数据流时,要注意将一个问题划分成几个大小接近的组成部分, 这样做便于理解。 不要在一张数据流图中出现某些加工已是基本加工,某些加工还要分解好几层。 为了使数据流图便于在计算机上输入与输出, 以下给出了描述数据流图的另一套基本符号: 表示数据流, 只能水平或垂直画。,编号,: 表示加工。,编号,: 表示数据存储。,2.5 数 据 字 典,2.5.1数据字典的内容及格式定义:数据字典是关于数据的信息的集合,也就是对数据流图中包含的所
19、有元素的定义的集合。为分析人员查找数据流图中有关名字的详细定义而服务的,因此也像普通字典一样, 要把所有条目按一定的次序排列起来,以便查阅。数据字典有以下 4 类条目:数据流、 数据项、 数据存储及基本加工。 数据项是组成数据流和数据存储的最小元素。源点、终点不在系统之内,故一般不在字典中说明。 1. 数据流条目数据流条目列出该数据流的各组成数据项。在定义数据流或数据存储组成时,使用表2 - 1给出的符号。,下面给出了几个使用表2 -1中符号,定义数据流组成及数据项的例子。 例: 机票=姓名+日期+航班号+起点+终点+费用姓名= 字母182 航班号=“Y7100”KG-*3“Y8100”终点=
20、上海|北京|西安,数据流条目主要内容及举例如下: 数据流名称: 订单,别名: 无 简述: 顾客订货时填写的项目 来源: 顾客 去向: 加工1“检验订单” 数据流量: 1000份/每周 组成: 编号+订货日期+顾客编号+地址+电话+银行账号+ 货物名称+规格+数量,其中数据流量指单位时间内(每小时或每天或每周或每月)的传输次数。 ,2. 数据存储条目数据存储条目是对数据存储的定义, 主要内容及举例如下: 数据存储名称: 库存记录别名: 无简述: 存放库存所有可供货物的信息组成: 货物名称+编号+生产厂家+单价+库存量组织方式: 索引文件, 以货物编号为关键字查询要求: 要求能立即查询,数据项名称
21、: 货物编号 别名: G-No, G-num, Goods-No 简述: 本公司的所有货物的编号 类型: 字符串 长度: 10 取值范围及含义: 第1位: 进口/国产第24位: 类别第57位: 规格第810位: 品名编号,3. 数据项条目数据项条目是不可再分解的数据单位, 其定义格式及举例如下: ,4. 数据处理条目数据处理条目是用来说明数据流图中基本数据处理逻辑的, 由于上层的加工是由下层的基本加工分解而来,只要有了基本加工的说明,就可理解其他加工。数据处理条目的主要内容及举例如下:,数据处理名: 确定能否供货 编号: 1.2 激发条件: 接收到合格订单时 优先级: 普通 输入: 合格订单
22、输出: 可供货订单、 缺货订单 加工逻辑: 根据库存记录,IF 订单项目的数量 该项目库存量的临界值THEN 可供货处理ELSE 此订单缺货, 登录, 待进货后再处理ENDIF数据字典中的数据处理逻辑主要描述该加工“做什么”, 即实现处理的策略, 而不是实现处理的细节,它描述如何把输入数据流变换为输出数据流的处理规则。为了使处理逻辑直观易读, 易被用户理解,有几种常用的描述方法, 它们是结构化语言、 判定表及判定树。 ,2.5.2数据字典的实现1. 手工建立手工建立数据字典的内容用卡片形式存放, 其步骤如下: (1) 按 4 类条目规范的格式印制卡片。 (2) 在卡片上分别填写各类条目的内容。
23、 (3) 先按图号顺序排列,同一图号的所有条目按数据流、 数据项、数据存储和加工的顺序排列。 (4) 同一图号中的同一类条目(如数据流卡片)可按名字的字典顺序存放,加工一般按编号顺序存放。 (5) 同一成分在父图和子图都出现时, 则只在父图上定义。 (6) 建立索引目录。 ,2. 利用计算机辅助建立并维护利用计算机辅助建立并维护数据字典的步骤如下:(1) 编制一个“字典生成与管理程序”,可以按规定的格式输入各类条目,能对字典条目增、删、改,能打印出各类查询报告和清单, 能进行完整性、一致性检查等。美国密执安大学研究的PSL/PSA就是这样一个系统。 (2) 利用已有的数据库开发工具,针对数据字
24、典建立一个数据库文件,可将数据流、数据项、数据存储和加工分别以矩阵表的形式来描述各个表项的内容,如数据流的矩阵表为: ,然后使用开发工具建成数据库文件,便于修改、查询, 并可随时打印出来。另外, 有的DBMS本身包含一个数据字典子系统, 建库时能自动生成数据字典。 计算机辅助开发数据字典比手工建立数据字典有更多的优点,能保证数据的一致性和完整性,使用也方便,但增加了技术难度与机器开销。,数据字典的用途:作为分析阶段的工具,使开发数据 库的第一步,也是很有价值的一步。,定义数据的方法:1、顺序 2、选择 3、重复4、可选 数据字典的特点: (1)通过名字能方便地查阅数据的定义。(2)没有冗余(3
25、)尽量不重复已经出现的信息。(4)容易更新和修改。(5)能够独立处理描述每个数据元素的信息(6)定义的书写方法简单方便而且严谨。,2.6 成本效益分析成本效益分析的目的是从经济角度评价开发一个新的软件项目是否可行。成本一效益分析首先是估算将要开发的系统的开发成本,然后与可能取得效益进行比较和权衡。效益分有形效益和无形效益两种。有形效益可以用货币的时间价值、 投资回收期和纯收入等指标进行度量;无形效益主要从性质上、 心理上进行衡量,很难直接进行量的比较。系统的经济效益等于因使用新的系统而增加的收入加上使用新的系统可以节省的运行费用。运行费用包括操作人员人数、工作时间和消耗的物资等。下面主要介绍有
26、形效益的分析。,2.6.1 成本估计软件开发的成本主要表现为人力消耗(人员的工作时间乘以平均工资),因此,对软件开发所需的工作量的估计是软件成本估计的主要因素。常用的估计方法如下: 1、代码行技术简单的估算方法,主要根据经验和历史数据。估计出源代码行数后,用每行代码的平均成本乘以行数就可以确定软件的成本,每行代码的平均成本取决于软件的复杂程度和工资水平。 2、任务分解技术把软件开发工程分解成若干个相对独立的任务。常用办法是按开发阶段划分任务。 3、自动估计成本技术采用自动估计成本的软件工具,但是需要长期的搜集大量的历史数据为基础,同时要有良好的数据库系统的支持。,2.6.2 成本/效益分析的方
27、法,常用的经济效益分析方法有如下几种: 1、货币的时间价值 2、投资回收期 3、纯收入 4、投资回收率,1. 货币的时间价值成本估算的目的是对项目投资。经过成本估算后, 得到项目开发时需要的费用,该费用就是项目的投资(成本估算的方法见15.2.4节)。 项目开发后,应取得相应的效益,有多少效益才合算? 这就是考虑货币的时间价值。通常用利率表示货币的时间价值。 设利率为i, 现存放P元,n年后可得钱数为F,若不计复利, 则 F=P(1+ni) F就是P元在n年后的价值。反之,若n年后能收入F元, 那么这些钱现在的价值为,P=F/(1+ni)例如, 库房管理系统,它每天能产生一份订货报告。 假定开
28、发该系统共需5千元,系统建成后及时订货,消除物品短缺问题,估计每年能节约2.5千元,5年共节省12.5千元。假定年利率为5%,利用上面计算货币现在价值的公式, 可以算出建立库房管理系统皇,每年预计节省的费用的现在价值, 如表 2 - 2 所示。,表 2 2 将来的收入折算成现在值,2. 投资回收期通常用投资回收期衡量一个开发项目的价值。投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。 投资回收期越短,就越快获得利润,则该项目就越值昨开发。 例如,库房管理系统两年后可以节省5.104千元, 比最初的投资还多0.104千元。因此, 投资回收期是 2 年。投资回收期仅仅是一项经济指标,为
29、了衡量一个开发项目的价值,还应考虑其他经济指标。3. 纯收入衡量项目价值的另一个经济指标是项目的纯收入,也就是在整个生存周期之内的累计经济效益(折合成现在值)与投资之差。,这相当于投资开发一个项目与把钱存入银行中进行比较, 看这两种方案的优劣。若纯收入为零,则项目的预期效益和在银行存款一样,但是开发一个项目要冒风险,因此,从经济观点看这个项目,可能是不值得投资开发的。若纯收入小于零, 那么这个项目显然不值得投资开发。对上述的库房管理系统, 项目纯收入预计为 11.361-5=6.361(千元),4、投资回收率已知软件的投资额、每年可以获得的经济效益(估算)以及软件的使用寿命,如何计算投资回收率
30、?根据上述条件,可以写出如下方程式:其中 P是现在的投资额,Fi是第i年年底的效益(i=1,2,n),n是系统的使用寿命,j是投资回收率。 解出这个高阶代数方程就可以求出投资回收率。,第三章 软件需求分析,3.1 需求分析的任务一、任务在进行可行性研究和项目开发计划以后,如果确认开发一个新的软件系统是必要的而且是可能的,那么就可进入需求分析阶段。需求分析的任务:对目标系统提出完整、准确、清晰、具体的要求,得出详细的系统逻辑模型。开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义, 再由需求定义转换到相庆的形式功能规约(需求规格说明)的过程。 需求分析虽
31、处于软件开发过程的开始阶段,但它对于整个软件开发过程以及软件产品质量是至关重要的。,随着软件系统复杂性的提高及规模的扩大,需求分析在软件开发中所处的地位愈加突出,从而也愈加困难,它的难点主要体现在以下几个方面: (1) 问题的复杂性。 这是由用户需求所涉及的因素繁多引起的,如运行环境和系统功能等。(2) 交流障碍。需求分析涉及人员较多, 如软件系统用户、 问题领域专家、需求工程师和项目管理员等,这些人具备不同的背景知识,处于不同的角度, 扮演不同角色,造成了相互之间交注的困难。,(3) 不完备性和不一致性:由于各种原因, 用户对问题的陈述往往是不完备的,其各方面的需求还可能存在着矛盾,需求分析
32、要消除其矛盾,形成完备及一致的定义。(4) 需求易变性。用户需求的变动是一个极为普便的问题, 即使是部分变动,也往往会影响到需求分析的全部,导致不一致性和不完备性。为了克服上述困难,人们主要围绕着需求分析的方法及自动化工具(如CASE技术)等方面进行研究。,二、 需求分析的原则近几年来已提出许多软件需求分析与说明的方法(如结构化分析方法和面向对象分析方法),每一种分析方法都有独特的观点和表示法, 但都适用下面的基本原则:(1) 必须能够表达和理解问题的数据域和功能域。数据域包括数据流(即数据通过一个系统时的变化方式) 数据内容和数据结构, 而功能域反映上述三方面的控制信息。(2) 可以把一个复
33、杂问题按功能进行分解并可逐层细化。 通常软件要处理的问题如果太大太复杂就很难理解,若划分成几部分, 并确定各部分间的接口,就可完成整体功能。在需求分析过程中,软件领域中的数据、功能和行为都可划分。,(3) 建模。模型可以帮助分析人员更好地理解软件系统的信息、功能和行为,这些模型也是软件设计的基础。结构化分析方法和面向对象分析方法都遵循以上原则。 三、需求分析的步骤: 1、确定对系统的综合要求(包括系统的功能要求、系统的性能要求、运行要求、将来可能提出的要求等)。 2、分析系统的数据要求(概念模型设计:层次方框图、Warnier图、IPO图;数据规范化:一、二、三范式要求)。 3、导出系统的逻辑
34、模型(利用数据流图、数据字典、算法描述等)。 4、修正系统开发计划,5、开发原型系统(目的:使用户通过实践获得关于未来系统将怎样为他们工作的更直接更具体的概念)。 开发原型模型的原因:1、由于人类的认识能力的局限,不能预先制定所有的要求。2、在用户和系统分析员之间存在固有的通信鸿沟。3、用户需要一个“活”的系统模型,以便获得实践经验。4、在开发的过程中,重复和反复试必要的,而且是不可避免的。5、目前有快速建立原型系统的工具可供选择。,3.2 需求分析的过程 1、沿数据流图回溯。沿数据流图从输出端往输入端回溯,确定每一个数据元素的来源,初步定义有关算法,把分析过程中得到的有关数据元素的信息,记录
35、在数据字典中,把对算法的简明描述记录在IPO图中。 2、用户复查。从输入端开始,系统分析员借助于数据流图、数据字典和简明的算法描述向用户解释输入数据是怎样变为输出数据的。 3、细化数据流图。通过功能分解,完成数据流图的细化。(细化的方法和原则、分层子图的画法和编号原则) 4、修改开发计划。经过需求分析阶段的工作,系统分析员对目标系统有了更深入更具体的认识,可以对系统的成本和进度做出更准确的估计,在此基础上对开发计划进行修正。 5、书写文档。要完成四份文档资料:(1)系统规格说明书:描述系统的概貌、功能要求、性能要求。(2)数据要求:数据字典、层次方框图、Warnier图。(3)用户系统描述:相
36、当于一个初步的用户手册。(4)修正的开发计划:包括修正后的成本估计、资源使用计划、进度计划等。,6、审查和复审。3.3 概念模型和规范化 定义:概念性数据模型:是一种面向问题的数据模型, 是按照用户的观点对数据和信息建模。 常用方法:ER图(实体-关系图) ER模型:包括“实体”、“关系”、“属性”三个基本成分。 (1)实体:客观世界中存在的且可相互区分的事务,可以是具体事务,也可以是抽象概念。 (2)关系:分三种 一对一关系、一对多关系、多对多关系。 (3)属性:是实体或关系所具有的性质。44页图3.2(教学管理的ER图),数据规范:用“范式”来约束数据。定义消除数据的冗余程度,第一范式的数
37、据冗余最大、第五范式冗余最小。(举例说明 工资管理系统) 第一范式:每个属性值都必须是原子值、即仅仅是一个简单值而不会是内部结构。 第二范式:满足第一范式的条件,且每个非关键字属性都是由整个关键字决定,而不是由关键字的一部分来决定。 第三范式:符合第二范式的要求,且没有传递依赖关系(即一个非关键字属性值,不依赖于另外一个非关键字属性值)。 3.4 常用图形工具 1、层次方框图:用树形结构的一系列多层次的矩形框描绘数据的层次结构。 2、Wariner图:类似层次方框图,但提供了更丰富的描绘手段。 3、IPO图:是输入处理输出图的简称,在左边的框中列出有关的输入数据,在中间的框内列出主要的处理,在
38、右边的框内列出产生的输出数据。(举例说明) 4、IPO图的改进形式:IPO表。,3.5 验证软件需求 一致性:所有需求必须是一致的,任何一条需求不能和其他需求矛盾。 完整性:需求必须是完整的,规格说明书应该包括用户所需的每一个功能或性能。 现实性:制定的需求应该用现有的硬件技术和软件技术基本上可以实现的。 有效性:必须证明需求是正确有效的,确实能解决用户面对的问题。 本章思考题: 1、数据流图细化原则和分层细化的方法。 2、概念模型、常用的建模方法、ER图。 3、一、二、三范式定义。,第四章 总体设计,前三个阶段是软件定义阶段,从总体设计开始是软件定义阶段。 总体设计的任务:(1)划分出组成系
39、统的物理元素,包括:程序、文件、数据库、文档等。(2)设计软件的结构。确定系统中每个程序是由哪些模块组成的,模块之间的关系。 总体设计的必要性:可以站在全局高度上,在较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低的成本开发出高质量的软件系统。4.1 总体设计的过程 总体设计可分成两个阶段:1、系统设计:确定系统的具体实现方案。 2、结构设计:确定软件的结构。,总体设计的步骤:1、设想可供选择的方案,由数据流图出发,划分自动化边界。2、选取合理的方案,至少选取三种方案:低成本、中成本、高成本。每一个方案都要有四份文档资料:系统流
40、程图、组成系统的物理元素清单、成本效益分析、实现系统的进度计划。3、推荐最佳方案,并为此方案制定详细的实现计划。 以上三个步骤属于系统设计阶段。4、功能分解。分两个阶段完成:结构设计和过程设计。结构设计确定程序由哪些模块组成、这些模块之间的关系;过程设计确定每个模块的处理过程(属于详细设计阶段)。5、设计软件结构。使用层次图和结构图来描述。,6、数据库设计。包括模式设计、子模式设计、完整性和安全性设计、优化。7、制定测试计划:在设计阶段考虑测试问题,可以提高软件的可测试性。8、书写文档:本阶段的文档主要包括:(1)系统说明:系统流程图、物理元素清单、成本效益分析、对最佳方案的概括描述、精化的数
41、据流图、算法等。(2)用户手册:修改需求分析阶段的用户手册。(3)测试计划:测试策略、测试方案、预期的测试结果、测试进度计划。(4)详细的实现计划:(5)数据库设计结果。(模式、子模式、完整性和安全性、优化)。9、审查和复审。,关于 数据结构及数据库设计对于大型数据处理的软件系统,除了系统结构设计外, 数据结构与数据库设计也是重要的。1) 数据结构的设计逐步细化的方法也适用于数据结构的设计。在需求分析阶段,可通过数据字典对数据的组成、 操作约束和数据之间的关系等方面进行描述,确定数据的结构特性,在概要设计阶段要加以细化,详细设计则规定具体的实现细节。在概要设计阶段, 宜使用抽象的数据类型。如“
42、栈”是数据结构的概念模型, 在详细设计中可用线性表和链表来实现“栈”。设计有效的数据结构, 将大大简化软件模块处理过程的设计。,2) 数据库的设计数据库的设计指数据存储文件的设计, 其主要包括以下几方面的设计:(1) 概念设计。 在数据分析的基础上,从用户角度采用自底向上的方法进行视图设计。 一般用ER模型来表示数据模型,这是一个概念模型。 ER模型既是设计数据库的基础,也是设计数据结构的基础。 IDEF1x技术也支持概念模式,用IDEF1x方法建立系统的信息模型,使模型具有一致性、可扩展性和可变性等特性, 同样, 该模型可作为数据库设计的主要依据。,(2) 逻辑设计。ER模型是独立于数据库管
43、理系统(DBMS)的,要结合具体的DBMS特征来建立数据库的逻辑结构。对于关系型的DBMS来说,将概念结构转换为数据模式、子模式并进行规范,要给出数据结构的定义,即定义所含的数据项、类型、长度及它们之间的层次或相互关系的表格等。(3) 物理设计。对于不同的DBMS,物理环境不同,提供的存储结构与存取方法各不相同。物理设计就是设计数据模式的一些物理细节,如数据项存储要求、存取方式和索引的建立等。,数据库技术是一项专门的技术,不作详细的讨论。 但开发人员应注意到,在大型数据处理系统的功能分析与设计中, 同时要进行数据分析与数据设计。数据库的“概念设计”与“逻辑设计”分别对应于系统开发中的“需求分析
44、”与“概要设计”,而数据库的“物理设计”与模块的“详细设计”相对应。 关于编写概要设计文档 概要设计说明书是概要设计阶段结束时提交的技术文档。 按国标GB8576-88的计算机软件产品开发文件编制指南规定, 软件设计文档可分为“概要设计说明书”、“详细设计说明书”和“数据库设计说明书”。概要设计说明书的主要内容如下:(1) 引言: 编写目的,背景, 定义,参考资料。(2) 总体设计:需求规定,运行环境,基本设计概念和处理流程,结构。,(3) 接口设计: 用户接口, 外部接口, 内部接口。(4) 运行设计: 运行模块组合, 运行控制, 运行时间。(5) 系统数据结构设计: 逻辑结构设计, 物理结
45、构设计, 数据结构与程序的关系。(6) 系统出错处理设计: 出错信息, 补救措施, 系统恢复设计。,4.2 软件设计的概念和原理,4.2.1模块化模块化的概念在程序设计技术中就出现了。何为模块? 模块在程序中是数据说明、可执行语句等程序对象的集合,是单独命名的而且可以通过编址的元素,如高级语言中的过程、 函数和子程序等。 在软件的体系结构中,模块是可组合、分解和更换的单元。模块具有以下几种基本属性:(1) 接口: 指模块的输入与输出。(2) 功能: 指模块实现什么功能。(3) 逻辑: 描述内部如何实现要求的功能及所需的数据。 (4) 状态: 指该模块的运行环境, 即模块的调用与被调用关系。,功
46、能、状态与接口反映模块的外部特性,逻辑反映它的内部特性。模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能, 所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。 在面向对象设计中,模块和模块化的概念将进一步扩充(详见第 1112 章)。 模块化是软件解决复杂问题所具备的手段, 为了说明这一点,可将问题的复杂性和工作量的关系进行推理。设问题x, 表示它的复杂性函数为C(x), 解决它所需的工作量函数为E(x)。对于问题P1和P2;如果,C(P1)C(P2) 即P1比P2复杂, 那么 E(P1)E(P2) 即问题越复杂, 所需要
47、的工作量越大。 根据解决一般问题的经验, 规律为: C(P1+P2)C(P1)+C(P2) 即一个问题由两个问题组合而成的复杂度大于分别考虑每个问题的复杂度之和。这样,可以推出:,E(P1+P2)E(P1)+E(P2) 由此可知, 开发一个大而复杂的软件系统, 将它进行适当的分解,不但可降低其复杂性,还可减少开发工作量,从而降低开发成本, 提高软件生产率,这就是模块化的依据。 但是否将系统无限制分割,最后开发软件的工作量就会趋于零? 事实上模块划分越多,块内的工作量减少, 但模块之间接口的工作量增加了,如图 3.1 所示。从图看出,存在着一个使软件开发成本最小区域的模块数M,虽然目前还不能确定
48、M的准确数值,但在划分模块时,避免数目过多或过少,一个模块的规模应当取决于它的功能和用途。同时,应减少接口的代价,提高模块的独立性。,图 3.1 模块与开发软件成本,4.2.2抽象抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节,不考虑其他因素。 抽象的概念被广泛应用于计算机软件领域,在软件工程学中更是如此。 软件工程实施中的每一步都可以看作是对软件抽象层次的一次细化。在系统定义阶段,软件可作为整个计算机系统的一个元素来对待;在软件需求分析阶段,软件的解决方案是使用问题环境中的术语来描述;从概要设计到详细设计阶段,提象的层次逐步降低,将面向问题的术语与面向实现
49、的术语结合起来描述解决方法,直到产生源程序时到达最低的抽象层次。这是软件工程整个过程的抽象层次。具体到软件设计阶段,又有不同的抽象层次,在进行软件设计时,抽象与逐步求精、模块化密切相关,可帮助定义软件结构中模块的实体,由抽象到具体地分析和构造出软件的层次结构,提高软件的可理解性。,4.2.3信息隐蔽通过抽象,可以确定组成软件的过程实体。 通过信息隐蔽, 可以定义和实施对模块的过程细节和局部数据结构的存取限制。 所谓信息隐蔽,是指在设计和确定模块时,使得一个模块内包含的信息(过程或数据),对于不需要这些信息的其他模块来说, 是不能访问的;“隐蔽”的意思是,有效的模块化通过定义一组相互独立的模块来实现,这些独立的模块彼此之间仅仅交换那些为了完成系统功能所必需的信息,而将那些自身的实现细节与数据“隐藏”起来。一个软件系统在整个生存期中要经过多次修改,信息隐蔽为软件系统的修改、测试及以后的维护都带来好处。因此,在划分模块时要采取措施,如采用局部数据结构, 使得大多数过程(即实现细节)和数据对软件的其他部分是隐藏的,这样,修改软件时偶然引入的错误所造成的影响只局限在一个或少量几个模块内部,不波及其他部分。,