软件开发生命周期

主要过程

获取、供应、开发、运行、维护

支持过程

文档编制、配置管理、质量保证、验证、确认、联合评审、审计、问题解决

组织过程

管理、基础设施、改进、培训

软件开发方法

1、自顶向下(问题到解答、总体到局部、一般到具体),自底向上(简单到复杂、逐层向上构造)
2、形式化(严格数学基础之上),非形式化(不把严格作为主要着眼点)
3、整体性,局部性

净室方法

形式化方法,使用盒结构规约进行分析与建模,强调将正确性验证(不是测试)作为发现和消除错误的机制
3中盒类型
1、黑盒,刻画系统或系统的某部分行为
2、状态盒,以类似对象的方式封装状态数据和服务
3、清晰盒,定义状态盒所蕴含的变迁功能

结构化方法

自顶向下,逐步求精
提出了提高软件结构合理性的准则,如分解与抽象、模块独立性、信息隐蔽
基本原则
1、面向用户的观点
2、严格区分工作阶段,每个阶段有明确的任务和成果
3、自顶向下的完成系统开发
4、考虑变化
5、成果文档化
三个阶段
1、结构化分析 - Structured Analysis
产生功能规约的原理与技术,一般利用图形表达需求,使用数据流图、数据字典、结构化语言、判定表及判定树
2、结构化设计 - Structured Design
产出帮助设计人员在模块层次上区分设计质量的原理与技术,步骤如下
(1)评审和细化数据流图
(2)确定数据流图类型
(3)把数据流图映射到软件模块结构,设计出模块结构的上层
(4)基于数据流图逐步分解高层模块,设计中下层模块
(5)对模块结构优化
(6)描述模块接口
3、结构化程序设计
缺点
1、开发周期长
2、注重系统功能,数据结构不多
3、开发初期难于锁定功能要求

面向对象方法

OMT、Coad/Yourdon、OOSE、Booch

Booch

开发时螺旋上升的过程,4个周期
1、标识类和对象
2、确定类和对象的含义
3、标识关系
4、说明每个类的接口和实现

OMT-Object Model Technology

三类模型
1、对象模型:描述系统对象的静态结构、关系、属性和操作,对象图来实现
2、动态模型:描述与时间与操作顺序有关的特性,状态图来实现
3、功能模型:描述与值的变换有关的特性,数据流图来实现
四个活动
分析、系统设计、对象设计、实现

OOSE

在OMT基础上,对功能模型补充了用例,用例贯穿OOSE活动的核心,描述系统的需求及功能
五类模型
需求模型、分析模型、设计模型、实现模型、测试模型

原型法

原型指模拟某种产品的原始模型,早期运行版本

分类

1、是否实现功能:水平原型(探索预期系统的特定行为,细化需求)、垂直原型(实现部分功能,用在算法实现上)
2、最终结果:抛弃型、演化型

类型选择

1、系统结构:联机失误处理系统,相互关联的系统适合
2、逻辑结构:有结构的系统适合,基于大量算法的系统不适合
3、用户特征:用户愿意为修改投资,积极参与
4、应用约束:已运行的系统不合适
5、项目管理:项目负责人愿意
6、项目环境:规模大,要求复杂、系统服务不清晰时适合

原型生存期

原型的开发和使用过程
1、快速分析
2、构造原型
3、运行和评价原型
4、修正和改进
5、判断原型完成
6、判断原型细部是否说明
7、原型细部说明
8、判断原型效果
9、整理原型文档

再工程

对现有系统的重新开发过程,基础是系统理解,包括运行系统、源码、设计、分析等文档

软件重构

对源代码、数据进行修改,使其易于修改和维护

逆向工程

分析程序,力图在比源代码更高的抽象层次上建立程序表示的过程

软件开发模型

瀑布模型

一次通过,即每个活动只做一次;线性顺序,上一项活动的产出作为下一项活动的输入
六个阶段
软件计划、需求分析、软件设计、程序编码、软件测试、软件维护
优点:有利于大型软件开发过程中的人员组织和管理
缺点:
1、开发呈线性,软件面世时间长
2、前期的错误,容易扩散,导致项目失败
3、确认用户需求比较困难

演化模型

快速开发,提出反馈,改进,新原型版本,重复

螺旋模型

结合瀑布模型和变换模型,增加风险分析,每一个版本都经过 制定计划、分析分析、实施工程及客户评价

喷泉模型

智能模型

基于知识的软件开发模型,与专家系统结合,应用基于规则的系统

增量模型

融合瀑布+原型的迭代特征,每一次都产生可发布的增量,强调每一个增量均发布可操作产品

迭代模型

开发迭代每次都完成经过所有工作流程:需求、分析设计、实施、测试

构件组装模型

