Github

仓库地址

PSP表格

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间 720 720
Development 开发 300 360
Analysis 需求分析(包括学习新技术) 180 180
Design Spec 生成设计文档 10 15
Design Review 设计复审 10 6
Coding Standard 代码规范(为开发制定合适的规范) 8 12
Design 具体设计 15 26
Coding 具体编码 130 150
Code Review 代码复审 15 20
Test 测试(自我测试,修改,提交修改) 180 300
Reporting 报告 19 31
Test Report 测试报告 11 15
Size Measurement 计算工作量 5 15
Postmortem & Process Improvement Plan 事后总结并提出过程改进计划 60 60
合计 1693 1947

计算模块接口的设计与实现过程

解题思路

(1)首先先将输入的字符串进行处理,去除无关标点符号
(2)先将姓名用正则匹配分割出来,从地址中删去
(3)再根据11位数字将电话号码分割出来,从地址中删去
(4)然后根据难度1和难度2,用7级和5级行政区划的正则进行匹配。

类的结构图:

函数调用流程图:

代码实现思路

代码里只用了一个地址处理类,由于主要的是地址处理,名字和电话处理比较简单,所以就只用了一个函数。
名字和电话号码的分割较为容易,直接用简单正则即可。
地址比较坑的可能是省略后缀,我这种菜鸡想不到什么其他方法,水平有限就用了最粗暴的打表。我引入了一个前两级行政区划的表,两级分别储存。划分时,对于省略后缀省和市,将其前两个字符与表中一一比较(只比较前两个字符,因为两个就唯一确定一个省或市),匹配上则在对应变量里补上全名,因此遍历下来就能解决后缀省略问题。
针对缺失字段,直接使用正则,若匹配不上则将该字段置空。

关键代码

pattern = re.compile(r'(?P<province>[^省]+自治区|.*?省|.*?行政区|)(?P<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|)(?P<county>[^县]+县|.+?区|.+市|.+旗|.+海域|.+岛)?(?P<town>[^区]+?区|.+?镇|.+?街道|.+?乡)?(?P<village>.*)')

独到之处

可能是比对的时候分级比较并且只判断了前两个字符。

计算模块接口部分的性能改进:

利用JProfiler的性能分析工具得出的分析图:

改进时间:

改进时间零零散散,硬要算大概一个半小时。通过分级比较一二级区划和比较时只对比前两个字符来提升性能。

耗时最大函数:

就一个函数Emmm,我太菜了啥都不会。。。。

单元测试

输入

2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.

输出

[{"姓名":"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","鼓西街道","湖滨路","110号","湖滨大厦一层"]},
{"姓名":"张三","手机":"13599622362","地址":["福建省","福州市","闽侯县","上街镇","","","福州大学10#111"]},
{"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]},
{"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街","1号","北京市东城区人民法院"]},
{"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路","13号",""]}]

测试覆盖率

计算模块部分异常处理说明。

异常样例

1!刘湖,吉林省白山市六道江镇西村药店1861112.

异常类型:AttributeError

错误场景

常见的场景就是输入字符串格式不匹配,抛出对应异常输出提示即可。

小结

  • 太菜了。。。啥都是现学的。
  • 多跟大佬交流很重要,特别感谢组里的大佬。
  • 学会了系统的做一次软工实践作业,熬夜真刺激。
 posted on 2019-09-17 21:34  _Wangyan  阅读(189)  评论(1编辑  收藏  举报