读程序员的README笔记06_测试(上)

这篇具有很好参考价值的文章主要介绍了读程序员的README笔记06_测试(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

读程序员的README笔记06_测试(上)

1. 行为准则

读程序员的README笔记06_测试(上)文章来源地址https://www.toymoban.com/news/detail-750146.html

2. 编写、运行和修复测试用例会让人感觉很忙碌

2.1. 测试本身才更容易成为繁忙的工作

2.2. 糟糕的测试会增加开发人员的开销而不提供价值,并且还会增加测试套件的不稳定性

3. 测试用途

3.1. 测试可以检查代码是否正常工作

3.1.1. 测试本身就可以验证软件的行为是否符合预期

3.1.2. 预料之外的软件行为会给用户、开发人员和运维人员带来很多困扰

3.1.3. 测试这道工序可以证明代码已经按规定生效了

3.2. 保护代码不会被将来那些无意中的修改所影响

3.2.1. 测试可以保护现有的行为不受新变化的影响

3.3. 鼓励清爽的代码

3.4. 强迫开发者试用他们自己的API

3.4.1. 编写测试也迫使开发人员思考他们程序的接口和实现过程

3.4.2. 编写测试也可以迫使开发人员分别通过改进关注点分离和降低紧耦合的方式来确保他们的代码拥有良好的构造

3.5. 记录组件之间如何交互

3.5.1. 测试其实是另一种形式的文档,它说明了代码是如何被交互的

3.6. 作为一个实验的“游乐场”

3.7. 测试驱动的开发

3.7.1. test driven development,TDD

3.7.2. TDD是指在写代码之前先编写测试的实践,如果测试写好之后运行测试失败了,那么就去编写代码使其通过

4. 测试类型

4.1. 成功的项目会在现实世界中做出务实的测试决定

4.2. 单元测试

4.2.1. 验证代码的“单元”

4.2.2. 通常指某个单一的方法或行为

4.2.3. 单元测试应该快速、简短且集中

4.2.3.1. 消除外部依赖性可以使单元测试快速而集中

4.2.4. 模拟远程系统允许测试绕过网络调用,可简化设置,并且避免缓慢的运行过程

4.2.5. 模拟方法和对象允许开发人员编写集中的单元测试,这些单元测试可以只完成一个特定的行为动作

4.3. 集成测试

4.3.1. 验证多个组件集成在一起之后是否还能正常工作

4.3.2. 如果你发现自己在测试中实例化了多个相互作用的对象,那么你正在写的可能就是集成测试

4.3.3. 开发人员运行集成测试的频率较低,所以反馈的周期更长

4.3.4. 可以找出那些通过各自独立的单元测试难以发现的问题

4.4. 系统测试

4.4.1. 验证整个系统的整体运行情况

4.4.2. 端到端(end-to-end,e2e)的工作流程是为了模拟在预生产环境中系统与真实用户的互动

4.5. 性能测试

4.5.1. 监控不同配置下的系统性能

4.5.2. 负载测试可以监控不同负载水平下的性能

4.5.3. 压力测试将系统负载推高到崩溃的程度

4.5.3.1. 压力测试可暴露系统的负载能力究竟有多大,以及在过度负载下会发生什么状况

4.5.4. 对于容量规划和服务等级目标定义非常有用

4.6. 验收测试

4.6.1. 指由客户或其代理人进行的,以验证交付的软件是否符合验收标准的测试

4.6.2. 正式的验收测试及验收标准是作为昂贵的合同中的一部分来规定的

4.6.3. 国际标准化组织(International Standards Organization,ISO)要求验收测试可以验证明确的业务需求,作为其安全标准的一部分

4.6.3.1. ISO认证审核委员会要求提供需求和相应的测试文件证据

5. 测试工具

5.1. 测试用例的编写工具

5.1.1. 如模拟库,可以帮助你编写干净和高效的测试

5.1.2. 模拟库通常用于单元测试,特别是在面向对象的代码中

5.1.3. 模拟库还可以防止应用程序的代码中充斥着测试专用的方法、参数或变量

5.1.4. 模拟库可以帮助开发人员访问受保护的方法和变量,而无须修改常规代码

5.1.5. 对模拟库的过度依赖是一种代码异味,它表明代码紧紧地耦合在了一起

5.2. 测试框架

5.2.1. 通过模拟测试的生命周期,从setup到teardown,帮助测试的运行

5.2.1.1. 管理测试的setup和teardown

5.2.1.2. 管理测试执行和编排

5.2.1.2.1. 可以通过编排测试流程来帮助控制测试的速度和隔离度
5.2.1.2.2. 串行测试是一个接一个地执行,一次执行一个测试会更安全,因为测试之间相互影响的机会比较少
5.2.1.2.3. 并行执行更快捷,但由于共享的状态、资源或其他污染,因而更容易出错

5.2.1.3. 生成测试结果报告

5.2.1.3.1. 帮助开发人员调试那些失败的构建任务

5.2.1.4. 提供工具,如扩展的断言方法

5.2.1.5. 与代码覆盖率工具集成

5.2.2. 还可以保存测试结果,与构建系统集成,并提供其他的辅助功能

5.3. 代码质量工具

5.3.1. 强制执行代码质量规则的工具被称为linter,linter可以运行静态分析并执行代码风格检查

5.3.2. 对那些未能通过质量检查的代码库要有务实精神

5.3.3. 不要让代码变得更糟,但也要避免以破坏性地停止一切的方式来清理工程

5.3.4. 用来分析代码覆盖率和代码复杂性

5.3.4.1. 代码复杂度工具可以通过计算圈复杂度

5.3.4.1.1. 大致上通过代码的路径数量来防范过于复杂的逻辑
5.3.4.1.2. 你的代码复杂度越高,就越难测试,也越有可能包含更多的bug
5.3.4.1.3. 圈复杂度通常随着代码库的大小而增加,所以总体得分高并不一定是坏事

5.3.4.2. 代码覆盖率工具衡量的是有多少行代码被测试套件执行过

5.3.4.2.1. 如果你修改的代码降低了代码覆盖率,你应该编写更多的测试用例
5.3.4.2.2. 确保测试用例可以对你所做的任何新的修改进行验证,以合理的覆盖率为目标
5.3.4.2.2.1. 经验值是65%到85%
5.3.4.2.3. 仅仅依靠覆盖率并不能够衡量测试质量的优劣
5.3.4.2.3.1. 它可能会有很大的误导性,无论是在高覆盖率还是低覆盖率的时候
5.3.4.2.3.2. 为了达到100%的覆盖率而痴迷于创建单元测试并不能保证你的代码能够安全地集成

5.3.5. 通过静态分析来寻找bug

5.3.6. 检查代码风格错误

5.3.6.1. 代码风格检查工具可以确保所有源代码的格式相同

5.3.6.2. 每行最大字符数、驼峰命名法与蛇形命名法、适当的缩进

5.3.6.3. 一致的风格有助于多名程序员在一个共享代码库上进行协作

5.3.6.4. 强烈建议你设置你的IDE,以便可以自动应用所有的风格规则

5.3.7. 通常被设置为构建或编译步骤的一部分来运行

到了这里,关于读程序员的README笔记06_测试(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 读程序员的README笔记09_代码评审

    4.4.1.1. walk-through 4.4.1.2. 一种面对面的会议,开发人员在会上共享他们的屏幕,并引导队友了解正在进行的修改内容 4.4.1.3. 是启发想法和让你的团队适应代码修改的好方法 5.1.2.1. 如果紧急度不明确,请询问提交者 5.4.4.1. SQL注入攻击、敏感数据泄露和跨站脚本攻击的漏洞

    2024年02月05日
    浏览(38)
  • 读程序员的README笔记11_软件交付(下)

    1.3.5.1. 通过持续交付,人力被完全从部署环节中移除 1.3.5.2. 打包、测试、发布、部署,甚至展开环节都是自动化的 1.3.6.1. Puppet、Salt、Ansible和Terraform等现成的解决方案可以与现有的工具集成,并且它们是专门为了自动化部署而设计的 1.4.4.1. 只需再次指向旧的版本 1.5.1.1. 

    2024年02月04日
    浏览(48)
  • 读程序员的README笔记10_软件交付(上)

    3.1.1.1. 打包一个构件称为发布 3.1.3.1. 部署的软件还不能被用户访问 3.1.3.1.1. 只是被安装了而已 3.1.3.2. 一旦部署,软件就会通过将用户转移到新的软件上而进行展开 3.1.4.1. 交付过程是更大的产品开发周期中的一部分 6.10.2.1. 每季度或每年发布一次

    2024年02月04日
    浏览(140)
  • 读程序员的README笔记01_学习如何学习

    6.3.2.1. 错误是不可避免的。成为一名软件工程师的路途艰辛,我们有时会失败 6.5.4.1. 代码从不说谎。注释有时却会。 6.5.4.1.1. Code never lies. Comments sometimes do 6.5.4.1.2. 去读源代码,因为它并不总是与设计文档相吻合 6.5.4.1.3. 不要只读你自己的代码库,还要去阅读高质量的开

    2024年02月05日
    浏览(36)
  • 读程序员的README笔记04_防御式编程

    1.2.1.1. 切记让你的代码安全而有弹性 1.2.1.2. 编写拥有良好防御性的代码是一种对那些运行你的代码的人(包括你自己!)富有同情心的表现 1.2.1.3. 防御性的代码较少发生故障,就算它发生故障,也更有可能恢复 1.2.1.4. 安全的代码利用编译时的校验来避免运行时的故障,使

    2024年02月05日
    浏览(37)
  • 读程序员的README笔记18_职业生涯规划

    3.1.5.1. 他们的工作职责之一是管理他们的团队,而管理的一部分就是对你投入时间 3.1.5.2. 对管理者而言,反复取消一对一面谈可以是一个有价值的信号 3.3.2.1. 每个目标都附有3到5个关键结果,它们是标志着目标达成的具体指标 3.3.2.2. 不要把关键结果变成待办事项清单 3.

    2024年02月04日
    浏览(37)
  • 读程序员的README笔记13_技术设计流程(上)

    3.4.1.1. 外界干扰是深度工作的“杀手” 3.4.1.2. 避免所有的交流方式 3.4.1.2.1. 关闭聊天 3.4.1.2.2. 关闭电子邮件 3.4.1.2.3. 禁用电话通知 3.4.1.2.4. 换个地方坐 3.4.2.1. 有形产出是一份设计文档 4.2.3.1. 如果有一个以上的问题,询问哪些问题是最优先的 4.3.7.1. 注意与外人交流时不

    2024年02月04日
    浏览(52)
  • 读程序员的README笔记14_技术设计流程(下)

    1.4.2.1. 该项目将需要至少一个月的工程时间 1.4.2.2. 变更将对软件的扩展和维护产生长期的影响 1.4.2.3. 变更将显著影响其他团队 1.5.2.1. 设计文档是一种工具,可以帮助你思考、获得反馈、让你的团队了解情况、培养新的工程师,并推动项目规划 1.5.5.1. 阅读大量的设计文档

    2024年02月04日
    浏览(31)
  • 读程序员的README笔记05_日志、监控与配置

    6.1.1.1. 测量的是某个事件发生的次数 6.1.1.2. 通过使用计数器获得缓存命中数和请求总数,你就可以计算出缓存命中率 6.1.2.1. 一个基于时间点的测量值 6.1.2.2. 既可以上升又可以下降 6.1.3.1. 根据事件的大小幅度分成不同的范围 6.1.3.2. 每一个范围都会有一个计数器,每当某

    2024年02月05日
    浏览(34)
  • 读程序员的README笔记17_构建可演进的架构(下)

    1.3.3.1. 开发人员可以只专注于和自己相关的字段,因为它们会继承其他字段的默认值 1.3.3.2. 默认值可使大型API在感觉上很小巧 1.4.1.1. OpenAPI通常用于RESTful服务 1.4.1.2. non-REST服务则使用Protocol Buffers、Thrift或类似的接口定义语言(interface definition language,IDL) 1.4.1.3. 接口定义工

    2024年02月04日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包