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

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

作者:Binggo(计科1501,2015014268)

被测试源程序

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 <= 0 || b <= 0 || c <= 0) {

throw new IllegalArgumentException("a <= 0 || b <= 0 || c <= 0");

}

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 < doubles.length; 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 < doubles.length; i++) {

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

equilateralFlag = false;

break;

}

}

if (equilateralFlag) {

return OutputBean.EdgeType.EQUILATERAL;

}

for (int i = 0; i < doubles.length; 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 < doubles.length; 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) < doubles[i] * 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 < 300; 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 < doubles.length; i++) {

for (int j = 0; j < doubles.length; j++) {

for (int k = 0; k < doubles.length; 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

白盒测试

程序控制流图

f04f59b4f9c3

2.png

f04f59b4f9c3

3.png

f04f59b4f9c3

4.png

f04f59b4f9c3

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

测试结论:

程序的这一部分是正常的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值