软件工程(SoftwareEngineering)第1章:软件工程学概述•1.1软件危机•60年代中期以前:通用硬件相当普遍,软件却是为某个具体的应用而编写的。•60年代中到70年代中:软件作坊。•软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题。(正常、不正常运行软件都具有这种问题)1.1.1软件危机的介绍•1)对软件开发成本和进度的估计常常很不准确;•2)用户对完成的软件系统不满意的现象经常发生;•3)软件产品的质量往往靠不住;软件危机的典型表现:•4)软件常常是不可维护的;•5)软件通常没有适当的文档资料;•6)软件成本在计算机系统总成本中所占的比例逐年上升;•7)软件开发生产率提高的速度跟不上计算机应用的发展趋势。•1.1.2产生软件危机的原因1)软件本身特点造成;2)软件开发与维护的方法不正确。主要表现:(a)忽视软件需求分析;(b)认为软件开发就是写程序并使之运行;(c)轻视软件维护;•在软件开发的不同阶段进行修改需要付出的代价很不相同:高中低早期中期后期软件开发时期代价引入同一修改的代价随时间变化的趋势•1)推广使用在实践中总结出来的开发软件的成功技术和方法,并研究探索更有效的技术和方法;•2)开发和使用更好的软件工具;•3)良好的组织管理措施。1.1.3解决软件危机的途径•为了解决软件危机产生的问题,软件工程与方法学逐渐形成,然后出现了两个相互相承又各有侧重的学科:•1)软件工程学:主要应用工程的方法和技术研究软件开发与维护的方法、工具和管理的一门交叉学科。•2)程序设计方法学:主要应用数学的方法研究程序的性质以及程序设计的理论和方法的学科。1.2软件工程•1.2.1软件工程的介绍1968年NATO会议:软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。1993年IEEE:软件工程是(1)把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程;(2)研究(1)中提到的途径。•1.软件工程关注于大型程序的构造;•2.软件工程的中心课题是控制复杂性;•3.软件经常变化;•4.开发软件的效率非常重要;•5.和谐地合作是软件开发的关键;•6.软件必须有效地支持它的用户;•7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。软件工程的本质特性:•1.2.2软件工程的基本原理•1.用分阶段的生命周期计划严格管理;•2.坚持进行阶段评审;•3.实行严格的产品控制;•4.采用现代程序设计技术;•5.结果能清楚地审查;•6.开发小组的人员应该少而精;•7.承认不断改进软件工程实践的必要性。•1.2.3软件工程方法学••通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(Methodology),也称为范型(Paradigm)。•软件工程方法学的3要素:方法、工具和过程•1.传统方法学•也称为生命周期方法学或结构化范型。•结构化方法(StructureMethod)有:•1)结构化设计方法(SD);•2)结构化分析方法(SA);•3)结构化分析与设计技术(SADT)•4)JACKSON方法•5)WARNIER方法•2.面向对象方法学•把数据和对数据的操作紧密结合起来的方法,模拟人类认识世界解决问题的方法和过程。•面向对象的方法•=对象(属性与服务的封装)•+分类•+继承•+通过消息的通讯•1)适用于实时事物处理系统的有限状态机方法(FSM);•2)适用于并发软件系统的PETRI网方法;•3)以数学概念和理论为基础的形式化方法,如•SDC公司的形式化开发方法FDM:•(FormalDevelopmentMethodology)•IBM公司的维也纳开发方法VDM:•(ViennaDevelopmentMethod)3.其他开发方法1.3软件生命周期•软件生命周期:•指软件从提出到最终被淘汰的这个存在期。•软件生命周期组成:•1)软件定义;•A.问题定义B.可行性研究C.需求分析•2)软件开发;•D.总体设计E.详细设计•F.编码和单元测试G.综合测试•3)运行维护。•1.问题定义;•2.可行性研究;•3.需求分析;•4.总体设计(概要设计);•5.详细设计;•6.编码与单元测试;•7.综合测试;•8.维护。软件生命周期各个阶段:1.4软件过程•软件过程:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。•软件过程(ISO9000):使用资源将输入转化为输出的活动所构成的系统。•输入:如软件需求•输出:如软件产品•1.4.1瀑布模型1.阶段间具有顺序性和依赖性2.推迟实现的观点3.质量保证的观点优点:采用规范的方法;严格规定每个阶段提交的文档;要求每个阶段交出的产品必须经过验证。•1.4.2快速原型模型•优点:不带反馈环,基本上是线性顺序进行。1.4.3增量模型优点:能较短时间内提交可完成部分工作的产品;可以使用户有充裕的时间学习和适应新产品。•一种风险更大的增量模型:•1.4.4螺旋模型•可把它看作在每个阶段之前都增加风险分析的快速原型模型。•1.4.5喷泉模型典型的面向对象软件开发过程模型之一。1.4.6Rational统一过程•1.RUP软件开发经验•(1)迭代式开发•(2)管理需求•(3)使用基于构件的体系结构•(4)可视化建模•(5)贯穿于开发过程的软件质量验证•(6)控制软件变更1.4.7敏捷过程与极限编程•1.敏捷过程•具有高效、快速响应变化的开发过程。•(1)个体和交互胜过过程和工具;•(2)可以工作的软件胜过面面俱到的文档;•(3)客户合作胜过合同谈判;•(4)响应变化胜过遵循计划。•2.极限编程•敏捷过程中最著名的一种,指把好的开发实践运用到极致,多应用于软件需求模糊的场合。1.4.8微软过程•1.微软过程准则•2.微软软件生命周期•(1)规划阶段•(2)设计阶段•(3)开发阶段•(4)稳定阶段•(5)发布阶段•3.微软过程模型•问题定义就是要确定为用户建立什么样的软件系统,软件叫什么样的名称等等。“问题”是指软件最基本的问题,如:•软件的总体目标什么?•有什么用途?•为那些用户设计?1.5问题定义阶段•问题定义是软件生命周期中时间最短的阶段,一般都比较简单,因此在实际开发中它是最容易被忽视的一个阶段。•这一阶段工作主要由系统分析员来完成,系统分析员要尽可能从较高的角度概括软件所要做的工作,而不用写明问题的实现细节。第2章:可行性研究•可行性研究就是要回答“所定义的问题有可行的解决办法吗?”。•可行性研究的目的是:用最小的代价在尽可能短的时间内确定问题是否有解,以及是否值得去解。2.1可行性研究的任务•可行性研究所需的时间取决于工程的规模,所需要的成本要占工程总成本的5%~10%。•可行性研究的内容:•1)技术可行性•技术可行性要分析各种技术因素,例如:•使用现有的技术能否实现这个系统?•是否有胜任开发该项目的熟练技术人员?•能否按期得到开发该项目所需的软件、硬件资源?•2)经济可行性•对经济合理性进行评价,所要考虑的问题是:•这个系统的经济效益能否超过它的开发成本?•这就需要对项目进行价格/利益分析,即“投入/产出”分析。•由于利益分析取决于软件系统的特点,因此在软件开发之前,很难对新系统产生的效益作出精确的定量描述,所以往往采用一些估算方法。•3)操作可行性•操作可行性评价系统运行后会引起的各方面变化,如:对组织机构管理模式、用户工作环境等产生的影响。•4)社会可行性•社会可行性主要讨论法律方面和使用方面的可行性。•例如,被开发软件的权利归属问题、软件所使用的技术是否会造成侵权等问题。2.2可行性研究的步骤•1)复查系统规模和目标;•2)研究目前正在使用的系统;•3)导出新系统的高层逻辑模型(数据流图、数据字典);•4)重新定义问题;•5)导出和评价供选择的解法(物理解决方案);•6)推荐行动方案;•7)草拟开发计划;•8)书写文档提交审查。2.2可行性研究的步骤2.3系统流程图(描绘物理系统的工具)•2.3.1符号符号名称说明处理如:程序,处理机,人工加工输入/输出连接换页连接数据流表示输入或输出同一页上图的连接不同页上图的连接指明数据流动方向图2.1基本符号符号名称说明穿孔卡片文档磁带联机存储磁盘磁鼓显示人工输入人工操作辅助操作通信链路穿孔卡片输入/输出,或穿孔卡片文件打印输出,或打印终端输入数据磁带输入/输出,或表示磁带文件任何种类磁盘存储,如磁盘、磁鼓等磁盘输入/输出,或磁盘上文件、数据库磁鼓输入/输出,或磁鼓上文件、数据库显示器部件人工输入数据,如填写表格人工完成的处理使用辅助设备进行的脱机操作通过远程通信线路传送数据图2.2系统符号•2.3.2例子事务库存清单程序报告生成程序定货信息定货报告库存清单主文件图2.3库存清单系统的系统流程图2.4数据流图(描绘数据在系统中流动的逻辑过程)•2.4.1符号或或或数据源点或终点变换数据的处理数据存储数据流图2.4基本符号的含义TABC*TABC*附加符号TABC+TABC+•注意:•“处理”可表示:单个程序、一系列程序、程序的一个模块、人工处理过程等等;•“数据存储”可表示:一个文件、文件的一部分、数据库记录等等;•数据流图忽略出错处理、打开文件、关闭文件。•2.4.2绘制数据流图的例子事务库存清单程序报告生成程序定货信息定货报告库存清单主文件图2.3库存清单系统的系统流程图•2.4.2绘制数据流图的例子仓库管理员采购员定货系统事务定货报表图2.5定货系统的基本系统模型2.4.2绘制数据流图的例子库存清单仓库管理员采购员事务定货报表图2.6定货系统的功能级数据流图处理事务1产生报表2D1库存清单D2定货信息定货信息定货信息•组成该例子的数据流图的元素源点/终点处理采购员仓库管理员产生报表处理事务数据流数据存储订货报表零件编号零件名称订货数量目前价格主要供应商次要供应商事务零件编号事务类型数量订货信息(见订货报表)库存清单零件编号库存量库存量临界值•上述数据流图所描述的功能够详细了吗?2.4.2绘制数据流图的例子仓库管理员采购员事务定货报表图2.7定货系统进一步分解后的数据流图更新库存清单1.2产生报表2D1库存清单D2定货信息接收事务1.1处理定货1.3库存清单定货信息定货信息•1)为数据流(或数据存储)命名•A.名字应该代表整个数据流(或数据存储)的内容;•B.不要使用空洞的、缺乏具体含义的名字(如“数据”、“输入”);2.4.3命名•C.如果为某个数据流(或数据存储)起名字时遇到困难,则很可能是因为对数据流图的分解不恰当造成的,应该试试重新分解数据流图;•2)为处理命名•A.通常先为数据流命名,然后再为与之相关联的处理命名;•B.名字应该反映整个处理的功能;•C.应该尽量避免空洞笼统的动词做名字,如“处理”、“加工”;•D.通常用一个动词命名,如果必须用两个动词才能描述整个处理的功能,则可能要把这个处理分解成两个处理更恰当;•E.如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的情况,应考虑重新分解。•通常,为“数据源点/终点”命名时,采用它们在问题域中习惯使用的名字(如“仓库管理员”、“采购员”)。•1)利用它作为交流信息的工具;•2)作为软件分析和设计的工具。•2.4.4数据流图的用途2.4.4数据流图的用途仓库管理员采购员事务定货报表图2.8这种自动化边界建议以联机方式更新库存清单更新库存清单1.2产生报表2D1库存清单D2定货信息接收事务1.1处理定货1.3库存清单定货信息定货信息•图2.8对应的物理实现硬件方案•2.4.4数据流图的用途仓库管理员采购员事务定货报表图2.9这种自动化边界暗示以批量方式更新库存清单更新库存清单1.2产生报表2D1库存清单D2定货信息接收事务1.1处理定货1.3库存清单定货信息定货信息D3事务•图2.9对应的物理实现硬件方案•数据字典:对数据流图中包含的所有元素的定义的集合;•可行性研究阶段,数据流图与数据字典共同构成系统的逻辑模型。2.5数据字典•2.5.1数据