容易被忽视的软件质量
广义的质量其实包括软件产品交付流程中的方方面面,每个环节的一点疏忽都可能对软件质量造成不同程度的影响。下面列举一些做项目的过程中容易被忽略的质量:
- 需求分析过程仓促,或者参与人员角色比较单一,导致业务上下文了解不够,关键场景缺乏考虑等;
- 设计稿变更频繁,导致写好的代码又重新推翻;
- 项目初期只考虑少量用户的场景,随着业务的发展,系统功能难以扩展,导致严重性能瓶颈;
- 缺乏跨功能需求的关注,导致严重的安全或者性能问题;
- 忙于交付更多的功能,忽略了对代码质量的关注,该重构的没有重构,在原本不太健康的代码基础上继续增加更多的代码,导致混乱,筑起高高的技术债;
- 大面积的重构发生在版本释放前夕,无法全面回归,带来很大的风险;
- 技术选型失误,开发困难,没有及时改进,一错再错,最后问题严重到无法弥补;
- 第三方组件评估不够充分,导致线上环境无法承载等;
- 开发缺少对异常情况的处理,测试过程缺乏探索,只覆盖到主干路径,边角用例可能引发问题;
- 开发或者测试都只考虑当前功能模块,缺乏更广范围的考虑;
- 没有足够的测试覆盖,导致新增代码容易破坏已有功能;
- 对实体环境了解不够,而且没有足够日志信息记录,问题难以定位,导致问题解决时间过长;
这样的问题还有很多很多,无法一一枚举。每个角色,每个环节都有可能出现纰漏,导致产品软件质量问题。
质量是什么?
那么质量到底是什么?对于不同的角色、不同的利益相关者,质量有着不同的含义。总的来说,可以分为使用质量、交付质量、过程质量。
1 使用质量
使用质量是从使用方,用户视角来看待质量的,主要又分为如下两种类型:
- 2B(面向企业)客户:我的验收标准你都能达到,例如:能够通过我指定的实验室认证。
- 2C(面向使用者)用户:流畅、稳定、待机时间足够长、不卡顿,还有一些能覆盖日常生活诉求的贴心的功能,例如:拍照令人满意、打游戏令人畅快、支付令人放心等等。
使用质量能够被终端用户直接感知,直接影响用户的使用,因而显得特别重要,客户/用户一般也比较容易为使用质量买单。
2 交付质量
验收质量是生产方模拟客户/终端用户对产品进行验收、测试,主要由测试工程师的角色完成。内容上一方面验收需求范围是否100%覆盖、一方面验收功能是否存在缺陷。手段一般分为如下两种:
- 手动测试:是指通过手工的方式模拟终端用户的使用,如需求验证、演示、可用性测试和探索式测试等。
- 自动化测试:从多个层次(单元、组件、端到端等)写自动化测试代码,并将其作为部署流水线的一部分来执行,每次提交代码、配置或环境以及运行时所需要软件发生变化时,都要触发这些测试。同时,随着项目业务和技术架构的演进,自动化测试策略也需要随之调整、不断改进。
3 过程质量
过程质量是指软件系统内部的质量状态,包括:
- 生产代码过程产生的概要/详细设计文档质量
- 代码本身的效率、结构、可读性、可扩展性、可靠性和可维护性等过程质量
- 验证代码正确性设计的测试用例质量
- 验证功能所提交的缺陷质量
过程质量不会被终端用户感知到,不容易被客户/用户买单,也常容易被团队忽略。但是,过程质量一定会影响交付质量也一定会影响使用质量,需要团队引起重视,加强设计、开发等生产“过程”的质量管控。软件构建过程中多大程度上做到了质量内控,就有多少缺陷做到了提前预防。
《软件测试全套免费视频》https://pan.baidu.com/s/1PtcLeVA7ECVCW_TBKFsxbg
提取码:qpcf
如何度量软件产品的质量?
我们可以通过如下三个维度来度量软件产品的质量:
- 使用质量:用户反馈、返修问题数量、技术支持数量
- 交付质量:缺陷个数、功能回退缺陷个数、返工缺陷个数
- 过程质量:代码复查数据、结对编程结果数据、静态代码审查结果
了解了三个维度质量的含义和度量方法,我们不难理解:
质量不是零缺陷,不是百分百的测试覆盖率,也不是没有技术债;
质量是快速反馈,任何改变能够快速验证,并且快速修复;
质量是把精力都集中在做正确的事情上;
质量是团队在代码、设计和交付上有信心做出改变;
质量是团队对任何改变负责。
如何提高软件产品的质量?
质量是贯穿项目整个生命周期的非常关键的部分,质量保障工作自然也是需要在在每个角色每个环节有所体现。下面从软件生产过程的几个主力角色来看看各自怎么为质量负责以及比较容易出的问题:
写在最后
质量不仅是某个角色的事情,团队每个成员都撇不开质量这个话题。团队为质量负责要求所有质量角色都将质量推向看板的左侧,从每条需求的开始就将质量融入其中。软件开发生命周期的每个环节、每个实践活动都不可轻视,只有在每个点上都做好质量的工作,才能实现真正的高质量交付高质量使用,每个角色对此都有着非常重要的职责。
在此引用质量专家对质量的阐释: