zoukankan      html  css  js  c++  java
  • 2020软件工程第一次个人编程作业

    • PSP表格

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

    • 流程图



    • 代码说明

      json解析,参数传递文件路径,将json数据整合到data.json里

        def findjson(filedir): 
        filenames=os.listdir(filedir)
        with open('data.json','w',encoding = 'utf-8') as f:
            for filename in filenames:
                filepath = filedir+'\'+filename
                for line in open(filepath,encoding = 'utf-8'):
                    f.writelines(line)
        return 
      

      命令行参数的设置以及参数的传递

        opts,arv= getopt.getopt(sys.argv[1:],'i:u:r:e:',['user=','repo=','event=','init='])
        filedir = ""
        reponame = ""
        username = ""
        eventname = ""
        for opt in opts:
            if opt[0] == '-i' or opt[0] == '--init':
                filedir = opt[1]
                findjson(filedir)
                break
            elif opt[0] == '-u' or opt[0] == '--user':
                username = opt[1]
            elif opt[0] == '-r' or opt[0] == '--repo':
                reponame = opt[1]
            elif opt[0] == '-e' or opt[0] == '--event':
                eventname = opt[1] 
      

      逐行读出data.json的数据并存放至列表

        data_s=[]
        f = open('data.json','r',encoding = 'utf-8')
        for line in f.readlines():
            data_s.append(json.loads(line)) 
      

      对不同需求进行查找计数并输出结果

        def count_1(data_s,username,eventname):
            cnt = 0
            for data in data_s:
                if data['actor']['login'] == username and data['type'] == eventname:
                    cnt = cnt + 1
            print(cnt)
            return
      
        def count_2(data_s,reponame,eventname):
            cnt = 0
            for data in data_s:
                if data['repo']['name'] == reponame and data['type'] == eventname:
                    cnt = cnt + 1
            print(cnt)
            return
      
        def count_3(data_s,username,reponame,eventname):
            cnt = 0
            for data in data_s:
                if data['repo']['name'] == reponame and data['repo']['name'] == reponame and data['type'] == eventname:
                    cnt = cnt + 1
            print(cnt)
            return 
      

    • 单元测试截图



    • 单元测试覆盖率

      程序的平均覆盖率是 0.59 ,差1分及格那咋办嘛(学废了就优化)

    • 单元测试性能测试

      听说多线程可以优化,然后查询的算法也可以优化,希望以后学会了实践一下。

    • 代码规范链接

      https://github.com/AshCrimpeng/2020-personal-python/blob/master/CodeStyle.md

    • 总结

      第一次接触与之前输入输出完全不同的编程作业,极大的打击了我的自信心。

      遇到的困难

        对于json文件的打开操作,文件路径的正确写法,编码方式
        对于文件夹中多个 json 文件的整合解析,以及在写入时目录没有相应文件时自动生成相应文件
        命令行参数的设置以及参数的传递
      

      学到的东西

        python 打开文件的操作,文件夹内多个json文件的解析
        sys.argv 和 getopt.getopt() 的用法
        git的基础用法 —— fork 以及 commit
        不是一般的菜
      

      不足的地方

        通过覆盖率以及性能测试可以了解到代码还有很多不足的地方(但是那又有什么办法呢)
        多进程学废了一定优化代码
        查找计算的程序有些冗余
      

      虽然有些打击,但是还是从中学到了不少东西,算是迈出了我的一大步,该学习了朋友!

  • 相关阅读:
    Linux小知识磁盘简介(图)
    今天部署测试环境出现问题总结
    利用crt、xmanager 远程打开Linux图形界面
    weblogic92的AdminServe.lok Unable to obtain lock
    Linux中sqlplus退格显示“^H” 的解决
    设置fs的自动挂载
    java.net.BindException: Address already in use
    Linux下的WebLogic安装部署
    添加css样式的三种方法
    SQL Server 2000中 IDENTITY_INSERT的设置学习(转载自blacksource的专栏)
  • 原文地址:https://www.cnblogs.com/AshCeimpeng/p/13682447.html
Copyright © 2011-2022 走看看