第1页:本章学习目标
- 本章学习目标:
- 了解软件危机的发生原因和典型表现
- 识记软件工程的概念和基本原理
- 识记软件生命周期和软件过程的概念
- 识记常用的生命周期模型第1章软件工程学概述
第2页:第1章软件工程学概述 本节目录
- 第1章软件工程学概述
- 1.1软件危机
- 1.2软件工程
- 1.3软件生命周期
第3页:第1章软件工程学概述 本节目录
- 第1章软件工程学概述
- 1.1软件危机
- 1.2软件工程
- 1.3软件生命周期
第4页:软件的定义
1.1.1软件的定义
- 软件的经典定义:软件=“完成特定功能的程序+数据结构+文档”
- 软件的特征:1、软件是开发的,而不是制造的;2、软件不磨损,但退化;3、自定义。
第5页:软件发展中的相关问题
1.1.1软件的定义
- 软件发展中的相关问题:
- 硬件的发展超过软件;
- 现有软件与用户的要求矛盾;
- 软件失败导致“灾难性后果”;
- 需要高质量、高可靠性的软件;
- 设计的问题使升级和维护十分困难。
第6页:软件危机的定义
1.1.1软件危机的定义
定义“在计算机软件的开发和维护过程中所遇到的一系列严重的问题。
”
第7页:软件危机的表现
1.1.2软件危机的表现
- (1)对软件开发成本和进度的估计常常很不准确。实际成本往往大大超过估计成本,或开发进度比计划推迟几个月或一年以上。这种现象极大地影响了软件开发组织的信誉,也会引起用户的强烈不满。
- (2)软件产品质量较差,可靠性低。软件开发过程中不能坚持严格的审查、复审和测试,使得软件可靠性差、质量问题多。
第8页:用户对开发出来的软件产品不满意
1.1.2软件危机的表现
- (3)用户对开发出来的软件产品不满意。开发人员与用户之间的交流不充分,仅对用户需求有了一个模糊的认识就匆忙开始写程序。这样的结果就是用户对于所谓已经完成的软件很不满意。
- (4)软件常常是不可维护的。在实际项目中,很多程序的错误往往难以修改,而且不能适应软硬件环境的变化,也无法添加用户需要的一些新功能。
第9页:软件产品缺少应有的文档资料
1.1.2软件危机的表现
- (5)软件产品缺少应有的文档资料。软件=程序+数据+文档。开发人员对文档认识不足,不能保证在开发过程中文档的完整性和准确性。缺少文档资料会造成软件开发、管理、审查、用户交流、软件维护等方面的诸多问题。
- (6)软件产品的供不应求。软件开发的生产率远远低于计算机硬件发展速度和用户的需求,造成了软件产品的供不应求。
第10页:产生软件危机的原因(客观原因)
- 1.1.3产生软件危机的原因客观原因:
- 软件与硬件产品不同,软件是“开发的”而非“制造的”。其开发过程难以管理和控制,产品质量也不好把握。
- 软件没有“磨损”,但是它会不断“退化”。软件系统无法适应不断变化的环境和功能需求。
- 软件都规模庞大,而程序的复杂性是随其规模的扩大呈指数增加。
第11页:产生软件危机的原因
- 主观原因:
- 对用户要求没有完整和准确的认识就匆忙编写程序。
- 对软件的开发过程的认识不准确。生命周期的每个阶段都有特定的工作和特点,都是不可逾越的。只有上一阶段工作完成,才能开始下一阶段的工作。
- 对软件质量的重视不够是造成软件开发成本激增的主要原因。注意软件开发过程中错误的“放大效应”。
- 轻视软件维护将是一个重大的错误。软件开发时期各阶段的关键目标都是提高软件的可维护性。1.1.3产生软件危机的原因
第12页:第1章软件工程学概述 本节目录
- 第1章软件工程学概述
- 1.1软件危机
- 1.2软件工程
- 1.3软件生命周期
- 1.4软件过程
第13页:1.2 软件工程的概念
1.2软件工程为了更有效地开发与维护软件,软件工作者在20世纪60年代后期开始认真研究消除软件危机的途径,从而逐渐形成了一门新兴的工程学科——计算机软件工程学(简称为软件工程)。
第14页:软件工程的概念
1.2.1软件工程的概念
定义指导软件开发与维护的工程科学采用工程的概念、原理、技术和方法来开发和维护软件,综合运用正确的管理技术和最好的技术方法,以经济地开发出高质量的软件并有效维护它。
第15页:IEEE的定义
1.2.1软件工程的概念
- IEEE的定义
- ①软件工程是把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;
- ②对这些途径加以研究。
第16页:1.2 软件工程的概念
1.2.1软件工程的概念诸多软件工程的定义所揭示的软件工程的本质认识是一致的:软件工程一般更关注于大型软件系统的开发;其中心任务是控制整个软件系统的复杂性,提高软件开发的效率,加强人员和技术的管理,更好地满足用户的需要。
第17页:软件工程的基本原理
1.2.2软件工程的基本原理
- (1)用分阶段的生命周期计划严格管理应该将软件开发和维护的漫长生命周期划分成若干个阶段,并针对每个阶段制定切实可行的计划,然后严格按照计划对软件的开发和维护工作进行管理。
- (2)坚持进行阶段评审错误发现的越早,改正错误所付出的代价就越小。因此,开发人员应该坚持在每个阶段都进行严格的评审,以便更早地发现和改正错误。
第18页:实行严格的产品控制在软件开发的过程中
1.2.2软件工程的基本原理
- (3)实行严格的产品控制在软件开发的过程中不应随意修改需求,当改变需求时,必须实行严格的产品控制以保持软件各个配置成分的一致性。
- (4)采用现代程序设计技术采用先进的技术不仅可以提高软件开发和维护的效率,而且还能有效地提高软件产品的质量。
第19页:结果可以清楚地审查应规定每个开发阶段
1.2.2软件工程的基本原理
- (5)结果可以清楚地审查应规定每个开发阶段的产品标准和文档要求,使得到的结果可以清楚地审查。
- (6)开发小组成员少而精软件开发小组人员要求素质高,而人数不宜过多。随着人数n的增加,通信路径也急剧增加。
第20页:承认不断改进软件工程实践的必要性软件
1.2.2软件工程的基本原理
(7)承认不断改进软件工程实践的必要性软件开发和维护的过程也需要随之改进。
要主动采用最新的软件技术,而且还要不断总结经验和教训、收集历史数据帮助开发人员改进软件工程实践。
第21页:目前使用最为广泛的软件工程方法学是传
- 1.2.3软件工程方法学软件生命周期全过程中使用的一整套技术方法的集合称为方法学。
- 软件工程方法学主要包含3个要素:方法、工具和过程。
- 目前使用最为广泛的软件工程方法学是传统方法学和面向对象方法学。
第22页:软件工程方法学1.传统方法学
- 1.2.3软件工程方法学1.传统方法学-也
- 称为生命周期方法学或结构化范型。-它采用结构化技术(包括结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务。-这种方法学将软件生命周期划分为若干个阶段,然后顺序完成各个阶段的任务。每个阶段依赖上一个阶段产生的结果,并将上一阶段工作进一步具体化。
第23页:1.2.3 软件工程方法学
1.2.3软件工程方法学2.面向对象方法学-以数据为主线,将数据和其上的操作紧密结合起来。
面向对象方法学的四要素:类+对象+继承+消息传递。
-面向对象的方法学是尽量模拟人类习惯的思维方式,使软件开发过程更接近人类认知模式,做到问题空间与解空间在结构上一致。
-运用面向对象方法学开发出来的软件产品一般是由很多较小的独立对象组成,从而降低了软件产品的复杂性,增强了可理解性,使得开发和维护更为简单有效。
第24页:第1章软件工程学概述 本节目录
- 第1章软件工程学概述
- 1.1软件危机
- 1.2软件工程
- 1.3软件生命周期
第25页:软件生命周期的概念
1.3.1软件生命周期的概念
定义一个软件从定义、开发、使用和维护,直至最终被废弃,要经历的漫长的时期称为软件生命周期。
第26页:软件生命周期的概念
1.3.1软件生命周期的概念
- 构成
- 3个时期:软件定义、软件开发和运行维护各时期任务:软件定义时期:确定软件开发的总目标和工程的可行性;导出实现策略和系统必须完成的功能;进行成本效益的估算;制定开发计划等。软件开发时期:具体设计和实现前一个时期定义的软件。维护时期:使软件持久地满足用户的需要。
第27页:1.3.1 软件生命周期的概念与构成
1.3.1软件生命周期的概念
- 构成
- 3个时期:软件定义、软件开发和运行维护
- 8个阶段:
- 问题定义
- 可行性研究
- 需求分析
- 总体设计
- 详细设计
- 编码和单元测试
- 综合测试
- 软件维护
第28页:问题定义“需要解决的问题是什么?”
- 阶段1:问题定义“需要解决的问题是什么?”
- 确定问题的性质
- 软件目标和规模
- 形成书面报告。1.3.2各阶段的基本任务
第29页:可行性研究“确定软件系统是否值得去解”
- 阶段2:可行性研究“确定软件系统是否值得去解”
- 高层次的系统分析和设计
- 估算系统的成本和效益
- 《可行性研究报告》1.3.2各阶段的基本任务
第30页:需求分析“解决这些问题需要系统做什么?”
- 阶段3:需求分析“解决这些问题需要系统做什么?”
- 与用户的交流
- 生成系统的逻辑模型
- 《软件需求规格说明书》1.3.2各阶段的基本任务
第31页:1.3.2 生命周期各阶段的基本任务
- 阶段4:总体设计(概要设计)“应该怎样实现目标系统?”
- 设计出实现目标系统的方案
- 设计软件结构,确定模块及之间关系
- 概要设计说明书1.3.2各阶段的基本任务
第32页:1.3.2 生命周期各阶段的基本任务
- 阶段5:详细设计(模块设计)“如何具体地实现这个系统?”
- 详细的设计每个模块的算法和数据结构1.3.2各阶段的基本任务
第33页:编码和单元测试“写代码,测试每个模块!”
- 阶段6:编码和单元测试“写代码,测试每个模块!”
- 选取程序设计语言
- 写出容易理解和维护的程序模块
- 对每一个模块进行严格的测试1.3.2各阶段的基本任务
第34页:综合测试“通过各类测试和调试来完善软件”
- 阶段7:综合测试“通过各类测试和调试来完善软件”
- 集成测试+验收测试(用户参加)
- 保存测试计划、测试方案和测试结果1.3.2各阶段的基本任务
第35页:软件维护“通过各种必须的维护活动使系统持
- 阶段8:软件维护“通过各种必须的维护活动使系统持久地满足用户的需要!”
- 改正性维护
- 适应性维护
- 完善性维护
- 预防性维护1.3.2各阶段的基本任务
第36页:软件生命周期的模型
1.3.3软件生命周期的模型
定义在软件开发过程中,人们通常使用生命周期模型来简要地描述软件过程。
生命周期模型规定了生命周期各个阶段和它们执行的顺序,因此也被称为过程模型。
第37页:瀑布模型—线性模型之一在20世纪80年代
1.瀑布模型—线性模型之一在20世纪80年代之前,瀑布模型一直是惟一被广泛采用的生命周期模型。
传统软件工程方法学的软件过程,基本上可以用瀑布模型来描述。
第38页:瀑布模型1.瀑布模型—线性模型之一
瀑布模型1.瀑布模型—线性模型之一
第39页:瀑布模型的(特点)
- 瀑布模型的特点:
- (1)各阶段之间有依赖性和严格的顺序性。
- (2)推迟实现。——典型特点
- (3)严格的阶段质保。
- (4)文档驱动。瀑布模型的问题:
- (1)实际的项目很少顺序严格
- (2)用户往往难以给出具体、正确、完整的要求
- (3)开发人员“阻塞状态”严重1.瀑布模型—线性模型之一
第40页:原型模型原型模型是一个快速开发的过程
2.原型模型原型模型是一个快速开发的过程,首先和用户沟通进行主要功能的需求分析和快速设计,然后建立一个原型,再请用户进行评价和反馈。
开发人员根据用户的反馈进一步细化需求,改进原型系统的设计,如此反复直至用户满意。
第41页:快速需求分析(用户沟通)构建/修改模型
快速需求分析(用户沟通)构建/修改模型(快速设计)用户使用评价(运行测试)原型模型2.原型模型
第42页:快速原型模型的特点:(1)出品速度快
- 快速原型模型的特点:
- (1)出品速度快。
- (2)逐步求精。
- (3)开发阶段迭代。快速原型模型的问题:
- (1)实现过程中不应有的折衷方案。
- (2)开发者急于完成原型而忽略了整体设计和可维护性;
- (3)用户的参与过多也造成了软件开发管理的混乱。2.原型模型
第43页:增量模型也称为渐增模型
- 增量模型也
- 称为渐增模型。使用增量模型开发软件时,把软件产品作为一系列的增量构件来设计、编码、集成和测试。分析设计编码测试交付增量1分析设计编码测试交付增量2… …项目时间分析设计编码测试交付增量n增量模型3.增量模型软件系统
第44页:增量模型增量模型
3.增量模型增量模型
第45页:增量模型的(特点)
- 增量模型的特点:
- (1)结合了线性模型和原型模型的特点;
- (2)每个增量可以结合原型法;
- (3)系统的问世提前→“增量1”增量模型的问题:开放的软件体系结构中心思想:“渐进开发,逐步完善”3.增量模型
第46页:-使用增量模型开发时
-使用增量模型开发时,第一个增量往往是系统中的核心构件,同时,要求产品分解成增量构件的规模应当适中。
-如何不破坏已经开发的构件将新的构件集成到一个产品中是增量模型的一个难点。
-增量模型的提出很好地解决了线性模型中的人员阻塞问题,尤其是在项目开始初期开发人员不足的时候,能有效地规避技术风险。
3.增量模型
第47页:喷泉模型是典型的面向对象的软件过程模型之
喷泉模型是典型的面向对象的软件过程模型之一,“喷泉”较好地体现了面向对象软件开发过程迭代和无缝的特性。
4.喷泉模型
第48页:喷泉模型
4.喷泉模型
第49页:(1)假设要求你开发一个软件
(1)假设要求你开发一个软件,该软件的功能是把读入的浮点数开平方,所得到的结果应该精确到小数点后4位。
一旦实现并测试完之后,该产品将被抛弃。
你打算选用哪种软件生命周期模型?
请说明你做出选择的理由。
问题讨论——情景分析
第50页:对这个软件的需求很明确
解:对这个软件的需求很明确,实现开平方功能的算法也很成熟,因此,既无须通过原型来分析需求也无须用原型来验证设计方案。
此外,一旦实现并测试完之后,该产品将被抛弃,因此也无须使用有助于提高软件可维护性的增量模型或螺旋模型来开发该软件。
问题讨论——情景分析
第51页:(2)假设你被任命为一家软件公司的项目负
(2)假设你被任命为一家软件公司的项目负责人,你的工作是管理该公司已被广泛应用的字处理软件的新版本开发。
由于市场竞争激烈,公司规定了严格的完成期限并且已对外公布。
你打算采用哪种软件生命周期模型?
为什么?
问题讨论——情景分析
第52页:对这个项目的一个重要要求是
- 解:对这个项目的一个重要要求是,严格按照已对外公布了的日期完成产品开发工作,因此,选择生命周期模型时、应该着重考虑哪种模型有助于加快产品开发的进度。使用增量模型开发软件时可以并行完成开发工作,因此能够加快开发进度。
- 这个项目是开发该公司已被广泛应用的字处理软件的新版本,从上述事实至少可以得出3点结论:第一,旧版本相当于一个原型,通过收集用户对旧版本的反映,较容易确定对新版本的需求,没必要再专门建立一个原型系统来分析用户的需求;第二,该公司的软件工程师对字处理软件很熟悉,有开发字处理软件的丰富经验,具有采用增量模型开发新版字处理软件所需要的技术水平;第三,该软件受到广大用户的喜爱,今后很可能还要开发更新的版本,因此,应该把该软件的体系结构设计成开放式的,以利于今后的改进和扩充。问题讨论——情景分析
第53页:本章结束页
The End