利用模块化方法,将整个系统模块化,复用构件库中的构件

V模型

以测试为中心,测试不是事后弥补行为,同开发过程一样重要
测试阶段和开发过程的对应关系:
单元测试(编码)、集成测试(详细设计)、系统测试(概要设计)、验收测试(需求分析)

RAD- Rapid Application Development

快速应用开发,增量型,强调极短的开发周期,大量使用可复用构件,基于构件的开发方法
主要任务:
业务建模、数据建模、过程建模、应用程序生成、测试与交付
缺陷:
1、对模块化要求高
2、开发者和客户必须在短时间内完成需求分析
3、不适合技术风险高

敏捷方法

短平快会议、小版本发布、少文档、合作为重、客户直接参与、自动化测试、适应性计划调整、结对编程
测试驱动开发、持续集成、重构

统一过程 UP

三个特点:用例驱动、以基本架构为中心、迭代和增量
四个阶段:
1、初始(建立业务模型,确定项目边界)
2、细化(建立健全的架构基础,淘汰最高风险的元素)
3、构建(开发所有构建和功能,集成为产品,并完成测试)
4、交付(安装到用户实际环境,进行B测试、制作发布版本、支持文档、培训、获取反馈、调整产品)
工作流程分核心工作流程(需求建模、分析设计、实施、测试和部署)与核心支持工作流程(环境、项目管理、配置)

系统规划

主要目标是制定软件的长期发展方案,决定软件的发展方向、规模和发展进程
主要方法:
1、关键成功因素法:了解企业目标、识别关键成功因素、识别性能指标和标准、识别测量性能的数据
2、战略目标集转法:把战略目标看成一个信息集合,把组织的战略目标转变成系统的战略目标
3、企业系统规划方法:

可行性分析

1、技术可行性:使用现有的技术能否实现系统
2、经济可行性:开发成本估算及效益评估
3、操作可行性:运行环境可行性,包括法律可行性和操作使用可行性
步骤
1、核实问题定义与目标:使问题定义更加清晰、明确,小组成员达成共识
2、研究分析现有系统
3、新系统建模
4、用户复核
5、提出并评价解决方案
6、确定最终推荐的解决方案
7、草拟开发计划
8、提交可行性分析报告

结构化系统建模

获取当前系统的物理模型、抽象出当前系统的逻辑模型、建立目标系统的逻辑模型、建立目标系统的物理模型

问题定义

5步:在问题定义上达成共识、理解问题的本质、确定项目干系人、定义系统的边界、确定系统实现的约束
3方面:目标(构建系统的原因)、功能(系统必须做的)、非功能需求(系统必须具备的属性)

需求工程

1、需求开发:需求获取、需求分析、编写规格说明书、需求验证
2、需求管理:定义需求基线、处理需求变更、需求跟踪

需求捕获

搜集什么:1问题域相关、2要求解决的问题相关、3用户期望
哪里搜集:1项目干系人、2文档
怎么搜集:1用户访谈,2用户调查、3现场观摩、4阅读历史文档、5联合讨论会

结构化分析方法-TBD

面向对象分析方法-TBD

面向问题域的分析-PDOA

业务流程图-DFD

表达系统内数据流动并通过数据类描述系统功能的方法,包括数据类、加工、数据存储、外部实体

数据字典

关于数据的信息集合,即DFD中包含的所有元素的定义的集合

需求定义

严格定义,每一阶段都用上一阶段所提供的文档作为指导文件,顺序型的开发方法,基于
1、所有需求都能够被预先定义
2、开发人员与用户之间能准确的交流
3、采用图形/文字可充分体现最终系统,因交流工具主要是报告
原型定义,从一个能满足用户基本需求的原型系统开始,不断完善,采用迭代的开发方式

需求管理

定义需求基线

处理需求变更

需求跟踪

软件设计

概要设计,即高层设计,将软件需求转化为数据结构和系统结构,采用结构图,或层次图、HIPO
详细设计,即底层设计,对结构图细化,得详细数据结构和算法,采用程序流程图、盒图、PAD图、PDL(伪代码)

软件设计活动

4个活动:数据设计、软件结构设计、人机界面设计、过程设计

结构化设计

模块是指执行某一特定任务的数据结构和程序代码。接口与功能定义为外部特性,局部数据和程序代码为内部特性
抽象化(不同层次的抽象)
自顶向下逐步求精(对各层的过程与数据细节逐层细化)
信息隐蔽(每个程序的成分隐蔽或封装在一个单一的设计模块中,尽可能少暴露内部处理过程)
模块独立(完成相对独立的子功能,与其他模块的联系最简单)

工作流设计

软件测试

软件质量保证的手段之一,以查找错误为中心,不是为演示错误的正确性