wordcontent结对编程

合作者:201631062625 201631062127
代码地址:https://gitee.com/yzpdegit/ts
本次作业链接:https://www.cnblogs.com/yang-01/p/9806459.html

1.结对的PSP表格

PSP2.1

PSP阶段

预估耗时

(分钟)

实际耗时

(分钟)

Planning

计划

60

55

· Estimate

· 估计这个任务需要多少时间

1200

900

Development

开发

110

134

· Analysis

· 需求分析 (包括学习新技术)

60

80

· Design Spec

· 生成设计文档

50

70

· Design Review

· 设计复审 (和同事审核设计文档)

60

100

· Coding Standard

· 代码规范 (为目前的开发制定合适的规范)

60

50

· Design

· 具体设计

100

130

· Coding

· 具体编码

90

120

· Code Review

· 代码复审

30

50

· Test

· 测试(自我测试,修改代码,提交修改)

60

50

Reporting

报告

40

60

· Test Report

· 测试报告

30

30

· Size Measurement

· 计算工作量

10

10

· Postmortem & Process Improvement Plan

· 事后总结, 并提出过程改进计划

25

25

 

合计

785

934

2.代码复审

(1)发现的问题:

    1.组合的时候发现需要改动的代码很大,有很多累赘的,不需要的或者有的完全是多余的,改起来非常的繁琐,有的方法组合起来有一定问题
    2.组合好以后测试的数据自己的可以在自己的这边适用,但是对方的测试数据在自己这边就不适用
    3.代码的风风格上还是有部分的差距,对方有的代码有点问题看不明白,需要一起讨论后才能解决

(2)分析:

      根据这些问题我觉得最主要的是团队合作的意识还是不怎么强烈,以前团队合作的时候是三个人以上或者更多,所以要讨论的次数很多,当两个人合作的时候发现有一点随意,另一方面,在一开始编程的时候讨论的代码规范还不够完善导致组合调试的时候或多或少会出现一些问题,还有就是功能的分工不是很明确,每个功能对应一个接口这方面做的不是太好,耦合度有点高

(3)解决办法:

       我觉得能够解决的最好办法就是首先要形成一个很好的编程规范并且统一起来,另外,一起开发的时候代码的耦合度一定要低,每个方法对应的功能一定要单一,不然的话会导致代码的逻辑性混乱,另外还要加强与团队成员的沟通交流

3.代码设计

(1)功能和结构


主类:Main 功能:实现对输入的命令的判断,将命令分解为字符串数组并传入与之对应的函数中
UI界面:UI 功能:实现高级功能,图形化界面,单独处理一个命令
工具类:tool 功能:提供接口给主类进一步判读字符串,并且将一些多次出现的方法封装起来
方法类:function 功能:执行命令,并且将得到的数据保存在该类中

(2)类的关系结构图

(3)流程图

4.代码说明

代码注释:

在这段代码中的主要功能是分辨高级和初级扩展功能的分割,同时对命令初步分割有没有指定存放和过滤文本

if(array.length>2)
        {
            if(tool.compare(array,"-e")&&tool.compare(array,"-o"))//都存在
            {
                file=new File(array[tool.getPosition(array,"-o")+1]);
                if(file.exists())
                {
                    file.delete();
                }
                tool.setCount(array,array[array.length-5]);
            }else if(tool.compare(array,"-e")||tool.compare(array,"-o"))//只存在一个
            {
                if(tool.compare(array,"-o"))
                {
                    file=new File(array[tool.getPosition(array,"-o")+1]);
                    if(file.exists())
                    {
                        file.delete();
                    }
                }
                else
                {
                    file=new File("result.txt");
                    if(file.exists())
                    {
                        file.delete();
                    }
                }
                tool.setCount(array,array[array.length-3]);

            }else//都不存在
            {
                file=new File("result.txt");
                if(file.exists())
                {
                    file.delete();
                }
                tool.setCount(array,array[array.length-1]);
            }
        }else
        {
            UI u=new UI();
            u.createAndShowGUI();
        }

    }

代码注释

这个方法的主要作用是处理递归,将所有要递归的文本文件取出来后挨个执行

public static void getPath(File file1,String[] array,function fun,String path,int count) throws IOException//是否解析子目录
    {
        File[] file=file1.listFiles();
        for(File f: file)
        {
            if(f.isDirectory())
            {
                getPath(f,array,fun,path,count);
            }
            else
            {
                if(Pattern.matches(path,f.getName()))
                {
                    ready(array, f.getAbsolutePath(), fun,count);
                    read(array, fun,f.getName());
                }
            }
        }
    }

