软件工程张聚礼zhjl@lut.cn兰州理工大学计算机与通信学院2第2章可行性研究2.1可行性研究的任务2.2可行性研究过程2.3系统流程图2.4数据流图2.5数据字典2.6成本/效益分析2.7小结习题3§2.1可行性研究的任务一、问题定义的内容首先明确:问题的背景、开发系统的现状;开发的理由和条件、开发系统的问题要求;总体要求、问题的性质、类型范围;要实现的目标、功能规模、实现目标的方案开发的条件、环境要求等等。然后写出:问题定义报告(或称系统定义报告),以供可行性分析阶段使用。4二、问题定义的步骤在问题定义阶段,系统分析员要深入现场,阅读用户写的书面报告、听取用户对开发系统的要求、调查开发系统的背景理由。还要与用户负责人反复讨论,以澄清模糊的地方、改正不正确的地方。最后写出双方都满意的问题定义报告,并确定双方是否可继续合作的意向。5三、可行性研究的任务可行性研究的任务是用最小的代价、在尽可能短的时间内确定问题是否能够解决。在澄清了问题定义之后,分析员首先应该导出系统的逻辑模型,然后从系统逻辑模型出发,探索出若干种可供选择的主要解法(即系统实现方案)。最后仔细研究每种解法的可行性。•6研究可行性应该从下述几方面进行:(1)技术可行性:指使用现有的技术能否完成这个项目。(2)经济可行性:指通过对软件开发项目进行成本/效益估计,以确定软件系统可能带来的经济效益能否超过研制和维护此系统所需的费用。(3)操作可行性:系统的操作方式在这个用户组织内行得通吗?(4)社会因素的考虑:软件开发是否会侵犯他人、集体或国家的利益,是否违反国家的法律并可能由此而承担法律责任。7四、可行性研究的期限与成本期限:可行性研究需要的时间长短取决于工程的规模。成本:一般说来,可行性研究的成本只是预期的工程总成本的5%~10%。8§2.2可行性研究过程(1)复查系统规模和目标(2)研究目前正在使用的系统(3)导出新系统的高层逻辑模型(4)重新定义问题(5)导出和评价供选择的方案(6)推荐方案和行动方针(7)草拟开发计划(8)书写文档、提交审查人人痛恨不写文档的人,但是人人都不爱写文档9§2.3系统流程图【用途】:描绘物理系统的传统工具;【基本思想】:用图形符号以黑盒子形式描绘系统里面的每一个部件(程序、文件、数据库、表格、人工过程等)。注:尽管系统流程图使用的某些符号和程序流程图所用的符号相同,但:系统流程图表达的是信息在系统中各个部件之间流动的情况;程序流程图表达的是对信息进行加工处理的控制过程。10§2.3.1符号当以概括的方式抽象地描绘一个实际系统时,使用图2.1中列出的基本符号。当需要更具体地描绘一个物理系统时还需要使用图2.2(见书29页)中列出的系统符号(经常使用)。利用这些符号可以把抽象处理具体化为特定的程序或手工操作等。•11图2.1基本符号•12图2.2系统符号13§2.3.2例子图2.3库存清单系统的系统流程图说明:图中每个符号用黑盒子形式定义了组成系统的一个部件,然而并没有指明每个部件的具体工作过程;图中的箭头确定了信息通过系统的逻辑路径。系统流程图的习惯画法是使信息在图中从顶向下或从左向右流动。14§2.4数据流图数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。注意:设计数据流图时只需考虑系统必须完成的基本逻辑功能,即数据流图的基本要点是描绘“做什么”,而不考虑“怎样做”。•15数据流图数据流数据流数据存储数据来源处理数据输出处理需求信息需求•16数据流图示例付款凭证报销单报销登记报销人审查分录数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。•17描述银行取款过程的数据流图18§2.4.1符号数据流图中的四种主要图形元素数据加工(数据变换)数据源点或终点(外部实体)数据流数据存储文件或或或•19内容提示:数据存储和数据流都是数据,仅仅所处的状态不同。数据存储是处于静止状态的数据,数据流是处于运动中的数据。20§2.4.2例子【业务分析举例】假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。【提取数据举例】对于每个需要再次定货的零件应该列出下述数据:零件编号,零件名称,定货数量,目前价格,主要供应者,次要供应者。【分析事务举例】零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。当某种零件的库存数量少于库存量临界值时就应该再次定货。•21图2.5定货系统的基本系统模型(抽象描述)输入处理输出•22图2.6定货系统的功能级数据流图(细化)编号规则:如1、2或P1,P2或1.1、1.2或P1.1、P2.1等等•23图2.7把处理事务的功能进一步分解后的数据流图24§2.4.3命名的可理解性数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。【可理解性分析】与实际业务结合分别对数据流(数据存储)、处理过程、数据流的源点与终点进行命名。例如:暂存订单、库存清单、订货信息、采购员、库存管理员、供应商、产生到货通知单、产生报表等等。25§2.4.4用途【用途】:信息交流的工具,作为分析和设计的工具。【主要体现】:分析员把他对现有系统的认识或对目标系统的设想用数据流图描绘出来,供有关人员审查确认。【易理解性】:仅使用4种基本符号,不包含任何有关物理实现的细节,使用户都可以理解和评价它。数据加工(数据变换)数据源点或终点(外部实体)数据流数据存储文件•26数据流图应该分层,分层越细、功能越详细。(见后案例介绍)数据流图对更详细的设计步骤也有帮助,本书第5章将讲述从数据流图出发映射出软件结构的方法——面向数据流的设计方法。•27图2.8这种划分自动化边界的方法暗示以批量方式更新库存清单、一次定货•28图2.9另一种划分自动化边界的方法建议以联机方式更新库存清单、批量定货29案例:商店业务处理系统•30第一层数据流图•31加细每一个加工框销售细化•32采购细化33§2.5数据字典【定义】数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。对应以后的讲解的实体或数据结构定义表。数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。哪些是动态数据?哪些是静态数据?•34信息分析——导出逻辑模型(数据字典)调查系统的输入、输出、保存信息明确信息的结构及各信息之间的关系调查各信息的信息量调查各种报表和文件的格式建立粗略的数据词典,定义系统中使用的数据35§2.5.1数据字典的内容数据字典由下列4类元素的定义组成:(1)数据流(2)数据流分量(即数据元素)(3)数据存储(4)处理但是,对数据处理的定义用其他工具(如IPO图或PDL)描述更方便,因此本书中数据字典将主要由对数据的定义组成,这样做可以使数据字典的内容更单纯,形式更统一。•36数据元素词条描述:在数据字典中记录数据元素的下列信息:数据元素名:名字,别名,描述等;数据元素特征:数据类型,长度,结构等;使用特点:取值范围及默认值,使用频率,使用方式——输入、输出、本地,条件值等;控制信息:来源,去向,用户,使用它的程序,改变权,使用权等;分组信息:父结构,从属结构,物理位置——记录、文件和数据库(即归哪个数据结构)等。•37数据元素的别名就是该元素的其他等价的名字,出现别名主要有下述3个原因:(1)对于同样的数据,不同的用户使用了不同的名字;(2)一个分析员在不同时期对同一个数据使用了不同的名字;(3)两个分析员分别分析同一个数据流时,使用了不同的名字。虽然应该尽量减少出现别名,但是不能完全消除别名。38§2.5.2定义数据的方法【定义】:数据字典中的定义就是对数据自顶向下的分解。【目的】:当分解到不需要进一步定义,每个和工程有关的人也都清楚其含义的元素时,分解过程就完成了。由数据元素组成数据的方式只有下述四种基本类型:(1)顺序即以确定次序连接两个或多个分量;(2)选择即从两个或多个可能的元素中选取一个;(3)重复即把指定的分量重复零次或多次。•39(4)可选即一个分量是可有可无的(重复零次或一次)。虽然可以使用自然语言描述由数据元素组成数据的关系,但是为了更加清晰简洁,建议采用下列符号:=意思是等价于(或定义为);+意思是和(即,连接两个分量);[]意思是或(即,从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量;{}意思是重复(即,重复花括弧内的分量);()意思是可选(即,圆括弧里的分量可有可无)。40§2.5.3数据字典的用途用途1:作为分析阶段的重要工具。用途2:有助于改进分析员和用户之间的通信。用途3:有助于改进在不同的开发人员或不同的开发小组之间的通信。用途4:有助于设计、实现、维护等规范统一,能避免许多麻烦的接口问题。用途5:通过数据元素的来源、去向、用途等控制信息,使程序员了解业务的构成。用途6:数据字典是开发数据库的第一步,是定义数据结构的首要来源。41§2.5.4数据字典的实现缺点:在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的,一般用于中小型软件系统。实现过程:采用数据字典卡片形式书写,每张卡片上保存描述一个数据的信息。每张卡片上主要应该包含下述这样一些信息:名字、别名、描述、定义、位置。注:软件设计现实中主要用数据结构定义表来实现。•42数据字典定义举例:例:学生学籍管理子系统的数据字典。数据项,以“学号”为例:数据项:学号含义说明:唯一标识每个学生别名:学生编号类型:字符型长度:8取值范围:00000000至99999999取值含义:前两位标别该学生所在年级,后六位按顺序编号与其他数据项的逻辑关系:•43数据结构定义举例:数据结构以“学生”为例“学生”是该系统中的一个核心数据结构:数据结构:学生含义说明:是学籍管理子系统的主体数据结构,定义了一个学生的有关信息组成:学号,姓名,性别,年龄,所在系,年级•44数据流定义举例:数据流“体检结果”可如下描述:数据流:体检结果说明:学生参加体格检查的最终结果数据流来源:体检数据流去向:批准组成:……平均流量:……高峰期流量:……•45数据存储定义举例:数据存储“学生登记表”可如下描述:数据存储:学生登记表说明:记录学生的基本情况流入数据流:……流出数据流:……组成:……数据量:每年3000张存取方式:随机存取46§2.6成本/效益分析目的:是从经济角度评价开发一个新项目是否可行、是否划算,从而帮助使用部门的负责人正确地作出是否投资于这项开发的决定。47§2.6.1成本估计软件开发成本主要表现为人力消耗(乘以平均工资则得到开发费用)。下面简单介绍3种估算技术。1.代码行技术代码行技术是比较简单的定量估算方法,它把开发每个软件功能的成本和实现这个功能需要用的源代码行数联系起来。每行代码的平均成本主要取决于软件的复杂程度和工资水平。•482.任务分解技术首先把软件开发工程分解为若干个相对独立的任务。其次再分别估计每个单独的开发任务的成本。最后累加起来得出软件开发工程的总成本。估计每个任务的成本时,通常先估计完成该项任务需要用的人力(以人月为单位),再乘以每人每月的平均工资而得出每个任务的成本。最常用的办法是按开发阶段划分任务。如果软件系统很复杂,由若干个子系统组成,则可以把每个子系统再按开发阶段进一步划分成更小的任务。•49典型环境下各个开发阶段需要使用的人力的百分比大致如表2.2(见书40页)所示。实际开发项目中表2.2只能是个参考,要依实际而定。3.自动估计成本技术采用自动估计成本的软件工具可以减轻人的劳动,并且使得估计的结果更客观。但是,采用这种技术必须有长期搜集的大量历史数据为基础,并且需要有良好的数据库系统支持。50§2.6.2成本/效益分析的方法成本/效益分析的第一步是估计开发成本、运行费用和新系统将带来的经济效益。运行费用取决于系统的操作费用(操作员人数,工作时间,消