一、软件测试基础理论
1、软件定义
软件是计算机系统中与硬件相互依存的一部分,包括程序、数据以及相关文档的完整集合。
程序是指按事先设计的功能和性能要求执行的指令序列;
数据是使程序能正常操作信息的数据结构
文档是与程序开发、维护和使用有关的图文材料
2、软件测试定义
1983年,IEEE给出软件测试的标准定义:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果和实际结果之间的差别
3、软件测试的原则
- 所有测试都应该追溯到用户需求
- 尽早启动测试工作,早做测试计划
- 不能穷进测试不可能,遵循测试工作的Good-enough原则:足够好,适度原则(在成本、时间、质量三者之间做平衡)
- 遵循Pareto二八法则:80%的问题出自20%的核心模块
- 分阶段测试、分层测试
- 由独立的第三方来构造测试
4、测试标准
- 国际标准:如ISO质量、CMM(成熟度)、IEEE(软件工程规范)
- 国家标准:GB(强制标准)、GB/T(推荐标准)
- 行业标准
- 公司标准
- 用户标准
5、软件生命周期
软件生命周期包括可行性分析、需求分析、软件设计(概要设计、详细设计)、编码、测试、维护7大阶段。
5.1、问题定义及规划阶段(可行性分析)
此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性
5.2、需求分析
在确定软件开发可行的情况下,对软件需要实现的各个功能进行具体分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。“唯一不变的是变化本身。”,同样需求也是在整个软件开发过程中不断变化和深进的,因此我们必须制定需求变更计划来应付这种变化,以保护整个项目的顺利进行。
5.3、软件设计
此阶段主要根据需求分析的结果,对整个软件系统进行设计,如系统框架设计,数据库设计等等。软件设计一般分为总体设计和具体设计。好的软件设计将为程序编码打下良好的基础
5.4、程序编码
此阶段将软件设计的结果转化为计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序运行效率
5.5、软件测试
- 在软件设计完成后要经过严密的测试,发现软件在整个设计过程中存在的问题并加以纠正
- 整个测试过程分:单元测试、组装测试、系统测试三个阶段进行
- 测试的主要方法有:白盒测试和黑盒测试两种
- 在测试过程中需要建立具体的测试计划,并按照测试计划进行测试,以减少测试的随意性
5.6、运行维护
软件维护是软件生命周期中持续时间最长的阶段。在软件开发完成并投进使用后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括:纠错性维护和改进性维护两个方面。
6、软件开发模型
6.1 瀑布模型
上一阶段完全结束,才能进入下一阶段,不能回头
优点:
- 结构清晰、阶段划分明确
- 文档齐全,流程规范
- 管理简单,适合零基础团队
缺点:
- 无法返工:前期需求写错,到测试阶段才发现,修改成本高
- 用户全程看不到成品、上线才能验收
- 风险集中在最后,前期问题全部积压到后期爆发
- 不适应需求变更
适用场景:需求固定不变、小型项目、军工/涉密/传统行业、稳定系统
6.2 增量模型(渐进模型)
分批次、一部分一部分开发上线,不一次性做完整个系统,拆成多个增量模块。做完一块测试一块交付一块
优点:
- 早期就能交付部分功能,用户可以提前使用,及时了解软件项目进展
- 风险分散,不会全部堆到最后。一个开发周期内的错误不会影响到整个软件系统
- 方便调整局部
- 开发顺序灵活。开发人员可以对组件的实现顺序进行优先排序,先完成需求稳定的核心组件
缺点:
- 需要良好的整体架构设计:架构没设计好,后期加模块会严重冲突、耦合严重
- 多版本迭代,集成测试复杂
- 对项目管理人员管理全局水平有较高要求
适用场景:大型软件、需求可以分批实现、大型企业系统
6.3快速原型模型
在正式开发前。先根据用户初步需求,快速搭建一个简单可运行的原型系统。用来给用户看效果、确认需求、反复沟通修改,需求确认无误后,再抛弃/优化原型,开发最终正式软件
优点:
- 增加用户与开发人员的交流
- 用户在项目开发中占主导作用
- 满足用户的动态需求
- 降低开发风险
缺点:
- 因为用户的参与,使得忽视原型对实际环境的适应性等技术问题,所以不适合大型、复杂项目开发
- 对于技术层面远大于其分析层面的问题不宜使用快速原型法
6.4螺旋模型
四个阶段循环:制定计划,风险分析,实施工程(开发实现),用户评估,一圈一圈螺旋上升,重点:全程风控
优点:
- 风险控制极强,每一轮都专门分析风险
- 适合大型、复杂、高风险项目
- 允许需求频繁变更
缺点:
- 成本高、周期长、流程复杂
- 需要专业风险评估人员
适用场景:大型复杂项目、高风险项目、金融/航天/大型政务系统