清除java_如何在Java地毯下有效地清除问题

清除java

因为软件错误可能使我们在开发人员面前看起来很糟糕,并导致其他人对我们的想法减少,所以最好避免编写错误,快速识别和修复错误或掩盖我们的错误。 有许多博客文章和文章讨论如何避免错误以及如何识别和修复错误,因此,在这篇博客文章中,我将介绍一些在地毯下扫除Java代码库中问题的最有效策略。

吞咽检查异常

当我们不小心在代码中引入了错误时,异常是让我们放弃的事情之一。 在方法上声明throws子句或catch选中的Exception也很麻烦。 解决这两个问题的方法是,在可能引发该异常并且什么也不做的情况下,简单地捕获该异常(即使它是RuntimeException )。 这样可以使API简洁明了,无论如何,对已检查的异常几乎没有办法。 通过不对其进行记录或执行任何操作,甚至没有人需要知道它曾经发生过。

注释掉或删除不满意的单元测试

失败的单元测试可能会分散注意力,使您难以确定新功能何时破坏了测试。 当我们通过代码更改破坏了某些内容时,它们还可以显示。 注释掉这些失败的单元测试将使单元测试报告更整洁,并使查看他人的新功能是否破坏单元测试变得更加容易。

在基于JUnit的单元测试中使用

注释掉失败的单元测试似乎很令人厌恶,因此另一个可能更令人愉悦的选择是使用@Ignore批注来注释基于JUnit的失败单元测试方法。

完全删除个别测试

如果用@Ignore注释掉一个损坏的测试或用@Ignore注释一个损坏的测试是不令人满意的,因为有人仍然可以检测到我们已经破坏了一个单元测试,我们可以简单地完全删除有问题的单元测试。

注释违规断言

我们不必注释掉或删除整个测试。 它就像在单元测试方法中注释掉或删除assert语句一样简单。 该方法每次都可以成功执行并运行,因为没有断言意味着没有办法失败。 当单元测试方法非常长且令人费解,因此不容易断言缺乏断言时,这尤其有效。

分散无用和冗余测试的噪音

注释单元测试,使用@Ignore注释基于JUnit的单元测试,甚至删除单元测试对于在Java底下扫除问题的策略可能也太明显了。 为了使这些变得不那么明显,另一种有效的策略是在同一个单元测试类中编写许多不必要的和多余的测试方法,以便看起来正在进行全面的测试,但是实际上只有一小部分功能(我们知道的子集是工作)正在测试中。

编写单元测试,即使不正确,也可以“证明”您的代码是正确的

我们可以利用以下事实:单元测试只能测试单元测试的作者认为被测软件的预期行为,从而编写可证明我们的代码正确的单元测试。 如果提供2和2时,将两个整数相加的代码意外返回5的和,则我们可以简单地将单元测试中的预期结果也设置为5。会显示漂亮的单元测试报告,而不必是明智的。

避免记录详细信息

日志可能会暴露一个人的软件问题,而应对这种风险的有效方法是完全不进行日志记录,仅记录日常操作和结果,并在记录的消息中保留详细信息(尤其是上下文)。 平凡的细节记录过多也会掩盖任何可能揭示我们代码弱点的更有意义的消息。

避免使用描述性的

描述性的toString()方法可能会过多地揭示任何给定实例的状态,并揭示我们的错误。 不重写Object.toString()会使识别问题和将问题与任何给定的代码或开发人员相关联变得更加困难。 跟踪问题所需的额外时间使您有更多时间转到下一个项目,然后才发现是您的代码有问题。 如果编写的Java类使用描述性的toString()扩展了类,则可以在扩展类中重写该方法以不执行任何操作(有效地删除可能导致问题的toString()输出)。 如果您希望它看起来像从未在继承层次结构中实现过,请确保扩展类的toString()方法返回System.identityHashCode(this) 。

不要让

