第一次个人编程作业

第一次个人编程作业

博客作业求高分 嘻嘻!!

1.GITHUB链接

2.PSP表格估计时间

PSP2.1Personal Software Process Stages预估耗时(分钟)
Planning计划60
· Estimate· 估计这个任务需要多少时间60
Development开发1170
· Analysis· 需求分析 (包括学习新技术)60
· Design Spec· 生成设计文档30
· Design Review· 设计复审40
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)60
· Design· 具体设计100
· Coding· 具体编码420
· Code Review· 代码复审120
· Test· 测试(自我测试,修改代码,提交修改)120
Reporting报告60
· Test Repor· 测试报告60
· Size Measurement· 计算工作量60
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划40
1375· 合计1230

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

3.1接口思路描述

(1)首先主程序分析字符串分离出level和字符串数据,然后调用我自己写的parseAddr尝试分离出五级地址

(2)在parseAddr库中,根据之前的level等级,从而判断是否要在分离五级地址的时候,补全缺失的地址

(3)分离出五级地址后,根据level等级,判断是否需要继续将详细地址分离成 路名+门牌号+详细地址

(4)如果需要补全七级地址则需要调用高德地图的API,先通过模糊地址解析处经纬度,然后利用经纬度逆地址解析.根据逆地址解析得到的详细地址,从而分离出门牌号和路名

3.2接口流程图

1491563-20190929201637418-926794701.png

3.3 实现过程和算法说明

(1)parseAddr库中有一个Load()类,初始化类后,将会加载4个xlsx文件,分别存入四个字典:省,市,县,乡.

Load()库下有两个函数,一个是补全函数,一个是剔除函数.补全函数用来补全五级地址,剔除函数用来剔除原本不存在的地址.

性能优点1:空间换时间 ;在构造省市县乡四级数据结构的时候,为了减少循环,提升查找效率。我是用了双向字典。将键-值存在字典后,并将二者调换位置,再次存下。

性能优点2:快速查询;在爬取城乡区域信息时,发现城乡区域代码的一种继承关系。只需要取前两位数字得到省级,前四位得到市级...等等

(2)GDAPI,利用在高德地图平台上申请的key,调用API,使用地址/逆地址解析接口,从而拿到七级地址.

(3)在主文件中对返回的五级地址或七级地址进行处理,得到正确的答案.

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

4.1接口结构调整

将部分功能相似的函数进行了整合,形成一个函数,通过对参数的控制,从而产生不同结果.

将GDAPI和parseAddr模块整合,打造出分析地址出神入化的一个python库,最近准备开源它

4.2接口性能改进

将一些暴力for循环的模块,重写成一些数据结构,如双向字典,快速hash出我想要的结果.

引用一些其他的库,替换自己字符串模拟,提高自己的数据处理速度.

1491563-20190929201656310-1273732859.png

在性能分析工具Profile下,有这样的显示,的对我自己写函数api_code调用非常频繁.(因为我平凡的调用了高德API)

(1)在数据加载上的时间非常少.

(2)大量时间花费在了调用系统函数上

(3)对Split()函数压力太大,没有合理的分配函数的功能

1491563-20190929201703191-606502944.png

5.计算模块部分单元测试展示

5.1 数据构造思路

根据数据制作者的思路,首先在国家统计局上爬取31个省市县乡村的行政信息,然后调用菜鸟物流的API,进行模糊搜索,得到一组数据大约1000条.这样构造的数据将会非常近似原生数据

5.2 单元测试覆盖率截图

(1) parseAddr

1491563-20190929201721987-322006059.png

(2)GDAPI
1491563-20190929201731097-1222316220.png

(3)整体测评

1491563-20190929201743389-1414671287.png

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

样例测试:
1!晏孔,重庆巫山13097181946县大昌镇洋溪村便民超市.
1!荆麻,13282875332天津市北淮淀镇乐善庄村乐善庄小学.
1!诸葛宁盛,河南省15613629652焦作市山阳区定和街道塔南路287号新兴日化.
1!冯昔唉,安徽省合肥市庐江县郭河镇G3京台高18835354291速合肥市庐江县广寒桥街道.
1!百里屏闷,广西壮族自治区桂林市灵川县潭13315249688下镇004乡道灵川县潭下镇大义村民委员会.
1!徐扼负,天津市河北区月牙河街道大江里58号楼13289199578.
1!娄缠壮,山东省烟台莱山14732355817区莱山街道南陈家疃小区10栋.
1!曹持,江苏泰州13066409994市海陵区迎宾路88号春兰商务酒店.
1!赫连谴,北京市桥梓镇214县道中共沙峪口村支13827008064部委员会.
1!督坠,浙江淳安县中洲镇杨畈线畈头村18682392149村邮站.
1!桓猿攀,13898044414辽宁省营口市盖州市西海街道305国道盖州市西海农场.
1!通描哗,山西省临汾市安泽县冀氏镇北孔滩村13228042359村委会.
1!卓斧,贵州省贵阳清镇市红枫街164号青龙街道办事处13949510110.

(1)异常处理1:

在程序运行中很显然会出现数据结构错误如:字典键值缺失——KeyError。

解决方法:try ... except ... 处理异常并构造强力数据,保证代码全被覆盖到。

(2)异常处理2:

当数据可能是极端数据(边界数据)时,会导致程序无法承受的错误,甚至无法继续运行下去。

例如:index out of range。

解决方案:构造边界数据,并使用try ... except ...处理异常

(3)异常处理3:

当网络出现波动时,API调用出现问题。

解决方法:这时应该考虑sleep主线程,并及时保护现场,将数据写入指定文本。

7.PSP表格实际时间

PSP2.1Personal Software Process Stages实际耗时(分钟)
Planning计划40
· Estimate· 估计这个任务需要多少时间40
Development开发1335
· Analysis· 需求分析 (包括学习新技术)120
· Design Spec· 生成设计文档20
· Design Review· 设计复审60
· Coding Standard· 代码规范 (为目前的开发制定合适的规范)70
· Design· 具体设计80
· Coding· 具体编码400
· Code Review· 代码复审90
· Test· 测试(自我测试,修改代码,提交修改)240
Reporting报告80
· Test Repor· 测试报告75
· Size Measurement· 计算工作量40
· Postmortem & Process Improvement Plan· 事后总结, 并提出过程改进计划60
· 合计1375

转载于:https://www.cnblogs.com/JustNo/p/11609855.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值