目录
[1.1 软件开发环境](#1.1 软件开发环境)
[1.2 软件开发工具](#1.2 软件开发工具)
[1.3 RAD(快速应用开发)](#1.3 RAD(快速应用开发))
[2.1 软件能力成熟度模型CMM](#2.1 软件能力成熟度模型CMM)
[2.2 软件能力成熟度模型集成CMMI](#2.2 软件能力成熟度模型集成CMMI)
[2.3 软件过程评估](#2.3 软件过程评估)
[3.1 软件重用过程](#3.1 软件重用过程)
[3.2 开发可重用的软件构件](#3.2 开发可重用的软件构件)
[3.3 软件逆向工程](#3.3 软件逆向工程)
[4.1 产品线的过程模型](#4.1 产品线的过程模型)
[1. 双生命周期模型](#1. 双生命周期模型)
[2. SEI模型](#2. SEI模型)
[3. 三生命周期模型](#3. 三生命周期模型)
[4.2 产品线的建立方式](#4.2 产品线的建立方式)
[5.1 净室软件工程(CSE)](#5.1 净室软件工程(CSE))
[5.2 程序验证](#5.2 程序验证)
一、软件开发环境与工具
1.1 软件开发环境
软件开发环境(SDE)是指支持软件的工程化开发和维护而使用的一组软件,由软件工具集和环境集成机制构成。软件工具是指CASE工具,用以支持软件开发的相关过程、活动和任务;环境集成机制是指为工具集成和软件开发、维护及管理提供统一的支持。
软件开发环境可按以下几种角度进行分类:
-
按软件开发模型与开发方法分类,有支持瀑布模型、演化模型、螺旋模型和喷泉模型等不同模型,以及结构化方法、面向对象方法等不同方法的软件开发环境。
-
按功能与结构特点分类,有单体型、协同型、分散型和并发型等多种类型的软件开发环境。
-
按应用范围分类,有通用型和专用型软件开发环境。
-
按开发阶段分类,有前端开发环境(支持系统规划、分析、设计等阶段的活动)、后端开发环境(支持编程、测试等阶段的活动)、软件维护环境和逆向工程环境等。
集成机制根据功能的不同,分为三类:
-
环境信息库。是软件开发环境的核心,用以存储与系统开发有关的信息,并支持信息的交流与共享。主要存储两类信息:一类是开发过程中产生的有关被开发系统的信息;另一类是环境提供的支持信息。
-
过程控制与消息服务器。是实现过程集成和控制集成的基础。过程集成是按照具体软件开发过程的要求进行工具的选择与组合,控制集成使各工具之间进行并行通信和协同工作。
-
环境用户界面。包括环境总界面和由它实行统一控制的各环境部件及工具的界面。统一的、具有一致性的用户界面是软件开发环境的重要特征。
目前,软件开发环境已经进入了第三代,即集成计算机辅助软件工程(ICASE)阶段。集成方式经历了从点到点的数据转换(早期CASE采用的集成方式),到公共用户界面(第二代CASE,在一致的界面下调用众多不同的工具),再到目前的信息库方式。
ICASE的最终目标是实现应用软件的全自动开发,即开发人员只要写好软件的需求规格说明书ICASE就能自动完成软件开发工作,即自动生成供用户直接使用的软件和有关文档。
1.2 软件开发工具
软件工具的分类:
-
软件开发工具。用来辅助开发人员进行软件开发活动,包括需求分析工具、设计工具、编
码与排错工具等。 -
软件维护工具。用来辅助维护人员对软件代码及其文档进行各种维护活动,包括版本管理工具、文档分析工具、开发信息库工具、逆向工程工具和再工程工具等。
-
软件管理和支持工具。用来辅助管理人员和软件支持人员的管理活动和支持活动,以确保软件高质量完成,包括项目管理工具、配置管理工具和软件评价工具、软件开发工具的评价和选择等。
开发工具的选择主要决定于两个因素,分别是所开发系统的最终用户和开发人员。
1.3 RAD(快速应用开发)
在RAD(快速应用开发)方法中,所包括的工具主要有数据库编程语言、界面生成器和报告生成器等。RAD工具主要使用可视化技术。可视化技术是一种通过集成细粒度可复用构件来构造软件的方法,其主要思想是用图形工具和可复用构件来交互地编制程序。
二、软件过程管理
2.1 软件能力成熟度模型CMM
软件能力成熟度模型(Capability Maturity Model for Software,CMM)。CMM 是一个概念模型,模型框架和表示是刚性的,不能随意改变,但模型的解释和实现有一定弹性。
能力等级 | 特点 | 关键点 |
---|---|---|
初始级(initial) | 软件过程的特点是杂乱无章,有时甚至很混乱,几乎没有明确定义的步骤,项目的成功完全依赖个人的努力和英雄式核心人物的作用。 | 完全依赖个人的努力和英雄式核心人物的作用 |
可重复级(Repeatable) | 建立了基本的项目管理过程和实践 来跟踪项目费用、进度和功能特性,有必要的过程准则来重复以前在同类项目中的成功。 | 软件配置管理、软件质量保证、软件子合同管理、软件项目跟踪与监督、软件项目策划、软件需求管理 |
已定义级(Defined) | 管理和工程两方面的软件过程已经文档化、标准化,并综合成整个软件开发组织的标准软件过程 。所有项目都采用根据实际情况修改后得到的标准软件过程来发和维护软件。 | 同行评审、组间协调、软件产品工程、集成软件管理、培训大纲组织过程定义、组织过程集点 |
已管理级(Managed) | 制定了软件过程和产品质量的详细度量标准。对软件过程和产品质量有定量的理解和控制。 | 软件质量管理和定量过程管理 |
优化级(Optimized) | 加强了定量分析,通过来自过程质量反馈和来自新观念、新技术的反馈使过程能不断持续地改进。 | 过程更改管理、技术改革管理和缺陷预防 |
2.2 软件能力成熟度模型集成CMMI
软件能力成熟度模型集成(Capability Maturity Model Integration for Software,CMMI )。
CMMI 是在 CMM 的基础上发展而来的。是若干过程模型的综合和改进,不仅仅软件,而是支持多个工程学科和领域的、系统的、一致的过程改进框架,能适应现代工程的特点和需要,能提高过程的质量和工作效率。
CMMI两种表示方法:
(1)阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟度模型如下:
能力等级 | 特点 | 关键点 |
---|---|---|
初始级 | 过程随意且混乱的 | 成功依赖于组织内人员的能力与英雄主义 |
已管理级 | 过程为项目服务 | 需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证 |
已定义级 | 过程为组织服务 | 需求开发、技术解决方案、产品集成、验证、确认组织级过程焦点、组织级过程定义、组织级培训、集成项目管理、风险管理、集成化的团队、决策分析和解决方案、组织级集成环境 |
定量管理 | 过程已度量和控制 | 组织过程性能、定量项目管理 |
优化级 | 过程改进和优化 | 组织级改革与实施、因果分析和解决方案 |
(2)连续式模型:关注每个过程域的能力,一个组织对不同的过程域可以达到不同的过程域能力等级。其过程域分类如下:
2.3 软件过程评估
软件过程评估是根据过程模型或其他模型对组织的软件过程所进行的规范的评估。评估模型:
-
- CMM模型:CMM 的一个重要思想是帮助软件组织通过基于模型的过程改进,达到使其软件过程向更高的成熟度等级迈进的目标。
-
- Trilum模型是一个主要用于嵌入式软件开发和支持的能力评估模型,主要特点如下:
-
模型的架构建立在路线图的基础上。
-
模型不仅适用于软件,同时适用于硬件。
-
模型强调以用户为关注的焦点。
-
模型包括技术成熟度,主要面向通信产品。
-
- Bootstrap改进了 CMM的问卷表和成熟度计算方法,使其可用于过程的每一个质量属性,从而得到一个过程质量剖面。
-
- ISO/IEC 15504分为9个部分,分别是概念与介绍指南、过程与过程能力的参考模型、实 施评估、评估实施指南、一个评估模型和指示指南、评估员资格认证指南、过程改进应用指南、判断供应商过程能力指南和词汇表。
-
- 我国行业标准《软件过程能力评估模型(SJ/T11234-2001)》针对软件组织对自身软件过程能力进行内部改进的需要,该模型有22个过程域,分为四大类,分别是过程管理类、项目管理类、工程类和支持类。
三、软件重用和再工程
软件重用是在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。软件元素包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域知识。通常,可重用的元素也称作软构件,可重用的软构件越大,重用的粒度越大。
软件的重用可划分为三个层次,即知识重用,方法和标准的重用以及软件成分的重用。
3.1 软件重用过程
软件重用过程有三种模型,分别为组装模型、类重用模型和软件重用过程模型。
-
- 组装模型。最简单的软件重用过程是,先将以往软件工程项目中建立的软件构件存储在构件库中,然后通过对软件构件库进行查询,提取可以重用的软件构件;再对它们进行一些修改,以适应新系统,并建造新系统需要的其他构件;最后将新系统需要的所有构件进行组装。
-
- 类重用模型。面向对象技术中的类是比较理想的可重用软件构件,称之为类构件。◆类构件的重用方式有以下几种:
-
(1)实例重用。按照需要创建类的实例,然后向该实例发送适当的消息,启动相应的服务,完成所需要的工作。
-
(2)继承重用。利用面向对象方法的继承性机制,子类可以继承父类已经定义的所有数据和操作,子类也可以定义新的数据和操作。
-
(3)多态重用。根据接收消息的对象类型不同,在响应一个一般化的消息时,由多态性机制启动正确的方法,执行不同的操作。
-
- 软件重用过程模型。强调领域工程和软件工程同时进行。领域工程在特定的领域创建应用领域的模型,设计软件体系结构模型,开发可重用的软件成分,建立可重用的软件构件库。
3.2 开发可重用的软件构件
开发可重用的软件构件的过程就是领域工程。领域工程包括分析过程、开发可重用的软件构件(标准的数据结构+标准的接口协议+程序模板)和传播软件构件三个主要的活动。
构件分类的方法有枚举分类、刻面分类和属性值分类三种典型模式。
软件构件的重用必须由相应的环境来支持,环境应包含下列元素:
-
- 软件构件库。存放软件构件和检索构件所需要的分类信息。
-
- 软件构件库管理系统。管理对构件库的访问。
-
- 软件构件库检索系统。用户应用系统通过检索系统检索构件、重用构件。
-
- CASE工具。帮助用户把重用的构件集成到新的设计中去。
(1)软件构件库。存放软件构件和检索构件所需要的分类信息。(2)软件构件库管理系统。管理对构件库的访问。
3.3 软件逆向工程
逆向工程:软件的逆向工程是分析程序,力图在比源代码更高抽象层次上建立程序的表示过程逆向工程是设计的恢复过程。
软件逆向工程有多种实现方法,主要包括以下三种:
-
(1)分析信息交换过程。最常用于协议逆向工程,涉及使用总线分析器和数据包嗅探器。
-
(2)反汇编。使用反汇编器,把程序的原始机器码翻译成较便于阅读理解的汇编代码。
-
(3)反编译。使用反编译器,尝试从程序的机器码或字节码重现高级语言形式的源代码
与逆向工程相关的概念有重构、设计恢复、再工程和正向工程。
-
重构是指在同一抽象级别上转换系统描述形式。
-
设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
-
再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程,包括逆向工程、新需求的考虑过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得设计信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。在利用再工程重构现有系统的同时,一般会增加新的需求,包括增加新的功能和改善系统的性能。
-
正向工程是指不仅从现有系统中恢复设计信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
四、软件产品线
软件产品线(Software Product Line)是一个产品集合,这些产品共享一个公共的、可管理的特征集,这个特征集能满足特定领域的特定需求。软件产品线是一个十分适合专业开发组织的软件开发方法,能有效地提高软件生产率和质量,缩短开发时间,降低总开发成本。
软件产品线主要由两部分组成,分别是核心资源和产品集合。
-
核心资源:领域工程的所有结果的集合,是产品线中产品构造的基础。包括所有产品所共
用的软件架构,通用的构件、文档等。
-
产品集合:产品线中的各种产品
-
设计恢复是指借助工具从已有程序中抽象出有关数据设计、总体结构设计和过程设计等方面的信息。
4.1 产品线的过程模型
软件产品线的过程模型主要有双生命周期模型、SEI模型和三生命周期模型。
1. 双生命周期模型
双生命周期模型分成两个重叠的生命周期,分别是领域工程和应用工程,如下图所示。

2. SEI模型
SEI将产品线的基本活动分为三个部分,分别是核心资源开发(即领域工程)、产品开发(即应用工程)和管理。三个基本活动交错连接,可以任何次序发生,且是高度重叠的。在核心资源和产品开发之间有一个强的反馈环,当新产品开发时,核心资源库就得到刷新。对核心资源的使用反过来又会促进核心资源的开发活动。SEI模型的主要特点如下:
-
(1)循环重复是产品线开发过程的特征。
-
(2)核心资源开发和产品开发没有先后之分。
-
(3)管理活动协调整个产品线开发过程的各个活动,对产品线的成败负责。
-
(4)核心资源开发和产品开发是两个互动的过程,三个活动和整个产品线开发之间也是双向互动的。

3. 三生命周期模型
是对双生命周期模型的一种改进,主要针对大型软件企业的软件产品线开发。
三生命周期模型为有多个产品线的大型企业增加了企业工程流程(包括运作计划、市场计划、企业架构计划)。
在领域工程中增加了产品线确认作为起始阶段,和领域分析阶段、架构开发阶段、基础设施开发阶段组成整个领域工程,还为领域分析阶段增加了市场分析的任务。
同样,为应用工程增加了业务/市场分析与计划。在领域工程和应用工程之间的双向交互中添加核心资源管理作为桥梁。

4.2 产品线的建立方式

五、软件形式化方法
提高软件可靠性的一种重要技术是使用形式化方法。形式化方法是建立在严格数学基础上、具有精确数学语义的开发方法。广义的形式化方法是指软件开发过程中分析、设计和实现的系统工程方法,狭义的形式化方法是指软件规格和验证的方法。
近年来,形式化方法在以下两个方面的发展大大改善了其实用性:
-
(1)形式化方法与图形语言机制相结合。
-
(2)用CASE(计算机辅助软件工程)工具支持形式化软件开发。
5.1 净室软件工程(CSE)
净室软件工程(CSE)是软件开发的一种形式化方法,可以开发较高质量的软件。它使用盒结构归约进行分析和建模,并且将正确性验证作为发现和排除错误的主要机制,使用统计测试来获取认证软件可靠性所需要的信息。
CSE强调在规约和设计上的严格性,以及使用基于数学的正确性证明来对设计模型的每个元素进行形式化验证。作为对形式化方法的扩展,CSE还强调统计质量控制技术,包括基于客户对软件的预期使用的测试。
CSE的理论基础是函数理论和抽样理论,所采用的技术手段主要有以下4个方面:
-
(1)统计过程控制下的增量式开发。
-
(2)基于函数的规范、设计。CSE按照函数理论定义了三种抽象层次,分别是行为视图、有限状态机视图和过程视图。
-
(3)正确性验证。正确性验证是CSE的核心。
-
(4)统计测试和软件认证。CSE在测试方面采用统计学的基本原理,即当总体太大时必须采取抽样的方法。
5.2 程序验证
确保程序正确性的手段可分为两类:动态方法和静态方法。
动态方法需要运行软件,通过特定的输入考察软件的运行结果。动态方法中使用得比较广泛的是软件测试。动态方法不能覆盖程序的所有输入和全部的执行路径。
静态方法则是基于程序源代码进行分析,无须编译运行,所以应用场景更加广泛。常用的静态方法有静态分析、符号执行、定理证明、模型检测等。
-
(1)静态分析方法比较轻量级,适用于大规模代码,但比较大的问题是较高比例的误报。所以静态分析报出的结果需要逐一人工排查,从而导致耗费大量的人力资源。
-
(2)符号执行可以看作是更加准确的测试方法,它通过符号值来静态执行程序,积累路径条件,直到到达目标位置,再对路径条件进行约束求解,判断目标位置的可达性。
-
(3)定理证明方法是使用高阶逻辑对程序及其需要满足的性质进行建模描述,然后使用机器辅助证明的方法,一步一步证明程序能够满足要求的性质。主要缺陷是自动化程度较低,需要大量的专业人力参与,编写证明代码,对软件的快速更新迭代不友好。
-
(4)模型检测是一种经典的形式化分析方法。它通过构造软件系统的抽象模型,来检测其是否满足要求的性质。缺点是系统模型的建立需要领域专家的参与,寻找恰当的抽象层次,从而足以证明系统的特定属性是模型检测的一大难点。