软件工程导论(张海藩)——第一章

软件工程学概述

复习要点

软件工程导论(张海藩)——第一章_第1张图片

一、软件危机

软件危机的介绍:

软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

典型表现:

1、开发成本和进度的估计常常很不准确
2、用户对“已完成的”软件系统不满意
3、软件质量不可靠
4、软件常常是不可维护的
5、软件没有适当的文档资料
6、软件产品“供不应求”

产生软件危机的原因

1、软件的规模加大、复杂性提高、性能增强
2、软件是逻辑产品,尚未完全认识其本质和特点
3、缺乏有效的、系统的开发、维护大型软件项目的技术手段和管理方法
4、用户和软件开发人员的理解鸿沟
5、错误的认识和作法:忽视软件需求分析的重要性,认为软件开发就是写程序并设法使之运行,轻视软件维护等

二、软件工程

软件工程是:

概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它。
ieee定义:
(1)把系统的、规范的、可度量的途径用于软件的开发、运行和维护过程,也就是把工程应用于软件。(2)研究(1)一中所提到的方法。

软件工程具有下述的本质特性

(1)软件工程关注于大型程序的构造
(2)软件工程的中心课题是控制复杂性
(3)软件经常变换
(4)开发软件的效率非常重要
(5)和谐地合作是开发软件的关键
(6)软件必须有效地支持它的用户
(7)在软件工程领域中通常由具有一种文化背景的人替另一种文化背景的人创造产品

软件工程的基本原理

(1)用分阶段的生命周期计划严格管理
(2)坚持进行阶段评审
(3)实行严格的产品控制
(4)采用现代程序设计技术
(5)结果应能清楚的审查
(6)开发小组的人员应该少而精
(7)承认不断改进软件工程实践的必要性

软件工程方法学

1、传统方法学
传统方法学也称为生命周期方法学或结构化范型
它采用结构化技术(结构化分析、结构化设计和结构化实现)
结构化范型要么面向行为(即对数据的操作),要么面向数据
2、面向对象方法学
面向对象方法把数据和行为看成同等重要,它是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法
面向对象方法学具有下述4个要点:
面向对象方法=对象+类+继承+用消息通信
软件工程导论(张海藩)——第一章_第2张图片

三、软件生命周期

软件或系统一系列生命活动的全周期。
软件生命周期由软件定义(问题定义、可行性研究、需求分析)软件开发(总体设计、详细设计、编码和单元测试、综合测试)和运行维护3个时期组成,每个时期又进一步划分为若干个阶段。
1.问题定义
2.可行性研究
3.需求分析

4.总体设计
5.详细设计
6.编码和单元测试
7.综合测试

8.软件维护

四、软件过程

软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。
通常使用生命周期模型简洁地描述软件过程
生命周期模型规定了把生命周期划分成哪些阶段及各个阶段的执行顺序
也称为过程模型

瀑布模型

瀑布模型(经典生命周期)提出了软件开发的系统化的、顺序的方法。其流程从用户需求规格说明开始,通过策划、建模、构建和部署的过程,最终提供一 个完整的软件并提供持续的技术支持。
软件工程导论(张海藩)——第一章_第3张图片
(注:实线箭头表示开发过程,虚线箭头表示维护过程,当后面阶段发现前面阶段的错误时,沿左侧反馈环返回前面的阶段)
特点:

  1. 强调开发的阶段性,各阶段具有顺序性和依赖性

  2. 强调早期调研和需求分析,推迟编码实现的观点

  3. 质量保证的观点
    (1)每个阶段都必须完成规定的文档
    (2)每个阶段结束前都要对所完成的文档进行评审

优点:

  1. 可以强迫开发人员采用规范的方法(例如:结构化技术)
  2. 严格规定了每个阶段需要提交的文档
  3. 每个阶段交出的所有产品都必须经过质量保证小组的仔细验证

缺点:

完全依赖于书面的规格说明,可能导致最终开发出的软件产品不能真正满足用户的需要。

适用范围:
需求确定,工作能够采用线性的方式完成的软件。

快速原型模型

原型开发从需求收集开始,开发者和客户在一起定义软件的总体目标,标识已知的需求并且规划出需要进一步定义的区域。

然后是“快速设计”,它集中于软件中那些对客户可见的部分的表示,这将导致原型的创建,并由客户评估并进一步精化待 开发软件的需求。

逐步调整原型使其满足客户的需求,这个过程是迭代的。其流程从听取客户意见开始、随后是建造/修改原型、客户测试运行原型、然后回头往复循环直到客户对原型满意为止。

