第一次个人编程作业

Github链接

第一次个人编程作业

PSP表格

PSP2.1Personal Software
Process Stages
预估耗时(min)实际耗时(min)
Planning计划5040
Estimate估计这个任务需要多少时间5040
Development开发750780
Analysis需求分析
(包括学习新技术)
6070
Design Spec生成设计文档6050
Design Review设计复审6050
Coding Standard代码规范
(为开发制定合适的规范)
3030
Design具体设计10090
Coding具体编码180220
Code Review代码复审8070
Test测试
(自我测试,修改,提交修改)
180200
Reporting报告6060
Test Report测试报告2020
Size Measurement计算工作量1010
Postmortem & Process
Improvement Plan
事后总结
并提出过程改进计划
3030
合计860880

解题

解题步骤

  • 将输入数据的(数字)!先提取出来
  • 讲姓名和手机号提取出来,留下一段地址字符串
  • 通过正则表达式解析各级地址
  • 有些地方通过正则表达式无法解析出来,通过导入网上找的列表序列
  • 将结果保存为json格式输出

设计实现过程

代码内容

我是用python来编写这个程序的,不得不说真比java省掉了好多事情,对我这种菜鸡来说真的是太开心了(然而还是不懂做)。步入正题,这个代码有一个主函数,然后分别调用不同的函数实现不同的功能,主函数主要是把各个调用函数返回的字段删除,最后留下的nows即为切到只剩下最后一级的地址。好像没必要画流程图,这个程序写的就有点太简单了(原谅我只能写出这样思路最土的程序)。最后各个函数具体如下:
函数名说明
def main()主函数
def getTelNum(s)返回电话号码
getProvince(s)返回省份
def getCity(s)返回城市
def getCounty(s)返回县级
def getTown(s)返回街道、镇…
def getRoad(s)返回路、巷…
def getDoornum(s)返回门牌号

代码规范

不得不说这一块我做的特别的差,开始写代码没有注意这些,而且保留有其他语言一些习惯,导致写出来的代码特别的乱,上两个前后分数对比图,我已经尽力了,反正所有警告确实已经消失了……以后写自己多注意这些方面吧。

1795857-20190917212517609-1670787957.png
1795857-20190917212613977-1380814354.png

关键代码

由于我用的主要是正则表达式,对每一级分别用一个函数来实现,所以每个函数差不了很多,除了正则表达式的内容,还有对省、市、县这些字的缺失的处理,给出一小段获取城市段代码,其他类似。
def getcity(s):            #获得城市
    res = re.search("(.*?自治州)|(.*?[市])", s)
    if res != None:
        l = len(res.group(0))
    if res == None or l > 7:
        for i in CITIES:
            if s[0:2] in i:
                return i
        return ""
    return res.group(0)
CITY = getcity(NOWS)
if CITY != "":
    NOWS = NOWS.replace(CITY, "", 1)
    if (CITY[-1] != "市") and (CITY[-3:-1] != "自治"):
        CITY = CITY+"市"

性能分析

通过pycharm专业版的Profile Run进行性能分析,得到部分数据如下,好像并没有看懂这些乱七八糟的东西是怎么回事,应该是遍历给出的cities和areas的时候浪费了大部分的时间吧,有想到引入json的包,也有同学发出来这个包,但是刚开始做的时候就死死每一层都往正则表达式钻,所以打出来bug就比较多,后来知道这个办法已经太晚了,在改方法我估计今天就交不了了…不过现在这个办法也是有点好处的,就是对那些完整的测试数据,比如说“福建省”而不是“福建”这种的时候,速度就会快得多……但是遇到不完整数据的时候就慢了。。。

1795857-20190917223010625-1806797054.png

1795857-20190917202349752-1456731708.png

单元测试

使用pycharm的unittest模块来构建单元测试,测试数据放在test这个py文件中,将原来的源代码做稍微修改,让他返回一个字典数据,然后在test中直接比较字典,(因为不会比json数据,如果数据错误就会报错,以下给出部分的代码:
class MyTestCase(unittest.TestCase):
    def test_something(self):
        self.assertEqual(a031702419.chuli(s1), dict1)
        self.assertEqual(a031702419.chuli(s2), dict2)
        self.assertEqual(a031702419.chuli(s3), dict3)
        self.assertEqual(a031702419.chuli(s4), dict4)
        self.assertEqual(a031702419.chuli(s5), dict5)
        self.assertEqual(a031702419.chuli(s6), dict6)
        self.assertEqual(a031702419.chuli(s7), dict7)
        self.assertEqual(a031702419.chuli(s8), dict8)
        self.assertEqual(a031702419.chuli(s9), dict9)
        self.assertEqual(a031702419.chuli(s10), dict10)
部分的测试数据如下
2!李四,福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!张三,福建福州闽13599622362侯县上街镇福州大学10#111.
1!黎剖奕,广东珠海市金湾区三灶镇乐康街13614572468一巷11号三灶镇海澄村委会.
2!小张,福建泉州市省新市18150632336霞美街海西楼
1!小陈,北京朝阳13965231525天安门广场
1!黎剖奕,广东珠海市金湾区三灶镇乐康街13614572468一巷11号三灶镇海澄村委会.

测试覆盖率是通过Pycharm的Run with Coverage实现的,结果如下:
1795857-20190917212158048-608665138.png

异常处理

在测试代码的时候经常碰到报错,有时没有复制名字,或者缺少省份呢,都会报错。我测试了以下的几条数据:
1!福建省福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
1!福州13756899511市鼓楼区鼓西街道湖滨路110号湖滨大厦一层.
虽然知道给的测试数据是正常的……其他异常我就找不到了

小结

软工实践不熬夜是不可能不熬夜的,对于我这种vegetable bird来说也太难了吧,不仅代码敲的要死要活,好不容易敲出可能能对几个点的水平,测试工具一堆的又搞得头大,中秋假期是什么我已经不懂了,不过至少这一星期学到了挺多,至少对python熟悉了一点,对一些评测,代码分析的东西也是有点了解。不过对比大一大二,现在确实才是学到更接近计算机的东西,代码也不是敲出来就是可以的,还要考虑好多的东西,包括开发前的问题分析、需求分析等等,也有开发后的一些性能优化、Debug等等,所以接下去还有 long way to go…

转载于:https://www.cnblogs.com/yaobink/p/11530809.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值