第1章软件工程学概述※1.2软件危机1.3软件工程※1.4软件生命周期1.5软件过程1.1软件第1章软件工程学概述1.1软件软件:程序以及开发、使用和维护程序所需要的所有文档。软件:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据。(1983IEEE美国电气和电子工程师协会)(软件=程序+文档+数据)软件与程序的主要区别是:规模庞大、复杂度高第1章软件工程学概述1.2软件危机1.2.1软件危机介绍1.软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。(1)如何开发软件,以满足对软件日益增长的需求;(2)如何维护数量不断膨胀的已有软件。第1章软件工程学概述2.软件危机的典型表现(1)对软件开发成本和进度的估计常常很不准确;(2)用户对“已完成的”软件系统不满意的现象经常发生;(3)软件产品的质量往往靠不住;(4)软件常常是不可维护的;(5)软件通常没有合适的文档资料(6)软件成本在计算机系统总成本中所占比例逐年上升;(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。第1章软件工程学概述1.2.2软件危机产生的原因1.软件本身的特点(1)软件是逻辑部件而不是物理部件,缺乏“可见性”,管理和控制软件开发过程相当困难;(2)软件维护较难;(3)软件规模庞大。2.软件开发与维护的方法不正确(1)忽视需求分析(2)轻视软件维护第1章软件工程学概述1.2.3消除软件危机的途径1.应该对计算机软件有一个正确的认识软件=程序+文档+数据2.应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目3.应该开发和使用更好的软件工具第1章软件工程学概述1.3软件工程提出:1968年NATO联邦德国1.3.1软件工程介绍1.软件工程(1)软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。1968年第一届NATO会议提出(2)软件工程是:a把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;b研究a中提到的途径。1993年IEEE提出第1章软件工程学概述(3)软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。2.软件工程的特性(1)软件工程关注于大型程序的构造(2)软件工程的中心课题是控制复杂性(3)软件经常变化(4)开发软件的效率非常重要(5)和谐地合作是开发软件的关键(6)软件必须有效地支持它的用户(7)在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人创造产品。第1章软件工程学概述1.3.2软件工程的基本原理1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性第1章软件工程学概述1.3.3软件工程方法学软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。管理:是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。方法学:在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。软件工程方法学的要素:方法工具过程方法:是完成软件开发的各项任务的技术方法,回答“怎样做”的问题。第1章软件工程学概述工具:是为运用方法而提供的自动的或半自动的软件工程支撑环境。如果把各个阶段使用的软件工具有机地集合称一个整体,支持软件开发的全过程,则称为软件工程支撑环境。过程:是为了获得高质量的软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。第1章软件工程学概述最广泛的软件工程方法学:1.传统方法学(生命周期方法学或结构化范型)采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。2.面向对象方法学面向对象方法学把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。第1章软件工程学概述1.4软件生命周期软件生命周期软件定义软件开发运行维护问题定义可行性研究需求分析总体设计详细设计编码和单元测试综合测试确定软件开发工程必须完成的总目标;确定工程的可行性;导出实现工程目标应该采用的策略及系统必须完成的功能;估计完成该项工程需要的资源和成本,并且制定工程进度表。具体设计和实现在前一个时期定义的软件。使软件持久地满足用户的需要第1章软件工程学概述软件生命周期各个阶段的基本任务1.问题定义要解决的问题是什么?2.可行性研究对于上一个阶段所确定的问题有行的通的解决办法吗?3.需求分析为了解决这个问题,目标系统必须做什么?4.总体设计概括地说,应该怎样实现目标系统?5.详细设计应该怎样具体地实现这个系统呢?第1章软件工程学概述6.编码和单元测试写出正确的容易理解、容易维护的程序模块。7.综合测试通过各种类型的测试使软件达到预定的要求。8.软件维护通过各种必要的维护活动使系统持久地满足用户的需要。第1章软件工程学概述1.5软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。1.5.1瀑布模型需求分析验证规格说明验证设计验证编码测试综合测试维护第1章软件工程学概述1.瀑布模型的特点(1)阶段间具有顺序性和依赖性a.必须等前一阶段的工作完成之后,才能开始后一阶段的工作;b.前一阶段的输出文档就是后一阶段的输入文档,因此,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果。(2)推迟实现的观点(3)质量保证的观点a.每一阶段都必须完成规定的文档,没有交出合格的文档就是没有完成该阶段的任务;b.每一阶段结束前都要对所完成的文档进行评审,以便尽早发现问题,改正错误。第1章软件工程学概述实际的瀑布模型需求分析验证规格说明验证设计验证编码测试综合测试维护变化的需求验证第1章软件工程学概述2.瀑布模型的优点(1)可强迫开发人员采用规范的方法;(2)严格地规定了每个阶段必须提交的文档;(3)要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。3.瀑布模型的缺点瀑布模型由文档驱动是它的一个主要缺点,很可能导致最终开发出的软件产品不能真正满足用户的需求。第1章软件工程学概述1.5.2快速原型模型是快速建立起来的可以在计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证第1章软件工程学概述快速原型模型的优点:(1)有助于保证用户的真实需求得到满足;(2)不带反馈环,软件产品开发基本上是线性顺序进行的。第1章软件工程学概述1.5.3增量模型需求分析验证规格说明验证概要设计验证维护针对每个构件,完成详细设计、编码和集成,经测试后交付给用户第1章软件工程学概述增量模型的优点:(1)能在较短时间内向用户提交可完成部分工作的产品;(2)逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。第1章软件工程学概述1.5.4螺旋模型快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证风险分析风险分析风险分析风险分析风险分析风险分析第1章软件工程学概述螺旋模型的优点:(1)对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;(2)减少了过多测试或测试不足所带来的风险;(3)维护只是模型的另一个周期,在维护和开发之间没有本质区别。第1章软件工程学概述1.5.5喷泉模型第1章软件工程学概述1.5.6Rational统一过程(RUP)1.最佳实践2.RUP软件开发生命周期(1)迭代式开发(2)管理需求(3)使用基于构件的体系结构(4)可视化建模(5)验证软件质量(6)控制软件变更第1章软件工程学概述RUP软件开发生命周期第1章软件工程学概述1.5.7敏捷过程与极限编程1.敏捷过程2.极限编程XP项目的整体开发过程第1章软件工程学概述XP迭代开发过程第1章软件工程学概述1.5.8微软过程1.微软过程准则2.微软软件生命周期微软软件生命周期阶段划分和主要里程碑第1章软件工程学概述3.微软过程模型