`
maqujun
  • 浏览: 135452 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

TDD只是理想化的开发方式吗?

阅读更多

前段日子和Manager讨论了一下开发方式的问题。其中我们就谈到了TDD的开发方式。而Manager给出的想法就是TDD是一种较为理想化的开发方式。

 

当然我并不赞同这样给TDD下定论。的确在国内大多数以结果为目标导向的软件公司中使用TDD开发的确有的理想化。

 

TDD很大范围内被认为是以开发效率来换取代码质量的一种开发方式。这点我也没法否认。我在之前的公司里的确也是以这种方式开发的,但你说他敏捷,我觉得需要三思。因为作为测试驱动,你写测试,写代码,写测试实现,修改代码,维护测试等等步骤都是要资源成本的投入的。所以完全使用单元测试为驱动的方式的确有点理想化。

 

所以我觉得使用一种相对折中的方法来解决TDD测试成本过高的缺点。那就是Use Case驱动,也就是UDD(Usercase Driver Develop),这个Use Case并非程序员开发的单元测试,而是测试人员最终跑的系统Case,也就是真正的客户会实际使用时的E to E流程。之所以这样想的原因是: 我觉得TDD的根本目标是为了让开发人员非常的清楚自己的开发目的,限定开发人员所需开发的系统行为!TDD就能简化这个目的到一个单元测试的维度。而我们换一下思考方式,如果开发人员能够很清楚自己要做出来是什么样子,运行时是什么流程,会有哪些特殊点。开发者能够拿到整个User Case的说明信息。而他在整个开发周期中都是以实现这个User Case为目标去开发,其实效果应该是一样的。但为了更好地实现这点,有些关键的点需要关注:

  1. User Case必须被定义的全面覆盖整个需求!最好能把页面流程,操作细节结构都清晰的以图形方式画出来。这个不能只有Tester单独完成,而是应该由BA和Designer来做。他们更了解需求,更需要保证测试的正确性。
  2. 开发前Developer和Tester要通过和BA讨论来熟悉真正业务User Case,并且尽可能的去质疑BA对于需求的认知。这点比单纯的看需求文档更直观。
  3. 质量问题,不完全是Developer的错。如果完成后质量不够,请先查Case覆盖面,就像单元测试一样,当一开始订的期盼值与实际值就不一致时,又怎么可能的取得正确的结论?BA和Designer这两个角色花在需求上的时间平均是Tester和Developer的5倍,而真正干活的却不是这些最了解需求的人,所以。他们的User Case至关重要直接决定了质量。

修正:这是很早以前写的文章,现在的Scrum会是更好的开发方案。

分享到:
评论

相关推荐

    Laravel开发-laravel-tdd-docs

    **Laravel 开发 - 使用 TDD 进行高效构建** 在 Laravel 框架中,Test-Driven Development(TDD,测试驱动开发)是一种强大的软件开发方法论,它强调先编写测试,然后编写满足这些测试的代码。这种实践有助于确保...

    Ruby-TDD实战TestDrivenDevelopmentinAction

    Ruby作为一种动态、灵活的编程语言,是TDD的理想选择,因为它允许快速迭代和高效的测试框架。在“Test Driven Development in Action”这个实战教程中,我们将深入探讨如何在Ruby环境中高效地应用TDD。 首先,TDD的...

    matlab开发-按时间域分解TDD的ModeShapesTraction

    在MATLAB环境中,"matlab开发-按时间域分解TDD的ModeShapesTraction"是一个涉及到结构动力学分析的项目,特别关注了时域分解(Time-Domain Decomposition, TDD)方法在模式形状(Mode Shapes)和牵引力(Traction)...

    测试驱动开发 by example.rar

    总之,"测试驱动开发 by example"这本书籍可能是软件开发人员深入理解和实践TDD的理想资源,无论你是初学者还是经验丰富的开发者,都能从中获益匪浅。通过阅读并遵循书中的指导,你将能够更好地掌握TDD的核心理念,...

    spring-boot-tdd-example:tdd学习spring入门demo

    总之,"spring-boot-tdd-example"项目为学习者提供了一个理想的起点,通过这个项目,你可以深入理解Spring Boot的特性,掌握TDD的工作流程,并提升代码质量。在实践中不断迭代,你会逐渐领悟到TDD的精髓,成为更优秀...

    php-tdd-unit:使用TDD策略和单元测试编写PHP

    在PHP开发中,Test-Driven Development(TDD)是一种重要的编程方法论,它提倡先编写测试,再编写实现代码。TDD的核心理念是"红、绿、重构":首先写一个失败的测试(红),然后编写足够的代码使测试通过(绿),最后...

    python测试驱动开发

    1. **测试驱动开发(TDD)的概念** - 定义与原则 - TDD在软件开发生命周期中的作用 - 实施TDD的好处与挑战 2. **Python与测试驱动开发** - Python作为TDD的理想语言 - Python中的测试框架:`unittest`与`pytest`...

    初探行为驱动开发(BDD)

    然而,实践证明这一想法过于理想化。“软件蓝领”的概念曾一度被提出,暗示着在良好的设计指导下,底层编码工作可以像工厂中的流水线作业一样标准化,无需过多的技术或创新。但实际上,软件开发仍然高度依赖于参与者...

    EasyCpp是一个服务器网络开发的C++ 敏捷开发框架.zip

    这包括模块化设计、测试驱动开发(TDD)和持续集成,以促进代码质量和项目进度。 4. **嵌入式Linux开发**:在嵌入式系统中,资源受限是常见挑战。EasyCpp设计时考虑了这一点,提供了轻量级、低内存占用的特性,适合...

    kata-tdd-1-Tran-Anh-Tai:tdd 样本

    【标题】"kata-tdd-1-Tran-Anh-Tai:tdd 样本"是一个关于测试驱动开发(Test-Driven Development, TDD)的实践项目,由 Tran Anh Tai 提供。这个项目旨在帮助开发者熟悉 TDD 的过程和方法,并通过实际操作来提升其在 ...

    my-try-tdd:学习使用 Mocha 进行 TDD

    Mocha 支持多种测试风格,包括BDD(行为驱动开发)和TDD模式,这使得它成为TDD实践的理想选择。 **使用Mocha进行TDD的步骤** 1. **编写测试** - 首先,你需要创建一个测试用例,使用Mocha的`describe`函数定义测试...

    敏捷软件开发原则 模式与实践 c#源码

    源码分析可以帮助我们理解如何将敏捷原则和模式应用于实际项目,例如如何利用C#的特性实现松耦合、高内聚的设计,以及如何利用TDD(测试驱动开发)来驱动代码编写。 6. **持续集成与自动化**:在敏捷环境中,持续...

    _net软件技术开发大全

    这一部分将深入讨论单元测试、集成测试、自动化测试工具,如NUnit和xUnit,以及如何使用Mocking框架如Moq进行测试驱动开发(TDD)。同时,可能还会讲解持续集成和持续部署(CI/CD)的重要性,以及如何利用Jenkins、...

    tdd-in-go:Go中的TDD演示文稿

    **测试驱动开发(TDD)概述** 测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写任何实际代码之前先编写测试用例。这种做法旨在提高代码质量、可维护性和减少错误。TDD的核心原则是...

    node-tdd-workshop

    【标题】"Node-tdd-workshop" 是一个关于使用JavaScript进行测试驱动开发(TDD)的工作坊。这个工作坊旨在帮助开发者掌握在Node.js环境中实践TDD的方法和技巧,通过实际操作提升代码质量和可维护性。 【描述】"Node-...

    敏捷软件开发-原则、模式与实践(C#版).chm

    7. **TDD(测试驱动开发)**:TDD是敏捷开发的重要实践,通过先编写测试用例,然后编写最小化的生产代码以使测试通过,以确保代码质量。 8. **持续集成(CI)**:CI是敏捷开发中的一个关键实践,通过频繁地集成代码并...

    Python开发技术详解.zip

    TDD(测试驱动开发)的理念以及unittest或pytest等测试框架的使用,能帮助开发者养成良好的编码习惯。 总而言之,《Python开发技术详解》是一本全面覆盖Python编程各个方面的书籍,无论是对Python语言的基本理解,...

    tennis-game-tdd

    【网球比赛(Tennis Game)项目开发与TDD实践】 在软件开发领域,Tennis Game(网球比赛)项目常被用作一个示例来演示Test-Driven Development(TDD,测试驱动开发)的方法和流程。TDD是一种编程范式,强调先编写测试...

Global site tag (gtag.js) - Google Analytics