软件测试实验 FindBugs

article/2025/9/13 15:56:22

1.配置 FindBugs


打开 Eclipse,通过【Window -> Preferences】下【Java -> FindBugs】查看 FindBugs的
配置情况。问题: 这里可以配置 FindBugs的哪些特性?

选择导入的项目,通过【Window -> Preferences】下【Java -> FindBugs】查看 FindBugs

配置情况,得出由图所示可知FindBugs的特性

1.Run Automatically开关

(1)当此项选中后FindBugs将会在你修改Java类时自动运行,如你设置了Eclipse自动编译开关后,当你修改完Java文件保存,FindBugs就会运行,并将相应的信息显示出来。

(2)当此项没有选中,你只能每次在需要的时候自己去运行FindBugs来检查你的代码。

2.Minimum confidence to report选择项

这个选择项是让你选择哪个级别的信息进行显示,有LowMediumHigh三个选择项可以选择,很类似于Log4J的级别设置。 比如:

(1)你选择了High选择项,那么只有是High级别的提示信息才会被显示。

(2)你选择了Medium选择项,那么只有是MediumHigh级别的提示信息才会被显示。

(3)你选择了Low选择项,那么所有级别的提示信息都会被显示。

此外,还有一个拖动条供选择rank等级(1-20),rank越高,严重程度越低,显示的信息越多。

3.Reported(visible) bug categories选择项(左侧是分类,右侧是等级)

在这里是一些显示Bug分类的选择:

Correctness关于代码正确性相关方面的

Performance关于代码性能相关方面的

Multithreaded correctness关于代码多线程正确性相关方面的

Malicious code vulnerability关于恶意破坏代码相关方面的

Internationalization关于代码国际化相关方面的

严重程度:Scariest>Scary>Troubling>Of concern,这个和rank的设置1-20是匹配的。

4. Detector configuration选择项

在其他的tab标签页中,显示了更多更详细的bug check configuration,用户可以根据需要进行选择和配置。

2.在 Sudoku上运行 FindBugs

打开 Eclipse,在 Sudoku项目上右键选择 FindBugs。
A. 查看 FindBugs发现的问题,一共有几类问题,各是什么含义?将这几类问题翻译成
中文;

答:三类问题。如图:

1. 对数组使用toString方法

Bug: Invocation of toString on combination in solver.Matrix.main(String[])

