爱玩科技网
您的当前位置:首页CheckStyle-软件测试

CheckStyle-软件测试

来源:爱玩科技网


静态代码检测工具CheckStyle

CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但是枯燥的任务中解脱出来。

CheckStyle检验的主要内容 包括:

Javadoc注释

命名约定

标题

Import语句

体积大小

空白

修饰符

代码问题

类设计

混合检查(包活一些有用的比如非必须的System.out和printstackTrace)

从上面可以看出,CheckStyle提供了大部分功能都是对于代码规范的检查,而没有提供象PMD和Jalopy那么多的增强代码质量和修改代码的功能。但是,对于团队开发,尤其是强调代码规范的公司来说,它的功能已经足够强大。Checkstyle插件可以集成到Eclipse IDE中去,能确保Java代码遵循标准代码样式。

一、Checkstyle的安装

按照实验指导书完成。

二、checkstyle的使用

1.检查单个文件

被检查的代码:

import java.util.Scanner;

public class Weather {

public static void main(String[] args) {

final int NUMBER_OF_DAYS = 10;

final int NUMBER_OF_HOURS = 24;

double[][][] data = new

double[NUMBER_OF_DAYS][NUMBER_OF_HOURS][2];

Scanner input = new Scanner(System.in);

// Read input using input redirection from a file

for (int k = 0; k < NUMBER_OF_DAYS * NUMBER_OF_HOURS; k++) {

int day = input.nextInt();

int hour = input.nextInt();

double temperature = input.nextDouble();

double humidity = input.nextDouble();

data[day - 1][hour - 1][0] = temperature;

data[day - 1][hour - 1][1] = humidity;

}

// Find the average daily temperature and humidity

for (inti = 0; i< NUMBER_OF_DAYS; i++) {

double dailyTemperatureTotal = 0, dailyHumidityTotal = 0;

for (int j = 0; j < NUMBER_OF_HOURS; j++) {

dailyTemperatureTotal += data[i][j][0];

dailyHumidityTotal += data[i][j][1];

}

// Display result

System.out.println(\"Day \" + i + \"'s average temperature is \"

+ dailyTemperatureTotal / NUMBER_OF_HOURS);

System.out.println(\"Day \" + i + \"'s average humidity is \"

+ dailyHumidityTotal / NUMBER_OF_HOURS);

}

}

}

检查结果:

可以看到在有代码不规范的那一行都有放大镜的图标。

2.检查一个项目

选中工程选择checkstyle->check code with checkstyle,检查错误即可。

练习

要求将输入的代码Weather类修改成为符合CheckStyle某种规则的编码风格。请在实验报告中说明CheckStyle检验前的代码和检验后的代码区别,并分别列出修改的每条代码是基于哪条规则做出的修改。

修改后的代码(每行错误的类型在这行代码上方的注释中):

package checksytletest;

import java.util.Scanner;

/**

* @author sure

*

*/

public class Weather //缺少 Javadoc 。'class def modifier' 缩进了4个缩进符,应为0个。

{ //'class def lcurly' 缩进了4个缩进符,应为0个。

/**

* @paramargs 字符串数组

*/

public static void main(String[] args)//缺少 Javadoc 。

{

//必须匹配表达式: '^[a-z][a-zA-Z0-9]*$'

final intnUMBEROFDAYS = 10;

//'method def' 子元素缩进了19个缩进符,应为8个

//必须匹配表达式: '^[a-z][a-zA-Z0-9]*$' 。

final intnUMBEROFHOURS = 24;

//'method def' 子元素缩进了19个缩进符,应为8个

double[][][] data = new double[nUMBEROFDAYS][nUMBEROFHOURS][2];

//- Resource leak: 'input' is never closed

//- 'method def' 子元素缩进了20个缩进符,应

//为8个。

Scanner input = new Scanner(System.in);

// Read input using input redirection from a file

//- 第 62 个字符 '{' 应位于新

//行。

//- 'for' 缩进了20个缩进符,应

//为8个。

for (int k = 0; k {

//for' 子元素缩进了22个缩进符,应为12个

int day = input.nextInt();

int hour = input.nextInt();

double temperature = input.nextDouble();

double humidity = input.nextDouble();

data[day - 1][hour - 1][0] = temperature;

data[day - 1][hour - 1][1] = humidity;

//'for rcurly' 缩进了20个缩进符,应为8个

}

// Find the average daily temperature and humidity

//'for' 缩进了20个缩进符,应为8个。

//第 48 个字符 '{' 应位于新行。

for (inti = 0; i{

//- 每一个变量的定义必须在它的声明处,且在同

//一行。

//- 'for' 子元素缩进了22个缩进符,应为12个。

double dailyTemperatureTotal = 0;

double dailyHumidityTotal = 0;

//- 'for' 缩进了22个缩进符,应为

//12个。

//- 第 49 个字符 '{' 应位于新行。

for (int j = 0; j {

dailyTemperatureTotal += data[i][j][0];

dailyHumidityTotal += data[i][j][1];

}

// Display result

//'for' 子元素缩进了22个缩进符,应为12个。

System.out.println(\"Day \" + i + \"'s average temperature is \"

+ dailyTemperatureTotal / nUMBEROFHOURS);

System.out.println(\"Day \" + i + \"'s average humidity is \"

+ dailyHumidityTotal / nUMBEROFHOURS);

}

input.close();

}

}

修改后的代码检查结果:

可以看到修改后的代码中前方的放大镜标志消失了,表明代码符合规范。

总结

Checkstyle能够有效地帮助程序开发人员检查代码的规范问题,使开发人员能够从这

项重要但很枯燥的工作中解脱出来,从而节约大量的时间。

因篇幅问题不能全部显示,请点此查看更多更全内容