那是两个小时我不会回来

正如我之前关于linting主题所说的 ,花时间修改代码的好处很有限,因为自动工具告诉您这样做。 更糟糕的是,这些工具并非万无一失。

例如,我们一直在针对完美无害的try-with-resources构造周围的SpotBugs警告中添加排除项,这在Java 11中不太像。类似地,SonarQube看起来对特定的静态方法有麻烦进口。 不知道为什么,浪费时间安抚这些工具。

进行静态分析并执行所说的那样的两难选择是,如果您花时间去做它所说的话,很难看到好处,但是如果您不这样做,那么可能会有一些更糟的副作用:

  • 一些代码布局开始成为人们的意见–整个团队的意见各不相同
  • 代码中包含一些晦涩的问题,没有人注意到它们
  • 总体质量和对质量的关注下降

这是第二个最令人沮丧的情况。 感谢一些静态分析工具,最近我修复了一个数字的性能,安全性和稳定性错误。 我不认为其中任何一个都是可以保证的失败,但是每个人都有可能浪费我们一些稀缺的计算资源,或者给项目增加风险。

如果我没有注意整个问题,并试图将计数降到最低,我可能没有注意到这些问题。

因此,这是必须要做的。 这就像在撒粉。 如果离开它,突然有很多事情要做,情况可能会比您想象的更糟。

我希望我回来的两个小时

SonarQube的建议之一是替换Java类Stack Deque 。 这是我们的代码:

 Stack<StringBuilder> tags = new Stack<>();  void onNewElement() { tags.add( new StringBuilder());  }  void onNewData(String data) { tags.peek().append(data);  }  void onEndElement() { save(tags.pop());  } 

我已经简化了一点。 它正在读取XML,并允许使用嵌套的层次结构,在该结构中您需要诸如元素堆栈之类的东西才能遍历该层次结构。

我想我能做的就是用Deque代替Stack ,尤其是将LinkedList替换为实现–一个很好的灵活数据结构。

此项目的构建大约需要15分钟。

失败了

我仔细查看了为SonarQube所做的所有更改,并开始做出有根据的猜测,可能会造成破坏。 尽管从这篇文章来看,似乎必须归咎于Stack重构(restacktor?),但我还有其他一些人选,因此丢失了一些构建周期。

最终,我回到了Stack ,大约15分钟后,构建了一个绿色版本。

在这一点上,我要感谢过去的我,因为我编写了足够敏感的测试自动化程序来发现此问题,特别是因为这是对原来没有有用测试的旧代码库的重做。

您发现错误了吗?

一旦确定了修复程序,我就不想因为不知道发生了什么而把自己扔了, 因为伏都教... oooooh!

因此,我问自己为什么StackLinkedList可能表现不同。

然后我注意到Stack方法的使用:

  • peek –必须正确
  • pop -经典
  • add – w?

为什么我们将堆栈视为add / pop ? 当然应该push / pop吗?

就是这样。 降低实现细节,事实证明LinkedList将head元素视为堆栈的顶部,但在尾部添加了新元素(这是链表的工作方式)。 相反, Vector ,底层实现的Stack增加了结束,也不会peek ,并pop从结束。 如果您是数组,则不希望在周围乱洗元素。

时间小偷

因此,这里有两个时间小偷:

  • 有人不一致地使用API​​来实现堆栈-导致此奇怪的迁移错误
  • 该死的15分钟建立

如果我的构建只有2分钟,那么所有这些都不会花费很长时间……此测试需要大量设备才能运行。 这样做有充分的理由,但是这仍然是巨大的开销,并且需要实时。

TL; DR

如果您编写肮脏的代码,迟早它将赶上您或其他人。 整理工具虽然可能会很痛苦,但它们最终在减少基线异常方面做得很好,但是它们可以在过程中浪费您的时间。

翻译自: https://www.javacodegeeks.com/2020/05/thats-two-hours-i-wont-get-back.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340061.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 查询不同编号的时间最小记录_投稿 | ORACLE amp; PostgreSql 利用伪列删除完全重复的两行...

