《
软
件
分
析
与
测
试
》
考
试
大
作
业
专业:
学号:
姓名:
前言:
软件测试是使用人工操作或者软件自动运行的方式来检验它是否满足规定
的需求或弄清预期结果与实际结果之间的差别的过程。
软件分析是软件开发的第一阶段,它的任务是:用户和软件人员双方一起来
充分地理解用户的要求,并把共同的理解明确地表达成一份书面资料——系统说
明书。简而言之,分析阶段的两大任务是“理解”和“表达”。 这个阶段又可
分为三个实施步骤,即问题定义、可行性研究和需求分析。
问题定义:
一:问题
假设某单位内部电话号码由三部分组成,分别是:分机号+前缀+后缀。其中,分机
号为空白或一位数字;前缀为非‘0’开头的二位数字;后缀为非全 0 的 3 位数字。假
定被测程序能接受一切符合上述规定的电话号码,拒绝所有不符合规定的电话号码。根
据问题的规格说明,从输入条件划分等价类。
二:问题浅析
对于上述给出的问题,主要围绕一个判别是否为某单位的规范电话号码,对于该问
题,大致我们可以知道这个问题的解决思路主要是通过对电话号码的的各个组成部分进
行逻辑判断,最终获得结论,是还是不是该单位的内部电话号码。
可行性研究:
经过对问题的确认以及问题的浅析,我们知道了对于该单位内部电话号码的组成,
在逻辑上对每个部分进行判断并加以细化分,在总体上这个是可行的,在技术和人力物
力上是完全可以实现的。
需求分析:
输入
分机号
前缀
输入等价类
有效等价类
1 位数字
空白
01-99
ID
1
2
3
后缀
4
001-999
ID
5
6
7
8
9
10
11
12
13
14
无效等价类
多于 1 位数字
1 位非数字
少于 2 位数字
多于 2 位数字
含有非数字
起始位为‘0’
少于 3 位数字
多于 3 位数字
含有非数字
全‘0’
上述表格是对该单位的电话号码的各种情况的分析及输入等价类,通过对电话号码
的划分 3 部分,并对着三个部分进行划分定义,对每个部分的逻辑要求和情况的明确规
定,给编程者一个清晰的思路,在编程中只要对三个部分,准确的逻辑判别即可,首先
目标系统要获取(或者输入电话)电话,通过对电话,对电话设置分隔符,例如’--
‘,对电话号码进行划分,对每个部分进行逻辑判别,最后将三个部分的结果汇总,对
其进行求逻辑运算,求其真值。
编写代码:
package Test;
import java.util.Scanner;
public class Test {
public static void main(String[] args){
int count;//计数
Tage = 0;
int i = 0;
int j,FenNum=0,QianNum=0,Q = 0,Houzhui=0,H = 0;
int A = 0,B = 0,C = 0;
System.out.println("Please input the Phoneum:");
Scanner PhoneNumber = new Scanner(System.in);
String Num = PhoneNumber.next();
for(i = 0;i < Num.length();){
if(count == 0){
if(Num.charAt(i) == '-'&& i == 0){
Tage =1;
i++;
System.out.println("分机号空白");
A = 2;
}
else{
while(Num.charAt(i) != '-'){
//非数字
if('9'<= Num.charAt(i) || Num.charAt(i) <= '0'){
while(Num.charAt(i) != '-'){
i++;
count = 1;
}
System.out.println("分机号非数字");
A = 6;
}
//数字
else{
while(Num.charAt(i) != '-'){
i++;
count = 1;
}
if(i - 1 == 0){
System.out.println("分机号1位数字");
A = 1;
}
else{
System.out.println("分机号多位数字");
A = 5;
}
}
}
}
}
//判断前缀号
else if(count== 1){
i = i + 1;
int x;
x = i;
if(Num.charAt(i) == '0' && i - x == 0){
Tage = 2;
while(Num.charAt(i) != '-'){
i++;
}
System.out.println("前缀起始位为0");
B = 10;
}
else{
while(Num.charAt(i) != '-'){
QianNum++;
//前缀有非数字
if('9'<= Num.charAt(i) || Num.charAt(i) <= '0'){
Tage = 2;
Q = 1;
System.out.println("前缀号有非数字");
B = 9;
i = i + 1;
break;
}
i++;
}
//判断数字位数
if(Q ==0){
count= 2;
if(QianNum < 2){
System.out.println("前缀号少于2数字");
B = 7;
}
else if(QianNum == 2){
System.out.println("前缀号为2数字");
B = 3;
}
else{
System.out.println("前缀号大于2位数字");
B = 8;
}
}
}
}
else if(Tage == 2){
i = i + 1;
Q = 0;
while(Num.length() - i -1 >= 0){
Houzhui ++;
if('9'< Num.charAt(i) || Num.charAt(i) < '0'){
System.out.println("后缀号有非数字");
C = 13;
Q = 1;
break;
}
else if(Num.charAt(i) =='0'){
H++;
}
i++;
}
if(Q == 0){
if(Houzhui < 3){
System.out.println("后缀号少于3数字");
C = 11;
}
else if(Houzhui == 3){
if(H == 3){
System.out.println("后缀号为3个0");
C = 14;
}
else{
System.out.println("后缀号为3数字");
C = 4;
}
}
else{
System.out.println("后缀号大于3位数字");
C = 12;
}
}
}
}
/* System.out.println("Tage2");*/
if((A == 1||A ==2)&&B == 3 && C == 4)
System.out.println("输出(接受Y/拒绝N):Y");
else
System.out.println("输出(接受Y/拒绝N):N");
System.out.println("覆盖等价类(ID类型):"+A+" "+B+" "+C);
}
}
测试截图:(部分,既包含了测试用例,测试结果如下:)
2、阅读下面的一段程序(作业二)
void Test(int X,int Y,int Z) 2 5 15
{
int k=0,j=0;
if((X>3)&&(Z<10))
{
k=X*Y-1;
j=sqrt(k);
}
if((X==4)||(Y>5))
j=X*Y+10;
j=j%3;
}
1
2
3
4
5
6
7
8
9
10
11
根据所给定的程序,该程序的可能路径如下:
路径 1:1→2→3→5→6→8→9→10→11
路径 2:1→2→3→8→10→11
路径 3:1→2→3→8→9→10→11