mfc removemenu 静态菜单 删除_基于 PMD 的静态测试

PMD 安装

   PMD 是一款采用 BSD 开源协议(BSD 开源协议是一个给予使用者很大自由的协议) 发布的 Java 程序代码检查工具,可以检查 Java 代码中是否含有未使用的变量、是否含有空的抓取块、是否含有不必要的对象等。打开 Eclipse,在工具栏的 Help 菜单中选择 Install New Software,在 Install 窗口中单击Add 按钮,并在 Location 中输入:

http://sourceforge.net/projects/pmd/files/pmd-eclipse/update-site/

   并为其取一个名字进行添加:

703da11fca4595a3b77d40523b93dac3.png
CPD 的使用

   CPD 是用来检查重复代码的(例如通过复制粘贴得到的代码),其使用很简单。 以如下代码为例:

public class Number {
public void arrayAdds(int[][] a) {
int sum = 0;
for (int row = 0;row < 100; row++)
for ( int col = 0; col<5;col++)
sum = sum + a[row][col];
for (int row = 0;row < 100; row++)
for ( int col = 0; col<5;col++)
sum = sum + a[row][col];
}
}

   右键单击项目工程文件夹,选择 PMD->Find Suspect Cut And Paste 菜单:

f8a985a4c637d25c152c9ca7de1034cf.png

   然后选择相应的语言和格式,这里选择 Java:

8a45a7ac4d9ee867dc1b2cf062b0f1a4.png

   单击 OK 按钮,在 CPD View 中就可以看到 CPD 的报告了,这里指出了代码重复:

0a491ba386a43743d5ec70faa7d24f18.png

   还可以发现包资源管理器的项目下多了一个目录 reports,打开可以发现以 cpd-开头的文件,这个就是 CPD 检查重复代码后的报告文件,其扩展名取决于上一步指定的报告类型,可以是 txt、XML 和 CSV 三种格式之一。刚才我们默认设置的是 txt 是格式,如下图所示,打开就可以看到具体的代码重复情况,包括出现的行号和具体重复的代码段:

c3ff59421f07fccd3a83bc14a5a8dd5c.png
PMD 的使用

   PMD 是静态代码检查工具,用来检查代码是否规范,它定义了一组检查规则。查 看 PMD 自 带 的 一 组 代 码 规 则 , 选 择 菜 单 Window->Preferences->PMD->Rules Configuration 即可。

   在这里可以自定义规则或对已有规则进行添加、删除和修改,也可以导入已经做好的规则文件。团队的代码开发可以利用导入和导出功能,实现统一的代码规范,方便代码检查、优化和管理。

   PMD 附带了许多可以直接使用的规则:

   潜在的 bug:空的 try/catch/finally/switch 语句

   未使用的代码:未使用的局部变量、参数、私有方法等

   可选的代码:String/StringBuffer 的滥用

   复杂的表达式:不必须的 if 语句、可以使用 while 循环完成的 for 循环

   重复的代码:拷贝/粘贴代码意味着拷贝/粘贴 bugs

   循环体创建新对象:尽量不要再 for 或 while 循环体内实例化一个新对象

   资源关闭:Connect,Result,Statement 等使用之后确保关闭掉

   此外,还可以自定义规则,检查 Java 代码是否符合某些特定的编码规范。例如,你可以编写一个规则,要求 PMD 找出所有创建 Thread 和 Socket 对象的操作。也可以根据实际情况更改自带规则的检查内容。

   选择一个规则,可查看规则的细节。

   在项目上单击右键,选择菜单 PMD->Check Code,即可执行 PMD 检查菜单:

0be0304e02e14e2c127ae7aae6968bf5.png

   按照设置好的规则,PMD 检查相应的可能缺陷。在 Violations Outline 里还会对千代码行和每个方法中的缺陷率进行统计:

d8b676e70f786b4a117eccb1459c46fa.png

   在项目上右击,选择 PMD->Generate reports 即可生成 PMD 报告:

b0eed0888565d8bb91fa8447a7da6931.png
a844c1ffbef274e493b1e27e32957dc2.png

   在包资源管理器的 reports 文件夹中可以生成各种形式的报告,通过 PMD 检查结果发现找到了这段代码中的许多问题,如类名首字母没有大写、有太短的变量、操作数在判定表达式里赋值、catch 代码段为空等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
滑动删除菜单1.完成滑动删除,动画描述2.Simple Demo1.布局文件(作为ListView的Item)     <com.example.slideremove.SlideRemoveLib     android:id="@ id/srl_remove"     android:layout_width="fill_parent"     android:layout_height="70dp" >     <!-- 內容部分 -->     <include layout="@layout/content" />     <!-- delete部分 -->     <include layout="@layout/delete" />      </com.example.slideremove.SlideRemoveLib> 2.给ListView绑定适配器     listView = getListView();     myAdapter = new MyAdapter();     listView.setAdapter(myAdapter); 3.适配器数据显示     @Override     public View getView(final int position, View convertView, ViewGroup parent) {          ViewHolder vHolder = null;         if(convertView == null){             convertView = View.inflate(getApplicationContext(), R.layout.activity_main, null);             vHolder  = new ViewHolder();             vHolder.sl_test = (SlideRemoveLib) convertView.findViewById(R.id.srl_remove);             vHolder.content = (TextView) convertView.findViewById(R.id.tv_content);             vHolder.delete = (TextView) convertView.findViewById(R.id.tv_delete);             convertView.setTag(vHolder);         }else{             vHolder = (ViewHolder) convertView.getTag();         }         String msg = getItem(position);         vHolder.content.setText(msg);         final ViewHolder finalViewHolder = vHolder;         //点击删除事件         vHolder.delete.setOnClickListener(new OnClickListener() {             @Override             public void onClick(View v) {                 mDatas.remove(position);                 finalViewHolder.sl_test.noShowDeleteView();                 myAdapter.notifyDataSetChanged();             }         });         return convertView;     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值