文章目录
- 一. 软件工程概述
- 1. 专业化软件开发
- (1). 专业化软件开发和个人化开发区别
- (2). 软件工程的目的
- (3). 软件工程历史
- (4). 软件产品分类
- (5). 软件工程(Software Engineering,SE)定义
- 1. 定义
- 2. 软件工程之所以重要的原因
- 3. 软件工程三要素
- 过程
- 方法
- 工具
- 4. 软件工程研究范畴
- 5. 软件工程知识体系
- 6. 软件工程的发展
- (6). 软件生命周期
- (7). 软件过程
- (8). 软件工程与其他学科的区别
- (9). 对软件影响的问题
- (10). 软件工程的多样性
- (11). 互联网软件工程
- 二. 软件过程
- 1. 定义
- 2. 软件过程管理思想
- 3. 软件过程模型
- (1). 瀑布模型
- (2). 快速原型模型
- (3). 增量模型
- (4). 螺旋模型
- (5). Rational统一模型
- (6). 敏捷过程与极限编程
- 4. 四个基本过程活动
- (1). 软件规格说明
- (2). 软件设计和实现
- (3). 软件确认
- (4). 软件演化
一. 软件工程概述
1. 专业化软件开发
(1). 专业化软件开发和个人化开发区别
- 专业化软件除了开发者之外还有其他用户会使用
- 专业化软件通常由开发团队开发
- 专业化软件在其生命周期内要不断维护和修改
(2). 软件工程的目的
支持专业化的软件开发,而非个人编程
包括:支持程序规格说明、设计、演化的相关技术
(3). 软件工程历史
软件工程这一概念是在1968年召开的一个讨论所谓的“软件危机”问题的会议上首次被提出的
当时人们认识到单一的程序开发技术已经不能适应大型复杂软件系统的开发
20世纪七八十年代,各种新的软件工程技术和方法陆续出现:结构化编程、信息隐藏、面向对象开发
软件危机的原因:
需求不明
方法不对
规模变大
复杂度变高
(4). 软件产品分类
- 通用软件产品
由软件开发组织开发,在市场上公开销售,可以独立使用
- 定制化软件产品
受特定的客户委托,由软件承包商专门为这类客户设计和实现
(5). 软件工程(Software Engineering,SE)定义
1. 定义
IEEE给出的:软件工程是将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护。
软件工程是一门工程学科,涉及软件生产的各个方面,从最初的系统规格说明直到投入使用后的系统维护,都属于其学科范畴
2. 软件工程之所以重要的原因
- 个人和社会正越来越多地依赖于先进的软件系统,这就要求我们能够以经济而且快速的方式开发出可靠、可信的系统
- 从长远来看,运用软件工程方法和技术开发专业化的软件系统,比单纯作为个人编程项目编写程序更加便宜,无法有效应用软件工程方法将会导致更高的测试,质量保障和长期维护成本
3. 软件工程三要素
过程
方法
工具
多种工具可以被整合在一个被称为交互式开发环境(Interactive Development Environment, IDE)的框架中,该环境提供了一组通用的基础设施,使得不同的工具可以使用这些基础设施更容易进行通信并以一种集成的方式运行
4. 软件工程研究范畴
5. 软件工程知识体系
6. 软件工程的发展
(6). 软件生命周期
(7). 软件过程
软件工程中所使用的系统化方法有时被称为“软件过程”
软件过程是指实现软件产品开发的活动序列,
所有的软件过程都包括以下基本活动
- 软件规格说明,其中客户和工程师定义所要开发的软件以及对其运行的约束
- 软件开发,对软件进行设计和编程实现
- 软件确认, 对软件进行检查以确保它是客户所需要的
- 软件演化,对软件进行修改以反映客户和市场需求变化
注:根据所开发的软件类型不同,这些通用的开发活动可以以不同的方式进行组织,并且以不同的详细程度进行描述
(8). 软件工程与其他学科的区别
- 计算机科学关注支撑计算机和软件系统的基础理论的方法,而软件工程则关注软件开发过程中的实际问题。
- 系统工程关注复杂系统的开发和演化的各个方面,在这类系统中软件扮演者重要的角色。系统工程关注硬件开发、政策、过程设计、系统部署、软件工程
(9). 对软件影响的问题
- 异构性
当今越来越多的系统都是跨网络运行的分布式系统,其中包括不同类型的计算机和移动设备
除了在通用PC端运行,还要在移动端和平板上运行,有时还要将新开发的软件与用不同的编程语言开发的老的遗留系统相集成 - 企业和社会的变革
- 信息安全与信任
- 规模
软件开发必须能够在很大的范围内支持不同规模的系统,从移动或可穿戴设备中的很小的嵌入式系统到互联网上服务全球社区的基于云的系统
(10). 软件工程的多样性
软件工程是生产软件的系统化的方法,它考虑了现实的成本、进度、可靠性等问题,以及软件客户和开发者的需要。所使用的特定的方法、工具和技术取决于开发软件的组织、软件的类型以及开发过程中所涉及的人。没有一个通用的软件工程方法和技术适合所有的系统和公司
在考虑哪种软件工程方法和技术最重要时,也许最重要的因素是所开发的应用的类型。
类型有以及很多种
- 独立的应用
- 基于事务的交互式应用
- 嵌入式控制系统
- 批处理系统
- 娱乐系统
- 建模和仿真系统
- 数据收集分析系统
- 系统之系统
(11). 互联网软件工程
web的出现使业务软件的组织方式发生巨大变化,在没有web之前,绝大多数的业务应用都是巨石应用,单个的程序运行在单个计算机或计算机集群上,只有组织内部的本地通信。
现在,软件是高度分布式的,有时会跨越整个世界,业务应用不再是从头开始编写程序,而是包含了对构件和程序的大规模复用
二. 软件过程
1. 定义
软件过程是完成软件产品生产的一组相关联的活动
2. 软件过程管理思想
推荐书籍《人月神话》
3. 软件过程模型
软件过程模型是软件过程的简化表示
有时也称为软件开发生命周期或SDLC(Software Development Life Cycle),即软件生命周期模型
每个过程模型都是从一个特定的侧面表现软件工程,所以只提供过程的部分信息
(1). 瀑布模型
(2). 快速原型模型
(3). 增量模型
(4). 螺旋模型
螺旋模型是一种将瀑布模型和增量模型结合起来的软件开发模型
(5). Rational统一模型
(6). 敏捷过程与极限编程
4. 四个基本过程活动
(1). 软件规格说明
软件规格说明或需求工程过程的目的是理解和定义系统需要提供哪些服务,以及识别对于系统开发和运行的约束
(2). 软件设计和实现
软件开发的实现阶段是开发一个可执行的系统以交付给客户的过程。有时候软件设计和编码会分开。然而,如果使用敏捷方法,那么设计和实现是交织在一起的,不会在此过程中产生正式的设计文档。
软件设计是对将要实现的软件的结构、系统所使用的数据模型和结构、系统构建间的接口的描述,有时候还包括所用的算法。
(3). 软件确认
软件确认,或更一般性地,验证和确认,目的是确认系统是否符合他的规格说明,同时是否符合系统客户的期望
程序测试,即用模拟的测试数据运行系统,是最基本的确认技术,
测试过程:
- 构建测试
- 系统测试
- 客户测试
(4). 软件演化