博客
关于我
单元测试的必要性 从bug修复 费用成本和时间成本综合考虑
阅读量:767 次
发布时间:2019-03-23

本文共 1185 字,大约阅读时间需要 3 分钟。

单元测试与软件质量

开发者_constructor 系统的完成功能运行, 如同组装一架飞机. 各个部件须在单独测试后, 才能确保整体系统的质量.

单元测试的重要性

单元测试是软件质量的基石. 它不仅覆盖了所有代码路径, 还能显著降低开发成本. 研究表明, 80% 的错误源于设计阶段, 及时发现并修复这些错误可大幅减少后期更高成本的修复.

单元测试带来的好处有:

  • 100% 的代码覆盖率保证
  • 提前发现设计层面的问题
  • 减少后期维护成本
  • 按照单元测试的原则编写代码, 能显著提升代码的规范性和可测试性. 细心的单元测试还能帮助工程师对代码进行重构, 而不至于惊跌代码库.

    时间成本指标

    微软的调查显示, 单元测试阶段发现的错误平均耗时为3.25小时. 而如果等到系统测试阶段才发现同样的错误, 花费将达到11.5小时. 无论是从效率还是成本来看, 早期发现检验的重要性不言而喻.

    测试中的阶段

    下图展示了一个关键现象: 85% 的缺陷出现在设计阶段, 随着测试阶段的推迟, 错误发现和修复的成本呈指数增长. 因此, 单元测试能够在初期发现符号问题, 以少btn天 cares.

    单元测试的艺术

    《单元测试的艺术》这一书中的案例证明, 强调单元测试的团队投入能够显著提升整体开发效率. 通过单元测试, 代码编写时间从7天提升至14天, 但团队在集成测试阶段表现优异, 验收时间大幅缩短.

    单元测试也为后续测试策略提供了指导. 推崇的冰淇淋模型已被改进为金字塔模型. 它强调各层次测试的重要性, 并鼓励将手工测试逐步自动化.

    金字塔模型的优化版本指出, 从底层到顶层的测试粒度逐步递减. 单元测试负责细粒度的验证, 分层自动化测试处理中级问题, UI测试则覆盖系统整体行为.

    单元测试的演进

    20世纪的测试方法难以应对庞大系统的测试需求. 数年前, Mike Cohn 提出的金字塔模型重新定义了测试架构. 它简化了测试层次概念, 并强调了测试粒度的多样性.

    根据模型, 单元测试应优先自动化. 其次是分层或界面测试, 最后才是系统测试. 这一架构下, 各层次测试负责不同的维度, 优化了开发流程.

    Google的测试思维

    Google制定了独特的测试分类体系,将测试分为小型、中型和大型三种类型:

  • 小型测试: 针对单个功能模块进行验证, mock所有外部服务.
  • 中型测试: 验证两个或多个模块间的交互关系.
  • 大型测试: 测试系统作为整体的行为.
  • 这种分类方法能够根据需求灵活选择最合适的测试方式.

    结论

    单元测试才是构建高质量软件的关键. 通过以单元为基础的测试策略, 同时涵盖多层次验证, 可以最大限度保障软件质量. 在实际开发中, 强调代码质量, 进行早期检验, 是确保项目成功交付的核心要素.

    参考内容

    转载地址:http://wyozk.baihongyu.com/

    你可能感兴趣的文章
    poj1753——Flip Game
    查看>>
    poj1936 假期计划第一水
    查看>>
    poj1958-汉诺四塔问题(三种方法)
    查看>>
    poj1988(并查集)
    查看>>
    POJ2007+几何+极角排序
    查看>>
    poj2039
    查看>>
    posix多线程有感--自旋锁
    查看>>
    PostgreSQL cube 插件 - 多维空间对象
    查看>>
    postgresql 主从配置_生产环境postgresql主从环境配置
    查看>>
    postgresql 函数&存储过程 ; 递归查询
    查看>>
    PostgreSQL 同步流复制锁瓶颈分析
    查看>>
    PostgreSQL 备份与还原命令 pg_dump
    查看>>
    Postgresql 外部表插件postgres_fdw的安装和使用
    查看>>
    PostgreSQL 如何从崩溃状态恢复(上)
    查看>>
    PostgreSQL 存储过程基本语法
    查看>>
    PostgreSQL 导入 .gz 备份文件
    查看>>
    PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
    查看>>
    PostgreSQL 新增数据返回自增ID
    查看>>
    postgresql 更新多列数据
    查看>>
    PostgreSQL 服务启动后停止
    查看>>