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上面互相传播,局限很大,不太好清楚别人的开发进度和文档的改动情况,但是利用这个工具的话解决了开发中的很多难题,非常的实用。总而言之,这次的学习让我明白了很多实际开发要注意的事项,以前的开发态累了。wordcontent结对编程的更多相关文章
- 结对编程--基于android平台的黄金点游戏
		游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ... 
- 结对编程-地铁续(有种上个学期OO的既视感)
		我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ... 
- 结对编程项目——四则运算vs版
		结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ... 
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
		1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ... 
- 结对编程—黄金点游戏WinForm单机版
		本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ... 
- Week4 结对编程
		1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ... 
- 结对编程——关于Fault、Error、Failure程序设计
		一.问题描述: 构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error •触发Error,但是不能产生Fai ... 
- GUI、模块化与结对编程(homework-03)
		摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ... 
- BJDP结对编程活动
		7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1. 金锐分享单元测试的Mocking技术,20 mins 2. 伍 ... 
随机推荐
- Python多线程一学就会!
			免费Python课程:阿里云大学——开发者课堂 Python中使用线程有两种方式:函数或者用类来包装线程对象. 函数式:调用thread模块中的start_new_thread()函数来产生新线程.语 ... 
- jenkins 展示报告
			1.下载插件 HTML Publisher plugin 2.设置说明 3.展示css 下载插件 (1).Startup Trigger: 可实现在Jenkins节点(master/slave)启动时 ... 
- Django路由中的include
			include(module,namespace = None,app_name = None)[source] include(pattern_list) include((pattern_list ... 
- Extjs win
			//创建window var win = Ext.create("Ext.window.Window", { id: "myWin", title: " ... 
- BZOJ 1030 [JSOI2007]文本生成器 (Trie图+DP)
			题目大意:给你一堆字符串,一个串不合法的条件是这些字符串中任意一个是这个串的子串,求合法的串的数量 其实这道题比 [HNOI2008]GT考试 那道题好写一些,但道理是一样的 只不过这道题的答案可以转 ... 
- Python-基础-day5
			1.内置函数 2.文件操作 操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') 注:python中打开文件有两种方式,即:open ... 
- invalid application of `sizeof' to incomplete type `char[] '
			在写代码时,我想用extern来关联一个数组,然后利用sizeof计算数组的大小,代码如下: ... extern char a[]; #define b size=(sizeof(a)/sizeof ... 
- vue实现双向绑定原理
- 笔试中java的输入输出
			一,输入 import java.util.*; import java.io.*; public class Main { public static void main(String[] args ... 
- 学一下HDFS,很不错(大数据技术原理及应用)
			http://study.163.com/course/courseMain.htm?courseId=1002887002 里面的HDFS这一部分. 
