软工作业PSP与单元测试训练

任务说明:

一、实现模块判断传入的身份证号码的正确性;

实现要求:

一、实现功能模块;

身份证号码结构:17位数字和1位校验码:6位地址码数字,8位生日数字,3位出生时间顺序号,1位校验码。

1,检验位数是否为18位。

2,检验校验位,前17位计算出的余数所对应的字符是否==第18位的字符。

3,校验年月日,分别校验年份,月份,日期是否在正确范围内。

 

二、针对所实现的模块编写对应的单元测试代码;

package pdID;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.Validator;

public class pdID{
final static int[] A = {‘1‘, ‘0‘, ‘X‘, ‘9‘, ‘8‘, ‘7‘, ‘6‘, ‘5‘, ‘4‘, ‘3‘, ‘2‘};
final static int[] P = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
5, 8, 4, 2};
public static boolean isIdcard(String s){

//校验位数是否==18 
if(s == null || s.length() != 18))
return false;
final char[] cs = s.toUpperCase().toCharArray();
int power = 0;
for(int i=0; i<cs.length; i++){
if(i==cs.length-1 && cs[i] == ‘X‘)
break;
(cs[i]<‘0‘ || cs[i]>‘9‘)
return false;
< cs.length -1){
power += (cs[i] - ‘0‘) * POWER_LIST[i];
}
}
//1校验前17位计算所得余数是否==校验码
if(cs[cs.length -1 ] == PARITYBIT[power % 11]){
//2校验年份
String year = s.substring(6, 10);
final int iyear = Integer.parseInt(year);
if(iyear < 1900 || iyear > Calendar.getInstance().get(Calendar.YEAR))
return false;//<1900年的错,>今年的错
//3校验月份
String month =s.substring(10,12);
final int imonth = Integer.parseInt(month);
if(imonth <1 || imonth >12){
return false;
}
//4校验日期
String day =s.substring(12, 14);
final int iday = Integer.parseInt(day);
if(iday < 1 || iday > 31)
return false;
}else
return false;
}
public static void main(String[] args) {
for(int i=0;i<10;i++){
final String s = "330482199607070616";
System.out.println(s+" --> "+isIdcard(s));
}
}
}

 

三、需要按PSP流程进行工作量估算,填写任务清单工作量估算表。

 

任务清单工作量估算表:

PSP阶段

时间估算(小时)

实际实际(小时)

计划

估计每个阶段的时间成本

 0.5

 0.6

开发

需求分析

 0.5

 0.4

系统设计

 0.6

 0.6

设计复审

 0.3

 0.3

代码实现

 0.7

 0.8

代码复审

 0.3

 0.3

测试

 0.4

 0.3

报告

测试报告

 0.4

 0.4

总结

 0.2

 0.2

posted @ 2018-03-16 18:27  lilanlan  阅读(172)  评论(0)    收藏  举报