软件工程第一次编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
这个作业的目标 学习github和python
学号 031802424
PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 最后一天冲刺。。。 生活迫使我低下了头
Estimate 估计这个任务需要多少时间
Development 开发
Analysis 需求分析 (包括学习新技术) 300 1000
Design Spec 生成设计文档 10 10
Design Review 设计复审 10 10
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 35
Design 具体设计 10 10
Coding 具体编码 10 10
Code Review 代码复审 0 0
Test 测试(自我测试,修改代码,提交修改) 60 60
Reporting 报告
Test Report 测试报告
Size Measurement 计算工作量
Postmortem & Process Improvement Plan 事后总结, 并提出过程改进计划 20 20
合计 450 1155

1.解题思路

  • 拿到作业完全看不懂,莫名其妙。下载了那个GH Archive,解压后看到惊呆了,寻思着难倒要把这些全都复制到dev c++的黑框框里???随着时间推进逐渐知道一些大概的意思。先是看了助教的github入门视屏,然后在b站找了其他视屏,知道了github基本的使用。因为基本只会C语言,指着有无大佬用C语言写,后来通过一些途径知道用Python写会方便的多。自然也从网上了解了Python3解析json文件的方法。自学了Python,勉强看了看各位阿sir的代码。依然没有自主编程能力。。。所以用了助教阿sir的代码勉强提交了作业。

2.设计过程

3.代码说明

  • (1)读取函数
    def __init__(self, dict_address: int = None, reload: int = 0):
        if reload == 1:
            self.__init(dict_address)
        if dict_address is None and not os.path.exists('1.json') and not os.path.exists('2.json') and not os.path.exists('3.json'):
            raise RuntimeError('error: init failed')
        x = open('1.json', 'r', encoding='utf-8').read()
        self.__4Events4PerP = json.loads(x)
        x = open('2.json', 'r', encoding='utf-8').read()
        self.__4Events4PerR = json.loads(x)
        x = open('3.json', 'r', encoding='utf-8').read()
        self.__4Events4PerPPerR = json.loads(x)

  • (2)json写入与解析
def __init(self, dict_address: str):
        json_list = []
        for root, dic, files in os.walk(dict_address):
            for f in files:
                if f[-5:] == '.json':
                    json_path = f
                    x = open(dict_address+'\\'+json_path,
                             'r', encoding='utf-8').read()
                    str_list = [_x for _x in x.split('\n') if len(_x) > 0]
                    for i, _str in enumerate(str_list):
                        try:
                            json_list.append(json.loads(_str))
                        except:
                            pass
        records = self.__listOfNestedDict2ListOfDict(json_list)
        self.__4Events4PerP = {}
        self.__4Events4PerR = {}
        self.__4Events4PerPPerR = {}
        for i in records:
            if not self.__4Events4PerP.get(i['actor__login'], 0):
                self.__4Events4PerP.update({i['actor__login']: {}})
                self.__4Events4PerPPerR.update({i['actor__login']: {}})
            self.__4Events4PerP[i['actor__login']][i['type']
                                         ] = self.__4Events4PerP[i['actor__login']].get(i['type'], 0)+1
            if not self.__4Events4PerR.get(i['repo__name'], 0):
                self.__4Events4PerR.update({i['repo__name']: {}})
            self.__4Events4PerR[i['repo__name']][i['type']
                                       ] = self.__4Events4PerR[i['repo__name']].get(i['type'], 0)+1
            if not self.__4Events4PerPPerR[i['actor__login']].get(i['repo__name'], 0):
                self.__4Events4PerPPerR[i['actor__login']].update({i['repo__name']: {}})
            self.__4Events4PerPPerR[i['actor__login']][i['repo__name']][i['type']
                                                          ] = self.__4Events4PerPPerR[i['actor__login']][i['repo__name']].get(i['type'], 0)+1
        with open('1.json', 'w', encoding='utf-8') as f:
            json.dump(self.__4Events4PerP,f)
        with open('2.json', 'w', encoding='utf-8') as f:
            json.dump(self.__4Events4PerR,f)
        with open('3.json', 'w', encoding='utf-8') as f:
            json.dump(self.__4Events4PerPPerR,f)

-(3)运行类

class Run:
    def __init__(self):
        self.parser = argparse.ArgumentParser()
        self.data = None
        self.argInit()
        print(self.analyse())

    def argInit(self):
        self.parser.add_argument('-i', '--init')
        self.parser.add_argument('-u', '--user')
        self.parser.add_argument('-r', '--repo')
        self.parser.add_argument('-e', '--event')

    def analyse(self):
        if self.parser.parse_args().init:
            self.data = Data(self.parser.parse_args().init, 1)
            return 0
        else:
            if self.data is None:
                self.data = Data()
            if self.parser.parse_args().event:
                if self.parser.parse_args().user:
                    if self.parser.parse_args().repo:
                        res = self.data.getEventsUsersAndRepos(
                            self.parser.parse_args().user, self.parser.parse_args().repo, self.parser.parse_args().event)
                    else:
                        res = self.data.getEventsUsers(
                            self.parser.parse_args().user, self.parser.parse_args().event)
                elif self.parser.parse_args().repo:
                    res = self.data.getEventsRepos(
                        self.parser.parse_args().repo, self.parser.parse_args().event)
                else:
                    raise RuntimeError('error: argument -l or -c are required')
            else:
                raise RuntimeError('error: argument -e is required')
        return res


if __name__ == '__main__':
    a = Run()
  • (4)运行结果

  • (5)性能分析

4.代码规范

https://github.com/supercarrySJY/My-Code-specification/edit/master/README.md

5.反思总结

  • 最后还是没有能自主完成这次作业。作业布置的很早,理应有足够时间去完成。分析失败原因。
    (1)个人原因。前三周比较忙。19号第二次考六级,希望能刷到550,并且决定无论如何最后一次考六级(后面时间更紧),于是将大部分时间花在了准备六级上。前三周周日有一天的实验,因为上学期这个实验的理论学得不好,所以分了时间在学习这门课上。
    (2)知识储备不足,python入门到实践草略看了一知半解,无法独立完成作业。
    (3)对完成作业时间和方式的错误估计,本以为可以坚持用c++完成本次作业,结果思想斗争后还是开始学习python。

  • 后续工作:本周后不管作业成绩如何都会重新完善这次作业,确实有些力不从心。将继续python的学习,赶上大家的进度。

posted on 2020-09-16 23:24  supercarrysjy  阅读(144)  评论(1编辑  收藏  举报