软工网络16结对编程

Posted eshy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软工网络16结对编程相关的知识,希望对你有一定的参考价值。

1、码云项目地址

陈瑀博客地址

侯湘宁博客地址

码云地址


2、PSP表格

PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间
Planning 计划 30 35
· Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 40 50
Development 开发 350 430
· Analysis 需求分析 (包括学习新技术) 150 180
· Design Spec 生成设计文档 30 30
· Design Review 设计复审 40 50
· Coding Standard 代码规范 25 30
· Design 具体设计 30 30
· Coding 具体编码 150 180
· Code Review 代码复审 20 20
· Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 75 90
· 测试报告 30 40
· 计算工作量 50 50
· 并提出过程改进计划 25 25

3、解题思路概述

1、编程语言的选择:java、html和css(用于做基于web的GUI页面)

2、开发工具以及环境:Eclipse

3、解题思路

本次实验需要新添加两个功能:能统计文件夹中指定长度的词组的词频、能输出用户指定的前n多的单词与其数量。
第一个功能需要先输入指定的长度n,再利用循环从map中判断value的长度是否与n相符,若相符则输出value和key。
第二个功能较为简单,只需要做简单的for循环,从map中取出前n多的value和key就能实现。


4、设计实现过程

1、相关类和函数的设计

定义了一个charCount类,在之前定义的三个方法的基础上,sortMap方法(实现单词排序),wordCount方法(实现词频统计),Output方法(实现写文本文件处理),增加了两个方法。本次的结对编程项目增加了两个功能,也就是sortMap1方法(能输出用户指定的前n多的单词),还有lenWordCount方法(能统计文件夹中指定长度的词组的词频)。而且本次的项目中,我们改进了之前不能进行大小写区分的问题,在之后的单元测试会有详细的说明!


5、代码说明(代码片段)

在这边我们就说明一下新功能的代码(之前的代码就不再说明了)

1、sortMap1方法

能输出用户指定的前k多的单词与其数量:
    public static void sortMap1(Map<String,Integer> oldmap,int k){
        ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                if (o1.getValue() == o2.getValue()) {
                    return o1.getKey().compareTo(o2.getKey());//词频相同时,按字典排列
                }
                return o2.getValue() - o1.getValue();  //降序排列
            }
        });
        if(list.size()>=k){//单词数大于或等于k的时候,输出频数前k个
            for(int i = 0; i<k; i++){
                System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());
            }
        }else {
            for(int i = 0; i<list.size(); i++){//单词数小于k的时候,输出全部
                System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());//键值对一一对应
            }
        }

    }

2、lenWordCount方法

能统计文件夹中指定长度的词组的词频:
    public static void lenWordCount(Map<String,Integer> oldmap,int n) {
        ArrayList<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(oldmap.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                if (o1.getValue() == o2.getValue()) {
                    return o1.getKey().compareTo(o2.getKey());//词频相同时,按字典排列
                }
                return o2.getValue() - o1.getValue();  //降序排列
            }
        });
        for(int i = 0;i < list.size();i++) {
            if(list.get(i).getKey().length()==n) {
                System.out.println(list.get(i).getKey()+ ": " +list.get(i).getValue());
            }
        }
    }
 }

6、单元测试

测试用例(部分)

  • 该部分已在侯湘宁的博客中展示。

7、结对编程感受

  • 本次结对编程我选择改进的是我的搭档的代码。我们并没有对同一模块进行编程,而是选择了分工合作,我负责新功能的添加以及对上次功能的改进,比如我的搭档上次没有实现不区分大小写的功能,我经过对代码的检查和反复修改测试最终解决了这个问题。我的搭档负责前端的设计与最后的整合。

  • 总的来说,相比较单人编程,结对编程可以说是事半功倍,因为不需要一个人同时负责前端的设计和功能的实现,大大增加了编程效率。
    技术分享图片




以上是关于软工网络16结对编程的主要内容,如果未能解决你的问题,请参考以下文章

软工网络15结对编程练习

软工网络15结对编程练习

软工网络15结对编程练习 201521123056 吴剑通

软工网络15个人阅读作业2

软工网络15结对编程练习(201521123007谭燕)

软工结对编程代码审查