前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sm羞耻任务_羞耻驱动的发展

sm羞耻任务_羞耻驱动的发展

作者头像
全栈程序员站长
发布2022-09-29 10:36:14
3.9K0
发布2022-09-29 10:36:14
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

sm羞耻任务

我一直渴望写出 精巧的代码 。 在 完成所有生产代码配对的 日常工作中,我认为我们的质量很高。 但是令人惊讶的是,当您独自编码时,您多么容易原谅自己并陷入不良习惯。 配对时 羞耻是品质背后的动力吗?

我们有许多使用Easy Mock编写的古老的单元测试; 我们所有最近的单元测试都使用JMock 。 这笔小小的技术债务意味着,如果您要更改仅适用于Easy Mock测试的代码,则首先必须决定:您要修复测试,还是可以hold着鼻子去适应现有的测试,或对其进行调整?你的目的? 这不仅使人分心,而且意味着做正确的事情可能会慢得多。 原则上,将Easy Mock测试更改为JMock是一项相对简单的任务。 Easy Mock通过一种简单的方式声明模拟:

代码语言:javascript
复制
private PricesService prices = createMock(PricesService.class);

这些可以轻松转换为JMock样式:

代码语言:javascript
复制
private Mockery context = new Mockery();
...
private final PricesService prices = context.mock(PricesService.class);

EasyMock声明期望的方式略有不同:

代码语言:javascript
复制
prices.prefetchFor(asset);
expect(prices.for(asset)).andReturn(
    Lists.newListOf("1.45", "34.74"));

这些需要转化为JMock的期望:

代码语言:javascript
复制
context.checking(new Expectations() {
    
    {
    allowing(prices).prefetchFor(asset);
    allowing(prices).for(asset);
        will(returnValue(Lists.newListOf("1.45", "34.74")));
}});

这个过程是非常机械的,因此,在10%的时间里,我开始使用脚本化的重构工具Rescripter将我们的EasyMock测试机械地转换为JMock。 Rescripter让您运行修改Java源代码的代码。 但这不只是简单的搜索和替换或正则表达式:通过使用Eclipse强大的语法树解析,您可以访问源文件的完全解析表示形式–这意味着您可以找到对方法的引用,查找方法调用,名称,参数列表等。鉴于从一个库到另一个库的翻译性质,这正是您所需要的。

这不可避免地是相当探索性的编码 。 我不确定是什么可能,翻译过程最终会变得多么复杂。 但是我从上面的一些简单示例开始。 但是,随着时间的流逝,由于库之间的许多差异使得我越来越难以完成翻译工作,因此复杂性也在增加。

sm羞耻任务_羞耻驱动的发展
sm羞耻任务_羞耻驱动的发展

经过10%的工作,我设法整理了一些很棒的东西:我翻译了几百个单元测试; 但是,这是由700行您曾经遇到过的最怪诞的代码完成的! 然后……然后上周,我得到了当天的一对伴侣。 他不得不分享这个恐怖。 用了10分钟的时间向他解释了问题,然后又用了15分钟的解释原因,这是一次性使用的代码,因此没有任何单元测试。 我很不好意思。 我们开始尝试进行一些小的更改; 但是如果没有测试框架,很难确定我们正在做的事情是否可行。 更糟的是,我们需要更改许多地方使用的核心功能。 这让我感到紧张,因为没有测试覆盖面-因此我们无法确定我们不会破坏已经存在的内容。 坦白说,这绝对是一场噩梦。 我已经习惯了进行测试覆盖并编写测试-在没有单元测试的情况下编写代码的想法使我无所适从。 但是,这里是我自己创建的一堆未经测试的代码。 为什么? 因为我原谅自己没有“做对了”。 毕竟,这只是一次性代码,不是吗? 这是探索性的,比生产代码更重要。 无论如何,一旦完成并迁移了测试,此代码将无用-那么为什么要使其漂亮呢? 我只是继续偷走…… 听起来多么合理,真是令人惊讶。 直到您意识到自己是个彻头彻尾的笨蛋。 即使是一次性代码,即使保质期相对较短

快速前进的唯一途径就是前进

所以我做了任何有理性的人都会做的事情。 我花了我的午餐时间来修复这种状况。 最终结果? 现在,我可以在Jasmine中编写单元测试,以验证我正在编写的重构。 现在,我不仅可以正确地测试驱动新代码。 我可以编写测试以涵盖现有的旧版代码,因此可以适当地对其进行重构。 惊人。 突然之间,进步的步伐跳了起来。 我没有一个漫长的调试周期,而是尝试手动查找和触发测试方案,而是有了一个易于运行,可重复的自动化测试套件,这使我对自己的工作充满信心。

这对我来说都不是新鲜事物:这是我日复一日地做的事情。 但是……但是…………我以某种方式原谅自己独自编码。 我能得出的唯一结论是,我们不能单靠编写任何价值的代码就值得信赖。 让另一个人看到您抱歉的代码借口的可耻之处是,配对时提高了质量: 如果您不配对编程,那么您编写的代码就必须是可耻的

参考: Actively Lazy博客上的JCG合作伙伴 David Green的羞耻驱动开发

翻译自: https://www.javacodegeeks.com/2012/03/shame-driven-development.html

sm羞耻任务

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/193341.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月15日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档