一、瀑布模型
- 概念:迭代模型/迭代开发方法,一般用于结构化开发。
- 结构:软件计划——需求分析——软件设计——程序编码——软件测试——运行维护。
- 缺陷:需求分析阶段可能需求不是很明确,可能出现大量返工现象。
- 场合:需求明确,二次开发。
二、原型模型、演化模型、增量模型、抛弃式模型
- 原型模型:开发初期构造一个简易的系统。
- 演化模型:多次迭代演化原型模型,即为演化模型。
- 增量模型:兼具瀑布模型和原型模型的特点。
- 抛弃式模型:主要用于界面设计,设计一个简易界面,来获取用户的需求,需求确定后即可抛弃该界面。
三、螺旋模型
- 概念:兼具原型模型、演化模型、增量模型、瀑布模型的特点,整个开发、维护、迭代过程类似一个螺旋形状,其最为显著的一个特征就是引入风险分析,其主要是结合了瀑布模型和快速原型模型。
- 主要活动:计划指定、风险分析、工程实施、客户评估。
四、V模型
- 概念:瀑布模型的结构加上完整的测试环节,形成了V字型,所以叫V模型。
- 结构:需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试。
五、喷泉模型与RAD
- 喷泉模型:属于面向对象的模型,有迭代和无间隙的特点。
- RAD:是瀑布模型和构件组装模型合并而成的。
- RAD结构:业务建模、数据建模、过程建模、应用生成、测试与交付。
六、构件组装模型(CBSD)
- 结构:需求分析与定义、软件架构设计、构件库的建立(标准:CORBA、COM、DCOM、COM+、EJB)、应用软件构建、测试和发布。
- 特点:构件库的存在,保证其可复用性。
七、统一过程
- 结构:初始——细化——构建——交付
- 特点:用例驱动、以架构为中心、迭代和增量
- 初始:确定项目范围和边界、识别系统的关键用例、展示系统的候选架构、估计项目费用和时间、评估项目风险。
- 细化:分析系统问题领域、建立软件架构基础、淘汰最高风险元素。
- 构建:开发剩余的构件、构件组装与测试。
- 交付:进行 β \beta β测试、制作发布版本、用户文档定稿、确认新系统、培训和调整产品。
八、敏捷开发方法
- 组成:自适应开发、水晶方法、特征驱动开发、SCRUM(迭代的增量化过程)、极限编程、动态系统开发方法(以业务为核心)。
- 基本原则:短平快的会议、小型版本发布、较少的文档、合作为重、客户直接参与、自动化测试、适应性计划调整、结对编程、测试驱动开发、持续集成、重构。
- 4大价值观:沟通、简单、反馈、勇气。
- 5大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
- 12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。
九、逆向工程
- 流程:设计模型(实现级),程序与数据结构信息(结构级),对象模型、数据和控制流模型(功能级)、UML状态图和部署图(领域级)。
十、净室软件工程
- 净室即无尘室、洁净室;也就是一个受控污染级别的环境。
- 使用盒结构规约(或形式化方法)进行分析和设计建模,并且强调将正确性验证,而不是测试,作为发现和消除错误的主要机制。
- 使用统计的测试来获取认证被交付的软件的可靠性所必需的出错率信息。
十一、测试原则与类型
-
测试原则:
1)尽早、不断的进行测试
2)程序员避免测试自己设计的程序
3)既要选择有效、合理的数据,也要选择无效、不合理的数据
4)修改后应进行回归测试
5)尚未发现的错误数量与该程序已发现错误数成正比
-
测试类型
1)动态测试:黑盒测试法、白盒测试法、灰盒测试法
2)静态测试:桌前检查、代码走查、代码审查
十二、测试用例设计
- 黑盒测试:等价类划分、边界值分析、错误推测、因果图
- 白盒测试:基本路径测试、循环覆盖测试、逻辑覆盖测试
- 逻辑覆盖测试:语句覆盖、判定覆盖、条件覆盖、条件判定覆盖、修正的条件判定覆盖、条件组合覆盖、点覆盖、边覆盖、路径覆盖
十三、测试阶段
单元测试
集成测试
- 一次性组装
- 增量式组装:自顶向下、、自底向上、混合式
确认测试
- 内部确认测试
- Alpha测试
- Beta测试
- 验收测试
系统测试
- 恢复测试
- 安全性测试
- 压力测试
- 性能测试:负载测试、强度测试、容量测试
- 可靠性测试
- 可用性测试
- 可维护性测试
- 安装测试
冒烟测试
十四、面向对象测试
- 算法层(单元测试):包括等价类划分测试、组合功能测试(基于判定表的测试)、递归函数测试和多态消息测试
- 类层(模块测试):包括不变式边界测试、模态类测试和非模态类测试
- 模板层/类树层(集成测试):包括多态服务测试和展平测试
- 系统层(系统测试)
十五、测试管理
- 测试团队管理
- 测试计划管理
- 错误(缺陷)跟踪管理(核心部分)
- 测试件管理
十六、软件调试
软件调试方法
- 蛮力法:主要思想是“通过计算机找错”,低效,耗时。
- 回溯法:从出错处人工沿控制流程往回追踪,直至发现出错的根源。复杂程序由于回溯路径多,难以实施。
- 原因排除法:主要思想是演绎和归纳,用二分法实现。
软件调试与测试的区别
- 测试的目的是找出存在的错误,而调试的目的是定位错误并修改程序以修正错误。
- 调试是测试之后的活动,测试和调试在目标、方法和思路上都有所不同。
- 测试从一个已知的条件开始,使用预先定义的过程,有预知的结果;调试从一个未知的条件开始,结束的过程不可预计。
- 测试过程可以事先设计,进度可以事先确定;调试不能描述过程或持续时间。
十七、新旧系统的转换策略
- 直接转换策略
- 并行转换策略
- 分段转换策略
十八、数据转换与迁移
- 流程:旧数据库——抽取——转换——装在——新数据库
- 系统切换前通过工具迁移
- 系统切换前采用手工录入
- 系统切换后通过新系统生成
十九、系统运行与维护
- 可维护性:易分析性、易改变性、稳定性、易测试性
- 维护类型:改正性维护、适应性维护、完善性维护、预防性维护
二十、软件能力成熟度模型集成(CMMI)
CMM
- 初始级:未加定义的随意过程,软件过程的特点是无秩序的。
- 可重复级:规则化和纪律化的过程,已建立基本的项目管理过程。
- 已定义级:标准和一致的过程,用于管理的和工程的软件过程均已文档化、标准化,并形成了整个软件组织的标准软件过程。
- 已管理级:可预测过程,软件过程和产品质量有详细的度量标准。软件过程和产品质量得到了定量的认识和控制。
- 优化级:持续改进的过程,通过对来自过程、新概念和新技术等方面的各种有用信息的定量分析,能够不断地、持续性地对过程进行改进。
阶段式
- 已管理级:需求管理、项目计划、配置管理、项目监督与控制、供应商合同管理、度量和分析、过程和产品质量保证。
- 已定义级:
- 定量管理级:核心点是管理的量化。
- 优化级:核心店是管理的优化。
连续式
- 过程管理
- 项目管理
- 工程
- 支持
软件配置项
- 环境类:指软件开发环境或软件维护环境,例如编译器、操作系统、编辑器、数据库管理系统、开发工具、项目管理工具、文档编制工具等。
- 定义类:指需求分析与定义阶段结束后得到的工作产品,例如需求规格说明、项目开发计划、设计标准或设计准则、验收测试计划等。
- 设计类:指设计阶段结束后得到的工作产品,例如系统设计规格说明、程序规格说明、数据库设计、编码标准、用户界面标准、测试标准、系统测试计划、用户手册等。
- 测试类:指系统测试完成后的工作产品,例如系统测试数据、系统测试结果、操作手册、安装手册等。
- 维护类:指进入维护阶段以后产生的工作产品。
二十一、软件模块的耦合和内聚
耦合度
- 非直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
- 数据耦合:一组模块借助参数表传递简单的数据。
- 标记耦合:一组模块通过参数表传递记录信息(数据结构)。
- 控制耦合:模块之间传递的信息中包含用于控制模块内部逻辑的信息。
- 外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。
- 公共耦合:多个模块都访问同一个公共数据环境,公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
- 内容耦合:一个模块直接访问另一个模块的内如数据;一个模块不通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。
内聚度
- 功能内聚:完成一个单一的功能,各个部分协同工作,缺一不可。
- 顺序内聚:处理元素相关,而且必须顺序执行。
- 通信内聚:所有处理元素集中在一个数据结构的区域上。
- 过程内聚:处理元素相关,而且必须按特定的次序执行。
- 瞬时内聚(时间内聚):所包含的任务必须在同一时间间隔内执行。
- 逻辑内聚:完成逻辑上相关的一组任务。
- 偶然内聚(巧合内聚):完成一组没有关系或松散关系的任务。