• 第一次个人编程作业


    软工实践第一次个人编程作业

    1.仓库地址

    Github <-click这里

    2.PSP表格

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

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

    1. 首先根据'!'把前 level 存起来,后面再根据level调用不同等级的处理函数,共分为1 2 3三种.

    2. 因为名字和地址是由','分割开来,所以再取两部分name,address.

    3. 地址里面只混有手机号,根据正则d{11}?把手机号分割出来.

    4. 最后的标准地址通过正则表达式解析出来,正则表达式参考博客

      String regex="(?<province>[^省]+自治区|.*?省|.*?行政区|.*?市)(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)(?<county>[^县]+县|.+区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇)?(?<village>.*)";
      

    输入输出样例:

    2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
    1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
    2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
    3!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
    1!小陈,广东省东莞市凤岗13965231525镇凤平路13号.
    
    {"姓名":"李四","手机":"13756899511","地址":["福建省","福州市","鼓楼区","","鼓西街道湖滨路110号湖滨大厦一层"]}
    {"姓名":"张三","手机":"13599622362","地址":["","","福建福州闽侯县","上街镇","福州大学10#111"]}
    {"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","123号福州鼓楼医院"]}
    {"姓名":"小美","手机":"15822153326","地址":["北京市","东城区交道口东大街1号北京市","东城区","","人民法院"]}
    {"姓名":"小陈","手机":"13965231525","地址":["广东省","东莞市","","凤岗镇","凤平路13号"]}
    

    发现以上还是不满足需求的。

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

    分析问题

    1. 直辖市和一般城市没有做区别.
    2. town部分没有匹配街道.
    3. 县级市应是第三级,而因贪婪正则而补充到了地级市.
    4. 会有省市后缀丢失的情况.

    修改后的正则表达式

    String regex="(?<province>[^省]+自治区|.*?省|.*?行政区)?(?<city>[^市]+自治州|.*?地区|.*?行政单位|.+盟|市辖区|.*?市|.*?县)?(?<county>[^县]+县|.+?区|.+市|.+旗|.+海域|.+岛)?(?<town>[^区]+区|.+镇|.+街道)?(?<village>.*)";
    

    解决问题

    1. 地址正则表达第一级去掉市级,后判断第一级缺失且第二级存在,并判断是否是直辖市而对第一级地址补充
    2. 正则表达式补充更多的地址后缀
    3. 采用非贪婪表达式
    4. 先通过正则遍历一遍,看是否有后缀丢失,而导致一二级缺失。通过导入数据对比补充后缀,再通过正则解析

    函数

    1. void Strsolve() /把地址分解成等级,名字,电话,标准地址/
    2. void WithPC() /补一二级后缀/
    3. void WithP() /补一级后缀/
    4. void WithC() /补二级后缀/
    5. void Doit() /类似Main 调用其他功能函数/
    6. void Rank1() void Rank2() void Rank3() /->根据问题的level,而选择正确的处理函数/
    7. void Solve() /不会用 json库,只能手码 json格式/
    正则表达式改进版
    //5级的后2级
    (?<town>[^区]+?区|.+?镇|.+?街道|.+?乡)?(?<village>.*)
    //7级的后4级
    (?<town>[^区]+区|.+?镇|.+?街道|.+?乡)?(?<village1>.+?街|.+?路|.+?巷)?(?<village2>[d]+?号|[d]+.?道)?(?<village3>.*)
    

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

    内存空间


    单元测试

    1!李四,福建鼓楼13756899511鼓西街道湖滨路110号湖滨大厦一层.
    1!张三,福州市闽13599622362侯县上街镇福州大学10#111.
    1!刘湖,吉林省白山市六道江镇西村药店18694520738.
    1!王五,腾冲市满邑社区华园三小区47号18694520738.
    1!咸陡隐,江苏省苏州市吴江13184142847区平望镇新业织造有限公司吴江区平望镇双浜村村民委员会.
    2!王五,福建省福州市鼓楼18960221533区五一北路123号福州鼓楼医院.
    2!小美,北京市东15822153326城区交道口东大街1号北京市东城区人民法院.
    2!王五,云南省昭通市水富18694520738县云川路1号.
    2!王五,云南省迪庆藏族自治州18694520738香格里拉市.
    2!王五,四川省眉山市仁寿18694520738县黑龙滩镇牌坊街.
    2!王五,陕西省渭南市韩18694520738城市108国道附近.
    
    {"姓名":"李四","手机":"13756899511","地址":["福建省","","鼓楼区","鼓西街道","湖滨路110号湖滨大厦一层"]}
    {"姓名":"张三","手机":"13599622362","地址":["","福州市","闽侯县","上街镇","福州大学10#111"]}
    {"姓名":"刘湖","手机":"18694520738","地址":["吉林省","白山市","","六道江镇","西村药店"]}
    {"姓名":"王五","手机":"18694520738","地址":["","","腾冲市","满邑社区","华园三小区47号"]}
    {"姓名":"咸陡隐","手机":"13184142847","地址":["江苏省","苏州市","吴江区","平望镇","新业织造有限公司吴江区平望镇双浜村村民委员会"]}
    {"姓名":"王五","手机":"18960221533","地址":["福建省","福州市","鼓楼区","","五一北路","123号","福州鼓楼医院"]}
    {"姓名":"小美","手机":"15822153326","地址":["北京","北京市","东城区","","交道口东大街","1号","北京市东城区人民法院"]}
    {"姓名":"王五","手机":"18694520738","地址":["云南省","昭通市","水富市","","云川路","1号",""]}
    {"姓名":"王五","手机":"18694520738","地址":["云南省","迪庆藏族自治州","香格里拉市","","","",""]}
    {"姓名":"王五","手机":"18694520738","地址":["四川省","眉山市","仁寿县","黑龙滩镇","牌坊街","",""]}
    {"姓名":"王五","手机":"18694520738","地址":["陕西省","渭南市","韩城市","","","108国道","附近"]}
    

    测试覆盖率
    img

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

    1. 只有手机号,没有地址。 ->用正则处理地址的时候 eg:1!陈天恒,12345678901
    2. 手机号位数不对,不能把手机号正确的取出,而地址不能解析出。 -> eg:1!陈天恒,福建131652福州市闽侯县
    3. 没有设置等级难度 -> eg: 陈天恒,福建12345678901福州闽侯福州大学32号楼605

    7.总结

    1. 发现自己是真的菜,弱鸡的无能狂怒!
    2. 第一次get到了正则表达式的点!
    3. 第一次认真普及了中国的地理知识!
    4. 代码,真实改了又改,给我整吐了!
  • 相关阅读:
    React 学习笔记
    需要充实自己的课外东西
    近期计划
    测试TinyMCE编辑器
    我的第二篇博客园随笔
    博客已搬运至https://wz71014q.github.io
    关于HTTPS通信机制的笔记
    JS中数组的一些笔记
    Three学习之曲线
    Three入门学习笔记整理
  • 原文地址:https://www.cnblogs.com/cc1219032777/p/11595371.html
Copyright © 2020-2023  润新知