第一次个人编程作业

Github

仓库地址

PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3030
Estimate估计这个任务需要多少时间720720
Development开发300360
Analysis需求分析(包括学习新技术)180180
Design Spec生成设计文档1015
Design Review设计复审106
Coding Standard代码规范(为开发制定合适的规范)812
Design具体设计1526
Coding具体编码130150
Code Review代码复审1520
Test测试(自我测试,修改,提交修改)180300
Reporting报告1931
Test Report测试报告1115
Size Measurement计算工作量515
Postmortem & Process Improvement Plan事后总结并提出过程改进计划6060
合计16931947

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

解题思路

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

类的结构图:

1793134-20190918000426329-1394542099.png

函数调用流程图:

1793134-20190918002911609-970099980.png

代码实现思路

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

关键代码

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

独到之处

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

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

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

1793134-20190918002703070-1692066700.png

改进时间:

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

耗时最大函数:

就一个函数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号",""]}]

测试覆盖率

1793134-20190918010642443-319068485.png

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

异常样例

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

异常类型:AttributeError

1793134-20190918004659620-1089621647.png

错误场景

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

小结

  • 太菜了。。。啥都是现学的。
  • 多跟大佬交流很重要,特别感谢组里的大佬。
  • 学会了系统的做一次软工实践作业,熬夜真刺激。

转载于:https://www.cnblogs.com/wangyan0904/p/11537384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值