测试也是程序员的事吗?
为什么要测试?因为它能让项目的质量有保证。
程序员最基本的职业素养:保证自己开发的软件尽可能地是对的。因此在提交代码之前,将代码运行一遍,保证提交的基本功能是正确的,这就是最基本的测试。
测试应该是程序员工作的一部分,为什么这么说呢?因为测试人员只能站在系统外部做功能特性的测试。而一个软件是由它内部诸多模块组成的,测试人员只从外部保障正确性,所能达到的效果是有限的。程序员测试能保证自己的模块内部正常
测试是软件开发重要的组成部分,测试应该是软件开发团队中所有人的事,而不仅仅是测试人员的事。因为软件变更成本会随着时间和开发阶段逐步增加,能在早期解决的问题,就不要将它延后至下一个阶段。
测试区分:单元测试、集成测试、系统测试
不同的测试如何组合的最佳实践:测试金字塔。它强调的重点是,越底层的测试(即单元测试)应该写得越多。只有按照测试金字塔的方式写测试,持续集成才能更好地发挥作用。
今日一句话:多写单元测试
测试驱动开发TDD
先写测试,后写代码的实践指的是测试先行开发,而非测试驱动开发
测试驱动开发:Test Driven Development,即TDD。它的节奏是:“红-绿-重构”。把测试放在前面,还带来了视角的转变,要编写可测试的代码,会减少先写代码后写测试代码的难度。
测试先行开发和测试驱动开发在第一步和第二步是一样的,先写测试,然后写代码完成功能。二者的差别在于,测试驱动开发并没有就此打住,它还有一个更重要的环节:重构。
重构是一个消除代码坏味道的过程,也就是说,在功能完成而且测试跑通之后,我们还会再次回到代码上,处理一下代码上写得不好的地方。一旦你有了测试,你就可以大胆地重构了,因为任何修改错误,测试会替你捕获到。没有测试,你只能是提心吊胆地重构。
今日一句:编写可测试的代码
为什么你的测试不够好?
测试的基本结构:前置准备、执行、断言和清理。
常见的测试“坏味道”:做了太多事的测试,没有断言的测试,测试里有判断语句。
好的测试标准: A-TRIP,即:
Automatic,自动化;把测试尽可能交给机器执行,人工参与的部分越少越好
Thorough,全面的;尽可能用测试覆盖各种场景。 1、测试要考虑各种场景:正常的、异常的、各种边界条件;2、测试是否覆盖了所有的代码和所有的分支,即测试覆盖率
Repeatable,可重复的;某一个测试反复运行,结果应该是一样的,即每一个测试本身都不应该依赖于任何不在控制之下的环境。如果有,怎么办,想办法。
Independent,独立的;测试和测试之间不应该有任何依赖。如果测试之间存在依赖,将测试并行起来,就有可能出现各种问题。如果实在要依赖,每个测试自己负责前置准备和后续清理。
Professional,专业的。测试代码,也是代码,也要按照代码的标准去维护。
今日一句:要想写好测试,就要写简单的测试
文章来源:极客时间《程序员10x工作法》
网友评论