The code invokes toString on an array, which will generate a fairly useless result such as [C@16f0472. Consider using Arrays.toString to convert the array into a readable String that gives the contents of the array. See Programming Puzzlers, chapter 3, puzzle 12. 
 

解释:在数组上调用toString,这将得到一个没有用处的结果。在考虑使用数组时,toString将数组转换成一个可读的字符串数组的内容。

2. matrix .compute()在循环中使用+连接字符串

Bug: solver.Matrix.compute() concatenates strings using + in a loop

The method seems to be building a String using concatenation in a loop. In each iteration, the String is converted to a StringBuffer/StringBuilder, appended to, and converted back to a String. This can lead to a cost quadratic in the number of iterations, as the growing string is recopied in each iteration. 
Better performance can be obtained by using a StringBuffer (or StringBuilder in Java 1.5) explicitly.

解释:该方法似乎是在循环中使用连接构建字符串。在每次迭代中,字符串被转换为

StringBuffer/StringBuilder,附加到字符串,然后再转换回字符串。这可能导致迭代次数的二次成本,因为不断增长的字符串在每次迭代中重复出现。

通过显式地使用StringBuffer(或Java 1.5中的StringBuilder)可以获得更好的性能。

3.读取问题

Bug: Unread field: gui.MainWindow.m_gameOutput

This field is never read.  Consider removing it from the class.

解释:存在未读字段:gui.MainWindow.m_gameOutput,也就是说这个字段永远不会被读取。

B. 如何解决 FindBugs指出的问题?请修改 Sudoku程序,以改正所有 FindBugs指出的
问题。注意:同类错误仅需记录一次修改思想即可。

答:修改方法如下:

1. 对数组使用toString方法

解决方法:可以利用Arrays类位于 java.util 包中,主要包含了操纵数组的各种方法

使用时需要导入包:import java.util.Arrays;

修改之后,我们发现bug已经消失。

解决结果:

2. matrix .compute()在循环中使用+连接字符串

(由于思想一样,这里只举例一个来修改)

旧代码为:       

String fixed = "";int total = 0;for(int i=0, rows = m_field.length; i<rows; i++){for(int j=0, cols = m_field[i].length; j<cols; j++) {total ++;index ++;if(m_field[i][j] == 0)m_unfixedNumber ++;elsefixed += m_field[i][j];              }}

将原来的代码改成:       

StringBuffer buf = new StringBuffer();int total = 0;for(int i=0, rows = m_field.length; i<rows; i++){for(int j=0, cols = m_field[i].length; j<cols; j++) {buf.append(m_field[i][j]);}}{      String fixed = buf.toString();

解决结果:

Normal confidence只剩9个。该Bug已经解决。

3.读取问题

解决方法:可以将语句private GameOutput                     m_gameOutput = null; m_gameOutput = new GameOutput(m_sashForms, SWT.BORDER, m_gameField);语句删除即可

解决结果:

Unread field已经不再提示。该Bug已经解决。


http://chatgpt.dhexx.cn/article/qobLrCaX.shtml

相关文章

Findbug使用指南

Findbug使用指南 findbugs是一个开源的eclipse 代码检查工具&#xff1b;它可以简单高效全面地帮助我们发现程序代码中存在的bug&#xff0c;bad smell&#xff0c;以及潜在隐患。针对各种问题&#xff0c;它并且提供了简单的修改意见供我们重构时进行参考&#xff1b; 通过使…

findbugs用法教程

代码分析工具FindBugs详细配置使用教程 一&#xff0c;关于FindBugs (1) FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具&#xff0c;它检查类或者 JAR 文件&#xff0c;将字节码与一组缺陷模式进行对比以发现可能的问题(先对编译后的class进行扫描&#xff0c;…

自动找Bug/插件-代码静态检查findbugs-idea安装以及使用

目录 简介 IDEA安装FindBugs Findbugs配置 配置排除一些类 扫描级别 IDEA中使用FindBugs: 一些常见错误 补充 简介 Findbugs是一个静态分析工具&#xff0c;它检查类或者JAR 文件&#xff0c;将字节码与一组缺陷模式进行对比以发现可能的问题。Findbugs自带检测器&…

Elasticsearch安装IK分词器、配置自定义分词词库

一、分词简介1、单字分词&#xff1a;2、二分法分词&#xff1a;3、词库分词&#xff1a; 二、配置IK中文分词器三、配置自定义分词拓展词库 一、分词简介 在Elasticsearch中&#xff0c;假设搜索条件是“华为手机平板电脑”&#xff0c;要求是只要满足了其中任意一个词语组合…

Elasticsearch 英文分词 中文分词

对于倒排索引来说&#xff0c;很重要的一件事情就是需要对文本进行分词&#xff0c;经过分词可以获取情感、词性、质性、词频等等的数据。 Elasticsearch 分词工作原理 在 Elasticsearch 中进行行分词的需要经过分析器的3个模块&#xff0c;字符过滤器将文本进行替换或者删除&…

【ElasticSearch】分词器(ElasticSearchIK分词器)

1. 分词器介绍 •IKAnalyzer 是一个开源的&#xff0c;基于java语言开发的轻量级的中文分词工具包•是一个基于Maven构建的项目•具有60万字/秒的高速处理能力•支持用户词典扩展定义 2. ik 分词器安装 IK 分词器安装 3. 分词器的使用 IK分词器有两种分词模式&#xff1a;ik…

ElasticSearch中文分词,看这一篇就够了

写在前面&#xff1a;我是「且听风吟」&#xff0c;目前是某上市游戏公司的大数据开发工程师&#xff0c;热爱大数据开源技术&#xff0c;喜欢分享自己的所学所悟&#xff0c;现阶段正在从头梳理大数据体系的知识&#xff0c;以后将会把时间重点放在Spark和Flink上面。 如果你…

Ik分词器(自定义分词-mysql)

引言&#xff1a;ik分词器的分词范围不够广泛。某些特定行业的专业用语分词能力就不够了&#xff0c;此时就需要自定义分词&#xff0c;与停顿词。 1、下载ik分词器源码 git地址&#xff1a;https://github.com/medcl/elasticsearch-analysis-ik/releases?page2 下载对应的…

分词器详解

在全文搜索&#xff08;Fulltext Search&#xff09;中&#xff0c;**词&#xff08;Term&#xff09;**是一个搜索单元&#xff0c;表示文本中的一个词&#xff0c;**标记&#xff08;Token&#xff09;**表示在文本字段中出现的词&#xff0c;由词的文本、在原始文本中的开始…

ES-分词器

简介 分词器是es中的一个组件&#xff0c;通俗意义上理解&#xff0c;就是将一段文本按照一定的逻辑&#xff0c;分析成多个词语&#xff0c;同时对这些词语进行常规化的一种工具&#xff1b;ES会将text格式的字段按照分词器进行分词&#xff0c;并编排成倒排索引&#xff0c;…

IK分词器

IK分词器是ES的一个插件&#xff0c;主要用于把一段中文或者英文的划分成一个个的关键字,我们在搜索时候会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词器是将每个字看成一个词,比如"我爱技术"会被分为"我…

Elasticsearch连续剧之分词器

目录 一、前言二、默认分词器三、IK分词器1.主要算法2.安装IK分词器2.1 关闭es服务2.2 上传ik分词器到虚拟机2.3 解压2.4 启动ES服务2.5 测试分词器效果2.6 IK分词器词典 四、拼音分词器1.安装2.测试分词效果 五、自定义分词器1.创建自定义分词器2.测试 一、前言 ES文档的数据…

jieba分词

一、jieba简介 jieba库是一款优秀的 Python 第三方中文分词库&#xff0c;jieba 支持三种分词模式&#xff1a;精确模式、全模式和搜索引擎模式&#xff0c;下面是三种模式的特点。 精确模式&#xff1a; 试图将语句最精确的切分&#xff0c;不存在冗余数据&#xff0c;适合做…

NLP-分词综述

NLP-分词综述 一、什么是分词&#xff1f;二、为什么要分词1、将复杂问题转化为数学问题2. 词是⼀个⽐较合适的粒度3. 深度学习时代&#xff0c;部分任务中也可以「分字」 三、中英⽂分词的3个典型区别1.分词⽅式不同&#xff0c;中⽂更难2.英⽂单词有多种形态3.中⽂分词需要考…

Jieba中文分词 (一) ——分词与自定义字典

jieba分词特点 支持四种分词模式&#xff1a; 精确模式试图将句子最精确地切开&#xff0c;适合文本分析&#xff1b;全模式把句子中所有的可以成词的词语都扫描出来, 速度非常快&#xff0c;但是不能解决歧义&#xff1b;搜索引擎模式在精确模式的基础上&#xff0c;对长词再次…

【NLP学习】中文分词

word segmentation 1.概述2.分词方法(1)基于词典的机械分词法①正向最大匹配&#xff08;FMM&#xff09;②逆向最大匹配&#xff08;BMM&#xff09;③双向最大匹配 (2)基于统计的分词法①基于互信息的分词方法②最大概率分词方法 3.分词粒度4.中文分词工具5.总结 1.概述 *◆…

基于字典的中文分词

中文分词介绍 中文分词就是将一个汉语句子中的词切分出来。为机器翻译、文本挖掘、情感分析等任务打好基础。为什么一定要先进行分词呢&#xff1f;这就像 26 个字母一样&#xff0c;单个字母并不能表达某个意思&#xff0c;将其组合起来成为一个英文单词才有意义。 中文虽然有…

【ElasticSearch】中文分词器

ES默认的analyzer&#xff08;分词器&#xff09;&#xff0c;对英文单词比较友好&#xff0c;对中文分词效果不好。不过ES支持安装分词插件&#xff0c;增加新的分词器。 1、如何指定analyzer&#xff1f; 默认的分词器不满足需要&#xff0c;可以在定义索引映射的时候&#…

Elasticsearch之中文分词器

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【一心同学】&#xff0c;一位上进心十足的【Java领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; ✨【一心同学】的写作风格&#x…

各种中文分词工具的使用方法

诸神缄默不语-个人CSDN博文目录 本文将介绍jieba、HanLP、LAC、THULAC、NLPIR、spacy、stanfordcorenlp、pkuseg等多种中文分词工具的简单使用方法。 对于可以在多种语言上使用的工具&#xff0c;本文仅介绍其在Python语言上的使用。 文章目录 1. jieba2. HanLP3. LAC4. THULA…