Unit testing 真正伟大的程序员知道使用单元测试吗?

Unit testing 真正伟大的程序员知道使用单元测试吗?,unit-testing,Unit Testing,我想知道真正伟大的程序员(Knuth、Kernighan、Torvalds等)是否支持广泛的单元测试。我可以想象他们为处理协作扩展问题而加入它们的大型项目,但是,比如说,Knuth在TeX中使用了单元测试吗?这并不影响我使用它们的决定,这只是好奇的问题。Knuth是 至于你真正的问题,即时编译和“单元测试”的想法很少吸引我,当我在一个完全未知的环境中摸索,需要关于什么有效什么无效的反馈时。否则,很多时间都浪费在我根本不需要执行甚至不需要思考的活动上。没有什么需要“模拟” 当然,克努特也说过:

我想知道真正伟大的程序员(Knuth、Kernighan、Torvalds等)是否支持广泛的单元测试。我可以想象他们为处理协作扩展问题而加入它们的大型项目,但是,比如说,Knuth在TeX中使用了单元测试吗?这并不影响我使用它们的决定,这只是好奇的问题。

Knuth是

至于你真正的问题,即时编译和“单元测试”的想法很少吸引我,当我在一个完全未知的环境中摸索,需要关于什么有效什么无效的反馈时。否则,很多时间都浪费在我根本不需要执行甚至不需要思考的活动上。没有什么需要“模拟”

当然,克努特也说过:

注意上面代码中的错误;我只是证明它是正确的,没有试过

Knuth是一个超级天才,但他不进行代码单元测试这一事实并不意味着我们这些凡人不应该测试我们的代码。

:

InfoQ:你相信其他工具 以及单元测试等过程, 测试驱动开发或配对 编程也有助于编程 在Java中是否有效

约书亚·布洛赫:当然。单元测试 这是关键。先写你的测试 这是一件伟大的事情


Jon Skeet尝试了单元测试,但他的所有测试都没有代码通过

或者类似的

可能不会

同样,所有通常被称为“真正伟大”的程序员都是超级天才,他们在25年前自己编写了开创性的软件,通常是为其他程序员编写的,远远早于单元测试流行、版本控制普及、大规模协作项目成为常态等等

换句话说,现代软件开发的一些特点是单元测试的论据,而这些论据在当时并不存在。现代真正伟大的程序员可能是单元测试,只是我们还没有称他们伟大

我讨厌单元测试。称之为敬意。

在这篇文章中,Knuth解释说他不是一个狂热的单元测试人员:

“单元测试”只对我有吸引力 很少,当我在一个陌生的地方摸索的时候 完全未知的环境和需求 关于什么有效、什么有效的反馈 没有

在同一个回答中,他解释了他是如何赢得斯坦福大学编程竞赛(race)的,而他是唯一一个在批量主机上使用穿孔卡的参赛者——所有其他参赛者都在分时系统上使用这些新型交互终端,所以排名第二的选手当然比Knuth花了一个多小时


如果(可能除了在完全未知的环境中进行探索性编程之外)您对穿孔卡和批处理大型机比交互式终端和分时更满意,那么我认为单元测试确实不适合您的风格;-)

通过阅读,我发现他最成功的一些项目没有进行任何或许多单元测试。然而,他确实在许多项目中使用了它们,只是通常不是所有项目都使用。(这也是我从他的博客中收集到的)。

是的,有很多伟大的程序员都在实践单元测试。马丁·福勒、罗伯特·C“鲍勃叔叔”马丁、迈克尔·费瑟斯,当然还有肯特·贝克。问题不是“Jon Skeet是否进行单元测试”,而是您是否可以处理Jon Skeet的代码并知道您是否破坏了它?你能自己编写两年前编写的代码,并知道自己是否破坏了它吗?最后…你办公室里到底有多少QA人员?在QA中,你花了多少时间在软件上而不是为你赚钱?你能以多快的速度识别bug

单元测试是为了在20名QA人员开始查看软件之前,以及在您因为无法足够快地修复错误而失去客户之前,将开发软件的成本转移到最开始的时候,即更便宜的时候


我知道我永远不会雇佣一个自认为超越单元测试的开发人员,即使他们是世界上最棒的程序员。因为如果他明天被公共汽车撞了,我在哪里能找到一个大脑完全相同的人?

我个人不知道这些人是否提倡正式的单元测试


但是,请记住,Kent Beck解释说,TDD应该被认为是伟大的程序员在没有意识到的情况下自然采用的实践类型的形式化。对于我们这些不是天才的可怜的SAP来说,这有助于我们编写更健壮的代码,使其更具适应性,并防止我们浪费时间编写一堆从未使用过的代码。我发现他的评估完全符合目标。

这并不能回答问题,所以我将把它作为一个评论:p对我来说,使用最多单元测试的应用程序是基于需求定义规范的应用程序,有时会提前进行单元测试以确保满足这些需求。例如,像TeX这样的东西没有详细的要求,它是一种markeup语言的设计。你不能对设计进行真正的单元测试。你可以对一个实现进行单元测试,但你不会根据单元测试来判断设计的质量。顺便说一句,这种态度也适用于目前在谷歌工作的其他著名程序员,如肯·汤普森、罗伯·派克、迈克·布伦斯、圭多·范·罗森等--谷歌是一个单元测试密集型开发的编程文化,如果不接受它,就无法在那里茁壮成长。我认为有些团队不是特别的单元测试密集型。。。但人们通常鼓励他们振作起来:)这是谷歌的一个有趣的观点。我想知道Python的源代码中有多少个单元测试。