由于这种模型可以让客户快速的感受到实际的系统(虽然这个系统不带有任何质量的保证),所以客户和开发者都比较喜欢这种过程模型(对于那些仅仅用来演示软件功能的公司而言或从来不考虑软件质
量和不害怕长期维护的公司而言)。
软件工程导论(张海藩)——第一章_第4张图片
特点:
快速原型的本质是“快速”
快速原型可以取代规格说明阶段,但不是设计阶段,容易适应需求的变化
有利于开发与培训的同步
开发费用低、开发周期短、维护容易且对用户更友好

优点:

1、能让人(开发者或客户)很快见到产品,有成就感。
2、能渐进地启发客户提出新的要求或任务。

缺点:

1、 没有考虑软件的整体质量和长期的可维护性。
2、 大部分情况是不合适的操作算法被采用目的为了演示功能,不合适的开发工具被采用仅仅为了它的方便,还有不合适的操作系统被选择等等。
3、 由于达不到质量要求产品可能被抛弃,而采用新的模型重新设计。

适用范围:
1、用户需求不完全或不准确,有快速的原型开发工具
2、项目招投标时,可以以原型模型作为软件的开发模型
3、产品移植或升级或对已有产品原型进行客户化工作

增量模型

增量模型 把软件产品作为一系列的增量构件来设计、编码、集成和测试。每个构件由多个相互作用的模块构成,并且能够完成特定的功能。使用增量模型时,第一个增量往往是核心功能。
软件工程导论(张海藩)——第一章_第5张图片
优点:
1、每个阶段交付一个可用的产品
2、减少一个全新产品给客户带来的心理上的影响
3、分阶段地交付产品不需要大的资金支出
4、需求经常变化,增量模型的灵活性使其具有更加优越的适用性

缺点:

  1. 需要一个开放的结构,方便构件的加入
  2. 要求集成的新的构件不能破坏软件的原有体系结构

螺旋模型。

螺旋模型是一种演进式软件过程模型,结合了原型的迭代性质和瀑布模型的系统性和可控性的特点,具有快速开发越来越完善软件版本的潜力。可以看作在每个阶段之前都添加了风险分析过程的快速原型模型
软件工程导论(张海藩)——第一章_第6张图片

开发步骤:沿螺线自内向外,每旋转一圈便开发出更为完善的一个新的软件版本。

例如,在第一圈,确定了初步的目标、方案和限制条件以后,转入右上象限,对风险进行识别和分析。

如果风险分析表明,需求有不确定性,那么在右下 的工程象限内,所建的原型会帮助开发人员和客户,考虑其它开发模型,并对需求做进一步修正。客户对工程成果做出评价之后,给出修正建议。

在此基础上需 再次计划,并进行风险分析。在每一圈螺线上,风险分析的终点做出是否继续下 去的判断。

假如风险过大,开发者和用户无法承受,项目有可能终止。多数情况 下沿螺线的活动会继续下去,自内向外,逐步延伸,最终得到所期望的系统。

优点:

  1. 容易确定何时已经对某一阶段的产品充分测试完毕
  2. 维护和开发之间没有什么本质上的差别

缺点:

  1. 仅适合于大型软件

  2. 必须要专业的风险分析人员的参与

适用范围:大型项目

喷泉模型

喷泉模型对软件复用和生存周期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。
“喷泉”一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界。
软件工程导论(张海藩)——第一章_第7张图片
主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征

1、喷泉模型的优点
喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。
2、喷泉模型的缺点
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况。

各个过程模型的优缺点比较

软件工程导论(张海藩)——第一章_第8张图片

Rational统一过程

敏捷过程与极限编程

所谓敏捷开发,就是一种面临迅速变化的需求快速开发软件的能力

极限编程(XP)是在增量模型基础上发展起来的一种颇有争议的新的软件开发方法
确定客户希望产品支持的各种特性(情节,Stories )
客户使用成本-效益分析方法选择每个后续的构件所应包含的特性
每一个构件被分成更小的部分,成为任务(tasks)
程序员首先制定出一个任务的测试用例
成对编程(pair programming)
把任务集成到产品的当前版本中

极限编程的特点

XP小组的计算机设置在一个大房间的中心,大房间中有许多彼此相连的小隔间
一个客户代表一直与XP小组一起工作
没有一个人能够连续两周超时工作
没有规格说明,而是XP小组的所有成员一同完成规格说明、设计、代码和测试过程
重整(refactoring):建造产品的过程中不断地调整设计

你可能感兴趣的:(软工导论(期末复习版))