`
xitong
  • 浏览: 6401672 次
文章分类
社区版块
存档分类
最新评论

测试驱动和用例驱动的联合实践

 
阅读更多
用例驱动方法来自UP,由jacobson提出,并成为UP中最闪亮的瑰宝和核心,用例驱动主张一切来自需求,这本身非常正确,但用例之后的分析,设计过程被一些敏捷专家所诟病,认为这个过程太过重量级,因为需求一直在变,而且随着项目的进展,设计会弱化,同时还得保持分析文档,设计文档和代码的同步,如果能时刻保持增量和迭代那么还好,否则就是灾难了。

测试驱动则采取另外的思路,非常轻型的分析和设计,所有的代码从测试的角度产生,一旦需求发生改动,重构代码到测试通过。传统上,大多数人是先写代码再写测试,如果已知代码可行,确实写测试也会失去激情,随着项目的深入,需求的改动,最后期限的到来,为代码编写测试就是mission impossible。

那么两种非常优秀的开发方法如何结合呢?
我来谈谈我的一点初步的实践:
实践中我发现用例驱动和测试驱动有重叠的地方,因为在测试驱动的前期会有很多称之为story的东西,我认为这个story就是需求( 测试驱动偏重于代码的编写和维护,对story介绍相对较少) ,既然是需求,还有什么比使用usecase更贴切的呢,我在项目中通常首先使用usecase做需求,这样会对整个项目有个全局的认识,然后我再根据usecase做测试驱动(此前还会做些简单的领域分析) ,实际上我们将测试驱动很大程度上取代了up需求之后的分析,设计和编码,一旦需求发生改动,我会考虑更新usecase(可跟踪被建模的代码),然后改写测试,改写代码(几乎100%要重构代码),最后进行单元测试来保证我的改动没有破坏我所有预期的行为.

这样做的好处在于:
1) 采用usecase可以很好的反应需求,同时也可以很平滑的过渡到代码,是一个跟踪需求和代码的很好的手段
当然这牵涉到如何编写有效用例的问题,这超出了本文讨论的范围,请参考其他文献
2)采用测试驱动可以大胆的重构代码和不必担心引入bug,而且所有的代码都来自于测试,这就使得代码可控.另外测试可以改进设计,通常不方便测试的代码往往耦合严重,等你改动代码方便测试了,往往你的设计会变得更好.
当然这里面还牵涉到如何测试和测试覆盖率的统计问题,这超出了本文讨论的范围,请参考其他文献
分享到:
评论

相关推荐

    nios测试测试程序

    该程序包含了多个关键组件的测试用例,如 ADC(模拟数字转换器),JTAG(联合测试行动组),UART(通用异步收发传输器),PLL(锁相环),以及 SDRAM(同步动态随机访问存储器)。这些组件是嵌入式系统中不可或缺的...

    DevOps之自动化测试

    - **测试驱动开发(TDD)**:在编写实际代码之前先写测试用例,确保代码质量。 - **技术债务**:明确识别那些为了加快短期进度而采取的妥协做法,以便后期修复。 #### 测试一切 - **最小可用流程**:定义产品达到...

    软件测试笔试题及答案.doc

    软件测试是确保软件产品质量的关键环节,它涉及到一系列的活动,包括设计测试用例、执行测试、识别和报告问题以及验证修复。以下是对标题和描述中提及的一些知识点的详细解释: 1. **软件可靠性**:软件可靠性是...

    基于AVR的240128显示屏整个测试工程

    总之,"基于AVR的240128显示屏整个测试工程"是一个实践性强、涵盖硬件驱动开发和测试的项目,有助于提升你在嵌入式系统、AVR编程以及LCD显示技术方面的技能。通过这个项目,你可以亲手实现一个功能完备的显示系统,...

    简单UVM平台_UVM_booth乘法器_

    在电子设计自动化(EDA)领域,UVM(Universal Verification Methodology)是一种广泛使用的验证方法论,它基于...通过VCS、Verdi和DVE的联合使用,可以有效地调试和验证Booth乘法器设计,从而提高验证效率和质量。

    junit:作业 6 联合测试

    在Java开发过程中,单元测试是确保代码质量的重要环节。JUnit是一个流行的Java单元测试框架,它提供了...同时,良好的测试实践,如保持测试隔离、避免副作用,以及合理的测试组织,都是提升测试效率和代码质量的关键。

    ISEB120题真题库

    数据驱动测试是一种测试方法,其中测试执行的输入数据是外部存储的,并且可以在运行时加载,这样可以更容易地更改和扩展测试用例的数据集。 ### 测试估算方法 **测试估算的不同方法**:第三道题涉及到了两种不同的...

    cn用户手册

    深入探讨了单元测试的核心概念和技术细节,包括但不限于白盒测试与黑盒测试的区别、隔离测试的具体实现、全局变量检查的方法、异常检测机制、C++测试用例的重用策略、基线测试的实施流程以及表格驱动测试的实践等。...

    系统分析师复习资料pdf

    统一软件开发过程(RUP)是一种迭代和增量的开发方法,强调风险驱动和用例驱动。构建原型系统作为软件开发的一种策略,有助于早期识别和解决问题,减少项目风险。面向对象方法的优势在于其支持封装、继承和多态,...

    Manning.-.JUnit.in.Action.2nd.Edition.2010

    这一章节关注于如何评估和提高测试覆盖率,同时也介绍了测试驱动开发(TDD)的概念和最佳实践。通过对不同类型的测试(如单元测试、集成测试等)的讨论,帮助读者理解如何制定有效的测试策略。 - **第6章:使用...

    [removed]javascript测试代码

    测试驱动开发是一种编程实践,要求开发者先写测试,再编写使测试通过的代码。TDD有助于确保代码质量,因为每个功能都有相应的测试作为保障。在JavaScript中,TDD通常结合上述测试框架进行。 六、持续集成/持续部署...

    关于JAVA实验上机指导

    上机指导会展示如何编写和运行测试用例,确保代码的正确性。 11. **项目构建工具**:Maven和Gradle是常见的Java项目构建工具,它们自动化了依赖管理和构建过程。指导可能会介绍如何配置和使用这些工具。 通过以上...

    C#联合halcon开发6相机FPC贴合视觉框架

    在IT行业中,视觉检测系统是自动化生产线上不可或缺的一部分,尤其在精密电子制造领域,如FPC(柔性印刷电路)的贴合...同时,这也是对软件工程方法论的一个实战演练,包括模块化设计、测试驱动开发以及持续集成等。

    单片机-微处理器应用综合实验

    10. **测试与验证**:最后,学生需要设计测试用例,通过实际运行验证系统性能,确保其满足设计要求。 通过这个实验,学生不仅能掌握单片机的基础知识,还能提升问题解决、系统集成和项目管理的能力,为将来在嵌入式...

    c代码-c高级测试1

    在编写测试用例时,我们应遵循“测试驱动开发”(TDD)的原则,先编写测试,然后编写代码来通过这些测试。这有助于确保代码从一开始就满足需求,并且随着代码的修改,测试也能及时反映出任何可能引入的错误。 此外,...

    时下最流行的全频段 AD9371的器件手册与开发例程

    3. **测试脚本**:预设的测试用例,用于验证AD9371的基本功能和性能指标。 4. **文档**:用户手册、数据手册和其他技术资料,详细解释如何使用和配置AD9371。 使用这些资源,开发者可以快速上手AD9371的开发,通过...

    PowerPC+OSE 资料包(包括ose8.1软件包)

    除此之外,资料包可能还会包含一些示例代码、用户手册、开发者指南,以及相关的调试工具和测试用例,这些都能帮助开发者更深入地理解和掌握在PowerPC上使用OSE的技巧和最佳实践。 总的来说,这个PowerPC+OSE资料包...

    FPGA MPSoC_XCZU4EV实现PS端RTC定时器中断(VITIS实现).zip

    4. **系统集成**:在VITIS中,将硬件设计和软件应用进行联合编译和链接,生成可烧录的bitstream和软件映像。同时,需要配置PS-PL接口,确保软件和硬件之间的通信畅通。 5. **测试与验证**:最后,将生成的bitstream...

Global site tag (gtag.js) - Google Analytics