博客
关于我
单元测试的必要性 从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/

    你可能感兴趣的文章
    Pandas 根据布尔条件选择行和列
    查看>>
    pandas 滚动窗口 - datetime64[ns] 未实现
    查看>>
    pandas 版本兼容特定的蟒蛇和NumPy配置吗?
    查看>>
    pandas 生成excel多级表头
    查看>>
    Pandas 的 DataFrame 详解-ChatGPT4o作答
    查看>>
    pandas 读取excel数据,以字典形式输出
    查看>>
    Pandas 读取具有浮点值的 csv 文件会导致奇怪的舍入和小数位数
    查看>>
    pandas 适用,但仅适用于满足条件的行
    查看>>
    pandas 重新采样到每月的特定工作日
    查看>>
    pandas :我如何对堆叠的条形图进行分组?
    查看>>
    pandas :按移位分组和累加和(GroupBy Shift And Cumulative Sum)
    查看>>
    pandas :检测一个DF和另一个DF之间缺失的列
    查看>>
    Pandas-从具有嵌套列表列表的现有列创建动态列时出错
    查看>>
    Pandas-通过对列和索引的值求和来合并两个数据框
    查看>>
    pandas.columns、get_dummies等用法
    查看>>
    pandas.DataFrame.copy(deep=True) 实际上并不创建深拷贝
    查看>>
    pandas.read_csv()的详解-ChatGPT4o作答
    查看>>
    PANDAS.READ_EXCEL()输出‘;溢出错误:日期值超出范围‘;而不存在日期列
    查看>>
    pandas100个骚操作:再见 for 循环!速度提升315倍!
    查看>>
    Pandas:如何根据其他列值的条件对列进行求和?
    查看>>