软件工程第一次编程作业

软件工程第二次作业

这个作业属于哪个课程 http://dwz.date/cts4
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
这个作业的目标 进一步熟悉GitHub、git的使用,尝试大数据的处理
学号 031802225

一、psp 表格

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

二、纯小白摸爬过程

1.前置要求:

1 Git、GitHub 的使用:在 pycharm 中自动配置。

具体学习过程见另一篇博文:(还在写,还没更,日后写了补充链接~)

2 代码规范的制定:https://github.com/qtzj/soft_homework_2020917/blob/master/codestyle.md

2.需求分析与新知识学习:大数据处理,json文件的解析

json:是用了存储和交换文本信息的语法,一种轻量级的数据交换格式。

解析json: 解析数据内容,即吧字符串重新变成json类型对象,使得可对其中各种类型的属性或者对象进行操作。

参考链接:https://www.runoob.com/python/python-json.html

命令行参数:命令行中的参数。接受对象为main()函数,一个程序开始于对函数main()的调用,此时有两个参数被送给main(),其中的一个描述了命令行参数的个数,通常称为argc;另一个是命令行参数的数组,通常称为argv。

参考链接:python中处理命令行参数的方法 https://segmentfault.com/a/1190000023956528

命令行解析:可以使我们在命令行中就可以向程序中传入参数并让程序运行。

3 python解析json文件

1 open(name[, mode[, buffering]]):用于打开文件,本次作业中用于打开json文件。

参考链接: https://www.runoob.com/python/python-func-open.html

2 python类中初始化的形式:def_init_(self, 参数1,参数2,···,参数n)

参考链接: https://blog.csdn.net/qq_26005373/article/details/99942134

3 json.dumps : 将 Python 对象编码成 JSON 字符串。

4 json.loads : 将已编码的JSON字符串解码为python对象。

4 python中命令行参数的获取与解析

获取命令行参数的三种方式:

参考链接:https://www.runoob.com/python/python-command-line-arguments.html

鉴于本次作业的格式分析,选择使用 argparse 模块。

argparse 模块

使用步骤:

1.import argparse #导入该模块 
2.parser = argparse.ArgumentParser() #然后创建一个解析对象
3.parser.add_argument() #向该对象中添加命令行参数和选项
4.parser.parse_args() #用于解析,解析成功后可以使用,将之前add_argument()定义的参数进行赋值,并返回相关的namespace

add_argument() 常用的参数:

name or flags:命令行参数名或者选项。但是如果是选项的话,则设置为None

nargs:命令行参数的个数,一般使用通配符表示,其中,?表示只用一个,*表示0到多个,+表示至少一个

dest:如果提供dest,例如dest=”a”,那么可以通过args.a访问该参数

default:设置参数的默认值

version:打印程序版本信息

type:把从命令行输入的结果转成设置的类型

help:参数命令的介绍,帮助我们输入参数命令

本题中代码解释举例:

题目格式要求

python3 GHAnalysis.py <-u|--user> user <-e|--event> <PushEvent|IssueCommentEvent|IssuesEvent|PullRequestEvent>

代码:

my_parser.add_argument('-u', '--user', help='username')

设置参数名'-u','args.--user'可以访问参数,help参数则是引导用户输入的参数命令介绍。

参考链接:https://zhuanlan.zhihu.com/p/56922793

https://blog.csdn.net/haoyu_/article/details/79223896

三、思路分析

  1. 阅读json文件,以便后续编码

得到“key-value"如下:

{"id":"2489651045",

"type":"CreateEvent",

"actor":{"id":665991,"login":"petroav","gravatar_id":"","url":"https://api.github.com/users/petroav","avatar_url":"https://avatars.githubusercontent.com/u/665991?"},

"repo":{"id":28688495,"name":"petroav/6.828","url":"https://api.github.com/repos/petroav/6.828"},

"payload":{"ref":"master","ref_type":"branch","master_branch":"master","description":"Solution to homework and assignments from MIT's 6.828 (Operating Systems Engineering). Done in my spare time.","pusher_type":"user"},

"public":true,"created_at":"2015-01-01T15:00:00Z"}
  1. 具体思路:

四、部分代码说明和展示

#命令行参数的设置
def set_command():#命令行参数的设置(-i为初始化,-u为用户,-r为项目,-e为事件)
    self_parser = argparse.ArgumentParser(description='analysis the json file')
    self_parser.add_argument('-i', '--init', help='json path')
    self_parser.add_argument('-u', '--user', help='username')
    self_parser.add_argument('-r', '--repo', help='repository name')
    self_parser.add_argument('-e', '--event', help='type of event')
#命令行参数的解析
    args = self_parser.parse_args()#命令行参数的解析
# 解析json的过程python3 GHAnalysis.py <--init|-i> <path to data>
class json_data:
    def __init__(self, dict_address: int = None, reload: int = 0):
        if reload == 1:
            self.__init(dict_address)
        x = open('F:homework_information2015-01-01-15.json', 'r', encoding='utf-8').read() #打开json文件
        self.__4Events4PerP = json.loads(x) # 解析json
# 数据处理,用是否存在来判断
def count(data,username,repo,event):
    answer=0
    for da in data:
        if not len(username) == 0:  # 存在用户
            if not username == da['actor']['login']: #用户不在文件中跳出循环
                    continue
            else:
                    pass
        else:
            pass
            if not len(repo) == 0:  # 存在项目
               if not repo == da['repo']['name']: #项目不在文件中跳出循环
                      continue
               else:
                   pass
            else:
               pass
        #判断项目
            if da['type']==event:
                answer=answer+1
            else:
                 pass
    return answer

目前没跑出来:

目前再改bug!!!!日后更结果~

性能测试截图

目前绝对有问题,我先把部分代码删掉,让他跑一下。但是只能先截图了

GitHub中建了两个库,和代码规范那个库分开了,本次作业见:https://github.com/qtzj/031802225

我的代码规范

https://github.com/qtzj/soft_homework_2020917/blob/master/codestyle.md

感觉自己的代码风格还没有完全形成起来,后续会不断更新与改进~

计划与困难

此处不断增加,也不断减少~

1.听说json文件要逐行解析,啊这,我再改。

2 听说要用多线程,啊这,我再改。

心得总结(作业日记,流水账记录,可自动跳过)

9.15

惨兮兮的我熬夜三天肝完数学建模,14日昏沉一天,15日打开作业发现自己连需求都不是很看得懂,简直是致命打击。这,慢慢学吧,后续会更的。恳请助教大发慈悲,给我点时间慢慢更吧~

9 .16

周三是从早上8:20满课到8:30,然后又继续开会。熬夜看了一下资料。尝试解决部分问题。最大的收获是学会冷静,淡定,然后努力。

先交为敬!日后更新!

9.17

今天学习了一下GitHub,这个东西我接触得挺早的,但是一直都没怎么用,很多操作都不熟悉,虽然看了一部分,但是现在还是觉得很生涩。自己之前胡乱开发,总是用qq传文件,确实没有培养好的习惯,现在好好改吧。接着我简单制定了自己的代码规范,自己感觉平时做事情不是很仔细,代码规范一直不是很好,希望以后慢慢改进。接着看了python命令行参数解析。

最近数学建模国赛+补作业连续通宵熬夜,,有点顶不住,休息一阵,会更的,会更的,作业截止我也更。

原文地址:https://www.cnblogs.com/runrun225/p/13681667.html