软件工程实践2020第二次作业

软件工程实践2020第二次作业

这个作业属于哪个课程 2020春福大软工实践W班
这个作业要求在哪里 寒假作业(2/2)
这个作业的目标 考察Git、GitHub使用,代码规范意识,一定的程序设计能力(基于命令行),PSP,以及单元测试和性能分析改进
作业正文 软件工程实践2020第二次作业
参考文献 作业链接中提供的各类教程等

1:Github仓库地址

在文章开头给出Github仓库地址

https://github.com/HNT345/InfectStatistic-main

点击进入

2:效能分析及个人软件开发流程(PSP)

阅读《构建之法》第一章至第三章的内容,并在下方作业里体现出阅读后的成果;特别是第2章中的效能分析及个人软件开发流程(PSP);之后给出此次作业的PSP表格

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

需要解释的是,因为程序功能没有完成,所以自我测试、修改代码上时间比预期要短,完全是水平差导致的,不是高效

3:解题思路描述

即刚开始拿到题目后,如何思考,如何找资料的过程

要求是输入命令:
$ java InfectStatistic list -date 2020-01-22 -log D:/log/ -out D:/output.txt
会读取D:/log/下的所有日志,然后处理日志和命令,在D盘下生成ouput.txt文件列出2020-01-22全国和所有省的情况(全国总是排第一个,别的省按拼音先后排序)

全国 感染患者22人 疑似患者25人 治愈10人 死亡2人
福建 感染患者2人 疑似患者5人 治愈0人 死亡0人
浙江 感染患者3人 疑似患者5人 治愈2人 死亡1人
// 该文档并非真实数据,仅供测试使用

可以分为这样几个步骤:

  • 1.读入命令并进行合法判断:对命令是否合法输入进行判断,若错误则返回错误提示,若正确则继续
  • 2.对命令进行解析:得到指定操作、文件路径、文件名、要求的日期等等
  • 3.根据解析得到的信息打开文件并进行操作
  • 4.输出所需信息
    软件工程实践2020第二次作业_第1张图片

关于资料的查找,Github的部分我阅读了作业提供的教程,此外自己也上网找了一些解决我遇到的问题的办法;在实际开始写代码这方面,我对于JAVA语言的掌握很差,但最终还是决定用推荐的JAVA语言来写,自己编写的时候还是比较吃力,途中找了很多关于具体需求实现的资料
人菜,没办法(泣)

4:设计实现过程

设计包括代码如何组织,关键函数的流程图

因为水平太差,只考虑了仅仅携带-log和-out的情况。

根据我所想的步骤,我设计了以下几个类:
1.Province类,用于存储各个省份(包括全国)的名称和各类人数
2.Command类,用于对命令进行合法判断和各种解析
3.OpenReadFile类,用于打开文件并进行操作
4.WriteNewFile类,用于输出新的文件
接下来对这四个类进行说明:

1.Province类

    String name;//省份名称
    int ip;//患病人数
    int sp;//疑似患病人数
    int cure;//治愈人数
    int dead;//死亡人数

    public Province(String name){...}

    //各类返回
    public int Get_ip(){return ip;}
    ...

2.Command类

    boolean hasLog;//是否写入-log
    String LogPath;//-log携带的参数

    boolean hasOut;//是否写入-out
    String OutPath;//-out携带的参数

    boolean hasDate;//是否写入日期
    String DateName;//-date携带的参数
    
    public Command(){...}

    public Set_Command(String[] Command){...}//关键函数,稍后解释

    public boolean isLegalDate(String DateName){...}//用于判断日期是否合法的函数

    //各类返回
    public boolean Get_hasLog(){return hasLog;}
    public String Get_LogPath(){return LogPath;}
    ...

其中,public Set_Command(String[] Command)函数用于解析命令并且包含各种判断:
软件工程实践2020第二次作业_第2张图片

OpenReadFile类

    String path;
    //String date;
    String OutProvince;//流出省份
    String InProvince;//流入省份
    int num;
    String[] filelist=
    {
        "(\\W+) 新增 感染患者 (\\d+)人",
        "(\\W+) 新增 疑似患者 (\\d+)人",
        "(\\W+) 感染患者 流入 (\\W+) (\\d+)人",
        "(\\W+) 疑似患者 流入 (\\W+) (\\d+)人",
        "(\\W+) 死亡 (\\d+)人",
        "(\\W+) 治愈 (\\d+)人",
        "(\\W+) 疑似患者 确诊感染 (\\d+)人",
        "(\\W+) 排除 疑似患者 (\\d+)人"
    };

    public OpenReadFile(String path){...}

    public void ReadFile(){...}