NullPointerException可能是Java开发人员处理的最常见的异常。 这些特别危险,因为它们通常会揭示代码的弱点。 try仅包装每一行代码的一种策略– catch并吞下异常(包括NPE)。 另一个不太明显的策略是通过从不返回或传递null来避免NPE。 有时,可以使用明显的默认值代替null (例如,空的String或集合),但有时我们必须更具创造力,以避免使用null 。 在此处可以使用“默认”非null值代替null 。 关于如何处理此任意非null默认值,有两种思路。 一种方法是使用数据集中最常见的值作为默认值,因为如果无论如何还是很常见,当出现更多的该值并且您更有可能拥有看起来像这样的代码时,可能不会注意到它。处理该共同价值而无任何意外。 另一方面,如果您拥有一个几乎从未使用过的值,那么它可以成为一个很好的默认值,因为受它影响的代码(尤其是经过良好测试的代码)可能比通常期望的值少。

结论

当我回顾这些策略以扫除底层Java代码问题时,我注意到了一些重复出现的主题。 就暴露我们软件的弱点而言,异常,日志记录和单元测试特别麻烦,因此,有效地“发现我们的足迹”的大多数方式都与异常,日志记录和单元测试的处理有关就不足为奇了。

翻译自: https://www.javacodegeeks.com/2017/04/effectively-sweep-problems-rug-java.html

清除java

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

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

相关文章

Web产品的交互说明文档应该怎么写?

经常与开发同学聊天,他们说有一个详细的说明文档可以帮助他们更准确的进行工时评估,还可以帮助他们提高工作效率,减少多余的思考时间。因此在这里分享一些制作交互说明文档的经验。 我先说说说交互原型包含哪些部分? 版本说明及更…

linux类似360软件,linux下有什么类似鲁大师查看电脑配置的软

满意答案drqyna2017.05.26采纳率:40% 等级:11已帮助:5455人linux如何查看系统的硬件配置如何在linux系统下查看系统配置?在图形模式下我们可以很方便的利用Linux的图形工具,点击几下就可以查看到Linux系统的的硬件信…

java 编写代码_如果您在2016年编写过Java代码-这是您不容错过的趋势

java 编写代码2016年最有趣的Java相关主题 关于代码,有很多热门话题,而要跟上所有事情,这是一项全职的工作。 如果您想知道如何从谷壳中分离出小麦,我们已经为您完成了工作。 在下面的文章中,我们将介绍2016年最热门…

thinkphp json_原创干货 | Thinkphp序列化合总

听说转发文章会给你带来好运最近Thinkphp几个版本都出了反序列化利用链,这里集结在一起,下面是复现文章,poc会放在最后01Thinkphp5.1.37环境搭建composercreate-project topthink/think5.1.37 v5.1.37poc演示截图调用链单步调试漏洞起点在\th…

linux安java,Linux安装Java

从人类社会的角度看OO(独家视角)引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...include与require的区别&a…

前端和后端的区别

后端工程师负责服务器端应用程序的编写开发(业务逻辑、方法、函数、数据库代码等) 前端工程师负责UI的html代码编写和设计,所以前端工程师一般指网页工程师 前端部分是和用户直接交互的,包括前台和后台部分 客户端其实就是属于前端…

笔记本能安装联想智能云教室吗_挑战Jupyter Notebook:云协作、云硬件,上云的Notebook编程环境...

对全世界的 Python 高手而言,Jupyter Notebook 是目前最流行的编程环境,但它也有一些令人难以忍受的缺点。为此,一个位于旧金山的小团队开发了一款名为 Deepnote 的笔记本工具,这是一种云协作、云硬件,上云的 Notebook…

java自动生成类_自动生成优化的Java类专业知识

java自动生成类如果您今年访问过JavaOne,您可能已经参加了我的演讲“如何从数据库生成定制的Java 8代码”。 在那次演讲中,我展示了如何使用Speedment Open Source工具包使用数据库作为域模型来生成各种Java代码。 我们没有时间要考虑的一件事是&#xf…

在Linux中su和sudo区别,Linux中su和sudo的用法和区别

