第一次个人编程作业
**1. **作业
2.PSP
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
· Estimate | · 估计这个任务需要多少时间 | 10 | 20 |
Development | 开发 | 150 | 300 |
· Analysis | · 需求分析 (包括学习新技术) | 500 | 700 |
· Design Spec | · 生成设计文档 | 60 | 90 |
· Design Review | · 设计复审 | 20 | 40 |
· Coding Standard | · 代码规范 (为目前的开发制定合适的规范) | 30 | 40 |
· Design | · 具体设计 | 100 | 200 |
· Coding | · 具体编码 | 700 | 900 |
· Code Review | · 代码复审 | 60 | 120 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 120 |
Reporting | 报告 | 30 | 40 |
· Test Repor | · 测试报告 | 30 | 40 |
· Size Measurement | · 计算工作量 | 30 | 50 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 60 | 70 |
· 合计 | 1840 | 2770 |
3.计算模块接口的设计与实现过程
解题思路描述
(1)读取文件
(2)区分难度等级
(3)把名字切出来
(4)把手机号切出来
(5)分直辖市和非直辖市两种情况做地址解析
(6)按json格式输出
代码组织
一个类,除了主函数有九个函数,如下:
函数 | 功能 |
---|---|
void write(String) | 将字符串写入文件 |
void name(String) | 将名字写入文件 |
void phonenumber(String) | 将手机号写入文件 |
String getTelnum(String) | 提取手机号 |
String deletephonenumber(String,String) | 删掉手机号 |
List<Map<String,String>> addressResolution(String) | 非直辖市五级地址解析 |
List<Map<String,String>> addressResolution1(String) | 直辖市五级地址解析 |
List<Map<String,String>> addressResolution3(String) | 非直辖市七级地址解析 |
List<Map<String,String>> addressResolution2(String) | 直辖市七级地址解析 |
函数name(String),phonenumber(String)两个函数中调用了函数write(String)。
关键代码
五级地址正则表达式
String regex="(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇|.+街道|.+乡)?(?<village>.*)";
七级地址正则表达式
String regex="((?<province>[^省]+省|.+自治区)|上海|北京|天津|重庆)(?<city>[^市]+市|.+自治州)(?<county>[^县]+县|.+区|.+局|.+市)(?<town>[^区]+区|.+镇|.+街道|.+乡)?(?<road>[^路]+路|.+弄|.+街|.+巷)?(?<number>[^号]+号)?(?<village>.*)";
百度上一通瞎找,再结合了一些实例,得到了以上正则表达式。
我真的很菜,能解决的情况真的很少,随便缺点什么,我都解决不了了。实在非要我说独到之处,那可能是把直辖市单独处理了吧。
4.计算模块接口部分的性能改进
在改进计算模块性能上花费120分钟。将名字和手机号的写入单独用函数处理,直辖市单独处理,由只能处理五级解析升级为能处理五级和七级解析。
由JProfiler生成的性能分析图如下:
5.计算模块部分单元测试展示
(emmmmm)其实我也不知道单元测试是不是这样做的。可能也许或许是吧。我就一个类,就把整个代码都做单元测试了。部分代码如下:
单元测试得到的测试覆盖率截图如下:
6.计算模块部分异常处理说明
(1)解决无法处理直辖市的情况。
小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
7.心路历程与收获
看到题目的时候,这都是啥???直到现在我也还是不明不白。从C++开始尝试,历经一天,失败。又开始尝试java,全程面向百度编程。一开始就果断放弃了附加题,又渐渐地放弃了单元测试,异常处理,然后发现可能我的代码根本都没机会跑起来。千言万语化作一句”我太难了“。可能是时候考虑一下转行了??
收获的话,也是有很多的吧。整个作业都是从头学习,一个问题一个问题搜,下了一堆七七八八的软件,我可能是个假的计算机学子。感觉一个星期学了两年都没学到的知识量,有点消化不良。菜是原罪,好好学习天天向上吧。