主题:测试如何驱动开发
楼主:gigix
需求:反转一个句子
我可能会写出以下的测试——写一个测试,然后写代码让测试通过,然后再写下一个测试。
自己看吧。
Java代码
public class StringReverseTest {
# Test 1
public void testShouldSplitSentenceIntoWords(){
StringReverser sr=new StringReverser();
String str = "This is a sentence";
Assert.assertEquals(4, sr.split(str).size());
Assert.assertEquals("sentence", sr.split(str).get(0));
Assert.assertEquals("a", sr.split(str).get(1));
Assert.assertEquals("is", sr.split(str).get(2));
Assert.assertEquals("This", sr.split(str).get(3));
}
# Test 2
public void testShouldReverseSentence(){
StringReverser sr=new StringReverser();
String str = "Tdd is a software devolopment technology";
Assert.assertEquals("technology devolopment software a is Tdd",sr.reverse(str));
}
# Test 3
public void testShouldAlwaysReverseSentences(){
StringReverser sr=new StringReverser();
String str = "This is Yet Another sentence";
Assert.assertEquals("sentence Another Yet is This",sr.reverse(str));
}
}
网友:taowen
reverse(null),
reverse(""),
reverse(" "),
reverse("\t"),
reverse("\r\n"),
reverse("a"),
reverse("a "),
reverse(" a"),
reverse("a b"),
reverse("Tdd is a software development technology")
网友:
有意思,gigix和taowen的帖子正好显示了测试完整度的问题。一个测试要写到甚么程度才足够?
TDD的好处就不用说了,我感到最难把握的就是测试完整度。像gigix的测试就是只覆盖到自己要实现的功能就好——只测常见情况。而taowen的测试则是把所有可能出现的情况都测试到了。
测试当然是越详细越好,但是代价就是代码量也迅速增多,而且更重要的是写测试的时间长了,必须精心构造测试数据和条件,我觉得会把我的注意力从实现程序功能上转到如何让测试更完备上来。
所以我是觉得在开发阶段还是不要太花时间在测试的完整度上,只保证基本功能的测到了就好。
网友:
用gigix的直到有问题,再加测试。
PS:程序员写的东西不能代替测试员的存在。
网友:
测试是测试,测试驱动是测试驱动,别把两个东西搞混了。说白了测试驱动还是需求驱动,而测试则需要考虑更多的东西。gigix的做法在tdd看来很棒,但是在测试角度看则很不完整。
网友:
ozzzzzz 写道
测试是测试,测试驱动是测试驱动,别把两个东西搞混了。说白了测试驱动还是需求驱动,而测试则需要考虑更多的东西。gigix的做法在tdd看来很棒,但是在测试角度看则很不完整。
上边一共三句话,前两句是赞同的。 其实测试驱动还是需求驱动,story-->test-->code, 而我们说的普通的test是这样形成的,story-->design-->code--->test。
第三句不赞成,gigix的做法不是tdd,taowen的才是tdd,第三句的做法是“友情驱动
网友:ozzzzzz
非也,第三句才是我说的重点。
实际上这里确实存在一些模糊的问题。比如如果这个字符串为空如何,为单一词汇又如何,又如果是为一个超过1k长度的字符串如何,超过1m又如何,。。。。。。。
实际上这里的问题你说完全是基于功能的还是基于程序结构的呢?
不过一般情况下客户会给你个比较清楚的解释,不过也有模糊的地方。比如客户说我干嘛要输入一个空字符呢,于是你可以认为这个其实是一种客户误操作的结果,大概应该算在测试范畴。而如果是单一词汇,客户可能会说,这个我有时候也可能会做,或者是我随手按了回车,这个时候这大概算是功能范畴的了。而显然客户对边界的问题并不敏感,这个时候则基本属于测试范畴。
TDD的做法并不是要你在最早就准备好一个完整的测试系统,而是要你通过写准对需求的测试,也就是针对功能的测试,来因对性的完成你的代码。这是一个由需求,转换为针对测试,在因对的代码的过程。
回复:gigix
这个测试就是所谓的“设计过程”
实际上照我真实的想法,我是不想写这个测试的,因为这个需求实在太简单了
不过为了说明这里确实有“设计”的存在……
我把一个大的问题分解成两个小的问题,先用测试驱动解决第一个,再用测试驱动解决第二个
就是这样
分享到:
相关推荐
《Python测试驱动开发:使用Django、Selenium和JavaScript进行Web编程》这本书是关于现代Web应用开发的一个深度指南,特别关注于使用Python语言以及相关的工具和技术。书中详细介绍了如何运用测试驱动开发(TDD)的...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际代码之前先编写测试用例。这种做法旨在提高软件质量、降低维护成本并减少错误。"Test-Driven Development By Example"是一本由...
而“测试驱动开发”标签再次强调了主题的重点。 通过这个压缩包,开发者可以学习到以下TDD的关键知识点: 1. TDD的基本原则:红-绿-重构,即先编写失败的测试(红),然后编写代码使测试通过(绿),最后重构代码...
测试驱动开发是一种敏捷软件开发实践,它要求开发者首先编写自动化测试用例,这些测试用例定义了所需功能的行为。然后,开发者编写足够的代码来使这些测试通过,最后进行重构,以保持代码的简洁性和可维护性。 2. ...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际功能代码之前先编写测试代码。这种做法有助于确保软件的质量,减少bug,并提高代码的可维护性。《测试驱动开发的艺术》这本书...
Lasse Koskela的作品《测试驱动开发的艺术》深入探讨了这一主题,并且带有目录结构,为读者提供了系统的知识框架。 在TDD中,开发过程分为三个主要步骤:编写测试、实现功能和重构代码。 1. 编写测试:首先,...
在“测试驱动开发with Junit(三)”这一主题中,我们将会深入探讨如何利用Java中的JUnit框架进行TDD实践。 JUnit是Java编程语言中最常用的单元测试框架之一,它为开发者提供了方便快捷的方式来编写和运行可重复的...
在"测试驱动开发的艺术"这个主题中,我们将深入探讨TDD的基本原理、实践技巧以及它对软件工程的影响。 首先,TDD的流程分为三个主要步骤:红、绿、重构。"红"阶段,开发者编写一个失败的单元测试,表明当前功能尚未...
《C#测试驱动开发》是一本深入探讨C#编程中测试驱动开发(TDD)实践的书籍。测试驱动开发是一种软件开发方法,强调在编写实际功能代码之前先编写测试用例,以此来指导开发过程,确保代码质量。这个压缩包包含了书籍第4...
"wdm驱动开发-helloworld"是一个专门为初学者设计的教程,旨在帮助他们理解WDM驱动的基本概念和开发流程。 WDM驱动开发涉及到与Windows内核的交互,为设备提供底层支持。它包括了设备对象、驱动队列、IRP(I/O请求...
2. **测试驱动开发(TDD)**:先编写测试用例再进行编码,确保代码质量的同时也方便后期维护。 3. **行为驱动开发(BDD)**:以业务需求为导向,通过对话形式定义软件行为,促进跨职能团队之间的沟通理解。 4. **...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发过程,它强调先编写测试用例,然后根据这些测试用例来实现功能代码。这种方法有助于确保代码的质量,避免了因错误而频繁修复的问题。 Python作为一...
《C现代编程+集成开发环境、设计模式、极限编程、测试驱动开发、重构、持续集成》这本书涵盖了多个关键的软件开发概念,对于深入理解和实践C语言编程有着重要的指导价值。以下将逐一阐述这些主题。 首先,C现代编程...
教程主题:Visual Studio 2010 TDD 测试驱动开发 实战 教程录制:柳永法 web:http://www.yongfa365.com/ 本教程旨在以最简单的hello world方式像您展示 Visual Studio 2010强大的TDD,推荐任何没接触过VS2010及TDD...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法,强调在编写实际功能代码之前先编写测试代码。这种做法有助于确保代码的质量,并在软件的生命周期内保持其可维护性。在嵌入式系统中,由于资源...
"windows驱动开发入门"作为一个学习资源,很可能是为了帮助新手理解这个复杂的主题。下面我们将深入探讨Windows驱动开发的基本概念、流程以及一些关键知识点。 驱动程序,简而言之,是操作系统和硬件设备之间的桥梁...
- Driver Verifier:用于测试驱动程序的工具,可检测潜在错误。 - WinDbg:强大的调试器,帮助开发者定位驱动中的问题。 - KMDF(Kernel-Mode Driver Framework)和UMDF(User-Mode Driver Framework):简化驱动...
Steve Freeman和Nat Pryce的书籍中,还涵盖了BDD(行为驱动开发,Behavior-Driven Development),这是一种与TDD相关的实践,它强调从用户或利益相关者的角度来描述软件的行为。BDD通常使用领域特定语言(DSL)来...
这涉及到选择合适的编程语言(如Python、Java或JavaScript),理解并应用测试驱动开发(TDD)和行为驱动开发(BDD)原则,以及掌握断言和异常处理。在实践中,良好的代码组织和可读性也是关键,确保测试代码易于维护...