目录sudosudo:暂时切换到超级用户模式以执行超级用户权限,提示输入密码时该密码为当前用户的密码,而不是超级账户的密码。缺点是每次执行超级用户权限都要在命令前加上 sudo ,优点是在当前终端再使用 sudo 不要再重复输入密码(只对…

neo4j 添加属性_Neo4j:动态添加属性/设置动态属性

neo4j 添加属性我一直在研究一个具有英国国家铁路时刻表的数据集,它们以文本格式为您提供每列火车的出发和到达时间。 例如,可以这样创建代表停止的节点: CREATE (stop:Stop {arrival: "0802", departure: "0803H"})该…

python 提升效率_@Python 程序员,如何最大化提升编码效率?

作者 | Enoch CK 译者 | 刘畅 整理 | Jane 出品 | Python大本营 【导语】无论你是一位高级的AI工程师还是学生,你都会在工作或学习过程中需要用到 Python。自 1991 年首次发布后,Python 很快就成为了程序员和技术人员最喜欢的语言。作为一种拥有相对简单…

linux tar -xvf命令,linux下tar命令详解

2011-11-28 13:03朋友你好!我刚开始搞linux,碰到了很多问题,想问你下,希望能帮我解答下。下面是我的一段shell 程序#!/bin/shwhile [ 0 ]doread scoreif [ $score -lt 60 ];thenecho " you must work hard!"…

linux下如何查看主机是否安装了ftp server

常用的发行版的软件包管理系统有Debian系(包括Debian,Ubuntu,Mint等)和Red Hat系(包括RHEL,Fedora,CentOs,Scientific),前者查看是否安装了ftp的命令是&#…

spring boot rabbitmq_Spring Boot+RabbitMQ 实现延迟消息实现完整版,实用!

本文同步Java知音社区,专注于Java作者:Sam哥哥http://blog.csdn.net/linsongbin1/article/details/80178122概述曾经去网易面试的时候,面试官问了我一个问题,说下完订单后,如果用户未支付,需要取消订单&…

jax-rs jax-ws_信守承诺:针对JAX-RS API的基于合同的测试

jax-rs jax-ws自从我们谈论测试和应用有效的TDD做法以来,已经有一段时间了,特别是与REST(ful) Web服务和API有关的做法。 但是,这个主题永远都不应忘记,特别是在每个人都在做微服务的世界中,无论…

手机流量共享 linux,linux – 通过HTB共享带宽和优先处理实时流量,哪种方案更好?...

我想在我们的互联网线路上添加一些流量管理.在阅读了大量文档之后,我认为HFSC对我来说太复杂了(我不了解所有曲线的东西,我担心我永远不会把它弄好),CBQ不推荐,基本上HTB就是通往适合大多数人.我们的内部网络有三个“段”,我想在这些段之间或多或少地分享带宽(至少在开始时).此…

负载均衡解决方案

某网站随着知名度的提高,用户访问量日渐增多,近段时间以来,由于访问量的激增,服务不可用的情况时有发生。针对这种状况,结合实际情况,设计了一套解决方案。 技术实现 1、负载均衡。2台同样配置的linux服务…

pcf8523_PCF上的Spring Cloud合同和Spring Cloud Services

pcf8523最近,我们有一个客户,对于使用Spring Cloud Contract (SCC)来防止微服务团队之间的API“漂移”,微型开发团队会照顾个体的API(构成企业应用程序的一部分),这些客户非常感兴趣…

python二分法查找时间点_python有序查找算法:二分法

二分法是一种快速查找的方法,时间复杂度低,逻辑简单易懂,总的来说就是不断的除以2除以2... 但是需要注意:待查找的序列区间单调有序 例如需要查找有序数组arr里面的某个关键字key的位置,那么首先确认arr的中位数或者中…

linux shell ls -l,linux之ls -l|grep ^-|wc -l命令 Shell 中常見的日志統計方法

轉:http://www.cnblogs.com/senior-engineer/p/6203268.htmlShell 中常見的日志統計方法https://my.oschina.net/waterbear/blog/371845Linux Shell工具grep awk cut sort uniq sort 使用小結http://www.linuxidc.com/Linux/2012-05/61126.htm查看某文件夾下文件的個…