作者&#xff1a;缪晓丽DBA、数据库爱好者、从业10年。对 DB2、PostgreSQL、Oracle 均有较长的运维经验。本次演示的 test 表如下&#xff1a;01Oracle 的 rowidSQL 语句&#xff1a;DELETE FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY id ORDER BY id) AS rn, id, name…

addcslashes php,php addcslashes函数怎么用

php addcslashes函数返回在指定字符前添加反斜杠的字符串。其语法是addcslashes(string,characters)&#xff0c;参数string是必须的&#xff0c;规定要转义的字符串&#xff0c;characters是必须&#xff0c;规定要转义的字符或字符范围。addcslashes函数怎么用&#xff1f;作…

struct类型重定义 不同的基类型_C++构造数据类型

结构体(struct)定义&#xff1a;结构体是一个数据类型&#xff0c;是由多个不同类型的数据组成的数据集合。关键字为&#xff1a;struct 。优点&#xff1a;大大减少程序代码的离散性&#xff0c;使程序代码阅读更加符合逻辑。语法&#xff1a;struct 结构体类型名{ 成员类型 成…

php zip怎么安装,php如何安装zip模块?(方法介绍)

php 安装zip模块为php安装zip扩展wget http://pecl.php.net/get/zip-1.13.5.tgz tar -zvxf zip-1.13.5.tgz cd zip-1.13.5 /home/xxx/php/bin/phpize出现错误&#xff1a;Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment va…

vs如何写多线程_java中的多线程的示例

在讨论多线程之前&#xff0c;让我们先讨论线程。线程是进程中轻量级的最小部分&#xff0c;可以与同一进程的其他部分(其他线程)并发运行。线程是独立的&#xff0c;因为它们都有独立的执行路径&#xff0c;这就是为什么如果一个线程中发生异常&#xff0c;它不会影响其他线程…

matlab mex路径,使用matlab进行mex编译时的路径问题mexopts

matlab和vs 进行混合编程时总需要使用matlab编译mexFunction.cpp文件。这些文件免不了使用include下的*.h和lib下的*.lib文件。举matlab和vs 进行混合编程时总需要使用matlab编译mexFunction.cpp文件。这些文件免不了使用include下的*.h和lib下的*.lib文件。举例说明&#xff0…

hystrix应用 博客_用Hystrix保护您的应用程序

hystrix应用 博客在先前的帖子http://www.javacodegeeks.com/2014/07/rxjava-java8-java-ee-7-arquillian-bliss.html中&#xff0c;我们讨论了微服务以及如何使用&#xff08;RxJava&#xff09;的Reactive Extensions编排微服务。 但是&#xff0c;如果一项或多项服务因已停止…

艾默生变频器报警PHP,艾默生ct变频器报警ou 这个CT的变频器报警UU怎么解决?

1, 这个CT的变频器报警UU怎么解决&#xff1f;(1) 控制板Q1(15050026)坏。(2) 7840坏&#xff1a;在变频器通电时&#xff0c;用直流档&#xff0c;黑接5脚&#xff0c;红分别接6,7,8脚&#xff0c;值为2.5,2.5,5为正常&#xff0c;否则7840坏。(3) 小板坏&#xff1a;在变频器…

Project Reactor展开方法

最近&#xff0c;我的一位同事向我介绍了Project Reactor类型的expand运算符&#xff0c;在这篇文章中&#xff0c;我想介绍几种使用它的方式。 展开分页结果 考虑在名为City的模型上基于Spring Data的存储库&#xff1a; import org.springframework.data.jpa.repository.Jpa…

同时买票是怎么实现的_去巴黎玩怎么买地铁票最划算?| 巴黎最全交通攻略

次票、天票、机场票……傻傻分不清楚。不会法语怎么办&#xff1f;什么时候买有优惠&#xff1f;看这一篇全知道​​巴黎作为国际大都市&#xff0c;交通还是非常方便的。基本上80%的巴黎景点都能坐地铁到达&#xff0c;就在我们平常所说的小巴黎里。整个巴黎岛&#xff08;Ile…

php输入地址查询,PHP查询用户IP所在地址

