快速分析
设计并开发初始原型
试用原型满意吗?
原型演进
NY
丰富细节,整理文档并集成测试
验收测试
提交产品,安装与培训
项目开始
项目结束
过程模型——螺旋模型
过程模型——喷泉模型
演化
集成
测试
编程
设计
分析
过程模型——迭代增量式开发模型
初始阶
段
细化阶
段
移交阶
段
123。
。
构造阶段
软件计划—目的
制定一个执行此软件工程和管理软件项目的合理计划
内容包括:
..对将做的工作进行估计。
..建立必要的委托。
..制定执行该工作的计划
软件计划—任务
..确定软件系统的总目标﹑软件开发范围
..完成该软件任务的可行性研究
..开发过程的阶段划分与过程模型的选择
..分解任务,明确人员的角色与任务分工
..确定阶段里程碑及其评审标准
..估计可利用的资源(硬件,软件,人力等)、成本、效
益、开发进度与风险
..制定并裁剪项目管理所需的规范,制定项目开发的实施
计划,连同可行性研究报告,提交管理部门审查
这一阶段是形成管理标准与任务的主要阶段,所制定的文档
是下一步项目开发实施管理的依据和指南
软件计划—文档内容
一个软件开发计划要包括以下大部分或全部条目:
..项目选定的软件生命周期及过程标准
..将要开发的各种软件产品
..项目进度
..估算软件工作产品的规模、费用及所需的资源(人数
)
..设施、支持工具以及硬件
..标识和评估软件风险
..商议委托
计划样例
软件计划—计划组件
软件计划可以从多个方面来制定,阶段产品包括:
..Project Plan (Master Plan)
..Software Development Plan
..SQAPlan
..SCMPlan
..Risk Mgt. Plan
..Software Testing Plan
..Training Plan
这些文档可以合成为一个文档
需求分析与定义—目的与任务
..该阶段是软件开发成功的最关键阶段
..目的:正确理解和精确定义用户的需求
..任务:借助于当前系统的逻辑模型导出目标系统的逻辑
模型,解决目标系统的“做什么”的问题。
分析任务=分析+理解+描述(精确)
..结果提交评审
需求分析和定义——产品及形式
阶段产品
..软件需求规格说明书
..数据要求说明书
..初步用户手册
..初步测试计划
..初步验收标准
..修改、完善与确定软件开发实施计划
..定义需求的形式
图形模型+文档规格说明
需求定义与系统分析的差别
RequirementGatheringSystemAnalysisProductDesignBuildProductUsageStakeholderWants andNeedsIntendedOperatingEnvironmentRequirementsSpecification.
Analysis
SpecificationProduce work
models of func,
and data needed
by productDesignSpecification.
ProductProductFeedbackAnalysisFeedbackDesign
FeedbackBuild
Feedback
什么是需求?
..A requirement is something that the product
must do or a quality that the product must have
..A requirement exists either because the type of
product demands certain functions or
qualities,orthe client wants that requirement to
be part of the delivered product
需求的分类
..Functional Requirements (Behavior of product)
..Non-functional Requirements (How it
behaves)
..Look and Feel requirements-the spirit of the product;sappearance
..Usability Requirement
..Performance Requirements
..Operational requirements
..Maintainability and portability Requirements
..Security Requirements
..Cultural and political requirement
..Legal Requirements
..Constrains (Global requirements)
需求获取与分析
ContextEventListWorkListObjectivesPurposesDesignProduct
ScopePrototypingCustomerDesiresContrainsUse Cases
DiagramRequirementSpecificationFlow ChartProduct is
broken into
small pieces
系统分析技术与建模
..四步法
..基于业务目标法
..面向数据流的结构化分析
方法(SA)
..面向数据结构的Jackson
方法(JSD)
..实体关系分析法(ER)
..面向对象的分析方
法(OOA)
..快速原形法
..动态分析法
..状态迁移图
..时序图
..Petri网
需求管理的关键(CMM Level2)CMM Level2)
..需求文档化并纳入基线
..需求变更的管理与控制
软件设计——目的与任务
目的:精确定义系统“如何做”
任务:根据需求规格进行以下工作
–数据设计
–软件系统结构设计
–内部算法的具体实现流程设计
–系统物理实现方案及配置
–其它设计:
可靠性设计,一致性设计,冗余性设计,界面设计,
输入/输出设计等
.阶段产品
概要设计说明书,数据库设计说明书,详细设计说明书,测
试计划
软件设计——设计步骤与过程
软件设计——结果及其表达形式
..概要设计阶段产品
..概要设计说明书
..数据库设计说明书
..用户手册
..测试计划
..详细设计阶段产品
..详细设计规格说明书
..测试计划与用例
说明:
方法的不同设计规格的
表现形式也不同,这是
设计阶段之初需要明确
规格的表现形式,形式
不同,质检评审的标准
也不同,组织过程知识
库需要积累这样可复用
的过程标准
软件设计——常用方法与模型工具
..方法
..功能分解法(Parnas)
..结构化设计方法(SD)
..面向数据的设计方法
..基于信息实体关系的设计方法
..Jackson方法
..Warnier方法
..面向对象的设计方法(OOD)
..模型工具
HIPO,层次图,IPO图,N-S图,PAD图,流程图,
结构图,判定树,判定表,类图,PDL语言等
软件设计——设计基础与优化准则
自顶向下,逐步细化
软件结构
程序结构
结构图
模块化
抽象化
信息隐蔽
程序编码
..任务:编码+单元测试
..要点
..编程的质量标准不应该是技巧的高低,而是代码
的易于理解和可维护性
..建立开发组织语言的编程规范,程序员良好的编
程习惯与程序设计风格对软件质量有着重要影响
..与设计一致的编程
..编程方法
非结构化方法,结构化方法,面向对象方法
测试——树立正确的概念
..测试是软件质量保证的最后一道关口,但绝不是质量
保证的全部
..成功的测试是发现迄今尚未发现的错误,而不是证明
程序正确
..软件的错误不单单是编码错误,还包括数据和文档不
一致引起的错误(错误分类方法)
..程序测试不等于软件测试,生存周期中的一切产品都
是测试的对象
..不能穷尽测试,但测试结果数据是可靠性度量的基础
发现的错误个数与系统残存的错误个数成正比
..测试计划与用例设计是软件配制的重要组成部分
测试原则
应当把“尽早地和不断地进行软件测试”作为软
件开发者的座右铭。
测试用例应由测试输入数据和对应的预期输出
结果这两部分组成。
程序员应避免检查自己的程序。
在设计测试用例时,应包括合理的输入条件和
不合理的输入条件。
严格执行测试计划,排除测试的随意性。
测试用例是软件配置的组成部分,用完后应妥
善保管
软件的任何修改都要进行回归测试
测试要有重点,而且要适度
测试信息流
测试与生存周期各阶段的关系
测试过程
测试用例设计方法
..黑盒
等价类划分错误推测法
边界值分析因果图
..白盒——逻辑覆盖
语句覆盖判定-条件覆盖
判定覆盖条件组合覆盖
条件覆盖路径覆盖
测试分类——按过程划分
..单元测试
模块接口测试,局部数据结构测试,路径测试
错误处理测试,边界测试
..集成测试
自顶向下增殖,自底向上增殖,混合增殖测试
回归测试
..确认测试
有效性测试,软件配置复查,验收测试(用户为主)
..系统测试
..α测试和β测试
测试分类——按测试目的划分
..功能测试
..可靠性测试
..强度测试
..性能测试
..恢复测试
..启动/停止测试
..配置测试
..安全性测试
..可用性测试
..可支持性测试
..安装测试
..互连性测试
..兼容性测试
..容量测试(负载能力)
..文档测试
常规系统的测试策略
用黑盒法设计基本测试方案,再用白盒法做必要
补充
..在任何情况下均采用边界值进行测试
..必要时用等价类划分法补充
..用错误推测法进行补充
..根据软件可靠性要求,采用不同逻辑覆盖标准
设计测试用例
..对于程序的任何修改要进行回归测试
面向对象系统的测试
..类测试(类内测试)
基于类的规格说明测试(又称静态测试)
基于类的状态行为测试
..类集成测试(类间测试)
..回归测试
运行/维护
..目的:保证软件持久地满足用户的需要
..维护实际上是二次开发的过程
..维护是软件整个生存期中最漫长﹑花费最大的阶
段
..维护的种类有四种
维护的种类
各种维护占总维护工作量比例图
50%
20%
25%
5%
完善性维护
改正性维护
适应性维护
其它
生存期各阶段工作量与费用比例
软件生存期各个阶段费用占总开发费用
的比例图
1%
6%
6%
12%
12%
65%
软件计划
需求分析与定义
设计
实现
测试
维护
软件开发各阶段工作量比例图
2%
18%
20%
20%
40%
软件计划
需求分析与定义
设计
实现
测试与调试
生存周期小结
..软件生存期模型是跨越整个生存期的系统开发、
运作和维护所实施的全部过程、活动和任务的结
构框架
..生存周期有多种过程模型,体现了对复杂任务的
分解和过程组织形式
..软件计划中重要任务之一就是选择适合于项目的
生命周期模型
..过程中阶段的划分可根据项目特点灵活定义
软件开发中普遍存在的问题
软件开发无计划性
软件需求分析困难
软件开发过程无规范或缺乏规范
缺乏量化管理,没有进行开发全过程的管理和控
制
缺乏合理的人员投入,人员流动大,造成开发困
难
缺乏阶段成果的评审和必要的配置管理
开发组织中普遍存在的错误认识
什么是软件工程
客观
问题域
计算机
软件域
跨越鸿沟
软件工程
支持
方法工具过程
软件工程基本内容
..软件工程方法为软件开发提供了“如何做”的技术
..软件工具为软件工程方法提供了自动的或半自动
的软件支撑环境
..软件工程过程定义了开发步骤﹑方法使用的顺序
﹑应交付的文档﹑为保证质量和协调变化需要的
管理以及各个阶段需完成的里程碑,它将方法与
工具综合运用
软件工程的基本目标
..工程项目的三个基本要素:进度﹑费用和质量
..成功项目的标志:
l付出较低的开发成本
l达到要求的软件功能
l取得较好的软件性能
l开发的软件易于移植
l需要较低的维护费用
l能按时完成开发计划,及时交付使用
企图让以上几个目标都达到理想的程度往往是
非常困难
成功指标间的关系
低开发成本
易于维护
高可靠性高性能
按时交付
互斥关系互补关系
软件工程的基本思想
..复用
..分而治之
..优化——折衷
软件工程的基本原则
抽象
信息隐蔽
局部化
确定性
一致性
完备性
可验证性
第二部分软件工程方法
..软件开发各阶段的任务就是:用不同的方法,站在
不同抽象层次上去认识问题并描述所获得的认识,
从而对问题有了更进一步的认识,直到能用计算机
懂得的语言描述认识为止——这就是软件开发
..分析与设计方法提供了从问题域过渡到编程语言描
述的手段,过渡的是否连贯平滑依赖于方法的选择
..有效的方法选择不仅能降低开发复杂度,加大开发
效率,更有助于软件不同层次的复用
系统三要素
..行为——功能
..属性——数据结构
..状态——当前的属性取值
分析的问题在于从何种角度认识问题
设计的问题在于用何种设计的软件元素实现需求
实现的问题在于用计算机语言实现设计的过程描述
方法学的基本要素
从以下几个方面研究并阐述:
..分析与设计的着眼点及其软件成分
..主要过程或活动
..用到的模型工具
..应完成的任务
四步法
1.需求预测(Anticipation)
2.需求诱导(Elicitation)
3.需求确认(Assurance)
4.需求说明(Specification)
一种基于分析过程的分析方法
基于业务目标的分析方法
Reason for Existence
General Statements
一种基于企业业务目标的分析方法
MissionGoalsObjectivesBusiness TacticsInformation system ObjectivesInformation system TacticsSpecific Measurable StatementsActions to Accomplish ObjectivesWhat the user of I.S.
sees(UseCase)
Actions to Accomplish
Objectives OF I.S.
Support for
BUSINESS
TACTICS
常规方法——功能分解法
以功能为中心来组织系统,以功能分解为主要方
法,数据结构是功能设计的副产品
软件成分=功能
+子功能(模块)
+功能接口
功能分解法是小型软件开发常采用的方法,对于
大型项目来说,该方法常用于软件的局部设计
这种方法易于掌握,但开发的软件适应能力较差
常规方法——结构化方法(1)1)
..采用自上而下﹑逐步求精的思想,采用SA—SD—
SP三种前后衔接的不同阶段的结构方法,分别实
现了从分析﹑概要设计到详细设计阶段对问题域
不同程度的认识和基于认识的描述,从而将用户
需求转变为计算机能够理解的程序描述
..这种方法的基本观点是:任何系统都是信息变换
的系统,原始信息经过一次次的加工或变换,最
后以用户需要的形式输出。(跟踪数据流及其变
换过程)
继续
常规方法——结构化方法(2)2)
软件=数据流
+数据处理(变换)
+数据存储
+外部实体
+处理说明(用IPO图表示)
+数据字典
结构化方法是经典的开发方法,应用最为广泛,适宜于任
何系统的分析与设计,而且易于掌握,是目前国内常用的
开发方法
此开发的软件应变能力较差,维护量大而应用寿命相对较
短
常规方法——信息建模法
..该方法以数据为中心来构造系统,功能仅仅是数
据的副产品
..核心概念是实体及其相互关系,将问题域中的事
物抽象为实体,用实体间的关系映射问题域中事
物之间的关系
..信息建模法普遍应用于MIS系统数据库的开发设计
,对于具有明显业务过程的系统并不十分适合,
以此构造的软件比结构化方法更具有一定的应变
能力,维护工作易于开展
常规方法——面向对象的方法(1)1)
..用对象来对应问题域中的事物,用对象间的关系
去刻画事物间的关系。从而使分析完整且直接地
反映客观事物的结构与关系
..各阶段成果平滑而又无缝地衔接与集成(从分析
﹑设计到编程),并能实现最大程度的复用,从
而实现软件生产像硬件生产那样高度的部件组装
目标
..面向对象方法是今后最盛行的开发方法,适用于
任何类型的软件开发,以此开发的系统最为稳定
,而且易于复用
继续
常规方法——面向对象的方法(2)2)
..软件是由一系列离散的对象构成,对象彼此独立而又相互
协作,通过消息建立动态的依赖关系
软件=对象﹑类
+结构与关系
+继承
+封装
+消息通信
..面向对象方法通用的语言是UML语言,主要的模型工具有
:类图(对象图)﹑UseCase﹑交互图﹑主题图﹑状态图
以及辅助的图形工具
方法学小结
第三部分软件工程工具与环境
结束语
开发过程=问题域到软件域的映射
过程中的每一步映射都使得问题的解更进一步地
细化
软件工程为开发组织提供了科学﹑量化而又客观
的方法和可遵循的步骤
软件开发不再依赖个人水平而是取决于组织整体
工程应用水平