? 软件工程 是在七十年代为了对付应用
软件日益增长的复杂程度、漫长的开发
周期以及用户对软件产品经常不满意的
状况而发展起来的。
第 6章 软件工程
? 6.1软件工程与软件过程
? 6.2传统方法学
? 6.3面向对象方法学
? 6.4软件项目管理
6.1软件工程与软件过程
? 软件危机
? 软件工程
? 软件过程
软件危机 (1)
? 软件危机指的是在计算机软件的开发和
维护过程中所遇到的一系列严重问题
? 1968年北大西洋公约组织的计算机科
学家在联邦德国召开的国际学术会议上
第一次提出了“软件危机” (software
crisis)这个名词
软件危机 (2)
? 软件危机包含两方面问题,
? 如何开发软件,以满足不断增长,日趋复
杂的需求
? 如何维护数量不断膨胀的软件产品
软件危机 (3)
? 软件危机的原因,
? 一方面是与软件本身的特点有关
? 一方面是由软件开发和维护的方法不正确
有关
软件危机 (4)
? 为了消除软件危机,既要有技术措施
(方法和工具),又要有必要的组织管
理措施。软件工程正是从管理和技术两
方面研究如何更好地开发和维护计算机
软件的一门新兴学科
软件工程 (1)
? 软件工程是一类求解软件的工程,它应
用计算机科学,数学以及管理科学等原
理,借鉴传统工程的原则、方法,创建
软件以达到提高质量,降低成本的目的
? 软件工程是一门指导计算机软件开发和
维护的工程学科
软件工程 (2)
? 软件工程是一门交叉学科。软件工程包含技
术和管理两个方面的内容,是管理与技术的
紧密结合
? 软件开发技术包括软件开发方法学、软件开
发过程、软件工具和软件工程环境,软件工
程管理包括软件管理学、软件经济学和软件
心理学
? 目前使用最广泛的软件工程方法学,分别是
传统方法学和面向对象方法学
软件过程 (1)
? 软件工程过程是为了获得高质量软件所需要
完成的一系列任务的框架,它规定了完成各
项任务的工作步骤
? 在概念上可以把软件生命周期划分成问题定
义、可行性研究、需求分析、概要设计、详
细设计、编码和单元测试、综合测试以及维
护八个阶段
软件过程( 2)
? 软件生命周期
? 软件定义
? 软件开发
? 运行维护
6.2传统方法学
? 传统方法学也称生命周期方法学或结构化范
型。它采用结构化技术来完成软件开发的各
项任务,并使用适当的软件工具或软件工程
环境来支持结构化技术的运用
? 结构化分析
? 结构化设计
? 结构化实现
结构化分析 (1)
? 传统的软件工程方法学使用结构化分析技术,
完成分析用户需求的工作
? 需求分析是发现、求精、建模、规格说明和
复审的过程
? 需求分析要尽可能准确地了解用户当前的情
况和需要解决的问题。通过与用户交流,对
用户的基本需求反复细化,以得出对目标系
统的完整、准确和具体的需求
结构化分析 (2)
? 为了详尽地了解并正确地理解用户的需求,
必须使用适当的技术与用户通信和沟通
? 访谈
? 简易的应用规格说明技术
? 快速原型
结构化分析 (3)
? 为了更好地理解问题,人们常常采用建立模
型的方法,结构化分析实质上就是一种建模
活动,通常建立数据模型、功能模型和行为
模型
结构化分析 (4)
? 建立模型使用的工具通常有,
? 实体 ——关系图(建立数据模型)
? 数据流图(建立功能模型)
? 状态转换图(建立行为模型)
? 数据字典则是描述在数据模型、功能
模型和行为模型中出现的数据对象和
控制信息的特性,给出这些对象的精
确定义。
结构化设计 (1)
? 软件设计在软件工程过程中处于技术核
心地位,是软件开发过程中决定软件产
品质量的关键阶段
? 软件设计必须依据对软件产品的需求来
进行,目标是设计出所要开发的软件的
模型
结构化设计 (2)
? 结构化设计把结构化分析的结果作为基
本输入信息了获得高质量的软件设计结

