软件测试 告的测试覆盖,软件测试(黑盒测试&白盒测试) 告

软件测试(黑盒测试&白盒测试) 告

被测试源程序

package com.binggo.softwaretest.bean;

import lombok.Getter;

/**

* @author binggo

* @since 2018/12/27

**/

@Getter

public class InputBean {

double a;

double b;

double c;

public InputBean(double a, double b, double c) {

if (a

throw new IllegalArgumentException(“a

}

this.a = a;

this.b = b;

this.c = c;

}

@Override

public String toString() {

return ” {” +

a +

“,” + b +

“,” + c +

‘}’ + “t”;

}

}

package com.binggo.softwaretest.bean;

import lombok.Data;

/**

* @author binggo

* @since 2018/12/27

**/

@Data

public class OutputBean {

private AngleType angleType;

private EdgeType edgeType;

@Override

public String toString() {

return edgeType.getAlias() + angleType.getAlias() + “三角形”;

}

/**

* 三角角度的类型

*/

public enum AngleType {

/**

* 锐角

*/

ACUTE_ANGLE {

@Override

public String getAlias() {

return “锐角”;

}

},

/**

* 直角

*/

RIGHT_ANGLE {

@Override

public String getAlias() {

return “直角”;

}

},

/**

* 钝角

*/

OBTUSE_ANGLE {

@Override

public String getAlias() {

return “钝角”;

}

};

/**

* 返回别名

*/

public abstract String getAlias();

}

/**

* 三角角度的类型

*/

public enum EdgeType {

/**

* 等边

*/

EQUILATERAL {

@Override

public String getAlias() {

return “等边”;

}

},

/**

* 等腰

*/

ISOSCELES {

@Override

public String getAlias() {

return “等腰”;

}

},

/**

* 非等腰

*/

NO_ISOSCELES {

@Override

public String getAlias() {

return “非等腰”;

}

};

/**

* 返回别名

*/

public abstract String getAlias();

}

}

package com.binggo.softwaretest.core;

import com.binggo.softwaretest.bean.InputBean;

import com.binggo.softwaretest.bean.OutputBean;

import org.springframework.stereotype.Component;

import java.util.function.Function;

/**

* @author binggo

* @since 2018/12/27

**/

@Component

public class Judge implements Function {

/**

* 判断是否是三角形

*

* @param inputBean 三角形类型bean

* @return {@link OutputBean.AngleType}

*/

public static boolean isTriangle(InputBean inputBean) {

double[] doubles = inputBeanToDoubles(inputBean);

for (int i = 0; i

if (doubles[i] >= doubles[(i + 1) % 3] + doubles[(i + 2) % 3]) {

return false;

}

}

return true;

}

private static double[] inputBeanToDoubles(InputBean inputBean) {

return new double[]{inputBean.getA(), inputBean.getB(), inputBean.getC()};

}

/**

* 判断三角形角度的类型

*

* @param inputBean 三角形类型bean

* @return {@link OutputBean.AngleType}

*/

public static OutputBean.AngleType getAngleType(InputBean inputBean) {

double[] doubles = inputBeanToDoubles(inputBean);

for (OutputBean.AngleType value : OutputBean.AngleType.values()) {

if (angleJudge(doubles, value)) {

return value;

}

}

throw new IllegalArgumentException(“There is no suitable triangle type”);

}

/**

* 判断三角形边的类型

*

* @param inputBean 三角形类型bean

* @return {@link OutputBean.EdgeType}

*/

public static OutputBean.EdgeType getEdgeType(InputBean inputBean) {

double[] doubles = inputBeanToDoubles(inputBean);

boolean equilateralFlag = true;

for (int i = 1; i

if (doubles[i] != doubles[0]) {

equilateralFlag = false;

break;

}

}

if (equilateralFlag) {

return OutputBean.EdgeType.EQUILATERAL;

}

for (int i = 0; i

if (doubles[(i + 1) % doubles.length] == doubles[(i + 2) % doubles.length]) {

return OutputBean.EdgeType.ISOSCELES;

}

}

return OutputBean.EdgeType.NO_ISOSCELES;

}

private static boolean angleJudge(double[] doubles, OutputBean.AngleType angleType) {

for (int i = 0; i

switch (angleType) {

case ACUTE_ANGLE:

return (!angleJudge(doubles, OutputBean.AngleType.OBTUSE_ANGLE)) && (!angleJudge(doubles, OutputBean.AngleType.RIGHT_ANGLE));

case RIGHT_ANGLE:

if (squaresSum(doubles, i) – doubles[i] * doubles[i] == 0) {

return true;

}

break;

case OBTUSE_ANGLE:

if (squaresSum(doubles, i)

return true;

}

break;

default:

break;

}

}

return false;

}

private static double squaresSum(double[] doubles, int fromIndex) {

double ret = 0;

for (int i = (fromIndex + 1) % doubles.length; i != fromIndex; i = (i + 1) % doubles.length) {

ret += doubles[i] * doubles[i];

}

return ret;

}

/**

* 判断三角形类型

*

* @param inputBean 三角形三边参数的 bean

* @return 如果无法构成三角形返回 null,否则返回表示三角形类型的 OutputBean

*/

@Override

public OutputBean apply(InputBean inputBean) {

if (!isTriangle(inputBean)) {

return null;

}

OutputBean outputBean = new OutputBean();

outputBean.setAngleType(getAngleType(inputBean));

outputBean.setEdgeType(getEdgeType(inputBean));

return outputBean;

}

}

程序测试环境

jdk-1.8

idea编译器

jUnit 单元测试

程序说明

判断输入三条变长是否能够构成三角形,以及三角角度的类型(锐/直/钝角)和边的类型(等边/腰/非等腰)

@Test

public void apply() {

InputBean inputBean = new InputBean(6, 6, 6);

InputBean inputBean1 = new InputBean(3, 4, 5);

InputBean inputBean2 = new InputBean(6, 6, 5);

InputBean inputBean3 = new InputBean(6, 6, 11);

System.out.println(inputBean.toString()+judge.apply(inputBean));

System.out.println(inputBean1.toString()+judge.apply(inputBean1));

System.out.println(inputBean2.toString()+judge.apply(inputBean2));

System.out.println(inputBean3.toString()+judge.apply(inputBean3));

}

结果:

{6.0,6.0,6.0} 等边锐角三角形

{3.0,4.0,5.0} 非等腰直角三角形

{6.0,6.0,5.0} 等腰锐角三角形

{6.0,6.0,11.0} 等腰钝角三角形

黑盒测试

随机测试

测试程序

@Test

public void randApply() {

Random random = new Random();

for (int i = 0; i

int bound = 5;

try {

InputBean inputBean = new InputBean(random.nextInt(bound) + 1, random.nextInt(bound) + 1, random.nextInt(bound) + 1);

System.out.println(inputBean.toString() + judge.apply(inputBean));

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

测试结果部分截取

{3.0,2.0,5.0} null

{4.0,1.0,3.0} null

{4.0,1.0,3.0} null

{2.0,2.0,2.0} 等边锐角三角形

{5.0,3.0,4.0} 非等腰直角三角形

{2.0,3.0,2.0} 等腰钝角三角形

{2.0,2.0,5.0} null

{4.0,1.0,4.0} 等腰锐角三角形

{4.0,4.0,3.0} 等腰锐角三角形

{5.0,4.0,3.0} 非等腰直角三角形

{2.0,2.0,3.0} 等腰钝角三角形

{1.0,4.0,3.0} null

{5.0,2.0,3.0} null

{3.0,2.0,1.0} null

{3.0,5.0,3.0} 等腰钝角三角形

{1.0,1.0,1.0} 等边锐角三角形

{5.0,3.0,2.0} null

{5.0,2.0,5.0} 等腰锐角三角形

{4.0,3.0,3.0} 等腰锐角三角形

{5.0,5.0,2.0} 等腰锐角三角形

{2.0,5.0,5.0} 等腰锐角三角形

{1.0,1.0,4.0} null

{4.0,2.0,3.0} 非等腰钝角三角形

{3.0,1.0,1.0} null

{4.0,3.0,2.0} 非等腰钝角三角形

程序分析:

程序输出正确率:300/300

使用健壮最坏进行测试

假设三角形三边的长度范围都为[1,5]

测试程序:

@Test

public void badStrongApply() {

//0,1,2,3,4,5,6

double[] doubles = {0, 1, 2, 3, 4, 5, 6};

for (int i = 0; i

for (int j = 0; j

for (int k = 0; k

try {

InputBean inputBean = new InputBean(doubles[i], doubles[j], doubles[k]);

System.out.println(inputBean.toString() + judge.apply(inputBean));

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

}

InputBean inputBean = new InputBean(6, 6, 6);

InputBean inputBean1 = new InputBean(3, 4, 5);

InputBean inputBean2 = new InputBean(6, 6, 5);

InputBean inputBean3 = new InputBean(6, 6, 11);

System.out.println(inputBean.toString() + judge.apply(inputBean));

System.out.println(inputBean1.toString() + judge.apply(inputBean1));

System.out.println(inputBean2.toString() + judge.apply(inputBean2));

System.out.println(inputBean3.toString() + judge.apply(inputBean3));

}

测试数据部分截取:

{1.0,5.0,4.0} null

{1.0,5.0,5.0} 等腰锐角三角形

{1.0,5.0,6.0} null

{1.0,6.0,0.0} 中某一条边长度小于等于0

{1.0,6.0,1.0} null

{1.0,6.0,2.0} null

{1.0,6.0,3.0} null

{1.0,6.0,4.0} null

{1.0,6.0,5.0} null

{1.0,6.0,6.0} 等腰锐角三角形

{2.0,0.0,0.0} 中某一条边长度小于等于0

{2.0,0.0,1.0} 中某一条边长度小于等于0

{2.0,0.0,2.0} 中某一条边长度小于等于0

{2.0,0.0,3.0} 中某一条边长度小于等于0

{2.0,0.0,4.0} 中某一条边长度小于等于0

{2.0,0.0,5.0} 中某一条边长度小于等于0

{2.0,0.0,6.0} 中某一条边长度小于等于0

{2.0,1.0,0.0} 中某一条边长度小于等于0

{2.0,1.0,1.0} null

{2.0,1.0,2.0} 等腰锐角三角形

{2.0,1.0,3.0} null

{2.0,1.0,4.0} null

{2.0,1.0,5.0} null

{2.0,1.0,6.0} null

{2.0,2.0,0.0} 中某一条边长度小于等于0

{2.0,2.0,1.0} 等腰锐角三角形

{2.0,2.0,2.0} 等边锐角三角形

{2.0,2.0,3.0} 等腰钝角三角形

{2.0,2.0,4.0} null

{2.0,2.0,5.0} null

{2.0,2.0,6.0} null

{2.0,3.0,0.0} 中某一条边长度小于等于0

{2.0,3.0,1.0} null

{2.0,3.0,2.0} 等腰钝角三角形

{2.0,3.0,3.0} 等腰锐角三角形

{2.0,3.0,4.0} 非等腰钝角三角形

{2.0,3.0,5.0} null

{2.0,3.0,6.0} null

程序分析:

程序输出正确率:343/343

白盒测试

程序控制流图

3.png

5.png

f04f59b4f9c3

6.png

判定-条件覆盖测试

由于程序相对复杂,所以只对,第二个流程图进行判定条件覆盖

经分析:要满足判定条件覆盖只要两个测试用例

@Test

public void isTriangle() {

InputBean inputBean = new InputBean(6, 6, 6);

InputBean inputBean1 = new InputBean(6, 6, 13);

System.out.println(inputBean.toString()+Judge.isTriangle(inputBean));

System.out.println(inputBean1.toString()+Judge.isTriangle(inputBean1));

}

测试结果:

{6.0,6.0,6.0} true

{6.0,6.0,13.0} false

测试结论:

程序的这一部分是正常的

相关资源:Eclipse 三角形程序_eclipse等腰三角形-Java文档类资源

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年6月18日
下一篇 2021年6月18日

相关推荐