系统开发与软件工程
1.软件开发生命周期模型
瀑布模型:
瀑布模型是一种理想化的开发模型,要求有明确的需求分析,而要达到这一点,在现实开发中几乎不可能。
原型法:
原型法最大的特点是采用了一种动态定义需求的方法,这样的优势就是不需要有明确的需求。
螺旋模型:
结合了瀑布模型和演化模型的有点,加入了风险分析。它是由制定计划,风险分析,实施工程,客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。
喷泉模型:
2.项目管理基础
项目项目管理的内容
软件项目本身是复杂的,没有仔细的计划,复杂项目是不可能成功的。软件工程项目的管理比其他工程项目的管理更困难。因为:
- 软件产品不可见
- 没有标准的软件过程
- 大型软件项目常常是一次性项目
软件项目管理的核心问题:成本,质量,进度。
软件项目管理的主要活动六项:
- 启动软件项目
- 度量
- 估算
- 风险分析
- 进度安排
- 追踪和控制
软件项目管理的三个阶段
1.项目启动阶段
2.项目实施阶段
3.项目关闭阶段
软件项目估算
软件成本估算
两种软件估算策略-自顶向下估算法和自底向上估算法
自顶向下估算法
这种方式是一种通常采用的方法,但其并不能有效解决项目估算的问题,经常容易使得估算值和实际值产生很大的差异。
自底向上估算法
这种方式通常能够得到较为客观的,可操作的估算结果,使得项目组成员主动的参与,但是由于通常得到值远比预期的值大,时间更久,因此许多项目不能够有效的使用它。
软件规模估算
LOC估算法
也就是估算软件的代码行数(Line Of Code),通常使用KLOC(千代码行)为单位
FP估算法
FP(功能点)是一种衡量工作量大小的单位
它的计算方法是:功能点=信息处理规模x技术复杂度
其中,技术复杂度=0.65+调节因子
软件工作量估算
- IBM模型(静态)
- 普特南模型(动态)
- COCOMO模型(基本(静),中级(静),高级(动))
常用的估算辅助方法:
- Delphi法,专家判定技术
- Standard-component方法
软件项目组织与计划
1.Gannt图
特点:
使用水平线段表示任务的工作阶段;
线段的起点和终点分别对应着任务的开工时间和完成时间;
线段的长度表示完成任务所需的时间。
**优点:**标明了各任务的计划进度和当前进度,能动态的反应项目进展。
**缺点:**难以反映多个任务之间存在的复杂逻辑关系
2.PERT技术和CPM方法
3.计划和执行 项目计划包括两个部分:项目组计划和个人项目计划
4.进度的监控与计划修正
例题:
配置管理
- 指定配置管理计划
- 实施变更管理
- 实施版本管理
- 发行管理
变更管理需要借助于配置数据库和基线
配置数据库分为:开发库,受控库,产品库
基线是指软件生命周期各开发阶段末尾的特定点,也称为里程碑。
版本管理是指对系统不同版本进行标志和跟踪的过程
风险管理
为什么风险管理:
1. 关心未来
2. 关心变化
3. 必须解决选择问题
风险识别,风险估计,风险驾驭
3.软件质量管理基础
要求掌握ISO/IEC 9126 软件质量模型和Mc Call 软件质量模型中定义的质量特性的含义
ISO/IEC 9126
Mc Call
4.需求分析与设计基础
1)需求分析的任务与过程(确定功能,性能,数据,界面)
需求分析的工作分为四个方面
- 问题识别
- 分析与综合(面向数据流的结构化分析方法,Jackson面向数据结构的方法,面向对象的分析方法ooa,建立动态模型的状态迁移图)
- 编制需求分析的文档;(需求规格说明书)
- 需求分析与评审
2)需求分析的原则
3)需求的分类
- 功能需求
- 非功能需求
- 设计约束
4)需求工程
需求工程就是包括创建和维护系统需求文档所必须的一切活动的过程,也就是指需求开发和需求管理两大工作:
- 需求开发
- 需求管理
这两个方面相辅相成,需求开发是主线,是目标;
需求管理是支持,是保障。
5)软件设计的任务与活动
- 概要设计
- 详细设计
6)主要的设计方法比较
在结构化设计风行的时代,主流的设计方法包括Jackson方法和Parnas方法。
5.结构化分析与设计
结构化分析基础
结构化分析(解决“做什么”的问题):是一种面向数据流的需求分析方法。
掌握数据流图和数据字典
结构化设计基础
- 概要设计(确定模块,模块和模块之间的关系)一般采用结构图,层次图,HIPO图等
概要设计主要包括:
1. 复查基本系统模型
2. 复查并精化数据流图
3. 确定数据流图的信息流类型(事务流,变化流)
4. 根据流类型分别实施变化分析或事务分析
5. 根据软件设计原则对得到的软件结构图进一步优化 - 详细设计
- 程序流程图
- 盒图(N-S图)
盒图具有以下特点:- 功能域明确,可以从盒图上一眼看出来
- 没有箭头,不可能任意转移控制
- 容易确定局部和全程数据的作用域
- 容易表示嵌套关系,也可以表示模块的层次结构
- PAD图(problem analysis diagram)
- PDL
- 判定树
- 判定表
模块设计原则
模块独立性:
模块独立性是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。
内聚
内聚是模块功能强度的度量,一个内聚程度高的模块应当只做一件事。
内聚性七种类型:
高---------------------------------------内聚性-----------------------------------------低
功能内聚–信息内聚–通信内聚–过程内聚–时间内聚–逻辑内聚–巧合内聚
强---------------------------------------模块独立性------------------------------------弱
耦合
耦合是模块之间的相对独立性的度量
低--------------------------------------耦合性-----------------------------------------高
非直接耦合–数据耦合–标记耦合–控制耦合--外部耦合–公共耦合–内容耦合
强---------------------------------------模块独立性------------------------------------弱
6.测试及维护
软件测试基础
软件测试的目标:以尽可能少的时间和人力发现软件产品中尽可能多的错误。
测试用例:
测试用例是由测试数据和预期结果构成的。
如何衡量一个测试用例的好坏
一个好的测试用例应是极有可能发现至今尚未发现的错误
成功的测试:
发现了至今为止尚未发现的错误的测试
高效的测试:
用少量的测试用例,发现尽可能多的错。
一个规范化的软件测试过程包括以下活动:
- 制定测试计划
- 编制测试大纲
- 根据测大纲设计生成测试用例
- 实施报告
- 生成测试报告
软件测试原则:
- 尽早的,不断地进行软件测试,把软件测试贯穿于开发的始终。
- 所有的测试都应该能追溯到用户需求,从用户的角度看,最严重的错误是导致系统不能满足用户需求的那些错误。
- 应该从小规模测试开始,并逐步进行大规模测试
- 应该原则测试之前就制定出测试计划
- 根据Pareto原理,80%的错误出现在20%的模块中。测试成功的关键是怎么样找出这20%的模块。
- 应该由独立的第三方从事测试工作
- 对非法和非预期的数据也要像合法的和预期的输入数据一样编写测试用例。
- 检查软件是否做了应该做的事情是成功的一半,另一半是看软件是否做了不该做的事情。
- 在规划测试时不要设想程序中不会查出错误。
- 测试只能证明软件中有错误,不能证明软件没有错误。
测试的分类:
从测试阶段划分:单元测试,集成测试,确认测试,系统测试。
测试方法划分:静态测试,动态测试两大类。
静态测试指被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
- 人工检测(人工检测的主要方法有个人复查,抽查,会审三种)
- 计算机辅助静态分析
动态测试是指通过运行程序发现错误。
动态测试又分为:白盒测试和黑盒测试
软件测试的步骤
- 单元测试
- 集成测试
- 确认测试
- (系统测试)
单元测试期间着重从:模块接口,局部数据结构,重要的执行通路,出错处理,边界条件。几个方面对模块进行测试。
集成测试(组装测试)
主要目标是发现模块间的接口和通信问题
集成的方式可分为非增殖式和增殖式
集成测试计划应该在概要设计阶段指定
集成测试通常采用黑盒测试
增殖式方式:
1. 自顶向下的增殖方式(模拟桩模块)
2. 自底向上的增殖方式(模拟驱动模块)
3. 混合增殖式方式
4. 衍变的自顶向下的增殖方式
5. 自底向上-自顶向下的增殖方式
确认测试:
检查软件的功能、性能和其他特征是否与用户的需求一致。
以需求规格说明书作为依据的测试
软件确认测试首先要进行有效性测试以及软件配置审查,然后进行验收测试。
确认测试一般有三个步骤:
1. 有效性检查
2. 软件配置审查
3. 验收测试
α测试和β测试(当一个软件是作为产品被许多客户使用时需要这种测试)
α测试:受控环境中的测试
β测试:实际使用环境中的测试
系统测试:
恢复测试、安全性测试、强度测试、性能测试、可靠性测试、安装测试
调试:
调试的任务是根据测试时发现的错误,找出原因和具体的位置,进行改正。常用的调试方法有以下几种。
1. 试探法
2. 回溯法
3. 对分查找发
4. 归纳法
5. 演绎法
黑盒测试
等价类划分、边界值分析、错误推测法、因果图
等价类划分:选取少数有代表性的数据作为测试用例,等价类可以分为有效等价类,无效等价类两种。每个用例应尽可能多的覆盖尚未覆盖的有效等价类,仅覆盖一个尚未覆盖的无效等价类。
白盒测试
白盒测试(逻辑驱动测试)
最常见的方法是逻辑覆盖法,所有可用的方法按照覆盖程度从弱到强的排序为:
语句覆盖,判定覆盖,条件覆盖,判定-条件覆盖,条件组合覆盖,路径覆盖。
软件维护
1)改正性维护
2)适应性维护
3)完善性维护
4)预防性维护
软件的可维护性:
1) 可理解性
2)可测试性
3)可修改性
软件维护管理
保证维护质量、提高维护效率、控制维护成本。
每次修改需经过申请、评估、批准、实施、验证等步骤。
7.软件过程改进(CMM)
CMM
CMM模型描述和分析了软件过程能力的发展程度,确立了一个软件过程成熟度的分级标准。
1. 初始级
2. 可重复级
3. 已定义级
4. 已管理级
5. 优化级