WriteNewFile类

    // Province[] ProvinceList;
    // String[] ProvinceName;
    // String[] TypeName;
    File newfile;

    public WriteNewFile(String OutPath){...}

    public void Write(){...}

5:代码说明

展示出项目关键代码,并解释思路

贫瘠的代码中只有一个函数可以展示,就是上方提到的public Set_Command(String[] Command),编写的思路主要是按照命令输入的顺序来的。
$ java InfectStatistic list -date 2020-01-22 -log D:/log/ -out D:/output.txt
先判断list是否存在以辨别是否是合法命令,之后分析命令,再判断必须携带的命令是否携带、路径是否正确、日期是否正确等。
具体代码如下:

    public void Set_Command(String[] Command)
    {
        int i=1;
        int len=Command.length;

        if(!Command[0].equals("list"))//判断1:是否是合法命令
        {
            System.out.println("命令非法");
            System.exit(1);
        }

        for(i=1;i

6:单元测试截图和描述

展示单元测试的截图并进行描述

因为没有完成程序所以没有进行对应的单元测试orz

7:单元测试覆盖率优化和性能测试

展示性能优化截图并进行描述

因为没有完成程序所以覆盖率很低,也没有进行优化,没啥好看的
覆盖率:
软件工程实践2020第二次作业_第3张图片

8:代码规范

给出代码规范的链接,即仓库中的codestyle.md

点击进入我的代码规范

9:解决项目的心路历程与收获

结合在构建之法中学习到的相关内容,撰写解决项目的心路历程与收获

按照要求阅读了《构建之法》中的内容,最大的感触其实是,能够真心投入到某件事情当中去果然会是一件很幸福的事情吧,但是编程带给我的痛苦显然比较多orz在看到“相信不少学生都摩拳擦掌,希望马上组成一个团队,开始轰轰烈烈的软件工程工作”这句话的时候很郁闷,对于水平太差的人来说组队完全只有恐惧。希望自己在将来组队中不要因为编程能力过弱而拖队友的后腿吧……!

  • 心路历程:
    这次实践了解了如何使用Github Desktop、IDEA、VScode等等,这些都是我以前没有接触过的,对我来说自学这些真的很累,遇到很多问题,在网上搜到解决办法也看不明白、不知道怎么实施,说到底还是自己水平太差了。在Github方面,我按照提示,先熟悉了Github上的一些操作,star并fork了主仓库,然而遇到了不知为何无法clone的问题……尝试全部重装也没有解决,后来听助教的用命令行来clone了;对仓库内容进行了一些修改之后也进行了commit操作,没有啥问题。在代码规范方面,编写codestyle的markdown文档还算好受,因为上次作业用过markdown所以写起来没啥问题。PSP表格的话,估计时间其实估计得挺没把握的,因为从一开始我就没有把握能把作业完成……

  • 收获:
    与其说是收获不如说是反思吧。愈发明白了自己水平有多差的事实,也比较后悔这次作业没有尽早抽出时间开始做,是一个很大的教训。这次接触到新东西很多,虽然在一直都薄弱的编程能力方面依旧受苦,但是在学到新东西的时候还是有感受到成就感的。希望自己以后能加油!

10:技术相关的5个仓库

在github上寻找在第一次作业中技术路线图相关的5个仓库,star并fork,在博客中提供名称、链接、简介

  • iCSS
    https://github.com/HNT345/iCSS
    围绕CSS/web动画展开,拓宽解决问题的思路,更涉及一些容易忽视或是十分有趣的CSS细节。

  • vue2-elm
    https://github.com/HNT345/vue2-elm
    基于vue2+vuex构建一个具有45个页面的大型单页面应用,涉及注册、登录、商品展示、购物车、下单等等,是一个完整的流程。

  • vue-manage-system
    https://github.com/HNT345/vue-manage-system
    基于vue+element的后台管理系统解决方案,适用于绝大部分的后台管理系统开发。基于vue.js,使用vue-cli3脚手架,引用Element UI组件库,方便开发快速简洁好看的组件。

  • awesome-github-vue
    https://github.com/HNT345/awesome-github-vue
    awesome-github-vue是由OpenDigg整理并维护的Vue相关开源项目库集合,会定期同步OpenDigg上的项目到这里。

  • awesome-javascript-cn
    https://github.com/HNT345/awesome-javascript-cn
    awesome-javascript是sorrycc发起维护的JS资源列表,内容包括:包管理器、加载器、测试框架、运行器、QA、MVC框架和库、模板引擎、数据可视化、时间轴、编辑器等等。


你可能感兴趣的:(软件工程实践2020第二次作业)