本系列是《Unit Testing》 一书的读书笔记 + 精华提取。

书中的例子 C# 语言编写,但概念是通用的,只要懂得面向对象编程就可以。

单元测试当前的状态

  • 目前,在(美国的)大部分公司里,单元测试都是强制性的。

  • 生产代码与测试代码之间的比例大约在 1:1 到 1:3 之间。

    • 有时候比例会更高,甚至达到 1:10

  • 二十多年来,讨论的话题已经从“是否应该做单元测试”变成了“编写出好的单元测试意味着什么?”

  • 单元测试好与不好不仅仅是个人喜好品味的问题,更是与项目成功失败密切相关

  • 我们的目标不仅是掌握测试工具(很多资料都有这种教程),而是要:“不仅要写单元测试,而且让做单元测试的方式能够为你提供最好的回报”

企业应用的特点是什么?

  • 大量高复杂度的业务逻辑

  • 项目的声明周期很长

  • 数据量不算特别大,也不小

  • 对性能的要求不高或中等水平

单元测试的目的

单元测试的实践通常会导致更好的设计,但这不是单元测试的主要目的,这仅仅是个副作用。

单元测试与代码设计的关系

  • 如果你的代码很难进行单元测试,那这就是你代码需要改进的强烈信号。

  • 代码质量差的通常表现就是紧密的耦合,就是说不同的生产代码段之间没有足够的解耦,所以很难对其进行单独测试。

不幸的是:

  • 代码是否能进行单元测试这件事是一个负向指标(只能确定代码质量肯定不好)

  • 如果你的代码能够容易的进行单元测试,并不意味着你的代码质量一定很高。

单元测试的目的就是让软件项目可持续的发展,“可持续”这个词是关键。

下图描述了项目有无单元测试与项目发展和消耗工时之间的关系:

这种迅速降低开发速度的现象就是软件的熵。而熵就是体系混乱程度的度量。

在软件中,熵以易于恶化的代码形式表现出来。每次你改变代码库中的某个东西,其中的无序量,或者说熵,都会增加。

测试有助于扭转这种趋势。它们充当了一个安全网——一个为绝大多数回归提供保险的工具。测试有助于确保现有功能正常工作,即使在引入新功能或重构代码以更好地适应新的需求之后。

  • 回归(regression),是指某个特性在某个事件(通常是代码修改)之后停止按预期工作了。术语回归和软件 bug 是同义词,可以互换使用。

可持续性和可扩展性是关键。从长远来看,它们允许您保持开发速度。

什么是好和不好的单元测试?

此图描述了较好、较差、没有单元测试与项目发展和消耗工时的关系。

可以看出:不是所有的测试都是被平等创建的。

通过添加更多的测试并不会实现你单元测试的目标,你需要考虑测试的价值和维护成本。而成本取决于各项活动所花费的时间:

  • 重构底层代码时重构测试的时间

  • 针对每次代码修改,运行测试的时间

  • 处理由测试引起的错误警报的时间

  • 当您试图理解底层代码的行为时,阅读测试所花的时间

由于维护成本高昂,很容易写出净价值接近于 0 甚至负价值的测试。

最后强调一点:代码是一种负债,而不是资产。而测试也是代码。

《Unit Testing》1.1 -1.2 单元测试的目的相关推荐

  1. 对 React 组件进行单元测试(unit testing)

    2019独角兽企业重金招聘Python工程师标准>>> 在这里说一下前端开发的一个特点是更多的会涉及用户界面,当开发规模达到一定程度时,几乎注定了其复杂度会成倍的增长. 无论是在代码 ...

  2. Unit testing Cmockery 简单使用

    /*********************************************************************** Unit testing Cmockery 简单使用* ...

  3. 体验VS2017的Live Unit Testing

    相对于传统的Unit Test,VS2017 带来了一个新的功能,叫Live Unit Testing,从字面意思理解就是实时单元测试,在实际的使用中,这个功能就是可以在编写代码的时候进行实时的bac ...

  4. 我的测试生活感悟2 - Art Of Unit Testing

    今天把<Art Of Unit Testing>的前四个章节读完了,作者以自己的亲身经历,使用简洁清晰的语言,为我们展现了单元测试的艺术. 怎么定义一个好的测试案例呢?好的测试案例应该是在 ...

  5. AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享

    AY写给国人的教程- VS2017 Live Unit Testing[1/2]-C#人爱学不学-aaronyang技术分享 原文:AY写给国人的教程- VS2017 Live Unit Testin ...

  6. 《Pragmatic Unit Testing In Java with JUnit》—单元测试之道读后感

    <Pragmatic Unit Testing In Java with JUnit>                                                    ...

  7. 《Pragmatic unit testing:in java with Junit》阅读

    SQ3R阅读法: Survey:阅读之前的浏览,查阅   1.书名:<Pragmatic unit testing:in java with Junit>,中文译名<单元测试之道Ja ...

  8. Unit Testing in iOS

    2019独角兽企业重金招聘Python工程师标准>>> Introduction Unit testing is a standard technique in computer p ...

  9. 什么是单元测试(unit testing)

    单元测试,是指对软件中的最小可测试单元进行检查和验证 单元就是人为规定的最小的被测功能模块 一般来说,要根据实际情况去判定其具体含义,如 C 语言中单元指一个函数,Go 里面也单元也是一个函数 单元测 ...

最新文章

  1. 凭着这把AutoML利剑,这家AI公司荣登 IEEE ISI“铁王座”
  2. Transact_SQL
  3. Backnbone的入门基础——Backbone的model
  4. html关于超链接的问题,关于超链接的一些问题
  5. 【OpenJ_Bailian - 2711 】 合唱队形(dp,枚举中间顶点)
  6. vue 文件导入服务器,Vue 如何import服务器上的js配置文件
  7. css知多少(7)——盒子模型
  8. linux命令怎么显示文件某一行或几行内容
  9. ajax提交form返回数据格式,ajaxSubmit 返回值
  10. linux gif录制工具,教学?演示?在Linux下安装超好用的屏幕录像机来录制gif动画...
  11. 向日葵深度linux,完美使用向日葵远程软件
  12. 【matlab】Simulink 微分模块的线性化问题
  13. 1090: 哥德巴赫猜测
  14. 微信公众号开发(一) 微信网页授权登录
  15. 基于 Ng-zorro-antd 的企业后台模板 ng-alain
  16. 软件工程专业四个方向
  17. java map字典序_java中对map的字典序排序
  18. 【图像分割】基于matlab HSV彩色空间图像分割【含Matlab源码 1474期】
  19. 百度搜索推广先行赔付计划(有错必改)
  20. Wireshark抓包定位系统网页响应慢 | 网络工程师甩锅技术

热门文章

  1. Axure RP使用攻略--动态面板的用途(8)
  2. 转帖不会乱码的,powershell网络蜘蛛
  3. Android下强制打开软键盘
  4. HDU 2516 (Fabonacci Nim) 取石子游戏
  5. 在Windows 7或Vista资源管理器中禁用缩略图预览
  6. 如何使用智能铃声避免在Android中令人尴尬的大声铃声
  7. JavaScript 精粹 基础 进阶(5)数组
  8. “芯”痛痛在系统与芯片 转型升级是历史趋势
  9. Linux性能优化2.1 CPU性能统计信息
  10. IOZONE测试工具使用方法(转载)