赞
踩
最近看如何满足软件的质量需求,其中有一部分是讲软件的可测试性,就深究了下这部分。
测试按照测试阶段划分的话有单元测试、集成测试、系统测试、验收测试。其中:
单元测试是针对代码中的最小单元(函数、方法等)进行测试;
集成测试是测试不同单元(模块、组件)之间的协作与集成情况;
系统测试是对整个系统的功能、性能等进行测试,确认系统是否符合需求规格;
验收测试是由最终用户或客户进行,确认系统是否符合用户需求和预期。
我们这次主要聊一下单元测试。
单元测试就像是给我们的类中一些代码做体检,能帮助我们查出潜在问题,确保代码稳健可靠。避免后续痛苦的修复过程。写出友好单元测试的代码会给咱带来啥好处呢?
首先,这种代码往往更模块化、更易复用,因为它遵循单一职责原则,把复杂功能拆成小模块,让测试变得轻而易举。其次,友好单元测试的代码通常维护成本更低,因为它结构清晰、容易理解和修改,没那么容易搞错。再者,支持单元测试的代码也有助于团队合作,因为好的测试覆盖可以增加信心,让团队成员放心大胆地对代码进行修改和重构。
总的来说,单元测试就是我们软件开发中的“保镖”,能保证我们的代码质量、可维护性和开发效率。
那单元测试要遵循哪些原则才能做的更好呢,根据阿里巴巴的代码规范中好的单元测试必须遵守 AIR 原则,即 Automatic(自动化)、Independent(独立性)、Repeatable(可重复)。三者的定义如下:
单元测试应该是全自动执行的,并且非交互式的。测试用例通常是被定期执行的,执行过程必须完全自动化才有意义。输出结果需要人工检查的测试不是一个好的单元测试。单元 测试中不准使用System.out 来进行人肉验证,必须使用 assert 来验证。
保持单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间决不能互相调用,也不能依赖执行的先后次序。
单元测试是可以重复执行的,不能受到外界环境的影响。因为单元测试通常会被放到持续集成中,每次有代码 check in
时单元测试都会被执行。如果单测对外部环境(网络、服务、中间件等)有依赖,容易导致持续集成机制的不可用。
还有一些开发原则我们也要进行准守:
知道这些原则后,我们就可以按照业内通用的步骤进行测试了,一般的步骤有:
单元测试也是一个工作,怎样评估这个工作的有效性呢?以下是一些常见的模型:覆盖率模型、故障发现率模型、测试成本模型。
覆盖率模型可以评估测试用例的完整性,故障发现率模型可以评估测试用例的有效性,测试成本模型可以评估测试用例的效率。
覆盖率是衡量测试用例是否能够涵盖所有代码路径的指标。通过计算代码覆盖率,可以评估测试用例的完整性。常见的覆盖率指标包括:
行覆盖率:表示测试用例是否能够覆盖所有代码行;
条件覆盖率:表示测试用例是否能够覆盖所有可能的条件组合;
分支覆盖率:表示测试用例是否能够覆盖所有可能的控制流分支。
故障发现率是衡量测试用例是否能够发现BUG的指标。通过计算故障发现率,可以评估测试用例的有效性。故障发现率可以通过以下公式计算:
[ DR = \frac{TP}{TP + FP} ]
其中:
这个公式显示了成功发现真实缺陷的比率,即在所有被报告的缺陷中,有多少是真实存在的。在软件测试过程中,故障发现率是一个重要的指标,能够帮助评估测试用例的准确性和实用性,对测试结果进行更全面和有效的分析。
测试成本是衡量测试过程中所花费的时间和资源的指标。通过计算测试成本,可以评估测试用例的效率。软件测试成本通常涉及到多个因素,包括人力、时间、工具和资源消耗等。测试成本模型旨在提供一个估算或计算测试过程中会耗费多少成本的方法。虽然没有单一的公式能适用于所有的情况,但以下是一种基本的测试成本模型公式,可用于估算测试成本:
[ C_{测试} = C_{人力} + C_{工具} + C_{环境} + C_{管理} + C_{其他} ]
其中:
最后再介绍几个java语言常用的软件测试框架,
当然写单元测试也是一个苦活累活,idea提供了一个Squaretest插件可以帮我们生成单元测试代码,大家也可以尝试一下,超级好用。
最后再介绍一个小报童哈
主要内容如下,提供至少100篇专业建议,包含程序员的技术发展、晋升、平台选择、职场软技能和副业等各个领域。 购买加入陪伴群,得到与前大厂 P9 右军近距离接触的机会,还可以免费参加资深嘉宾的主题分享。 只需10元,现在购入私信我有大额优惠哈,我的微信号是:xiaoqiang666it
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。