第一次个人编程作业
Part1:PSP表格
一.gitub链接
二.PSP表格
||||
|:--|:--|:--|:--|
|PSP2.1|Personal Software Process Stages|预估耗时(分钟)|实际耗时(分钟)|
|Planning|计划|30|30|
|· Estimate|· 估计这个任务需要多少时间|30|30|
|Development|开发|300| 300 |
|· Analysis|· 需求分析 (包括学习新技术)|60|60|
|· Design Spec|· 生成设计文档|60|60|
|· Design Review|· 设计复审|60|60|
|· Coding Standard|· 代码规范 (为目前的开发制定合适的规范)|60|60|
|· Design|· 具体设计|60|60|
|· Coding|· 具体编码|120|180|
|· Code Review|· 代码复审|30|120|
|· Test|· 测试(自我测试,修改代码,提交修改)|120|300|
|Reporting|报告|30|60|
|· Test Repor|· 测试报告|60|120|
|· Size Measurement|· 计算工作量|60|30|
|· Postmortem & Process Improvement Plan|· 事后总结, 并提出过程改进计划|60|60|
||总计| 1080|1470|
三.计算模块接口的设计与实现过程
1.选择语言
python
2.解题思路
(1)需求分析和思考
初看题目的时候是有点懵的,在根据题目需求和提交要求的逐步分析、查找相关资料、综合同学朋友的建议并结合个人情况后,觉得python相对更适合自己来完成这个题目,就决定选择python。因此python的学习和应用就加入了需求规划,并分配了大量时间。根据题目再进一步设计好解题思路,完成基本编程,在基本编程完成后还需学习代码完善能力、json文件格式相关知识。按照提交要求提示,让我意识到完成题目不仅仅是需要编程代码,代码之外还有许多需要纳入学习需求规划,如:code quality analysis、运用VS 2017进行性能分析并改进、上传代码到github、查看测试覆盖率、计算模块部分异常处理并解决等。
(2)解题思路
- 根据1!、2!、3!把难度分级提取出来,判断分级是分五级还是七级。
- 由于手机号不会和其他数字相连,是连续是十一位数字,因此根据连续十一位数字这个特征把手机号提取出来。
- 除了手机号其他信息都是顺序的,以逗号为界可以把姓名提取出来,提取出名字后剩余部分就是地址部分。
- 根据分级要求,利用搜索和正则表达式对地址进行地址划分。
- 转json格式输出。
(3)类和函数
函数 | 作用 |
---|---|
phone | 提取电话 |
firstcut/secondcut | 提取名字/提取分级难度 |
getprovince/getcity/getqu/getroad/getlu/gethao | 提取省市区镇路号 |
(4)算法关键与独到之处
-
算法关键与独到之处:
根据电话号码是连续十一位数字特性pat='[0-9]{11}'利用re.findall(pat,s)提取出混杂在信息里的电话号码。
利用正则表达式和搜索分割各级地址。 -
关键代码:
res = re.search(("(.?省)|(.?自治区)|上海市|北京市|天津市|重庆市"), s)
res = re.search("(.?自治州)|(.?[市])", s)
res = re.search("(.?自治旗)|(.?[县区市旗])", s)
res=re.search("(.?镇)|(.?街道)|(.?乡)|(.?街)|(.*?巷)",s)
四.计算模块接口部分的性能改进
改进思路
根据性能分析图可见消耗最大的函数是input,在分析性能的时候遇到了很多bug,尤其是在输入输出和分级的部分,主要是通过查找资料和请教同学解决。
性能分析图
五.计算模块部分单元测试展示
测试覆盖率
部分代码
六.计算模块部分异常处理说明
异常处理说明
try:
{......}
except IOError:
print "Error: 没有找到文件或读取文件失败"
结果:未返回异常。
出错样例
输入:1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
输出:
由图可见,最后一级地址变为空了。检查逻辑之后发现,这是由于原先代码是切割是先切割完后在根据难度分级,而最后一级偷懒默认取分级剩余字符串,导致最后一个字符串一定是分七级之后最后一级的内容。解决方法就是保留分五级时最后一个字符串内容,选择分级时调用这个内容。
修正后输出:
七.总结
从速成到自闭,留下了不学无术的泪水。
从懵逼开始疯狂恶补python【真没学清楚的东西迟早要学回来】确定好逻辑思路以后就开始编码。相比之下,主要时间还是都花在单元测试得到的测试覆盖率、性能分析性能改进、异常处理,接触了很多之前没有接触过的模块,以及修改各种bug【生活不易学到自闭】
这次作业几乎占据了所有空闲时间,秃头从敲代码开始。过程很艰难,骚扰了一片同学朋友教我,谢谢大家捞我。强行速成挖掘潜力,收获还是很多的,对整个开发流程更加熟悉了解熟悉,学会了很多新的技术,也意识到自己的很多不足。好好敲代码,争取不秃头!