©2009BUPTTSEG软件工程模型与方法Models&MethodsofSoftwareEngineering第一章软件工程概述修佳鹏media@bupt.edu.cn2©2009BUPTTSEG北京邮电大学通信软件工程中心本章内容1.1计算机软件1.2软件的发展和软件危机1.3软件工程1.4通信软件工程1.5软件工程知识体系3©2009BUPTTSEG北京邮电大学通信软件工程中心1.1计算机软件本节内容1.1.1软件的定义1.1.2软件的特点1.1.3软件的分类4©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.1软件的定义软件是程序的完善和发展,是经过严格的正确性检验和实际试用,并具有相对稳定的文本和完整的文档资料的程序。Wirth中指出:在结构化程序设计:程序=算法+数据结构在软件工程中:软件=程序+文档。IEEE定义:软件是计算机程序、规程以及运行计算机系统所需要的文档和数据。5©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.1软件的定义另一种对软件的公认解释是:软件是包括程序、数据及其相关文档的完整集合。程序是按照事先设计的功能和性能要求执行的指令序列;数据是使程序能正常操纵信息的数据结构;文档是与程序开发、维护和使用有关的图文材料。6©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.2软件的特点(1)软件是一种逻辑实体,具有抽象性。(2)软件的开发过程中没有明显的制造过程。(3)软件在运行和使用期间,没有硬件那样的机械磨损和老化问题,但存在软件退化问题。(4)软件的开发和运行常常受到计算机系统的约束和限制,不同程度地依赖计算机硬件。(5)软件的开发至今未完全摆脱手工艺的开发方式,大部分软件还是定制的,很难通过组装方式完成软件开发。7©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.2软件的特点(6)软件是复杂的。实际需求的复杂性程序逻辑的复杂性(7)软件研制成本相当高,在计算机系统中软件成本比例逐步增加。(8)软件投入运行时还涉及到许多社会因素。8©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类根据软件服务对象的范围不同:通用软件:操作系统、数据库等;定制软件:企业ERP、卫星控制系统等;根据软件完成功能所处的层次不同:系统软件中间件软件应用软件9©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类系统软件:指能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。操作系统设备驱动程序通信处理程序10©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,将注意力集中在自己的业务上,不必再为程序的移植而重复工作,从而大大减少了技术上的负担。硬件平台系统软件硬件平台系统软件中间件分布式系统服务应用应用中间件软件:为了解决分布异构系统的集成问题而开发的软件,是处于操作系统软件与用户的应用软件的中间的通用服务,具有标准的接口和协议。11©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类中间件的种类包括:消息中间件数据访问中间件应用服务器对象中间件交易中间件安全中间件12©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类中间件的十大优越性:(1)缩短应用的开发周期(2)节约应用的开发成本(3)减少系统初期的建设成本(4)降低应用开发的失败率(5)保护已有的投资(6)简化应用集成(7)减少维护费用(8)提高应用的开发质量(9)保证技术进步的连续性(10)增强应用的生命力13©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类应用软件:在特定领域内开发,为特定目的服务的一类软件。商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件计算机网络软件14©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类按照软件的规模:类别参加人员数开发周期产品规模(LOC)微型11~4周0.5k小型11~6月1k~2k中型2~51~2年5k~50k大型5~202~3年50k~100k甚大型100~10004~5年1M(=1000k)极大型2000~50005~10年1M~10M15©2009BUPTTSEG北京邮电大学通信软件工程中心1.1.3软件的分类按软件工作方式不同:实时处理软件分时软件交互式软件批处理软件按照支撑应用开发的工具类型可以将其划分为:支持软件开发过程的工具支持软件维护过程的工具支持软件管理过程和支持过程的工具16©2009BUPTTSEG北京邮电大学通信软件工程中心1.2软件的发展和软件危机本节内容1.2.1软件发展阶段1.2.2软件危机1.2.3软件危机的解决途径17©2009BUPTTSEG北京邮电大学通信软件工程中心1.2.1软件发展阶段程序设计阶段:20世纪50至60年代程序系统阶段:20世纪60至70年代软件工程阶段:20世纪70至90年代现代软件工程阶段:20世纪90年代至今18©2009BUPTTSEG北京邮电大学通信软件工程中心1.2.1软件发展阶段阶段程序设计程序系统(现代)软件工程特点软件所指程序程序及说明书程序、文档和数据程序设计语言汇编及机器语言高级语言软件语言软件工作范围程序编写包括设计和测试软件生存期需求者程序设计本人少数用户市场用户开发软件的组织个人开发小组开发小组及大中型软件开发机构软件规模小型中小型大中小型决定质量的因素个人程序技术小组技术水平管理水平开发技术和手段子程序/程序库结构化程序设计数据库、开发工具、开发环境、工程化开发方法、标准和规范、网络及分布式开发、面向对象技术、软件复用维护责任者程序设计者开发小组专职维护人员硬件特征价格高/存储容量小工作可靠性差降价、速度、容量及工作可靠性明显提高向超高速、大容量、微型化及网络化发展软件特征完全不受重视软件技术的发展不能满足需求,出现软件危机开发技术有进步,但未获突破性进展,价高,未完全摆脱软件危机19©2009BUPTTSEG北京邮电大学通信软件工程中心1.2.2软件危机20世纪60年代后,随着计算机软件应用领域增多,软件规模不断扩大,软件系统功能多,逻辑复杂,不断扩充,从而导致许多系统开发出现了不良的后果:系统存在大量错误,可用性和可靠性差;系统无法增加新功能,难于维护;系统无法按照计划时间完成;最严重的彻底失败。20©2009BUPTTSEG北京邮电大学通信软件工程中心软件危机举例20世纪60年代IBM公司开发的(OS/360)系统就是一个很好的例子。该系统由4000多个模块组成,约100万条指令,人工为5000人年(一个人年为一个人工作一年的工作量),耗费达数亿美元。该系统投入运行后发现了2000多个错误,发布过19个版本,而以后每个版本的更新均有1000多个大大小小的错误存在。系统开发陷入了僵局。OS/360系统的负责人F.D.Brooms曾这样形象地描述了开发过程中的困难和混乱:“……像一头巨兽在泥潭中作垂死挣扎,挣扎得越猛,泥浆就沾得越多,最后没有一个野兽能逃脱淹没在泥潭中的命运……程序设计就像是这样一个泥潭……一批批程序员在泥潭中挣扎……没人料到问题竟会这样棘手……”。21©2009BUPTTSEG北京邮电大学通信软件工程中心1.2.2软件危机所谓软件危机(SoftwareCrisis)就是计算机软件在开发和维护过程中所遇到的一系列严重问题,具体表现在:软件开发成本难以估算,无法制定合理的开发计划;用户的需求无法确切表达;软件质量存在问题;软件的可维护性差;缺乏文档资料;软件成本难以控制;22©2009BUPTTSEG北京邮电大学通信软件工程中心1.2.3软件危机的解决途径产生软件危机的原因:软件系统本身的复杂性;软件开发的方法和技术不合理;程序设计方法学讨论程序的性质、程序设计的理论和方法软件工程方法运用工程化原则和方法组织软件开发工作1968年提出23©2009BUPTTSEG北京邮电大学通信软件工程中心1.3软件工程本节内容1.3.1软件工程定义1.3.2软件工程要素1.3.3软件工程的目标和原则1.3.4软件工程基本原理24©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.1软件工程定义1968年10月,FritzBauer首次提出了“软件工程”的概念:软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。Boehm为软件工程下的定义:运用现代科学技术知识来设计并构造计算机程序及为开发、运行和维护这些程序所必需的相关文件资料。25©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.1软件工程定义Fairley认为:软件工程学是为在成本限额以内按时完成开发和修改软件产品所需的系统生产和维护的技术和管理的学科。IEEE计算机学会将“软件工程”定义为:⑴应用系统化的、规范化的、定量的方法来开发、运行和维护软件,即:将工程应用到软件;⑵对⑴中各种方法的研究。从以上定义可以看出,软件工程的含义:(1)工程概念在软件领域里的一个特定应用(2)软件工程涉及软件产品的所有环节26©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.2软件工程要素软件工程包括三个要素:方法、工具和过程。方法:提供了“如何做”的技术;工具:提供了自动的或半自动的软件支撑环境;过程:将软件工程的方法和工具综合起来以达到合理、及时地进行计算机软件开发的目的;27©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.3软件工程的目标和原则软件工程的目标可概括为:生产具有正确性、可用性以及开销适宜的软件产品。正确性指软件产品达到预期功能的程度。可用性指软件基本结构、实现及文档为用户可用的程度。开销合宜是指软件开发、运行的整个开销满足用户要求的程度。软件工程的最终目的是摆脱手工生产软件的状况,逐步实现软件研制和维护的自动化。28©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.3软件工程的目标和原则软件工程研究内容:软件开发技术:根据不同的软件类型,按不同的观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料等作出规定,从而使软件的开发能够进入规范化和工程化的阶段,以克服早期的手工作坊生产中的随意性和非规范性做法。包括:软件开发方法学、开发过程模型、开发工具、软件工程环境软件工程管理软件按工程化生产时的重要环节,它要求按照预先制定的计划、进度和预算执行,以实现预期的经济效益和社会效益。包括:软件管理学、软件工程经济学、软件心理学等内容29©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.3软件工程的目标和原则使用软件工程开发软件系统的过程中,要坚持四项基本原则:选取适宜的开发模型;采用合适的设计方法;提供高质量的工程支持;重视开发过程的管理;30©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.4软件工程基本原理八条一般原理:(1)抽象(2)信息隐藏(3)模块化(4)局部化(5)确定性(6)一致性(7)完备性(8)可验证性31©2009BUPTTSEG北京邮电大学通信软件工程中心1.3.4软件工程基本原理七条基本原理(1)用分阶段的生命周期计划严格管理(2)坚持进行阶段评审(3)实行严格的产品控制(4)采用现代程序设计技术(5)结果应能清楚地审查(6)开发小组的人员应少而精(7)承认不断改进软件工