第一次个人编程作业
点击进入仓库
1.PSP表格
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | · 计划 | 60 | 60 |
· Estimate | · 估计这个任务需要多少时间 | 60 | 60 |
Development | · 开发 | 530 | 780 |
· Analysis | · 需求分析 (包括学习新技术) | 20 | 30 |
· Design Spec | · 生成设计文档 | 60 | 90 |
· Design Review | · 设计复审 | 60 | 90 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 10 |
· Design | · 具体设计 | 60 | 80 |
· Coding | · 具体编码 | 180 | 300 |
· Code Review | · 代码复审 | 30 | 90 |
· Test | · 测试(自我测试,修改代码,提交修改) | 90 | 90 |
Reporting | 报告 | 140 | 140 |
· Test Repor | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 20 | 20 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 60 |
· 合计 | 730 | 980 |
2.解题思路
- 这道题和身边物流公司识别地址的应用很相像,都是要把一串姓名、电话、地址的信息分别提取出来。
- 根据文本格式和特征,在Java中可以用方法在文本中分离出姓名和电话。
- 但是在细节上,本题的地址是乱序而不是按照地域的等级从大到小依次展开,其次部分地址里面没有区别明显的关键字,比如“福建”最后要格式化为“福建省”,因此我认为这里需要一个地名识别方法,能够识别出该地域所属级别。但是能力所限,没有合适的方法解决这个问题。
3.计算模块接口的设计与实现过程。
设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。
- 掐头去尾,去掉头部的数字和尾部的圆点,再进行下一步的处理。
- 提取电话号码,运用正则表达式编写方法提取。姓名的提取用split()函数。再用replace()函数把姓名和电话从原字符串中分割开,进行地址的识别。
- 代码的组织使用到AddressResolutionUtil类并且运用了两个函数,先用getdata ()获取输入数据,另外用两个函数checkCellphone(String str)和addressResolution(String address)是相互独立,顺序执行的关系。
关键函数不需要画出流程图
- 独到之处:用map进行映射,键值相互对应,在输出时只需要调用values()函数即可输出键值。
4.计算模块接口部分的性能改进。
记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。
- 对不起这道题太难了,我不会做!1555555555551
5.计算模块部分单元测试展示。
展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。
- 单元测试的设计是把每个乱序地址依次输入得出结果。
/*识别地址的正则表达式*/
/*思路和能力受限,只考虑了五级地址且有地址文字特征的识别*/
String regex="(?<province>[^省]+自治区|.*?省|.*?行政区)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+?区|.+市|.+旗|.+海域|.+岛)(?<town>[^区]+区|.+镇|.+街道)?(?<village>.*)";
Matcher m=Pattern.compile(regex).matcher(address);
/*用Map映射各级地域,最后用键值的形式输出*/
/*我认为这是代码的独到之处*/
List<Map<String,String>> table=new ArrayList<Map<String,String>>();
Map<String,String> row=null;
while(m.find()){
row=new LinkedHashMap<String,String>();
province=m.group("province");
row.put("province", province==null?"":"\""+province.trim()+"\"");//删除头尾空白字符
city=m.group("city");
row.put("city", city==null?"":"\""+city.trim()+"\"");
county=m.group("county");
row.put("county", county==null?"":"\""+county.trim()+"\"");
town=m.group("town");
row.put("town", town==null?"":"\""+town.trim()+"\"");
village=m.group("village");
row.put("village", village==null?"":"\""+village.trim()+"\"");
//table.add(row);
System.out.print(row.values());
}
6.计算模块部分异常处理说明。
在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。
1!李四,福建鼓楼13756899511鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福州市闽13599622362侯县上街镇福州大学10#111.
1!刘湖,吉林省白山市六道江镇西村药店18694520738.
1!王五,腾冲市满邑社区华园三小区47号18694520738.
1!咸陡隐,江苏省苏州市吴江13184142847区平望镇新业织造有限公司吴江区平望镇双浜村村民委员会.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
2!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
2!王五,云南省昭通市水富18694520738县云川路1号.
2!王五,云南省迪庆藏族自治州18694520738香格里拉市.
2!王五,四川省眉山市仁寿18694520738县黑龙滩镇牌坊街.
2!王五,陕西省渭南市韩18694520738城市108国道附近.
{"姓名": "李四", "电话": "13756899511", "地址":[ , , , "福建鼓楼鼓西街道", "湖滨路110号湖滨大厦一层"]}//分离不出“福建省”
{"姓名": "张三", "电话": "13599622362", "地址":[ , "福州市", "闽侯县", "上街镇", "福州大学10#111"]}
{"姓名": "刘湖", "电话": "18694520738", "地址":["吉林省", "白山市", , "六道江镇", "西村药店"]}
{"姓名": "王五", "电话": "18694520738", "地址":[ , "腾冲市", "满邑社区", "华园三小区", "47号"]}//空真的地方不能输出“ "
{"姓名": "咸陡隐", "电话": "13184142847", "地址":["江苏省", "苏州市", "吴江区", "平望镇新业织造有限公司吴江区", "平望镇双浜村村民委员会"]}
{"姓名": "王五", "电话": "18960221533", "地址":["福建省", "福州市", "鼓楼区", , "五一北路123号福州鼓楼医院"]}
{"姓名": "小美", "电话": "15822153326", "地址":[ , "北京市", "东城区", "交道口东大街1号北京市东城区", "人民法院"]}//不能删除重复地址
{"姓名": "王五", "电话": "18694520738", "地址":["云南省", "昭通市", "水富县", , "云川路1号"]}
{"姓名": "王五", "电话": "18694520738", "地址":["云南省", "迪庆藏族自治州", "香格里拉市", , ""]}//空白处不能输出“”
{"姓名": "王五", "电话": "18694520738", "地址":["四川省", "眉山市", "仁寿县", "黑龙滩镇", "牌坊街"]}
{"姓名": "王五", "电话": "18694520738", "地址":["陕西省", "渭南市", "韩城市", , "108国道附近"]}//空白处不能输出“”
//输入必须按行输入,输出的json格式不对。
//只能识别五级地址
//不能删除重复地址
7.心路历程与收获
结合在构建之法中学习到的相关内容与个人项目的实践经历,撰写解决项目的心路历程与收获。
- 我真的好菜啊,但只有两样东西不会:这也不会,那也不会。懊恼、紧张、恶心、头疼脑热、垂头丧气、心有余而力不足,自己真的好菜啊啊。
- 但是通过这次变成作业最大的收获就在于
自己的检索能力增强了,学习使用了新的开发工具eclipse,这可能对身边的人来说根本不入流,感觉自己也似乎也许大概估计有了一点点小小的进步会有一点小开心吧。很多计算机的术语啊、工具啊、功能实现啊,我都不会,这次的作业也完成得很糟糕,在接下来得日子也要好好努力才行啊! - 也希望能够通过这个学期的学习,让自己的实践能力有所提升。拜托看到这里评分得哥哥或者姐姐能抬我一手,嘤嘤嘤。QAQ~