- 软件工程产生的背景(软件危机)
- 软件工程定义
- 软件工程方法学
- 软件过程模型
- 小结
1.1 软件工程产生的背景
a. 软件的定义
b. 软件的特征
非常复杂,成本高,风险大,维护困难
c. 软件的发展
2)表现
a.软件危机的表现
成本高
软件质量得不到保证
进度难以控制
维护非常困难
b.产生软件危机的原因
与软件本身的特点有关 (难于维护, 逻辑复杂)
与软件开发与维护的方法不正确有关:
软件≠程序
各自为阵无方法/学
c. 软件工程(学)因危机而产生
开发一个具有一定规模和复杂性的软件系统与编写 一个简单的程序不一样;—
大型、复杂软件系统的开发是一项工程,必须按照 工程化的方法组织软件的生产和管理,必须经过分 析、设计、实现、测试、维护等一系列软件过程和活动;
d.软件工程(学):克服软件危机的努力
(1)从管理的角度:软件开发过程的研究、文档的标准化以及人们的交流方式等;
(2)软件开发方法的研究:结构化软件开发方法 面向对象的开发方法;
1、解决危机的技术途径:¢提出有效的方法和工具支持软件开发
提出有效的方法和工具支持软件开发
2、解决危机的管理途径
2.软件工程定义
1)软件工程定义
软件工程是应用计算机科学、数学及 管理科学等原理开发软件的工程。它借鉴 传统工程的原则、方法,以提高质量,降 低成本为目的
2)软件工程的基本原理
- 用分阶段的生命周期计划严格管理
- 坚持进行阶段评审
- 实行严格的产品控制
- 采用现代程序设计技术
- 结果应能清楚地审查
- 开发小组的人员应该少而精
- 承认不断改进软件工程实践的必要性
3. 软件工程方法学
软件工程包括技术和管理两方面的内容,是技术与 管理紧密结合所形成的工程学科。 通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型 (paradigm)。在软件工程领域中,这两个术语的含义基本相同。
软件工程方法学包含3个要素:方法、工具和过程。
4. 软件过程模型
软件生命周期的每一阶段都有明确的任务,把规 模大、结构复杂、管理复杂的软件开发变得容易控制 和管理。
各个阶段的活动如何衔接,开发过程中采用什么 样的策略,应遵守什么样的规定和制约,将这些活动 框架(忽略不必要的细节)用一种模型表示出来,称 为软件过程模型(或软件开发模型或软件生命周期模 型)。
也就是说, 软件过程模型是软件开发全部过程、 活动和任务的结构框架。
1) 瀑布模型(Waterfall Model)
a)传统瀑布模型
b)传统瀑布模型的特点
1.提供了软件过程模型的基本框架(模板);
2.强调了每一阶段活动的严格顺序;
3.质量保证观点:以经过评审确认了的阶段工作 产品(文档)驱动下一阶段的工作,便于管理 ;
4.是一种整体开发模型,程序的物理实现集中在 开发阶段的后期,用户在最后才能看到自己的产品;
c)瀑布模型的优缺点
1.瀑布模型适合于用户需求明确、完整、无重大变 化的软件项目开发。瀑布模型的成功在很大程度 上是由于它基本上是一种文档驱动的模型。
2.实际项目很少按照该模型给出的顺序进行; 用户常常难以清楚地给出所有需求; 用户必须有耐心,等到系统开发完成。
2) 原型模型—快速原型模型(Rapid Prototype Model)
在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的 形式等许多情况下,可以根据用户的一组基本需求,快速 建造一个原型(可运行的软件),然后进行评估,进一步 精化、调整原型,使其满足用户的要求,也使开发者对将 要做的事情有更好的理解。
原型模型存在的问题
⑴ 为了使原型尽快的工作,没有考虑软件的总体质量和 长期的可维护性;
⑵ 为了演示,可能采用不合适的操作系统、编程语言、 效率低的算法,这些不理想的选择成了系统的组成部分;
⑶ 开发过程不便于管理。 有效的使用原型模式 建造原型仅是为了定义需求,之后就被抛弃(或被部分 抛弃),实际的软件在充分考虑了质量和可维护性之后才被 开发.
3) 增量模型 (Incremental Model)
是一种渐进地开发逐步完善的软件版本的模型。
增量模型的优点
- 在较短时间内向用户提交可完成部分工作的产品, 并分批、逐步地向用户提交产品。从第一个构件交 付之日起,用户就能做一些有用的工作;
- 整个软件产品被分解成许多个增量构件,开发人员 可以一个构件一个构件地逐步开发; 3. 逐步增加产品功能可以使用户有较充裕的时间学习 和适应新产品,从而减少一个全新的软件可能给客 户组织带来的冲击;
- 采用增量模型比采用瀑布模型和快速原型模型需要 更精心的设计,但在设计阶段多付出的劳动将在维 护阶段获得回报。
增量模型的困难
- 在把每个新的增量构件集成到现有软件体系结构中 时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。
2. 开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。
3. 多个构件并行开发,具有无法集成的风险。
4) 螺旋模型 (Spiral Model)
软件风险是任何软件开发项目中都普遍存在的实际问 题,项目越大,软件越复杂,承担该项目所冒的风险也越大。
对于复杂的大型软件,开发一个原型往往达不到要求。 螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的 迭代中,发布的增量可能是一个纸上的模型或原型,在以 后的迭代中,逐步产生系统更加完善的版本。
螺旋模型的基本思想是降低风险。
螺旋模型的优点
1.对可选方案和约束条件的强调有利于已有软件的重 用,也有助于把软件质量作为软件开发的重要目标
2.减少了过多测试或测试不足
螺旋模型的特点
1.风险驱动,需要相当丰富的风险评估经验和专门知 识,否则风险更大
2.主要适用于内部开发的大规模软件项目,随着过程 的进展演化,开发者和用户能够更好的识别和对待每 一个演化级别上的风险
3.随着迭代次数的增加,工作量加大,软件开发成本 增加
5) 面向对象模型
a) 喷泉模型(Fountain Model)
特点:主要用于支 持面向对象开发过 程体现了软件创建 所固有的迭代和无 间隙的特征
a) 可重用部件组装模型 (构件集成模型)
构件(components)也称为组件,是一段实现一系列 有确定接口的程序体,具有自己的功能和逻辑,能同其 他构件集成起来协调工作。
该模型支持软件重用(Reusability) ,对缩短软件 开发周期、降低项目成本有重要的现实意义。同时,建 造符合某应用领域体系结构标准的构件,可以用来搭建 分布式的、跨越不同操作平台(集成化软件开发环境( ISEE))的软件,扩展了软件的应用前景,促进了软件 标准化、商品化的发展。
因此,在此基础上专家们又提出了“基于构件的软件 工程”(CBSE)。 构件集成模型如下图所示:
软件体系结构被建立后,必须用构件去充实,这些 构件可从复用库中获得,或者根据专门需要而开发。整个 过程可以演化地进行,面向对象方法给予技术上的支持。
Sommerville提出基于组件开发有两种思路:
- 完成高层设计,对设计中的组件给出描述,以便找出可 复用的组件,这些组件可在体系结构层次上加入或更详 细的设计层次上加入。
- 先根据需求搜寻可复用组件,再将设计建立在获得的组 件基础上。 这两种思路可结合起来
5) 统一软件开发过程
是由Rational公司的Booch、Jacobson、 Rumbaugh提出的软件过程模型,也称RUP( Rational Unified Process)。RUP重复一系列周期,每个周期由一个交付给用户的产品结束。
每个周期划分为初始、细化、构造和移交 四个阶段,每个阶段围绕着五个核心工作流(需求 、分析、设计、实现、测试)分别迭代。
模型见下图:
初始阶段:进行问题定义,确定目标,评估其 可行性,降低关键风险。
细化阶段:制定项目计划、配置各类资源、建 立系统架构(包括各类视图)。
构造阶段:开发整个产品,并确保产品可移交 给用户。
移交阶段:产品发布、安装、用户培训。
在每个阶段的每次迭代的最后,用例模型、分 析模型、设计模型、实现模型都会增量,每个阶段结束 的里程碑处,管理层做出是否继续、进度、预算、是否 给下一阶段提供资助等决定。
不同阶段工作流的侧重点不同,前两阶段大部 分工作集中在需求、分析和架构设计上;在构造阶段, 重点转移到详细设计、实现和测试上。
6)敏捷(灵活)过程与极限编程
极限编程是敏捷过程中最有名的一个, 适于小型项目. 极限编程(XP,eXtreme Programming)对于传统的软件工 程中看来是“极端的”实践
7) 微软过程
5.小结
1.软件 = 程序+数据+文档
2.软件危机: 原因,现象,办法 (软件工程学)
3.软件工程(学): 开发,运行,维护软件的系统方法
4.软件工程3个要素:方法、工具和过程。
5.软件生命周期:定义,开发,运行维护
6.软件过程:瀑布模型+RUP