代码注释

将 停词表所有的单词取出来再去执行命令过滤相同的单词

   public static void ready(String[] array,String path,function f,int count) throws IOException {
        count--;
        f.init();
        if(compare(array,"-e"))
        {
            String path1=array[getPosition(array,"-e")+1];
            InputStreamReader input1=new InputStreamReader(new FileInputStream(path1));
             BufferedReader br1=new BufferedReader(input1);
            List<String> list1=new ArrayList<>();
            while (br1.read() != -1) {
                String s = br1.readLine();
                if(s!=null)
                {
                    String[] s1 = s.split(",| ");
                    for (int j = 0; j < s1.length; j++)
                    {
                        if (!s1[j].equals(""))
                        {
                            list1.add(s1[j]);
                        }
                    }
                }
            }
            input1.close();
            for(;count>0;count--)
            {
                f.readCommand(array[count],path,list1);
            }
        }else
        {
            for(;count>0;count--)
            {
                f.readCommand(array[count],path,null);
            }
        }
    }

代码注释

执行-w命令将文本一行行读入到字符串,再将其按照单词的划分规则分成字符串数组,判断是否要和停词表比较,最后统计数目

public String commandW(InputStreamReader input,BufferedReader br,List<String> list1) throws IOException {
        List<String> list=new ArrayList<>();
        while(br.read()!=-1)
        {
            String s=br.readLine();
            if(s!=null) {
                String[] s1 = s.split(",| ");
                for (int i = 0; i < s1.length; i++) {
                    if (!s1[i].equals("")) {
                        list.add(s1[i]);
                        word++;
                    }
                }
            }
        }
        if(list1!=null) {
            String[] str=(String[])list.toArray(new String[list.size()]);
            String[] str1=(String[])list1.toArray(new String[list1.size()]);
            for(int i=0;i<str.length;i++)
            {
                for(int j=0;j<str1.length;j++)
                {
                    if(str[i].equalsIgnoreCase(str1[j]))
                    {
                        word--;
                        break;
                    }
                }
            }
        }
       return "单词数"+word;
    }

代码注释

执行-a命令,将所有数据从文本中读取出来,按照指定的条件进行统计

public void commandA(InputStreamReader input,BufferedReader br) throws IOException {
        int code1=0,zhushi=0,empty=0;
        while(br.read()!=-1)
        {
            int k=0,m=0;
            String string=br.readLine();
            if(string!=null) {
                String[] s1 = string.split("//");
                char s[] = s1[0].toCharArray();
                for (int i = 0; i < s.length; i++)
                {
                    if (s[i] > 32 && s[i] < 128)
                    {
                        k++;//读取到代码行的一个合法字符
                        m = i;//保存改合法字符位置
                    }
                }
                if (s.length == 0)
                {
                    if (s1.length == 1)
                        empty++;
                    else
                        zhushi++;
                }
                else
                    {
                    if (k > 1)
                        code1++;
                    if (k == 1 && s[m] > 32 && s[m] < 127)
                    {
                        if (s1.length == 1)
                            empty++;
                        else
                            zhushi++;
                    }
                    if (k == 0) empty++;
                }
            }
        }
        code=code1+"/"+empty+"/"+zhushi;
    }

初级功能:wc.exe -l -w -c 1.txt

扩展功能:wc.exe -c -w -l -a -s *.c -e 1.txt -o end.txt

高级功能:wc.exe -x

5.总结

    通过这次和队友一起合作完成了项目感触良多,虽然这个项目的工作量不大并且难度系数相对而言也比较简单,但是重要的并不是结果而是过程,我学到的并不是技术方面的能力,而是团队开发合作的能力,一个人的技术再强,给一个很大型的项目也不可能完成的,但是人多就会很容易完成,以前的团队开发不怎么注重编程规范,以及代码里类的名字,接口的设计等等,导致吃了很大的亏,以前的代码虽然代码完成但是和队友对接一旦出现问题就很麻烦,双方都看不懂别人的代码,想要改错难上加难,出了代码规范的约束还有就是团队开发工具git了,以前的团队项目都是在QQ上面互相传播,局限很大,不太好清楚别人的开发进度和文档的改动情况,但是利用这个工具的话解决了开发中的很多难题,非常的实用。总而言之,这次的学习让我明白了很多实际开发要注意的事项,以前的开发态累了。
posted @ 2018-10-17 19:24  yyaa123  阅读(306)  评论(0编辑  收藏  举报