第一次个人编程作业

1.Github地址:

https://github.com/linxinqq/031702138

2.PSP表格

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

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

(1)先说说我的思考过程,刚拿到题目的时候是一脸懵逼的,看起来就是个截取字符串的问题,但好像之前都没有接触过切割中文字符的题目(之前好像也没做多少题目),所以在csdn上找了很多关于截取中文字符串的内容,暑假也看了一些关于Python的视频,对于Unicode和gbk以及utf-8编码有些了解,所以搜到了一些关于Python截取中文字符串的材料,迈出了第一小步。
(2)观察题目给出的样例,我总共定义了七个函数,如下图:

函数名 功能
receivename 获得姓名
receivenumber 获得手机号码
receivesheng 获得省份
receiveshi 获得市
receivexian 获得县/区/县级市
receivezhen 获得街道/镇/乡
receivelu 获得路名
receivehao 获得门牌号
main 输入输出以及调用上述函数

主函数从上往下依次调用上述函数,调用receivename截取姓名后将剩余的字符串返回,然后主函数调用receivenumber获得手机号码,直到分出姓名手机以及五/七级地址。
(3)算法的关键在于使用find函数查找省市县镇这些级别表示的关键字,然后用split函数截取关键字前的部分,如果找不到则直接截取两个字返回,姓名就利用spilt截取逗号前的字符串,手机则利用字符串的切片操作截取到。
(4)独到之处:首先方法十分朴素,没有用到花里胡哨的re库,单纯的使用find和split以及切片操作,代码易于理解,其次对于一些比较苛刻的测试点进行了额外处理,极大磨炼了人的耐力。

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

在改进计算模块性能上所花费的时间差不多是两个小时,改进了两个方面,第一是对直辖市的处理,判断不到省关键字,做特殊的切片,第二是对街道做了优化处理,例子中第四级有些是街有些是街道,如果截到街取前面字符串,可能道字跟在后面一级导致错误,所以要做特殊处理区分。

性能分析图如下:

消耗最大函数:

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

2!李四,福建省福州13756899511市湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
2!小美,北京市东15822153326城区交道口东大街1号.
1!韶划奸,上海市普陀区长风新村街15717060981道光复西路1995号中山北路6-17号海鑫公寓.

{'姓名': '李四', '手机': '13756899511', '地址': ['福建省', '福州市', '', '', '湖滨路', '110号', '湖滨大厦一层']}
{'姓名': '张三', '手机': '13599622362', '地址': ['福建省', '福州市', '闽侯县', '上街镇', '福州大学10#111']}
{'姓名': '小美', '手机': '15822153326', '地址': ['北京', '北京市', '东城区', '交道口东大街', '', '1号', '']}
{'姓名': '韶划奸', '手机': '15717060981', '地址': ['上海', '上海市', '普陀区', '长风新村街道', '光复西路1995号中山北路6-17号海鑫公寓']}

这四个例子都具有一定的代表性,样例1是对缺少级别补空位的测试,样例2是对缺少省市关键词补充的测试,样例3是对直辖市的测试,样例4就是对街道做特殊处理的测试。

测试覆盖率截图:

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

缺少手机号码的异常处理:(会将手机号码置为空)

2!李四,福建省福州市湖滨路110号湖滨大厦一层.
{'姓名': '李四', '手机': '13756899511', '地址': ['福建省', '福州市', '', '', '湖滨路', '110号', '湖滨大厦一层']}

缺少姓名的异常处理:(会将姓名置为空)

2!李四,福建省福州市湖滨路110号湖滨大厦一层.
{'姓名': '', '手机': '', '地址': ['福建省', '福州市', '', '', '湖滨路', '110号', '湖滨大厦一层']}

缺少难度值的异常处理:(导致姓名被提前截取)

李四,福建省福州市湖滨路110号湖滨大厦一层.
{'姓名': '', '手机': '', '地址': ['福建省', '福州市', '', '', '湖滨路', '110号', '湖滨大厦一层']}

7.个人感想

从布置作业的那天就开始慌,万一做不出来得了零分那就凉了,这种慌张压迫得我喘不过气,也迫使着我不断去寻找材料,不断去想办法完成这个作业,催促着我不断成长,有时候有一丁点突破就会感觉倍有成就感,做到最后,虽然还是没有做到尽善尽美,有很多点还是没能考虑清楚,但真的是收获满满,希望能不断有所进步,不断突破自己。

posted on 2019-09-17 22:10  sky星  阅读(163)  评论(2编辑  收藏  举报

导航