1. 软件概述
1.1 软件生命周期
- 问题定义
由软件开发方同需求方共同讨论,主要确定软件的开发目标以及可行性。
- 需求分析
该阶段对软件需求进行更深入的分析,划分需要实现的功能模块,并制作文档。
- 软件设计
该阶段是在需求分析的基础上对整个软件系统进行设计,如系统架构设计、数据库设计等。
- 软件开发
该阶段是在软件设计的基础上,选择一种编程语言进行开发。
- 软件测试
该阶段是在软件开发完成后对软件进行测试,以查找软件设计与软件开发中存在的问题并修改。
- 软件维护
是软件完成测试后并投入使用之后,面对庞大的用户群体可能无法满足用户需求,此时就需要对软件进行维护升级以延续软件使用寿命。
1.2 软件开发模型
1. 瀑布模型
开发过程6个阶段:计划 需求分析 软件设计 编码 测试 运行维护
瀑布模型是严格按照线性方式开发的,无法满足用户需求的变更。
2. 快速原型模型
开发过程:需求分析 构建原型 原型评价 确定最终需求 软件开发
特点:快速原型模型克服了需求不明确带来的风险,适用于不能预先确定需求的软件项目。
缺点:不利于开发人员对产品进行扩展
3. 迭代模型
又称增量模型或者演化模型,开发过程:每一次迭代都需要经过 需求分析 软件设计 编码 测试的过程。
特点:更好的适应用户的需求变更,组件化的交付产品,客户可以经常看到产品,降低了软件开发的成本与风险。
缺点: 增加将组件集成到系统中的集成失败风险,容易退化到 “边做边改” 的开发形式,失去对软件开发的整体控制。
4. 螺旋模型
该模型融合了瀑布、快速原型模型。
特点:引入了风险分析、适合开发复杂的大型项目
5. 敏捷模型
- 软件项目在构建初期被拆分成多个相互联系而独立运行的子项目,然后迭代完成子项目
- 当客户需求变更时,敏捷模型能够迅速地对某个子项目做出修改满足用户需求。
- 不断对产品进行细微、渐近的改进,每改进一小部分,如果可行便逐步扩大改进范围。
- 开发未动、测试先行
- 注重”人“在软件开发中的作用
特点:及时的响应客户需求变更、不断适应新的趋势,适合小型项目
缺点:开发灵活的同时也造成了一定程度的混乱。
1.3 软件质量概述
1. 软件质量的概念
- 满足需求规定
- 满足用户需求
- 满足用户隐式的需求
2. 软件质量模型
- 功能性
- 可靠性
- 可使用性
- 效率
- 可维护性
- 可移植性
3. 影响软件质量的因素
- 需求模糊
- 软件开发缺乏规范性指导
- 软件开发人员问题
- 缺乏软件质量控制管理
1.4 软件缺陷管理
1.软件缺陷产生的原因
- 需求不明
- 软件结构复杂
- 编码问题
- 项目期限短
- 使用新技术
2.缺陷处理流程
- 提交
- 分配
- 确认
- 拒绝或者拖期
- 处理
- 复测
- 关闭
1.5 软件测试概述
1. 按照测试阶段分类
- 单元测试
- 冒烟测试
- 集成测试
- 系统测试
- 验收测试
2. 按照测试技术分类
- 黑盒测试
- 白盒测试
3. 按照测试质量特性分类
- 功能测试
- 性能测试
4. 按照自动化程度测试分类
- 手工测试
- 自动化测试
5. 按照测试类型分类
- 界面测试
- 安全性测试
- 文档测试
6. 其他测试
- α测试
- β 测试
- 回归测试
- 随机测试
1.6 软件测试与开发
1. 常见的软件测试模式
- V模型
特点具有阶段性、顺序性和依赖性、包含软件源码底层测试、需求层的高层测试
缺点:只能在编码后测试不能发现需求分析等早期的错误,为后期系统测试、验收测试埋下了隐患
- W模型
有利于尽早地全面发现问题。
缺点:无法支持迭代、自发性等需要变更调整的项目。
- H模型
测试流程和其他工作流程是并发执行的,只要一个工作流程条件成熟就可以进行测试
- X模型
将程序分成多个片段反复迭代测试、针对单独的程序片段进行相互分离的编码和测试。
2. 软件测试原则
- 测试基于客户需求
- 测试尽早进行
- 穷尽测试不可能的
- 遵循GoodEnough原则
- 测试缺陷要符号二八定理
- 避免缺陷免疫
3. 软件测试流程
- 分析测试需求
- 制定测试计划
- 设计测试用例
- 执行测试
- 编写测试报告