这个作业属于哪个课程 | http://dwz.date/cts4 |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167 |
这个作业的目标 | 学习GitHub和Git用法,学会如何分析并处理Json格式的数据文件,提高自主学习的能力 |
学号 | 031801327 |
一、PSP表
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 10 | 30 |
Estimate | 估计这个任务需要多少时间 | 10 | 10 |
Development | 开发 | 120 | 120 |
Analysis | 需求分析 (包括学习新技术) | 120 | 300 |
Design Spec | 生成设计文档 | ||
Design Review | 设计复审 | ||
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 20 |
Design | 具体设计 | 360 | 360 |
Coding | 具体编码 | 360 | 200 |
Code Review | 代码复审 | ||
Test | 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | ||
Test Report | 测试报告 | ||
Size Measurement | 计算工作量 | ||
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 10 | 5 |
合计 | 1060 | 1105 |
二、思路叙述
(1)*数学建模刚刚建完便想起了软工作业,疲惫不堪的我首先在看到题目时的确是一头雾水,不是很懂的题目的意思,之前做过的题目中似乎从未出现过这种样子的题目,心情是苦闷的。把纪学长给的代码放进python里面运行好像也不太顺畅。*
(2)*因为开始做时已经过了好几天了,在网络上查找资料以及和舍友的交谈讨论中逐渐明白了题目的意思,即要求我们解析一个大规模的json文件,而且在文件夹中会有多个json文件,需要通过读取文件夹找出其中所有的json文件,并对其进行解析,而不能仅仅读取一个文件*
(3)*好像明白了什么,本身的筛找Event好像并不难,if语句再来个计数器,但是命令行咋写?好像从未接触过类似的要求。*
(4)*不管咋样,先试试再说,一边检索一边问一边coding*
三、过程描述与困难解决
流程图:
1.首先要把 JSON 文件进行处理,先用os.listdir()返回指定的文件夹包含的文件名的列表,通过第一个open函数建立一个空的json文件,双重for in循环遍历读取文件通过write()函数写入数据到新的json文件。其实重点就在于建立空的json文件来作为一个接受数据的文件。
然而一开始以为只有一个json文件,而且没有写入操作。
修正:
2.对Event进行计数
event信息对应在'type'中,user对应'actor''login',repo对应'repo''name'然而一开始写的似乎只能支持前两个小题,对于第三问似乎要再建立一个循环,但是似乎可以巧妙地运用顺序执行的特点,通过询问与交流,在他人的启示下。这样的写法下,就可以通过continue进行制约,在判断是否type为Event后,将第三种即每一个人在每一个项目的 4 种事件的数量来用count_event表示。
3.命令行参数与输入输出
参考资料:http://www.cppcns.com/jiaoben/python/271196.html
https://blog.csdn.net/lemon_tree12138/article/details/50912898
使用getopt模块获取命令行选项和参数,利用sys模块将命令行参数保存在opt, arg中,虽然它只能简单的处理命令行参数,但是对于本题是可用的。
args:args为需要解析的参数列表。一般使用sys.argv[1:],这样可以过滤掉第一个参数(ps:第一个参数是脚本的名称,它不应该作为参数进行解析)
shortopts:简写参数列表,longopt:长参数列表,opt为分析出的格式信息,是一个两元组的列表。每个元素为:(选项串,附加参数)。如果没有附加参数则为空串'';
由于格式要求python3 GHAnalysis.py <--init|-i>
python3 GHAnalysis.py <-u|--user> user <-e|--event> <PushEvent|IssueCommentEvent|IssuesEvent|PullRequestEvent>
python3 GHAnalysis.py <-r|--repo> user/repo <-e|--event> <PushEvent|IssueCommentEvent|IssuesEvent|PullRequestEvent>
python3 GHAnalysis.py <-u|--user> user <-r|--repo> user/repo <-e|--event> <PushEvent|IssueCommentEvent|IssuesEvent|PullRequestEvent>
首先判断是否初始化。
根据opt的长度,for in循环下通过命令行输入来进行username,repo,event三个变量的赋值。
输出Event_count
这个命令行是我在本次编程作业中遇到的最大问题,由于它与整个代码有直接关系,一旦有问题就很麻烦。
询问了同学并查看了他们的做法以及研究了助教的代码,并上网到各种小网站进行学习,借鉴。
4.git与github的使用
按照b站上的教程一步步学习,同时发现其实在安装时多点一下,右键直接用git bash就可以,没必要调命令窗口。
由于按照教程来进行本地仓库与远程仓库的互相交互,并没有太大的问题,并在fork并上传代码后书写了codestyle即 https://github.com/Ice-wave/2020-personal-python/blob/master/codestyle.md
4 性能测试/单元覆盖率
单元覆盖率:
性能测试:
啊这。
locust安装失败?
5 总结
感觉自己好像多会了一点东西?突然有种感觉这写编程题就和学习一门外语一样的过程,看上去都看不懂,查清楚意思以后就挺明白了。
今后目标:争取下次将作业完成的更加完整、精确。
That's it.