第一次个人编程作业

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【生活不易学到自闭】
这次作业几乎占据了所有空闲时间,秃头从敲代码开始。过程很艰难,骚扰了一片同学朋友教我,谢谢大家捞我。强行速成挖掘潜力,收获还是很多的,对整个开发流程更加熟悉了解熟悉,学会了很多新的技术,也意识到自己的很多不足。好好敲代码,争取不秃头!

posted @ 2019-09-29 18:10  RAEQI  阅读(118)  评论(2编辑  收藏  举报