2020软件工程第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
这个作业的目标 学习解析 Json 文件,以及熟悉 GitHub 的使用
学号 031802539

PSP 表格

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

解题过程

  • 分析需求:解析 Json 文件,统计用户或项目发生的某种事件的数量
  • 编码分析:查找资料,了解 Python 如何解析 Json 文件,以及如何实现命令行参数
  • 测试结果:利用老师发的脚本进行本地测试
  • 提交到 GitHub 运行测试

代码组织思维导图

代码说明

初始化

def read_json(path):
    filelist = os.listdir(path)#读取文件列表
    f2=open('data.json','w',encoding=> 'utf-8')
    for file in filelist:#读json文件
        pathname=path+'\\'+file
        with open(pathname,encoding='utf-8') as f:
            for line in f:
                f2.write(line)#写入data.json
    return

命令行参数设置

opt,arv= getopt.getopt(sys.argv[1:],'i:u:r:e:',['user=','repo=','event=','init='])

遍历计算结果

def caculate_ans(data,username,repo,event):
    ans=0
    for da in data:
        if not len(username)==0:#判断有无username
            if not username==da['actor']['login']:
                continue
            else:
                pass
        else:
            pass
        if not len(repo)==0:#判断有无repo
            if not repo==da['repo']['name']:
                continue
            else:
                pass
        else:
            pass
        #判断项目
        if da['type']==event:
                ans=ans+1
        else:
            pass
    return ans

单元测试截图

本地测试程序

示例程序执行结果

我的程序执行结果

GitHub 运行测试结果

单元测试覆盖率及性能测试

单元测试覆盖率

测试过程

测试结果


利用 coverage 工具统计单元测试覆盖率,用给出的测试脚本进行测试,可以看到覆盖率有92%。

性能测试




性能优化

  • 想用多线程优化代码,这部分还在码中...
  • 用正则解析代替 Python 自带的 Json 库优化代码性能。
  • 优化计划:
    1、把初始化的文件分开储存,在后续计算结果的时候利用多线程优化。
    2、用正则解析 Json。

代码规范链接

迭代过程

1、学习单一的 Json 解析
2、学习命令行参数
3、两个功能融合,以及调试代码
4、测试有无 Bug
5、改进代码保证结果正确
6、代码格式整理

困难及办法

(一)

  • 花了一下午时间才弄懂解析 Json 文件,用 Python 的 Json 解析语句一直报错。
  • 看了一些博客发现博客里用来示例的 Json 和给出的文件里的不一样,文件里的应该逐行解析。

(二)

  • 命令行参数不太懂,原来只会用 sys 模块。
  • 网络检索,发现还有支持短选项和长选项的 getopt 模块。

(三)

  • 不懂如何初始化后 data 参数保持不变。
  • 看了老师的实例发现是将解析好的 Json 重新写入一个文件中,在查询的时候再进行对新建文件的解析。

(四)

  • Python 的单元测试覆盖率要计算工具 coverage 进行统计。
  • Python 的性能测试也用 cProfile 解决。

(五)

  • 利用对 Python 进行优化有点困难,以前只用过 Java 的多线程,而且好像 Python 的优化效果也不是很好。

(六)

  • 使用 Git 控制版本的问题用 PyCharm 解决。

总结

  • 动手编码前的计划是很重要的,非常影响效率。
  • 学习的技能:
    1、Python 关于 Json 的解析
    2、Python 命令行参数
    3、Git 的使用
    4、Python 的单元测试覆盖率计算
    5、Python 的性能测试
  • 检索分析是一项很重要的能力

参考资料/博客

posted @ 2020-09-15 04:04  pikaQ5588  阅读(800)  评论(2编辑  收藏  举报