原创内容&#xff0c;转载请注明出处&#xff1a;https://www.myzhenai.com.cn/post/3042.html关键词&#xff1a;IP所在地址 IP地址 PHP获取ip地址相关内容&#xff1a;获取IP所处位置的Shell代码&#xff1a;https://www.myzhenai.com.cn/post/2917.htmlWordPress获取当前浏览…

swig模板 PHP,如何使用nodejs前端模板引擎swig

这次给大家带来如何使用nodejs前端模板引擎swig&#xff0c;使用nodejs前端模板引擎swig的注意事项有哪些&#xff0c;下面就是实战案例&#xff0c;一起来看一下。相对于jade&#xff0c;我还是更喜欢swig前端模板引擎&#xff0c;jade虽然语法简练高效了不少&#xff0c;但是…

redis是什么_什么是Redis?为什么我们要用Redis?

前言当结束Java和数据库的学习以后&#xff0c;你就会接触到Redis这个词&#xff0c;我第一次听到的时候脑海里就会浮现这两个问题&#xff1a;什么是Redis&#xff1f;为什么我们要用Redis&#xff1f;我了解完以后&#xff0c;写出来帮助大家能够更快的认识它。我们先来看它的…

性能php 教程,提高PHP性能效率的几个技巧

如何提高效率问题&#xff0c;往往同样的功能&#xff0c;不一样的代码&#xff0c;出来的效率往往大不一样。● 用单引号代替双引号来包含字符串&#xff0c;这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量&#xff0c;单引号则不会&#xff0c;注意&#xff1a;…

python from numpy import,python zeros()使用(from numpy import *)-Go语言中文社区

参考&#xff1a;############################################################函数zeros()在模块numpy中&#xff1a;from numpy import *help(zeros)该函数功能是创建给定类型的矩阵&#xff0c;并初始化为0参数简洁&#xff1a;shape&#xff1a;可以是int类型数据&#x…

sqlmap绕过d盾_Waf功能、分类与绕过

## 一. waf工作原理Web应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。常见的系统攻击分为两类&#xff1a;- 一是利用Web服务器的漏洞进行攻击&#xff0c;如DDOS攻击、病毒木马破坏等攻击&#xff1b;- 二是利用网页自身的安全漏洞进…

JUnit5 TestSuite替代

JUnit4具有TestSuite类来聚合多个测试。 这在JUnit 5中不可用。通常&#xff0c;通过套件中的一堆命名测试进行的测试发现有些糟透了。 但是&#xff0c;如果目标不是测试发现&#xff0c;而是不同测试类之间的资源共享&#xff0c;那么创建父对象是有意义的。 JUnit 5提供了N…

junit:junit_简而言之,JUnit:测试隔离

junit:junit作为顾问&#xff0c;我仍然经常遇到程序员&#xff0c;他们对JUnit及其正确用法的理解最多。 这使我有了编写多部分教程的想法&#xff0c;以从我的角度解释要点。 尽管存在一些有关使用该工具进行测试的好书和文章&#xff0c;但是也许可以通过本动手实践系列中的…

msflexgrid允许大选择_选择复式楼、跃层和别墅的装修业主如何做好家里的楼梯...

点击上面蓝色字体关注&#xff01;装修图例 | 别墅装修 | 装潢装饰 | 样板楼梯 | 装修设计很多复式或者别墅的房子&#xff0c;楼梯是不可缺少的建筑&#xff0c;大部分楼梯是连接客厅以及卧室的&#xff0c;很多朋友都选择在楼梯上面铺地板&#xff0c;木地板的改装空间大&…

mysql 查询 系统字段 自然日_Mysql查询用户留存/留存率问题用户n日(内)留存、某日新增用户n日(内)留存...

Mysql查询用户留存/留存率语法计算某日的客户在第n日再次出现的概率--用户n日留存率。计算某日的客户在某个时间段内再次出现的概率--用户n日内留存率。计算某日新增的用户在第n日再次出现的概率--新用户n日留存率。计算某日新增的用户在某个时间段内再次出现的概率--新用户n日…