在Github仓库中新建一个学号为名的文件夹,同时在博客正文首行给出作业github链接,并在第一次个人编程作业评分表的github链接部分填入第一次个人编程作业的github链接。(1')
github_address
在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。(6')
在你实现完程序之后,在附录提供的PSP表格记录下你在程序的各个模块上实际花费的时间。(3')
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 10 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 10 |
Development | 开发 | 990 | 1290 |
· Analysis | · 需求分析 (包括学习新技术) | 240 | 420 |
· Design Spec | · 生成设计文档 | 10 | 10 |
· Design Review | · 设计复审 | 60 | 10 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 10 |
· Design | · 具体设计 | 30 | 120 |
· Coding | · 具体编码 | 360 | 420 |
· Code Review | · 代码复审 | 30 | 60 |
· Test | · 测试(自我测试,修改代码,提交修改) | 180 | 240 |
Reporting | 报告 | 60 | 25 |
Test Repor | 测试报告 | 60 | 25 |
Size Measurement | 计算工作量 | 30 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 10 |
合计 | 1200 | 1360 |
计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。(25')
关键:
1.将“,”前面的名字信息分离出来
2.利用正则函数匹配到十一位手机号码,并将其分离出来
3.利用查找json文件里的省市关键字,匹配到相应的省市信息,如缺失再加入特判情况,尽量兼顾。
独到之处:
- 1.地址逐级处理——搜索两个关键字,查询有无对应下一级地址
优点:在前面级地址非空缺情况下可以匹配效率高
缺点:前面级地址空缺,搜索效率低,而且只能匹配三级(文件数据有限)
# 查找区/县/县级市(前提省市不为空)
def search_area(p: str, c: str, a: str):
for area in js[p][c]:
if (area.find(a)) != -1:
return area
area = ""
return area
- 2.人工特判很多情况,能将一般情况覆盖&比较特殊的因为缺少逐级匹配而且可能有缺失项可操作性不高
计算模块接口部分的性能改进。记录在改进计算模块性能上所花费的时间,描述你改进的思路,并展示一张性能分析图(由VS 2017/JProfiler的性能分析工具自动生成),并展示你程序中消耗最大的函数。(4')
令人感到意外的是消耗最大的函数是分离出姓名和电话,是调用正则函数查找电话消耗太大吗?然后分离地址函数中省份解析函数是最大消耗,大概因为遍历查找8
计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。(6')
总结:从单元测试结果来看,输入中匹配程度越高(各个级无空缺)时,代码覆盖率较高,部分级别地址有缺失的,代码覆盖率就较差。
计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。(5')
异常:
1.缺少县市区这级中有低级地址(如xx工业区)要是单独因为有区字被判断成县市区这集,就会发生错误。解决:在区的位置中特判区的位置,在字符中的下标太长一般可以排除。
1!梨花,福建漳州梅洲乡青梅13131313132工业区666号.
{
"姓名":"梨花",
"手机":"13131313132",
"地址":[
"福建省",
"漳州市",
"",
"梅洲乡",
"青梅工业区666号"
]
}
2.因为导入的省市信息不够完整,无法做到三级后面的路街社区等地址的完全正确匹配,因为人工考虑到的情况比较有缺陷,这也是代码中的bug
3.没有考虑到输入缺陷的情况,因为写代码时默认数据输入正常。(数据不就这样规定的吗,so,我没能考虑到这个异常)