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

sm羞耻任务_羞耻驱动的发展sm羞耻任务我一直渴望写出精巧的代码。在完成所有生产代码配对的日常工作中,我认为我们的质量很高。但是令人惊讶的是,当您独自编码时,您多么容易原谅自己并陷入不良习惯。配对时羞耻是品质背后的动力吗?我们有许多使用EasyMock编写的古老的单元测试;我们所有最近的单元测试都使用JMock。这笔小小的技术债务意味着,如果您要更改仅适用于EasyMock测试的代码,则首先必须决…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

sm羞耻任务

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

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

private PricesService prices = createMock(PricesService.class);

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

private Mockery context = new Mockery();
...
private final PricesService prices = context.mock(PricesService.class);

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

prices.prefetchFor(asset);
expect(prices.for(asset)).andReturn(
    Lists.newListOf("1.45", "34.74"));

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

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羞耻任务_羞耻驱动的发展

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

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

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

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

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

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

sm羞耻任务

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(2)
blank

相关推荐

  • Java程序员,到底要不要转行大数据?

    Java程序员,到底要不要转行大数据?前几天有个朋友在群里提问:如何看待大数据的未来?有必要转大数据方向吗?关于这个问题,谈谈我的思考。伴随公有云厂商的兴起,大数据的应用进入了2.0时代。传统大数据那种需要大量购买机器以及Hadoop发行商版本的时代一去不复返了,企业可以非常便利的按照自己的需要,在云端弹性的分配资源,并按照使用量付费。这使得大数据技术不但进入到了传统意义上的大中型企业,更是深入到了各行各业的小企业和创…

  • 深入理解static关键字

    深入理解static关键字提到static关键字,相信大家都不陌生,这是相对比较难以理解的一个关键字,相信各位也都能深深感受的到!本篇文章将好好总结一下static这个关键字。文章目录1、static存在的主要意义2、static的独特之处3、静态变量和实例变量的概念4、静态变量和实例变量【重点常用】5、static静态方法6、static代码块7、static应用场景1、static存在的主要意义static的主要…

  • linux定时删除N天前的文件(文件夹)

    linux定时删除N天前的文件(文件夹)

  • python win32api messagebox_如何在Python中使用Win32 API?

    python win32api messagebox_如何在Python中使用Win32 API?PyWin32是必经之路-但是如何使用它呢?一种方法是从遇到的具体问题开始并尝试解决它。PyWin32提供了许多Win32API函数的绑定,您确实必须首先选择一个特定的目标。在我的Python2.5安装中(在Windows上为ActiveState),win32软件包具有一个Demos文件夹,其中包含该库各个部分的示例代码。例如,这是CopyFileEx.py:importwin32file…

  • SpringBoot面试总结「建议收藏」

    SpringBoot面试总结「建议收藏」SpringBoot面试总结一.SpringBoot是什么?Springboot是一个脚手架(而非框架),构建于Spring框架(Framework)基础之上,基于快速构建理念,提供了自动配置功能,可实现其开箱即用特性(创建完一个基本的项目以后,可零配置或者少量配置即可运行我们的项目)。2.SpringBoot的核心特性是什么?起步依赖自动配置健康检查3.SpringBoot项目启动原理?SpringBoot项目在启动时,首先基于启动入口类上的注解描述,进行自动配置并扫描启动类所在

  • ubuntu 卸载apache

    ubuntu 卸载apache1.删除apache代码:$sudoapt-get–purgeremoveapache-common$sudoapt-get–purgeremoveapache2.找到没有删除掉的配置文件,一并删除代码:$sudofind/etc-name”*apache*”|xargsrm-rf$sudorm-rf/var/www$sudorm-rf/etc/libapache2-mod-jk3.删除关联,这样就可以再次用apt.

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号