1、 计算整数X和整数Y的最大公约数。(不允许采用课堂上所用的方式实现)
l 请用类和方法实现(定义一个类,在类中定义一个求最大公约数的方法),命名时请按照规范命名。
l 在main方法中获取用户输入的两个整数,调用之前写的方法,输出它们的最大公约数。
l 利用FindBugs查找程序中是否存在bug。
1.求最大公约数:
package cn.wang.cd;
import java.util.Scanner;
public class Test1 {
/**
* 求最大公约数
* 2016/04/01 王鹏鑫
* x为第一个数
* y为第二个数
* @param args
*/
public static int gcd(int m,int n) {
//定义求最大公约数的方法
while (true) {
if ((m = m % n) == 0)
return n;
if ((n = n % m) == 0)
return m;
}
}
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
System.out.println("请输入第一个数:");
int a=cin.nextInt();
System.out.println("请输入第二个数:");
int b=cin.nextInt();
int c = gcd(a,b); //调用方法
System.out.println("两数的最大公约数为:" + c);
}
}
bug查找:
未出现bug.
总结:fingbug是通过分析或检查源程序的语法、结构、过程、接等来检查程序的正确性是一种静态的代码检测工具,先于动态测试。
2、 逻辑覆盖的应用
l 按照所给的程序流程图,分别写出语句覆盖、分支覆盖的测试用例,以及它所覆盖的路径
l 附加题:根据程序流程图,写出代码(定义一个类和方法来实现),用JUnit生成单元测试,并利用前面设计的测试用例进行测试。
(1)语句覆盖:
测试路径:abc aeg aef
测试用例:
X=1 X=5 X=4
Y=2 Y=0 Y=0
X=2 Y=3 预期结果为x=2 ,y=4
分支覆盖:
测试路径:abc abd aeg aef
测试用例:
X=1 X=1 X=5 X=4
Y=2 Y=1 Y=0 Y=0
(2)
方法:
/**
*
* 2016/04/06 王鹏鑫
* @param args
*/
package cn.wang.cd;
import java.util.Scanner;
public class Test3 {
public void run(){
Scanner cin=new Scanner(System.in);
System.out.println("请输入X的值:");
int x=cin.nextInt();
System.out.println("请输入Y的值:");
int y=cin.nextInt();
if(x<4 || y>0){
if(y>1){
y=y+1;
System.out.println("x的值为:"+x +" "+"y的值为:"+y);
}
else{
System.out.println("x的值为:"+x +" "+"y的值为:"+y);
}
}
else{
if(x>=5){
x = x-y;
System.out.println("x的值为:"+x+" "+"y的值为:"+y);
}
else{
x = x+y;
System.out.println("x的值为:"+x+" "+"y的值为:"+y);
}
}
}
}
Main函数:
package cn.wang.cd;
import java.util.Scanner;
public class Test2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test3 test3 = new Test3();
test3.run();
}
}
单元测试:
package cn.wang.cd;
import static org.junit.Assert.*;
public class Test {
@org.junit.Test
public void test() {
Test3 test3 = new Test3();
test3.run();
}
}
运行结果;
单元测试:
总结:分支覆盖的强度比语句覆盖强,语句覆盖不能涵盖所有的分支。