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

Posted 锐362

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软工作业PSP与单元测试训练相关的知识,希望对你有一定的参考价值。

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

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

  import java.text.ParseException;  
    import java.text.SimpleDateFormat;  
    import java.util.Calendar;  
    import java.util.GregorianCalendar;  
    import java.util.Hashtable;  
    import java.util.Scanner;  
    import java.util.regex.Matcher;  
    import java.util.regex.Pattern;  
       

       
    public class ExcelCreateUserAction {  
           
           
        public static String IDCardValidate(String IDStr) throws ParseException {          
            String tipInfo = "该身份证有效!";
            String Ai = "";  
 
            if (IDStr.length() != 15 && IDStr.length() != 18) {  
                tipInfo = "身份证号码长度应该为15位或18位。";  
                return tipInfo;  
            }  
               
       
        
            if (IDStr.length() == 18) {  
                Ai = IDStr.substring(0, 17);  
            } else if (IDStr.length() == 15) {  
                Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);  
            }  
            if (isNumeric(Ai) == false) {  
                tipInfo = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。";  
                return tipInfo;  
            }  
               
       
          
            String strYear = Ai.substring(6, 10);// 年份  
            String strMonth = Ai.substring(10, 12);// 月份  
            String strDay = Ai.substring(12, 14);// 日期  
            if (isDate(strYear + "-" + strMonth + "-" + strDay) == false) {  
                tipInfo = "身份证出生日期无效。";  
                return tipInfo;  
            }  
            GregorianCalendar gc = new GregorianCalendar();  
            SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");  
            try {  
                if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150  
                        || (gc.getTime().getTime() - s.parse(  
                                strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {  
                    tipInfo = "身份证生日不在有效范围。";  
                    return tipInfo;  
                }  
            } catch (NumberFormatException e) {  
                e.printStackTrace();  
            } catch (java.text.ParseException e) {  
                e.printStackTrace();  
            }  
            if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {  
                tipInfo = "身份证月份无效";  
                return tipInfo;  
            }  
            if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {  
                tipInfo = "身份证日期无效";  
                return tipInfo;  
            }  
               
       
            
            Hashtable areacode = GetAreaCode();  
         
            if (areacode.get(Ai.substring(0, 2)) == null) {  
                tipInfo = "身份证地区编码错误。";  
                return tipInfo;  
            }  
               
            if(isVarifyCode(Ai,IDStr)==false){  
                tipInfo = "身份证校验码无效,不是合法的身份证号码";  
                return tipInfo;  
            }  
              
               
            return tipInfo;  
        }  
           
           
       
        private static boolean isVarifyCode(String Ai,String IDStr) {  
             String[] VarifyCode = { "1", "0", "X", "9", "8", "7", "6", "5", "4","3", "2" };  
             String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7","9", "10", "5", "8", "4", "2" };  
             int sum = 0;  
             for (int i = 0; i < 17; i++) {  
                sum = sum + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);  
             }  
             int modValue = sum % 11;  
             String strVerifyCode = VarifyCode[modValue];  
             Ai = Ai + strVerifyCode;  
             if (IDStr.length() == 18) {  
                 if (Ai.equals(IDStr) == false) {  
                     return false;  
                       
                 }  
             }   
             return true;  
        }  
           
       
    
          
        private static Hashtable GetAreaCode() {  
            Hashtable hashtable = new Hashtable();  
            hashtable.put("11", "北京");  
            hashtable.put("12", "天津");  
            hashtable.put("13", "河北");  
            hashtable.put("14", "山西");  
            hashtable.put("15", "内蒙古");  
            hashtable.put("21", "辽宁");  
            hashtable.put("22", "吉林");  
            hashtable.put("23", "黑龙江");  
            hashtable.put("31", "上海");  
            hashtable.put("32", "江苏");  
            hashtable.put("33", "浙江");  
            hashtable.put("34", "安徽");  
            hashtable.put("35", "福建");  
            hashtable.put("36", "江西");  
            hashtable.put("37", "山东");  
            hashtable.put("41", "河南");  
            hashtable.put("42", "湖北");  
            hashtable.put("43", "湖南");  
            hashtable.put("44", "广东");  
            hashtable.put("45", "广西");  
            hashtable.put("46", "海南");  
            hashtable.put("50", "重庆");  
            hashtable.put("51", "四川");  
            hashtable.put("52", "贵州");  
            hashtable.put("53", "云南");  
            hashtable.put("54", "西藏");  
            hashtable.put("61", "陕西");  
            hashtable.put("62", "甘肃");  
            hashtable.put("63", "青海");  
            hashtable.put("64", "宁夏");  
            hashtable.put("65", "新疆");  
            hashtable.put("71", "台湾");  
            hashtable.put("81", "香港");  
            hashtable.put("82", "澳门");  
            hashtable.put("91", "国外");  
            return hashtable;  
        }  
       
 
        private static boolean isNumeric(String strnum) {  
            Pattern pattern = Pattern.compile("[0-9]*");  
            Matcher isNum = pattern.matcher(strnum);  
            if (isNum.matches()) {  
                return true;  
            } else {  
                return false;  
            }  
        }  
       
  
        public static boolean isDate(String strDate) {  
           
            Pattern pattern = Pattern  
                    .compile("^((\\\\d{2}(([02468][048])|([13579][26]))[\\\\-\\\\/\\\\s]?((((0?[13578])|(1[02]))[\\\\-\\\\/\\\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\\\-\\\\/\\\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\\\-\\\\/\\\\s]?((0?[1-9])|([1-2][0-9])))))|(\\\\d{2}(([02468][1235679])|([13579][01345789]))[\\\\-\\\\/\\\\s]?((((0?[13578])|(1[02]))[\\\\-\\\\/\\\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\\\-\\\\/\\\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\\\-\\\\/\\\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");  
            Matcher m = pattern.matcher(strDate);  
            if (m.matches()) {  
                return true;  
            } else {  
                return false;  
            }  
        }  
           
        public static void main(String[] args) throws ParseException {  
             
         
            Scanner s=new Scanner(System.in);  
            System.out.println("请输入你的身份证号码:");  
            String IdCard=new String(s.next());  
      
            IdCard = IdCard.toUpperCase();  
            System.out.println(IDCardValidate(IdCard));  
        }  
           
           
       
    }

  

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

任务清单工作量估算表:

 

PSP阶段

时间估算(小时)

实际实际(小时)

计划

估计每个阶段的时间成本

 0.2

0.4

开发

需求分析

 0.3

 0.7

系统设计

 0.3

 0.5

设计复审

 0.1

 0.2

代码实现

 0.2

 0.2

代码复审

 0.5

 0.2

测试

 0.1

 0.5

报告

测试报告

 0.3

 0.3

总结

 0.3

 0.3

 

以上是关于软工作业PSP与单元测试训练的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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