当前位置: 首页 > news >正文

软工作业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

转载于:https://www.cnblogs.com/lllblogs/p/8583980.html

相关文章:

  • ElasticSearch入门及核心概念介绍
  • 软件工程第二周阅读作业
  • 前台vue的使用简单小结
  • SSRF(服务端请求伪造)
  • ubuntu下unzip解压zip文件中文乱码问题
  • 菜鸟网络与顺丰达成和解 确保数据安全进行合作
  • Android系统启动流程 -- android
  • Exchange 2016 CU9 已发布
  • js上传文件带进度条
  • LinuxUnix命令
  • python——if判断语句的应用
  • Linux学习笔记第三天-软链接和硬链接
  • Linux集群(四)-LVS持久连接与高可用
  • 猜数字小游戏,很naive......
  • 20165302 第四周学习总结
  • Akka系列(七):Actor持久化之Akka persistence
  • Android 控件背景颜色处理
  • Angular4 模板式表单用法以及验证
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Java反射-动态类加载和重新加载
  • leetcode386. Lexicographical Numbers
  • Objective-C 中关联引用的概念
  • Phpstorm怎样批量删除空行?
  • SQLServer之索引简介
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 警报:线上事故之CountDownLatch的威力
  • 跨域
  • 使用 5W1H 写出高可读的 Git Commit Message
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 2017年360最后一道编程题
  • Hibernate主键生成策略及选择
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.each()与$(selector).each()
  • (5)STL算法之复制
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (JS基础)String 类型
  • (层次遍历)104. 二叉树的最大深度
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (六)c52学习之旅-独立按键
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)详解PHP处理密码的几种方式
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .net refrector
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @Conditional注解详解
  • @DependsOn:解析 Spring 中的依赖关系之艺术
  • [ C++ ] STL---string类的使用指南
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析