• 软件工程实践个人编程作业


    这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2020
    这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2020/homework/11167
    这个作业的目标 学会Github的基本操作;读取Json文件,并进行相关操作
    学号 031802642

    时间预算

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

    解题思路

    • 反复阅读作业要求,还是读不懂
    • 经大佬指导,先粗略学了python
    • 利用python读取json文件,进行四项操作统计,实现命令行参数
    • 利用脚本测试代码
    • 将写完的代码提交到Github测试

    1.学习python

    利用Bilibili这个学习软件,搜索python教程
    然后跟着视频,构建环境,打打代码,骗自己说,我会了

    2.利用python读取json文件

    结合两者一起看,懂了一点点
    其中有一段代码可以用于读取json文件

    修改其中的参数即可

    3.编写代码

    3.1思路

    3.2代码模块

    学不会啊
    以下代码均参考大佬的代码

    初始化命令行
    class DataProcessing:
        def __init__(self,FirstTime: bool , Address: str = None ):
            if(FirstTime):#第一次执行初始化
                if(self.pretreatment(Address)==False):
                    raise RuntimeError('error: Files not Found')
            else:#读取预制文件
                if(self.loadData() == False):
                    raise RuntimeError('error: please -i before using ')
    
    读取json文件,考虑多个文件,利用列表实现
    def pretreatment(self,Address: str) -> bool:
            self.__User = {}
            self.__Repo = {}
            self.__UserAndRepo ={}
            findFile=False
            for root, dic, files in os.walk(Address): #获取文件夹内所有文件
                for file in files:
                    if file[-5:] == '.json': #筛选后缀为.json的文件
                        findFile=True
                        json_path = file
                        filedir = open(Address+'\'+json_path,
                                 'r', encoding='utf-8')
                        while True:  #对单个文件逐行读取
                            line = filedir.readline()
                            if line :
                                if line.strip() == '':  # 如果读到的是空行
                                    continue  # 跳过该行
                                jsondata=json.loads(line)
                                if not jsondata["type"] in ['PushEvent', 'IssueCommentEvent', 'IssuesEvent', 'PullRequestEvent']: #筛选事件
                                    continue # 跳过无关事件
                                self.addEvent(jsondata)# 统计事件数量
                            else:
                                break
                        filedir.close()
            self.saveToFile()  # 循环读取结束后保存到文件
            return  findFile
    
    问题求解
    def addEvent(self,jsondata):#事件统计
            #emptyevent = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,'PullRequestEvent': 0}
            if not jsondata["actor"]["login"] in self.__User.keys():
                self.__User[jsondata["actor"]["login"]] = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
                          'PullRequestEvent': 0}
            if not jsondata["repo"]["name"] in self.__Repo.keys():
                self.__Repo[jsondata["repo"]["name"]] = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
                          'PullRequestEvent': 0}
            if not jsondata["actor"]["login"] in self.__UserAndRepo.keys():
                self.__UserAndRepo[jsondata["actor"]["login"]] = {}
                self.__UserAndRepo[jsondata["actor"]["login"]][jsondata["repo"]["name"]] ={'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
                          'PullRequestEvent': 0}
            elif not jsondata["repo"]["name"] in self.__UserAndRepo[jsondata["actor"]["login"]].keys():
                self.__UserAndRepo[jsondata["actor"]["login"]][jsondata["repo"]["name"]] = {'PushEvent': 0, 'IssueCommentEvent': 0, 'IssuesEvent': 0,
                          'PullRequestEvent': 0}
            self.__User[jsondata["actor"]["login"]][jsondata['type']] += 1
            self.__Repo[jsondata["repo"]["name"]][jsondata['type']] += 1
            self.__UserAndRepo[jsondata["actor"]["login"]][jsondata["repo"]["name"]][jsondata['type']] += 1
    
    结果输出
    def dataResult(self):
            #根据参数执行
            if self.parser.parse_args().init:
                self.data = DataProcessing( True,self.parser.parse_args().init)
                return 0
            else:
                self.data = DataProcessing(False)
                if self.parser.parse_args().event:
                    if self.parser.parse_args().user:
                        if self.parser.parse_args().repo:
                            result = self.data.getEventsByUsersAndRepos(
                                self.parser.parse_args().user, self.parser.parse_args().repo,
                                self.parser.parse_args().event)
                        else:
                            result = self.data.getEventsByUsers(
                                self.parser.parse_args().user, self.parser.parse_args().event)
                    elif self.parser.parse_args().repo:
                        result = self.data.getEventsByRepos(
                            self.parser.parse_args().repo, self.parser.parse_args().event)
                    else:
                        raise RuntimeError('error: argument -u or -r is required')
                else:
                    raise RuntimeError('error: argument -e is required')
            return result
    

    单元测试

    1.本地测试截图

    样例

    自主实现

    Github测试

    2.单元测试覆盖率优化和性能测试

    代码规范

    codestyle.md

    总结

    • 不会的东西太多了,往后还需努力
    • 学习了python,以及关于json文件的解析
    • 学习了基本的git指令
    • 网上资料很多,以后还得学会甄别信息
    • 需要对时间进行规划
  • 相关阅读:
    团队第五次作业评分 项目冲刺
    团队第四次作业评分 系统设计和数据库设计
    随笔
    爬虫
    javascript简单分页
    cookie的存储与取值
    redis的五种数据类型
    什么是反射
    小王同学的随笔
    something just like this---About Me
  • 原文地址:https://www.cnblogs.com/laozheng1/p/13681683.html
Copyright © 2020-2023  润新知