软件开发生命周期
主要过程
支持过程
文档编制、配置管理、质量保证、验证、确认、联合评审、审计、问题解决
组织过程
软件开发方法
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、开发初期难于锁定功能要求
面向对象方法
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
表达系统内数据流动并通过数据类描述系统功能的方法,包括数据类、加工、数据存储、外部实体
数据字典
需求定义
严格定义,每一阶段都用上一阶段所提供的文档作为指导文件,顺序型的开发方法,基于
1、所有需求都能够被预先定义
2、开发人员与用户之间能准确的交流
3、采用图形/文字可充分体现最终系统,因交流工具主要是报告
原型定义,从一个能满足用户基本需求的原型系统开始,不断完善,采用迭代的开发方式
需求管理
定义需求基线
处理需求变更
需求跟踪
软件设计
概要设计,即高层设计,将软件需求转化为数据结构和系统结构,采用结构图,或层次图、HIPO
详细设计,即底层设计,对结构图细化,得详细数据结构和算法,采用程序流程图、盒图、PAD图、PDL(伪代码)
软件设计活动
结构化设计
模块是指执行某一特定任务的数据结构和程序代码。接口与功能定义为外部特性,局部数据和程序代码为内部特性
抽象化(不同层次的抽象)
自顶向下逐步求精(对各层的过程与数据细节逐层细化)
信息隐蔽(每个程序的成分隐蔽或封装在一个单一的设计模块中,尽可能少暴露内部处理过程)
模块独立(完成相对独立的子功能,与其他模块的联系最简单)
工作流设计
软件测试
软件质量保证的手段之一,以查找错误为中心,不是为演示错误的正确性