zoukankan      html  css  js  c++  java
  • 软工实践寒假作业(2/2)

    这个作业属于哪个课程 2020春丨S班 (福州大学)
    这个作业要求在哪里 软工实践寒假作业(2/2)作业要求
    这个作业的目标 开发一个疫情统计程序
    作业正文 我的博客
    其他参考文献 CSDN和作业参考教材

    1.Github仓库地址

    主仓库地址

    NoobHui

    2.PSP表格

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

    3.解题思路

    刚看到题目时,大致将解题分为以下三个步骤。

    1.命令行处理

    首先要正确处理输入的命令,才能有后续。
    

    2.日志文件处理

    • 对如下日志文件进行检测,符合要求就提取。
    福建 新增 感染患者 23人
    福建 新增 疑似患者 2人
    浙江 感染患者 流入 福建 12人
    湖北 疑似患者 流入 福建 2人
    安徽 死亡 2人
    新疆 治愈 3人
    福建 疑似患者 确诊感染 2人
    新疆 排除 疑似患者 5人
    // 该文档并非真实数据,仅供测试
    

    3.输出

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

    4.设计实现过程

    设计总流程如下:
    图片
    其中又按思路分为三个步骤

    1.命令行解析

    图片

    2.读取日志文件

    图片

    3.输出

    图片

    5.代码说明

    (这里只展示贴代码)

    func函数是用来处理命令参数的对应情况的,log和date管理读取,province筛选,type和out输出。

    public static void func(HashMap<String, String[]> parseArgs,String[] args) throws ParseException {
            ArrayList<province> list = new ArrayList<>();//完整的省份列表
            ArrayList<province> list1 = new ArrayList<>();//经过-province筛选后的列表
            String temp = null;//用来存放-type后的语句段
            if(parseArgs.isEmpty()){
                return;
            }
            if (parseArgs.containsKey("-log") && parseArgs.get("-log").length == 1){...
            else{...
            if (parseArgs.containsKey("-province")){...
            else{...
            if (parseArgs.containsKey("-out") && parseArgs.get("-out").length == 1){...
            else{...
        }
    

    match函数将从文件中读取的行分为8种模式,正则匹配成功就执行对应的操作,最后再加上全国的数据,返回省份类数组。

    public static ArrayList<province> match(String[] allContent){
            ArrayList<province> list = new ArrayList<>();
            try{
                for(int i = 0; i<allContent.length; i++){
                    BufferedReader br = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(allContent[i].getBytes())));
                    String s;
                    while((s = br.readLine()) != null){
                        Pattern p1 = Pattern.compile("(.*) 新增 感染患者 (\d*)人");
                        Pattern p2 = Pattern.compile("(.*) 新增 疑似患者 (\d*)人");
                        Pattern p3 = Pattern.compile("(.*) 感染患者 流入 (.*) (\d*)人");
                        Pattern p4 = Pattern.compile("(.*) 疑似患者 流入 (.*) (\d*)人");
                        Pattern p5 = Pattern.compile("(.*) 死亡 (\d*)人");
                        Pattern p6 = Pattern.compile("(.*) 治愈 (\d*)人");
                        Pattern p7 = Pattern.compile("(.*) 疑似患者 确诊感染 (\d*)人");
                        Pattern p8 = Pattern.compile("(.*) 排除 疑似患者 (\d*)人");
                        Matcher m1 = p1.matcher(s);
                        Matcher m2 = p2.matcher(s);
                        Matcher m3 = p3.matcher(s);
                        Matcher m4 = p4.matcher(s);
                        Matcher m5 = p5.matcher(s);
                        Matcher m6 = p6.matcher(s);
                        Matcher m7 = p7.matcher(s);
                        Matcher m8 = p8.matcher(s);
                        ...
        }
    

    6.单元测试截图和描述

    单元测试一(输出指定日期的信息)

    图片
    图片

    单元测试二(输出指定日期省份的信息)

    图片
    图片

    单元测试三(输出指定日期省份的指定type信息)

    图片
    图片

    单元测试四(输出累计的type信息)

    图片
    图片

    单元测试七(输出指定日期省份的信息)

    图片
    图片

    因其余测试重复度较大,主要用于测试日期判断,故没有贴上。

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

    单元测试覆盖率
    图片
    图片

    性能测试
    图片

    8.代码规范

    详见仓库中的codestyle

    9.心路历程与收获

    事实证明,计划永远赶不上变化。当我按部就班照着计划执行时,深刻体会到能力的不足和惰性的危害,使得我的作业时间远远超出计划。

    好的方面是,这次作业让我有机会重温java,有了查缺补漏的机会,对java的认知更加深刻。

    了解与熟悉了git及github的简单使用方法,初步的认识了Java的单元测试与性能测试,这也是本次作业的最大收获。

    学习了《构建之法》后,我也意识到了做好规划的重要性,它能避免在编写程序时匆忙添加很多不必要的属性方法,减少了工作量,提高效率。

    10.技术路线图相关的5个仓库

  • 相关阅读:
    单元测试乱弹(一):悲剧的测试工具
    Android 4.2中sqlite操作问题(二):某些情况下显式启用事务能提高操作效率
    some code of debug mode
    asp .NET弹出窗口 汇总
    if (!IsPostBack)
    Asp.Net中清空所有textbox的几种方法
    ASP.NET验证控件详解
    正则表达式限制文本框只能输入数字
    颜色
    gridview 根据条件更改链接的可用和颜色
  • 原文地址:https://www.cnblogs.com/H9ui/p/12340146.html
Copyright © 2011-2022 走看看