? 结构化设计应该遵循模块化、抽象、逐
步求精、信息隐藏和模块独立等基本设
计原理,特别是其中的模块独立原理,
对软件体系结构设计和接口设计具有非
常重要、十分具体的指导作用
结构化实现 (1)
? 实现包括编码和测试两个阶段。
? 传统的软件工程方法学规定编码是在对
软件进行了概要设计和详细设计之后进
行的,编码是把软件设计的经过翻译成
用某种程序设计语言书写的程序,因此,
程序的质量基本上由设计的质量决定。
? 编码使用的语言,特别是写程序的风格,
也对程序质量有相当大的影响。
结构化实现 (2)
? 软件测试在软件生命周期中横跨两个阶段。
? 在编写出每个模块之后就对它做必要的测试
(称为单元测试 ),模块的编写者和测试者是
同一个人,编码和单元测试属于软件生命周
期的同一个阶段。在这个阶段结束之后,对
软件系统还要进行各种综合测试,这是软件
生命周期中的另一个独立的阶段,通常由专
门的测试人员承担这项工作。
结构化实现 (3)
? 测试阶段的根本任务是发现并改正软件中的
错误。
? 软件测试有两类方法:白盒测试和黑盒测试。
? 在测试过程的早期阶段主要使用白盒测试技
术,在测试的后期主要使用黑盒测试技术。
结构化实现 (4)
? 目前软件测试仍然是保证软件质量的关键步
骤,它是对软件规格说明、设计和编码的最
后复审。
? 在测试过程发现的软件错误必须及时改正,
这就是调试的任务。
6.3面向对象方法学
? 当软件规模较大或对软件的需求模糊易变时,
采用生命周期方法学开发往往不能成功。其
原因是结构化范型技术要么面向行为(对数
据的操作),要么面向数据。
? 面向对象方法把数据和行为看成同等重要,
是一种以数据为主线,把数据和对数据的操
作紧密地结合在一起的方法。
面向对象方法学的出发点和基本原则,
是尽可能模拟人类习惯的思维方式,使开发
软件的方法和过程尽可能接近人类认识世界
解决问题的方法与过程,从而使描述问题的
问题空间(问题域)与实现解法的解空间
(求解域)在结构上尽可能一致。
? 面向对象分析
? 面向对象设计
? 面向对象实现
? 标准建模语言 UML
面向对象分析
? 面向对象分析的关键工作是分析、确定问题
域中的对象及对象间的关系,并建立起问题
域的对象模型。
? 大型、复杂系统的对象模型由五个层次组成:
主题层、类 ―& ―对象层、结构层、属性层
和服务层。它们对应着在建立对象模型的过
程中所应完成的五项工作。
面向对象设计 (1)
? 面向对象设计,就是用面向对象观点建立求
解空间模型的过程。
? 通过面向对象分析得出的问题域模型,为建
立求解空间模型奠定了基础。
? 分析与设计本质上是一个多次反复迭代的过
程,而面向对象分析与面向对象设计的界限
尤其模糊。
面向对象设计 (2)
优秀设计应该遵循一些基本准则,
? 模块化
? 抽象
? 信息隐藏
? 弱耦合
? 强内聚
? 可重用
面向对象实现 (1)
? 面向对象实现主要包括两项工作,
? 第一是把面向对象设计结果翻译成用某种程序设
计语言书写的面向对象程序;
? 第二是测试并调试面向对象的程序。
面向对象实现 (2)
? 一旦完成了面向对象程序设计,就开始对每
个类进行单元测试。
? 测试类时使用的方法主要有随机测试、划分
测试和基于故障的测试。
标准建模语言 UML(1)
面向对象的分析与设计 (OOA& D)方法
的发展在上个世纪 80年代末至 90年代中出现
了一个高潮,UML是这个高潮的产物。它不
仅统一了 Booch,Rumbaugh和 Jacobson的表
示方法,而且对其作了进一步的发展,并最
终统一为大众所接受的标准建模语言。
标准建模语言 UML(2)
? 公认的面向对象建模语言出现于 70年代中期。
? 90年代中,一批新方法出现了,其中最引人
注目的是 Booch 1993,OOSE和 OMT-2等。
? Coad/Yourdon方法,著名的 OOA/OOD,它
是最早的面向对象的分析和设计方法之一。
标准建模语言 UML(3)
? Grady Booch和 Jim Rumbaugh将 Booch 93和
OMT-2 统一起来,并于 1995年 10月发布了第
一个公开版本,称之为统一方法 UM 0.8
( Unitied Method)。
? 经过 Booch,Rumbaugh和 Jacobson三人的共
同努力,于 1996年 6月和 10月分别发布了两
个新的版本,即 UML 0.9和 UML 0.91,并将
UM重新命名为 UML( Unified Modeling
Language)。
标准建模语言 UML(4)
UML是一种定义良好、易于表达、功能
强大且普遍适用的建模语言。它溶入了软件
工程领域的新思想、新方法和新技术。它的
作用域不限于支持面向对象的分析与设计,
还支持从需求分析开始的软件开发的全过程。
标准建模语言 UML(5)
? 作为一种建模语言,UML的定义包括,
? UML语义
? UML表示法
标准建模语言 UML(6)
1,UML语义
? 描述基于 UML的精确元模型定义。
? 元模型为 UML的所有元素在语法和语义上提
供了简单、一致、通用的定义性说明,使开
发者能在语义上取得一致,消除了因人而异
的最佳表达方法所造成的影响。
? UML还支持对元模型的扩展定义。
标准建模语言 UML(7)
2,UML表示法
? 定义 UML符号的表示法,为开发者或开发工
具使用这些图形符号和文本语法为系统建模
提供了标准。
? 这些图形符号和文字所表达的是应用级的模
型,在语义上它是 UML元模型的实例。
标准建模语言 UML(8)
标准建模语言 UML的重要内容可由下列五类图
来定义,
? 用例图
? 静态图
? 行为图
? 交互图
? 实现图
标准建模语言 UML(9)
? 标准建模语言 UML的主要特点,
? UML统一了 Booch,OMT和 OOSE等方法中的基本
概念
? UML还吸取了面向对象技术领域中其他流派的长
处,其中也包括非 OO方法的影响
? UML在演变过程中还提出了一些新的概念
标准建模语言 UML(10)
标准建模语言 UML的应用领域,
? 建立软件系统的模型
? 描述非软件领域的系统
UML是一个通用的标准建模语言,可以
对任何具有静态结构和动态行为的系统进行
建模。
6.4软件项目管理
? 计划
? 组织
? 控制
? 国际标准
计划 (1)
? 软件工程包括技术和管理两方面的内容,是
管理与技术紧密结合的产物。
? 只有在科学而严格的管理之下,先进的技术
方法和优秀的软件工具才能真正发挥出它们
的威力。
? 软件项目管理是大型软件工程项目成功的关
键。
计划 (2)
? 软件项目管理从项目计划开始,而第一项计
划活动就是估算。
? 为了估算项目工作量和完成期限,首先需要
预测软件规模。
? 度量软件规模的常用技术主要有代码行技术
和功能点技术。
计划 (3)
? 根据项目的规模可以估算出完成项目所需
的工作量,常用的估算模型有
? 静态单变量模型
? 动态多变量模型
? COCOMO模型。
计划 (4)
? 项目管理者的目标是定义所有的任务,识别
出关键任务,跟踪关键任务的进展状况,以
保证能够及时发现拖延进度的情况。
? 管理者必须制定一个足够详细的进度表,以
便监督项目进度并控制整个项目。
计划 (5)
? 常用的制定进度计划的工具主要有
? Gantt 图
? 工程网络
组织
? 对任何软件项目而言,最关键的因素都是承
担项目的人员。必须合理地组织项目组,使
项目组有较高生产率。
?,最佳的”小组结构取决于管理风格、组里
的人员数目和他们的技术水平,以及所承担
的项目的难易程度。
? 目前国外比较流行的组织方式有:民主制程
序员组、主程序员组、现代程序员组。
控制 (1)
? 控制就是掌握被控制的对象,不让它任意活
动或超出规定范围活动,尽量使一切活动都
按照预定的计划进行,向预期的目标前进。
控制 (2)
? 通过软件计划,明确了软件开发的目标,规
划了具体的开发方案,而组织职能的实施又
为计划的实现提供了组织机构和资源配置方
面的保证。
? 但是,计划规定的目标再好,人员组织的再
合理,如果没有有效的控制作为保证,软件
开发目标也是难以实现的。因此,控制是十
分重要的管理活动。
国际标准
? IEEE1058.1软件项目管理计划标准
? ISO9000质量标准
? ISO/IEC 12207软件生命周期过程标准
? ISO/IEC TR15504 软件过程评估标准
? 能力成熟度模型( CMM)