1、软件工程软件工程(Software Engineering)第第1章:软件工程学概述章:软件工程学概述1.1 软件危机软件危机 60年代中期以前:通用硬件相当普遍,软件却是年代中期以前:通用硬件相当普遍,软件却是为某个具体的应用而编写的。为某个具体的应用而编写的。60年代中到年代中到70年代中:软件作坊。年代中:软件作坊。软件危机软件危机:计算机软件的开发和维护过程:计算机软件的开发和维护过程中所遇到的一系列严重问题。(正常、不正中所遇到的一系列严重问题。(正常、不正常运行软件都具有这种问题)常运行软件都具有这种问题)1.1.1 软件危机的介绍软件危机的介绍1)对软件开发成本和进度的估计常常很
2、)对软件开发成本和进度的估计常常很不准确;不准确;2)用户对完成的软件系统不满意的现象)用户对完成的软件系统不满意的现象经常发生;经常发生;3)软件产品的质量往往靠不住;)软件产品的质量往往靠不住;软件危机的典型表现:软件危机的典型表现:4)软件常常是不可维护的;)软件常常是不可维护的;5)软件通常没有适当的文档资料;)软件通常没有适当的文档资料;6)软件成本在计算机系统总成本中所占)软件成本在计算机系统总成本中所占的比例逐年上升;的比例逐年上升;7)软件开发生产率提高的速度跟不上计)软件开发生产率提高的速度跟不上计算机应用的发展趋势。算机应用的发展趋势。1.1.2 产生软件危机的原因产生软件
3、危机的原因1)软件本身特点造成;)软件本身特点造成;2)软件开发与维护的方法不正确。)软件开发与维护的方法不正确。主要表现:主要表现:(a)忽视软件需求分析;)忽视软件需求分析;(b)认为软件开发就是写程序并使之运行;)认为软件开发就是写程序并使之运行;(c)轻视软件维护;)轻视软件维护;在软件开发的不同阶段进行修改需要付出在软件开发的不同阶段进行修改需要付出的代价很不相同:的代价很不相同:高高中中低低早期早期中期中期后期后期软件开发时期软件开发时期代价代价引入同一修改的代价随时间变化的趋势引入同一修改的代价随时间变化的趋势1)推广使用在实践中总结出来的开发)推广使用在实践中总结出来的开发软件
4、的成功技术和方法,并研究探索更软件的成功技术和方法,并研究探索更有效的技术和方法;有效的技术和方法;2)开发和使用更好的软件工具;)开发和使用更好的软件工具;3)良好的组织管理措施。)良好的组织管理措施。1.1.3 解决软件危机的途径解决软件危机的途径 为了解决软件危机产生的问题,软件工程与为了解决软件危机产生的问题,软件工程与方法学逐渐形成,然后出现了两个相互相承又方法学逐渐形成,然后出现了两个相互相承又各有侧重的学科:各有侧重的学科:1)软件工程学软件工程学:主要应用工程的方法和技:主要应用工程的方法和技术研究软件开发与维护的方法、工具和管理的术研究软件开发与维护的方法、工具和管理的一门交
5、叉学科。一门交叉学科。2)程序设计方法学程序设计方法学:主要应用数学的方法:主要应用数学的方法研究程序的性质以及程序设计的理论和方法的研究程序的性质以及程序设计的理论和方法的学科。学科。1.2 软件工程软件工程 1.2.1 软件工程的介绍软件工程的介绍1968年年NATO会议:软件工程就是为了经济地获会议:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。而建立和使用完善的工程原理。1993年年IEEE:软件工程是(:软件工程是(1)把系统的、规范)把系统的、规范的、可度量的途径应用于软件开发、运行和维护的、
6、可度量的途径应用于软件开发、运行和维护过程;(过程;(2)研究()研究(1)中提到的途径。)中提到的途径。1.软件工程关注于大型程序的构造;软件工程关注于大型程序的构造;2.软件工程的中心课题是控制复杂性;软件工程的中心课题是控制复杂性;3.软件经常变化;软件经常变化;4.开发软件的效率非常重要;开发软件的效率非常重要;5.和谐地合作是软件开发的关键;和谐地合作是软件开发的关键;6.软件必须有效地支持它的用户;软件必须有效地支持它的用户;7.在软件工程领域中是由具有一种文化背景在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。的人替具有另一种文化背景的人创造产品。软件工
7、程的本质特性:软件工程的本质特性:1.2.2 软件工程的基本原理软件工程的基本原理 1.用分阶段的生命周期计划严格管理;用分阶段的生命周期计划严格管理;2.坚持进行阶段评审;坚持进行阶段评审;3.实行严格的产品控制;实行严格的产品控制;4.采用现代程序设计技术;采用现代程序设计技术;5.结果能清楚地审查;结果能清楚地审查;6.开发小组的人员应该少而精;开发小组的人员应该少而精;7.承认不断改进软件工程实践的必要性。承认不断改进软件工程实践的必要性。1.2.3 软件工程方法学软件工程方法学 通常把在软件生命周期全过程中使用的一整通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(套
8、技术方法的集合称为方法学(Methodology),),也称为范型(也称为范型(Paradigm)。)。软件工程方法学的软件工程方法学的3要素:方法、工具和过程要素:方法、工具和过程1.传统方法学传统方法学 也称为生命周期方法学或结构化范型。也称为生命周期方法学或结构化范型。结构化方法(结构化方法(Structure Method)有:有:1)结构化设计方法()结构化设计方法(SD););2)结构化分析方法(结构化分析方法(SA););3)结构化分析与设计技术()结构化分析与设计技术(SADT)4)JACKSON方法方法 5)WARNIER方法方法2.面向对象方法学面向对象方法学 把数据和对数
9、据的操作紧密结合起来的方法,把数据和对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程。模拟人类认识世界解决问题的方法和过程。面向对象的方法面向对象的方法 =对象(属性与服务的封装)对象(属性与服务的封装)+分类分类 +继承继承 +通过消息的通讯通过消息的通讯1)适用于实时事物处理系统的有限状态机)适用于实时事物处理系统的有限状态机方法(方法(FSM););2)适用于并发软件系统的适用于并发软件系统的PETRI网方法;网方法;3)以数学概念和理论为基础的形式化方法,)以数学概念和理论为基础的形式化方法,如如 SDC公司的形式化开发方法公司的形式化开发方法FDM:(Formal
10、 Development Methodology)IBM公司的维也纳开发方法公司的维也纳开发方法VDM:(Vienna Development Method)3.其他开发方法其他开发方法 1.3 软件生命周期软件生命周期软件生命周期软件生命周期:指软件从提出到最终被淘汰的这个存在期。指软件从提出到最终被淘汰的这个存在期。软件生命周期组成:软件生命周期组成:1)软件定义;)软件定义;A.问题定义问题定义 B.可行性研究可行性研究 C.需求需求分析分析 2)软件开发;)软件开发;D.总体设计总体设计 E.详细设计详细设计 F.编码和单元测试编码和单元测试 G.综合测试综合测试 3)运行维护。)运行
11、维护。1.问题定义;问题定义;2.可行性研究;可行性研究;3.需求分析;需求分析;4.总体设计(概要设计);总体设计(概要设计);5.详细设计;详细设计;6.编码与单元测试;编码与单元测试;7.综合测试;综合测试;8.维护。维护。软件生命周期各个阶段:软件生命周期各个阶段:1.4 软件过程软件过程软件过程软件过程:为了获得高质量软件所需要完成的:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工一系列任务的框架,它规定了完成各项任务的工作步骤。作步骤。软件过程(软件过程(ISO9000):使用资源将输入转化使用资源将输入转化为输出的活动所构成的系统。为输出的活动所构成的系
12、统。输入:如软件需求输入:如软件需求输出:如软件产品输出:如软件产品 1.4.1 瀑布模型瀑布模型1.阶段间具有顺序性和阶段间具有顺序性和依赖性依赖性2.推迟实现的观点推迟实现的观点3.质量保证的观点质量保证的观点优点优点:采用规范的:采用规范的方法;严格规定每方法;严格规定每个阶段提交的文档;个阶段提交的文档;要求每个阶段交出要求每个阶段交出的产品必须经过验的产品必须经过验证。证。1.4.2 快速原型模型快速原型模型 优点优点:不带反馈环,基本:不带反馈环,基本上是线性顺序进行。上是线性顺序进行。1.4.3 增量模型增量模型优点优点:能较短时间内提交可完成部分工作的产品;可以使用:能较短时间
13、内提交可完成部分工作的产品;可以使用户有充裕的时间学习和适应新产品。户有充裕的时间学习和适应新产品。一种风险更大的增量模型:一种风险更大的增量模型:1.4.4 螺旋模型螺旋模型 可把它看作在每可把它看作在每个阶段之前都增加个阶段之前都增加风险分析的快速原风险分析的快速原型模型。型模型。1.4.5 喷泉模型喷泉模型 典型的面向对象软件典型的面向对象软件开发过程模型之一。开发过程模型之一。1.4.6 Rational 统一过统一过程程 1.RUP软件开发经验软件开发经验(1)迭代式开发)迭代式开发(2)管理需求)管理需求(3)使用基于构件的体系结构)使用基于构件的体系结构(4)可视化建模)可视化建
14、模(5)贯穿于开发过程的软件质量验证)贯穿于开发过程的软件质量验证(6)控制软件变更)控制软件变更1.4.7 敏捷过程与极限编程敏捷过程与极限编程1.敏捷过程敏捷过程 具有高效、快速响应变化的开发过程。具有高效、快速响应变化的开发过程。(1)个体和交互胜过过程和工具;)个体和交互胜过过程和工具;(2)可以工作的软件胜过面面俱到的文档;)可以工作的软件胜过面面俱到的文档;(3)客户合作胜过合同谈判;)客户合作胜过合同谈判;(4)响应变化胜过遵循计划。)响应变化胜过遵循计划。2.极限编程极限编程 敏捷过程中最著名的一种,指把好的开发敏捷过程中最著名的一种,指把好的开发实践运用到极致,多应用于软件需
15、求模糊的实践运用到极致,多应用于软件需求模糊的场合。场合。1.4.8 微软过程微软过程 1.微软过程准则微软过程准则 2.微软软件生命周期微软软件生命周期(1)规划阶段)规划阶段(2)设计阶段)设计阶段(3)开发阶段)开发阶段(4)稳定阶段)稳定阶段(5)发布阶段)发布阶段 3.微软过程模型微软过程模型 问题定义就是要确定为用户建立什么样的软问题定义就是要确定为用户建立什么样的软件系统,软件叫什么样的名称等等。件系统,软件叫什么样的名称等等。“问题问题”是指软件最基本的问题,如:是指软件最基本的问题,如:软件的总体目标什么?软件的总体目标什么?有什么用途?有什么用途?为那些用户设计?为那些用户
16、设计?1.5 问题定义阶段问题定义阶段 问题定义报告的内容包括:问题定义报告的内容包括:1)软件项目标题;软件项目标题;2)软件目标;软件目标;3)软件用户对象;软件用户对象;4)软件规模。软件规模。问题定义是软件生命周期中时间最短的阶段,问题定义是软件生命周期中时间最短的阶段,一般都比较简单,因此在实际开发中它是最容一般都比较简单,因此在实际开发中它是最容易被忽视的一个阶段。易被忽视的一个阶段。这一阶段工作主要由系统分析员来完成,这一阶段工作主要由系统分析员来完成,系统分析员要尽可能从较高的角度概括软件所系统分析员要尽可能从较高的角度概括软件所要做的工作,而不用写明问题的实现细节。要做的工作
17、,而不用写明问题的实现细节。第第2章:可行性研究章:可行性研究 可行性研究就是要回答可行性研究就是要回答“所定义的问题有所定义的问题有可行的解决办法吗?可行的解决办法吗?”。可行性研究的目的是:用最小的代价在尽可行性研究的目的是:用最小的代价在尽可能短的时间内确定问题是否有解,以及是可能短的时间内确定问题是否有解,以及是否值得去解。否值得去解。2.1 可行性研究的任务可行性研究的任务 可行性研究所需的时间取决于工程的规可行性研究所需的时间取决于工程的规模,所需要的成本要占工程总成本的模,所需要的成本要占工程总成本的5%10%。可行性研究的内容:可行性研究的内容:1)技术可行性技术可行性技术可行
18、性要分析各种技术因素,例如:技术可行性要分析各种技术因素,例如:使用现有的技术能否实现这个系统?使用现有的技术能否实现这个系统?是否有胜任开发该项目的熟练技术人员?是否有胜任开发该项目的熟练技术人员?能否按期得到开发该项目所需的软件、硬件能否按期得到开发该项目所需的软件、硬件资源?资源?2)经济可行性经济可行性 对经济合理性进行评价,所要考虑的问题是:对经济合理性进行评价,所要考虑的问题是:这个系统的经济效益能否超过它的开发成本?这个系统的经济效益能否超过它的开发成本?这就需要对项目进行价格这就需要对项目进行价格/利益分析,即利益分析,即“投入投入/产出产出”分析。分析。由于利益分析取决于软件
19、系统的特点,因此在由于利益分析取决于软件系统的特点,因此在软件开发之前,很难对新系统产生的效益作出精软件开发之前,很难对新系统产生的效益作出精确的定量描述,所以往往采用一些估算方法。确的定量描述,所以往往采用一些估算方法。3)操作可行性操作可行性 操作可行性评价系统运行后会引起的各方操作可行性评价系统运行后会引起的各方面变化,如:对组织机构管理模式、用户工面变化,如:对组织机构管理模式、用户工作环境等产生的影响。作环境等产生的影响。4)社会可行性社会可行性 社会可行性主要讨论法律方面和使用方面社会可行性主要讨论法律方面和使用方面的可行性。的可行性。例如,被开发软件的权利归属问题、软件例如,被开
20、发软件的权利归属问题、软件所使用的技术是否会造成侵权等问题。所使用的技术是否会造成侵权等问题。2.2 可行性研究的步骤可行性研究的步骤 1)复查系统规模和目标;)复查系统规模和目标;2)研究目前正在使用的系统;)研究目前正在使用的系统;3)导出新系统的高层逻辑模型(数)导出新系统的高层逻辑模型(数据流图、数据字典);据流图、数据字典);4)重新定义问题;重新定义问题;5)导出和评价供选择的解法(物理解决方案);)导出和评价供选择的解法(物理解决方案);6)推荐行动方案;)推荐行动方案;7)草拟开发计划;)草拟开发计划;8)书写文档提交审查。)书写文档提交审查。2.2 可行性研究的步骤可行性研究
21、的步骤 2.3 系统流程图系统流程图(描绘物理系统的工具)(描绘物理系统的工具)2.3.1 符号符号 符号符号名称名称说明说明处理处理如:程序,处理机,人工加工如:程序,处理机,人工加工输入输入/输出输出连接连接换页连接换页连接数据流数据流表示输入或输出表示输入或输出同一页上图的连接同一页上图的连接不同页上图的连接不同页上图的连接指明数据流动方向指明数据流动方向图图2.1 基本符号基本符号符号符号名称名称说明说明穿孔卡片穿孔卡片文档文档磁带磁带联机存储联机存储磁盘磁盘磁鼓磁鼓显示显示人工输入人工输入人工操作人工操作辅助操作辅助操作通信链路通信链路穿孔卡片输入穿孔卡片输入/输出,或穿孔卡片文件输
22、出,或穿孔卡片文件打印输出,或打印终端输入数据打印输出,或打印终端输入数据磁带输入磁带输入/输出,或表示磁带文件输出,或表示磁带文件任何种类磁盘存储,如磁盘、磁鼓等任何种类磁盘存储,如磁盘、磁鼓等磁盘输入磁盘输入/输出,或磁盘上文件、数据库输出,或磁盘上文件、数据库磁鼓输入磁鼓输入/输出,或磁鼓上文件、数据库输出,或磁鼓上文件、数据库显示器部件显示器部件人工输入数据,如填写表格人工输入数据,如填写表格人工完成的处理人工完成的处理使用辅助设备进行的脱机操作使用辅助设备进行的脱机操作通过远程通信线路传送数据通过远程通信线路传送数据图图2.2 系统符号系统符号 2.3.2 例子例子 事务事务库存清单
23、程序库存清单程序报告生成程序报告生成程序定货定货信息信息定货报告定货报告库存清单库存清单主文件主文件图图2.3 库存清单系统的系统流程图库存清单系统的系统流程图2.4 数据流图(描绘数据在系统中流动的逻辑过程)数据流图(描绘数据在系统中流动的逻辑过程)2.4.1 符号符号 或或或或或或数据源点或终点数据源点或终点变换数据的处理变换数据的处理数据存储数据存储数据流数据流图图2.4 基本符号的含义基本符号的含义TABC*TABC*附加符号附加符号TABC+TABC+注意:注意:“处理处理”可表示:单个程序、一系列程序、程可表示:单个程序、一系列程序、程序的一个模块、人工处理过程等等;序的一个模块、
24、人工处理过程等等;“数据存储数据存储”可表示:一个文件、文件的一部可表示:一个文件、文件的一部分、数据库记录等等;分、数据库记录等等;数据流图忽略出错处理、打开文件、关闭文件。数据流图忽略出错处理、打开文件、关闭文件。2.4.2 绘制数据流图的绘制数据流图的例子例子 事务事务库存清单程序库存清单程序报告生成程序报告生成程序定货定货信息信息定货报告定货报告库存清单库存清单主文件主文件图图2.3 库存清单系统的系统流程图库存清单系统的系统流程图 2.4.2 绘制数据流图的绘制数据流图的例子例子 仓库仓库管理员管理员采购员采购员定货系定货系统统事务事务定货报表定货报表图图2.5 定货系统的基本系统模
25、型定货系统的基本系统模型2.4.2 绘制数据流图的例子绘制数据流图的例子 库存清单库存清单仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.6 定货系统的功能级数据流图定货系统的功能级数据流图处理处理事务事务1产生产生报表报表2D1 库存清单库存清单D2 定货信息定货信息定货信息定货信息定货信息定货信息 组成该例子的数据流图的元素组成该例子的数据流图的元素源点源点/终点终点处理处理 采购员采购员 仓库管理员仓库管理员 产生报表产生报表 处理事务处理事务数据流数据流数据存储数据存储 订货报表订货报表 零件编号零件编号 零件名称零件名称 订货数量订货数量 目前价格目前价格 主要供应商
26、主要供应商 次要供应商次要供应商 事务事务 零件编号零件编号 事务类型事务类型 数量数量 订货信息订货信息 (见订货报表)(见订货报表)库存清单库存清单 零件编号零件编号 库存量库存量 库存量临界值库存量临界值 上述数据流图所描述的功上述数据流图所描述的功能够详细了吗?能够详细了吗?2.4.2 绘制数据流图的例子绘制数据流图的例子 仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.7 定货系统进一步分解后的数据流图定货系统进一步分解后的数据流图更新更新库存库存清单清单1.2产生产生报表报表2D1 库存清单库存清单D2 定货信息定货信息接收接收事务事务1.1处理处理定货定货1.3库
27、存清单库存清单定货信息定货信息定货信息定货信息1)为数据流(或数据存储)命名为数据流(或数据存储)命名 A名字应该代表整个数据流(或数据名字应该代表整个数据流(或数据存储)的内容;存储)的内容;B不要使用空洞的、缺乏具体含义的不要使用空洞的、缺乏具体含义的名字(如名字(如“数据数据”、“输入输入”););2.4.3 命名命名 C如果为某个数据流(或数据存储)如果为某个数据流(或数据存储)起名字时遇到困难,则很可能是因为对起名字时遇到困难,则很可能是因为对数据流图的分解不恰当造成的,应该试数据流图的分解不恰当造成的,应该试试重新分解数据流图;试重新分解数据流图;2)为处理命名为处理命名 A通常先
28、为数据流命名,然后再为通常先为数据流命名,然后再为与之相关联的处理命名;与之相关联的处理命名;B名字应该反映整个处理的功能;名字应该反映整个处理的功能;C应该尽量避免空洞笼统的动词做应该尽量避免空洞笼统的动词做名字,如名字,如“处理处理”、“加工加工”;D通常用一个动词命名,如果必须用两通常用一个动词命名,如果必须用两个动词才能描述整个处理的功能,则可能要个动词才能描述整个处理的功能,则可能要把这个处理分解成两个处理更恰当;把这个处理分解成两个处理更恰当;E如果在为某个处理命名时遇到困难,如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的情况,应考虑则很可能是发现了分解不当的情况,应考
29、虑重新分解。重新分解。通常,为通常,为“数据源点数据源点/终点终点”命名时,采用它命名时,采用它们在问题域中习惯使用的名字(如们在问题域中习惯使用的名字(如“仓库管理仓库管理员员”、“采购员采购员”)。)。1)利用它作为交流信息的工具;)利用它作为交流信息的工具;2)作为软件分析和设计的工具。)作为软件分析和设计的工具。2.4.4 数据流图的用途数据流图的用途 2.4.4 数据流图的用途数据流图的用途 仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.8 这种自动化边界建议以联机方式更新库存清单这种自动化边界建议以联机方式更新库存清单更新更新库存库存清单清单1.2产生产生报表报表
30、2D1 库存清单库存清单D2 定货信息定货信息接收接收事务事务1.1处理处理定货定货1.3库存清单库存清单定货信息定货信息定货信息定货信息 图图2.8 对应的物理实现硬件方案对应的物理实现硬件方案 2.4.4 数据流图的用途数据流图的用途 仓库仓库管理员管理员采购员采购员事务事务定货报表定货报表图图2.9 这种自动化边界暗示以批量方式更新库存清单这种自动化边界暗示以批量方式更新库存清单更新更新库存库存清单清单1.2产生产生报表报表2D1 库存清单库存清单D2定货信息定货信息接收接收事务事务1.1处理处理定货定货1.3库存清单库存清单定货信息定货信息定货信息定货信息D3 事务事务 图图2.9 对
31、应的物理实现硬件方案对应的物理实现硬件方案 数据字典数据字典:对数据流图中包含的所有:对数据流图中包含的所有元素的定义的集合;元素的定义的集合;可行性研究阶段,数据流图与数据字可行性研究阶段,数据流图与数据字典共同构成系统的典共同构成系统的逻辑模型逻辑模型。2.5 数据字典数据字典 2.5.1 数据字典的内容数据字典的内容 数据字典应该对下列元素进行定义:数据字典应该对下列元素进行定义:1)数据流;)数据流;2)数据元素(数据流分量);)数据元素(数据流分量);3)数据存储;)数据存储;4)处理。)处理。1)数据元素数据元素字典字典定义定义其定义的基本内容有:其定义的基本内容有:A数据元素编号
32、、名称及其含义;数据元素编号、名称及其含义;B数据类型和长度;数据类型和长度;C合理取值;合理取值;D其他内容,如它与其它数据的其他内容,如它与其它数据的逻辑关系等。逻辑关系等。2.5.2 定义数据的方法定义数据的方法 数据元素字典数据元素字典定义实例:定义实例:数据元素编号数据元素编号:DC001数据元素名称数据元素名称:考试成绩:考试成绩别名别名:成绩、分数:成绩、分数简述简述:学生考试成绩,分五个等级:学生考试成绩,分五个等级类型类型/长度长度:两个字节,字符类型:两个字节,字符类型取值取值/含义含义:优:优 90-100 良良 80-89 中中 70-79 及格及格 60-69 不及格
33、不及格 0-59有关数据项或结构有关数据项或结构:学生成绩档案:学生成绩档案有关处理逻辑有关处理逻辑:计算成绩:计算成绩 图图2.10 数据元素字典定义数据元素字典定义 2)数据流字典数据流字典定义定义 其定义的基本内容有:其定义的基本内容有:A数据流编号及名称;数据流编号及名称;B数据流来源;数据流来源;C数据流去处;数据流去处;D数据流的组成;数据流的组成;E流通量;流通量;F峰值。峰值。数据流字典数据流字典定义实例:定义实例:数据流编号数据流编号:DF001数据流名称数据流名称:订票单:订票单简述简述:订票时填写的订票单:订票时填写的订票单数据流来源数据流来源:外部实体:外部实体“乘客乘
34、客”数据流去处数据流去处:处理逻辑:处理逻辑“预订机票预订机票”数据流组成数据流组成:订单编号:订单编号 日期日期 乘客号乘客号 航班号航班号 状态状态 订单失效日期订单失效日期流通量流通量:每天:每天300份份高峰值流通量高峰值流通量:每天早上:每天早上9:00,约,约160份份图图2.11 数据流字典定义数据流字典定义 3)数据存储数据存储字典定义字典定义 其定义的基本内容有:其定义的基本内容有:A数据存储编号及名称;数据存储编号及名称;B数据存储的组成;数据存储的组成;C其它要求。其它要求。4)数据处理数据处理字典定义字典定义 其定义的基本内容有:其定义的基本内容有:A数据处理编号及名称
35、;数据处理编号及名称;B简单描述;简单描述;C输入输入/输出;输出;D功能描述;功能描述;E有关数据存储。有关数据存储。数据处理数据处理字典定义实例:字典定义实例:数据处理编号数据处理编号:DP001数据处理名称数据处理名称:编辑订票:编辑订票简述简述:接收从终端录入的订票单,检验是否正确:接收从终端录入的订票单,检验是否正确输入输入:乘客订单,来源:外部实体:乘客订单,来源:外部实体“乘客乘客”输出输出:1.合格订单,去处:处理逻辑合格订单,去处:处理逻辑“确定订票确定订票”2.不及格订单,去处:外部实体不及格订单,去处:外部实体“乘客乘客”功能描述:功能描述:(略)(略)图图2.12 数据
36、处理字典定义数据处理字典定义5)组成数据项的表示方法)组成数据项的表示方法 =表示表示“等价于等价于”或或“定义为定义为”+表示表示“与与”与与|表示表示“或或”表示重复表示重复 ()表示可选项表示可选项 通讯录通讯录=通讯地址通讯地址 通讯地址通讯地址=姓名姓名+邮编邮编+省省|直辖市直辖市|自治自治区区+市市|县县+街道街道+门牌号门牌号+(电话)(电话)1.作为分析阶段的重要工具;作为分析阶段的重要工具;2.数据元素的控制信息非常有用;数据元素的控制信息非常有用;3.有助于开发数据库。有助于开发数据库。2.5.3 数据字典的用途数据字典的用途实现数据字典:实现数据字典:1)程序处理;)程
37、序处理;2)卡片式人工书写;)卡片式人工书写;2.5.4 数据字典的实现数据字典的实现2.6 成本成本/效益分析效益分析 1)代码行技术代码行技术 软件成本软件成本=每行代码的平均成本每行代码的平均成本估计的源代码总行数估计的源代码总行数 2.6.1 成本估计成本估计2)任务分解技术任务分解技术 软件开发项目分解为若干个相对独立的软件开发项目分解为若干个相对独立的任务,分别估计每个单独任务的成本:任务,分别估计每个单独任务的成本:单独任务成本单独任务成本=任务所需人力估计值每任务所需人力估计值每人每月平均工资;人每月平均工资;软件开发项目总成本估计软件开发项目总成本估计=各个单独任务各个单独任
38、务成本估计值之和。成本估计值之和。常用的办法是按开发阶段划分任务,典型环境下各个常用的办法是按开发阶段划分任务,典型环境下各个开发阶段需要使用的人力百分比大致如下:开发阶段需要使用的人力百分比大致如下:任务任务人力()人力()可行性研究可行性研究需求分析需求分析设计设计编码与单元测试编码与单元测试综合测试综合测试总计总计5102520401003)自动估计成本技术自动估计成本技术 采用自动估计成本的软件工具估计。采用自动估计成本的软件工具估计。1)Putnam 模型模型 1978年年Putnam提出的,一种动态多变量模型:提出的,一种动态多变量模型:软件开发成本估算的经验模型:软件开发成本估算
39、的经验模型:Ck为技术状态常数,它反映为技术状态常数,它反映“妨碍开发进展妨碍开发进展的限制的限制”,取值因开发环境而异,见下表:,取值因开发环境而异,见下表:Ck的典型的典型值值开发环开发环境境开发环境举例开发环境举例2000差差没有系统的开发方法,缺乏文档和复没有系统的开发方法,缺乏文档和复审审8000好好有合适的系统的开发方法,有充分的有合适的系统的开发方法,有充分的文档和复审文档和复审11000优优有自动的开发工具和技术有自动的开发工具和技术2)COCOMO模型模型(constructive cost model)这是由这是由TRW公司开发,公司开发,Boehm提出的结构化成本估算提出
40、的结构化成本估算模型,是一种精确的、易于使用的成本估算方法。模型,是一种精确的、易于使用的成本估算方法。基本基本COCOMO模型估算工作量和进度的公式如下:模型估算工作量和进度的公式如下:工工 作作 量:量:MM=r(KDSI)c (人月)人月)开发时间:开发时间:TDKV=a(MM)b (月)月)DSI:源指令条数,不包括注释,源指令条数,不包括注释,1KDSI=1000DSI MM:开发工作量(以人月计),开发工作量(以人月计),1MM=19 人日人日=152 人时人时=1/12 人年人年 经验常数经验常数 r,c,a,b 取决于项目的总体类型取决于项目的总体类型 COCOMO模型中,考虑
41、开发环境,软件开发模型中,考虑开发环境,软件开发项目的类型可以分为项目的类型可以分为3种:种:1)组织型组织型(organic)相对较小、较简单的软件项目。开发人员对相对较小、较简单的软件项目。开发人员对开发目标理解比较充分,与软件系统相关的工作开发目标理解比较充分,与软件系统相关的工作经验丰富,对软件的使用环境很熟悉,受硬件的经验丰富,对软件的使用环境很熟悉,受硬件的约束较小,程序的规模不是很大(约束较小,程序的规模不是很大(下个状态下个状态 加入谓词集加入谓词集P P,把系统扩展成一个把系统扩展成一个6 6元组后元组后:当前状态【菜单】事件【所选择的项】谓词当前状态【菜单】事件【所选择的项
42、】谓词下个状态下个状态 计算机系统中每个菜单驱动的用户界面都是计算机系统中每个菜单驱动的用户界面都是一个有穷状态机的实现。一个有穷状态机的实现。定义状态:定义状态:(1)M(d,e,f):电梯:电梯e正沿正沿d方向移动,即将到达第方向移动,即将到达第f层楼。层楼。(2)S(d,e,f):电梯:电梯e停在停在f层楼,将朝层楼,将朝d方向移动(未关方向移动(未关门)。门)。(3)W(e,f):电梯:电梯e在在f层等待(已关门)。层等待(已关门)。(4)DC(e,f):电梯:电梯e在楼层在楼层f关上门。关上门。(5)ST(e,f):电梯:电梯e靠近靠近f层时触发传感器,电梯控制器层时触发传感器,电梯
43、控制器决定在当前楼层是否停下。决定在当前楼层是否停下。(6)RL:电梯按钮或楼层按钮被按下进入打开状态:电梯按钮或楼层按钮被按下进入打开状态 4.2.2 例子例子:电梯的状态转电梯的状态转换换电梯状态转换规则:电梯状态转换规则:S(U,e,f)+DC(e,f)=M(U,e,f+1);S(D,e,f)+DC(e,f)=M(D,e,f-1);S(N,e,f)+DC(e,f)=W(e,f)4.2.3 评价评价 有穷状态机描述规格说明:有穷状态机描述规格说明:当前状态事件谓词当前状态事件谓词=下个状态下个状态 易于书写、验证、转变成设计或程序代码。易于书写、验证、转变成设计或程序代码。有穷状态机方法比
44、数据流图技术更精确,有穷状态机方法比数据流图技术更精确,一样易于理解。但不能处理定时需求。一样易于理解。但不能处理定时需求。4.3 Petri网网 4.3.1 概念概念 Petri网包含网包含4种元素:种元素:1)一组位置)一组位置P,上例上例 PP1,P2,P3,P4 2)一组转换一组转换T,上例上例 Tt1,t2 3)输入函数输入函数I,上例上例 I(t1)=P2,P4 I(t2)=P2 4)输出函数输出函数O,上例上例O(t1)=P1 O(t2)=P3,P3 更形式化的更形式化的Petri网结构,是一个网结构,是一个4元组(元组(P,T,I,O)权标向量(权标向量(1,2,0,1)权标向
45、量(权标向量(2,1,0,0)权标向量(权标向量(2,0,2,0)更形式化地:更形式化地:标记标记 M:P0,1,2,Petri网成为一个网成为一个5元组元组(P,T,I,O,M)对对Petri网的一个重要扩充是加入禁止线:网的一个重要扩充是加入禁止线:4.3.2 例子例子 1.电梯按钮电梯按钮EBf 电梯中楼层电梯中楼层 f 的按钮;的按钮;Fg 楼层楼层g;Ff 楼层楼层 f。2.楼层按钮楼层按钮FBfu 第第 f 楼层向上按钮;楼层向上按钮;FBfd 第第 f 楼层向下按钮;楼层向下按钮;小结 基于数学的形式化说明技术,目前还没有在基于数学的形式化说明技术,目前还没有在软件产业界广泛应用
46、;软件产业界广泛应用;应该把形式化方法与传统方法有机结合。应该把形式化方法与传统方法有机结合。第5章:总体设计 5.1 设计过程设计过程 1.设想供选择的方案设想供选择的方案 2.选择合理的方案选择合理的方案 对每个合理的方案要提供:对每个合理的方案要提供:A系统流程图系统流程图 B组成系统的物理元素清单组成系统的物理元素清单 C成本成本/效益分析效益分析 D实现这个系统的进度计划实现这个系统的进度计划 3.推荐最佳方案推荐最佳方案 4.功能分解功能分解 5.设计软件结构设计软件结构 6.数据库设计数据库设计 A模式设计模式设计 B子模式设计子模式设计 C完整性和安全性设计完整性和安全性设计
47、D优化优化 7.制定测试计划制定测试计划8.书写文档书写文档 A系统说明系统说明 B用户手册用户手册 C测试计划测试计划 D详细的实现计划详细的实现计划 E数据库设计结果数据库设计结果9.审查和复审审查和复审 5.2 设计原理设计原理 如果一个大型程序仅由一个模块组成,很难被人理解。如果一个大型程序仅由一个模块组成,很难被人理解。设函数设函数C(x)定义问题定义问题x的复杂程度,函数的复杂程度,函数E(x)定义解决定义解决问题问题x需要的工作量(时间)。对于两个问题需要的工作量(时间)。对于两个问题P1和和P2,如如果:果:C(P1)C(P2)那么那么 E(P1)E(P2)根据解决问题的经验,
48、有一个规律是:根据解决问题的经验,有一个规律是:C(P1+P2)C(P1)+C(P2)于是有于是有 E(P1+P2)E(P1)+E(P2)5.2.1 模块化模块化模块数目模块数目接口成本接口成本成本成本/模块模块软件总成本软件总成本M最小成本区最小成本区成本成本图图5.1 模块化与软件成本模块化与软件成本 5.2.2 抽象抽象 5.2.3 逐步求精逐步求精模块的独立性很重要,因为:模块的独立性很重要,因为:1)有效的模块化的软件比较容易开发出来)有效的模块化的软件比较容易开发出来;2)独立的模块比较容易测试和维护。)独立的模块比较容易测试和维护。5.2.4 信息隐蔽和局部化信息隐蔽和局部化 5
49、.2.5 模块独立模块独立 一、耦合一、耦合 耦合耦合:指软件结构内不同模块彼此之间:指软件结构内不同模块彼此之间相互依赖(连接)的紧密程度。相互依赖(连接)的紧密程度。模块独立程度可以由两个定性标准度量:模块独立程度可以由两个定性标准度量:耦合耦合与与内聚内聚。模块的偶合分四类:模块的偶合分四类:1)数据耦合数据耦合 两个模块之间只是通过参数交换信息,而且两个模块之间只是通过参数交换信息,而且交换的信息仅仅是数据。交换的信息仅仅是数据。数据耦合是最低程度的耦合。数据耦合是最低程度的耦合。AB数据数据(1)数据耦合)数据耦合2)控制耦合控制耦合 两个模块之间所交换的信息包含控制信息。两个模块之
50、间所交换的信息包含控制信息。控制耦合是中等程度的耦合。控制耦合是中等程度的耦合。图中模块图中模块A的内部处理程序判断是执行的内部处理程序判断是执行C还是执行还是执行D,要取决于模块要取决于模块B传来的信息状态(传来的信息状态(Status)。)。BACD(2)控制耦合)控制耦合astatus3)公用耦合公用耦合 两个或多个模块通过一个公共区相互作用两个或多个模块通过一个公共区相互作用时的耦合。时的耦合。公共区可以是:全程数据区、共享通信区、公共区可以是:全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理内存公共覆盖区、任何介质上的文件、物理设备等。设备等。软件结构中存在大量的公用耦