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
错误场景
常见的场景就是输入字符串格式不匹配,抛出对应异常输出提示即可。
小结
- 太菜了。。。啥都是现学的。
- 多跟大佬交流很重要,特别感谢组里的大佬。
- 学会了系统的做一次软工实践作业,熬夜真刺激。