2. 软件质量与测试基础
在软件测试与质量工程中,测试活动并不是“想到哪测到哪”,而是围绕质量目标展开的系统性工程。要在一个综合项目中识别关键质量属性并找到合适的测试切入点,首先需要建立一套共同语言:质量模型回答“质量由哪些维度构成”,测试原则回答“测试活动应遵循哪些基本规律”,测试级别回答“在什么粒度上测试”,测试类型回答“从哪个角度测试”。这四者组合起来,才能把抽象的质量目标转化为可执行的测试策略。
一、质量模型:把“好软件”拆成可讨论的属性
ISO/IEC 25010 是当前广泛使用的产品质量模型,它将产品质量分为八个特性:功能适合性、性能效率、兼容性、易用性、可靠性、安全性、可维护性和可移植性。每个特性还可以继续分解为子特性,例如可靠性包含成熟性、可用性、容错性和易恢复性;性能效率包含时间行为、资源利用率和容量。质量模型的价值在于:它让“这个系统质量好不好”这种模糊问题,变成“在哪些质量特性上、达到什么程度”的可讨论问题。
在综合项目中,质量属性不能平均用力。假设我们面对的是一个“在线考试系统”,需求包括:考生登录、随机组卷、限时答题、自动交卷、成绩统计、防作弊。此时关键质量属性通常不是全部八项,而是:安全性(身份认证、防篡改、防作弊)、可靠性(考试过程中不能崩溃、断网可恢复)、性能效率(开考瞬间大量并发登录与交卷)、易用性(考生在紧张状态下能快速理解操作)、兼容性(不同浏览器与移动设备)。而可移植性、可维护性虽然重要,但不是本轮测试的第一优先级。识别关键质量属性的方法,是从“业务失败代价”出发:一旦哪个属性不达标,会导致考试无法进行、成绩不可信或数据泄露,它就应该被列为关键属性。
二、测试原则:避免无效测试的七条基本规律
测试原则是长期实践总结出的规律,常见包括:测试显示缺陷的存在,而不能证明系统没有缺陷;穷尽测试是不可能的;测试尽早介入;缺陷具有集群性;杀虫剂悖论;测试活动依赖于测试背景;不存在缺陷的系统不等于用户满意的系统。这些原则在项目中直接指导测试切入点选择。
例如“测试尽早介入”意味着需求评审阶段就应开始测试活动:检查“随机组卷”是否定义了题目难度分布、是否允许同一考生重复抽到同一题;“缺陷集群性”意味着如果成绩统计模块发现多个缺陷,就应加大该模块的测试密度;“杀虫剂悖论”意味着同一组回归用例反复执行后,需要补充新的场景,如异常交卷、重复提交、断网重连等。测试原则不是口号,而是资源分配的判断依据。
三、测试级别:从单元到验收的递进关系
测试级别通常分为单元测试、集成测试、系统测试和验收测试。单元测试关注函数或类级别的正确性,例如“计算得分”函数在单选题、多选题、未答题等输入下的输出;集成测试关注模块间接口与数据传递,例如“答题模块”与“交卷模块”之间答案数据的完整性和时序;系统测试关注整个系统在真实环境下的端到端行为,例如考生从登录到交卷再到成绩生成的完整链路;验收测试关注是否满足用户与业务需求,例如教师能否正确发布考试、导出成绩。
不同级别的测试切入点不同:单元测试切入代码内部逻辑,集成测试切入接口契约,系统测试切入业务流程,验收测试切入业务价值。在综合项目中,应明确每个级别的进入条件与退出条件,例如单元测试要求语句覆盖率不低于 70%,系统测试要求所有 P0 用例通过且无未关闭的严重缺陷。
四、测试类型:从不同角度覆盖质量属性
测试类型是按测试目的划分的,常见包括功能测试、性能测试、安全测试、兼容性测试、易用性测试、可靠性测试等。测试类型与质量模型存在映射关系:功能测试对应功能适合性,性能测试对应性能效率,安全测试对应安全性,兼容性测试对应兼容性,易用性测试对应易用性,可靠性测试对应可靠性。测试级别与测试类型是正交的:同一个系统测试级别下,可以同时开展功能、性能、安全等多种类型的测试。
以在线考试系统为例,测试切入点可以这样识别:功能测试切入组卷规则、答题保存、自动交卷、成绩计算;性能测试切入开考瞬间 5000 人并发登录、交卷峰值写入;安全测试切入越权查看他人试卷、答案泄露、接口重放;兼容性测试切入 Chrome、Edge、Safari 及移动端浏览器;可靠性测试切入断网后答案本地缓存与恢复、服务重启后考试状态保持;易用性测试切入倒计时提醒、答题卡导航、异常提示文案。
五、从质量属性到测试切入点的实操方法
在项目中,可以按以下步骤把质量模型转化为测试切入点。第一步,列出需求中的业务场景,标注每个场景失败时的代价。第二步,将场景映射到质量特性,选出 3~5 个关键质量属性。第三步,为每个关键属性选择测试级别和测试类型。第四步,定义可度量的验证指标。例如,针对“开考瞬间并发登录”这一场景,关键属性是性能效率,测试级别为系统测试,测试类型为性能测试,验证指标为:5000 用户并发登录,平均响应时间不超过 2 秒,错误率低于 0.1%。针对“断网后答案不丢失”,关键属性是可靠性,测试级别为系统测试,测试类型为可靠性测试,验证指标为:断网 30 秒内重新连接,已作答内容完整保留且可继续答题。
需要强调的是,测试级别与测试类型不是一一对应关系。单元测试也可以做性能测试(如算法耗时),系统测试也可以做安全测试。选择的关键在于:当前要验证的质量属性,在哪个级别上最容易被观察和定位。例如,安全漏洞中的越权访问,往往在集成测试或系统测试阶段通过接口调用更容易发现;而组卷算法的边界条件,在单元测试阶段用参数化用例更高效。
六、常见误区与判断依据
第一个误区是把测试类型等同于测试级别,例如认为“性能测试就是系统测试”。实际上,性能测试可以在单元级别做微基准,也可以在系统级别做端到端压测。第二个误区是只关注功能测试,忽略非功能质量属性。在线考试系统中,功能全部通过但开考时系统崩溃,业务仍然失败。第三个误区是测试切入点选择过晚,等到系统测试阶段才发现安全或性能问题,修复成本高。判断切入点是否合适,可以问三个问题:这个质量属性在当前级别能否被有效观察?发现缺陷后能否快速定位到具体模块?修复成本是否在可接受范围内?
总之,质量模型提供属性清单,测试原则提供决策规律,测试级别提供粒度框架,测试类型提供观察角度。四者结合,才能从项目需求中识别出真正关键的质量属性,并找到高性价比的测试切入点,使测试活动既覆盖风险,又不至于无限扩张。