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. 伍 ...
 
随机推荐
- EM_LGH   CF965D Single-use Stones 思维_推理
			
Code: #include<cstdio> #include<algorithm> using namespace std; const int maxn = 1000000 ...
 - easyUI在使用字符串拼接时样式不起作用,点击加号增加一行,点击减号删除一行效果。
			
拼接的按钮没有样式,需要使用 var str = $("<a href='javascript:void(0)' class='easyui-linkbutton' onclick=' ...
 - FaceBook SDK登录功能实现(Eclipse)
			
由于公司游戏要进行海外推广,所以要我们接入FBSDK 实现登录,分享,投放,所以写这篇文章,也算是个工作总结.1.资料 (1).FB SDK github源码地址为 (2): [FB SDK中文接入文 ...
 - 使用sourceMap文件定位小程序错误信息
			
sourceMap是什么 在前端开发过程中代码难免会有错误,即便是再小心,也有可能出现 Cannot read property 'xxx' of null 这样的低级失误,debug自然是家常便饭. ...
 - 父类指针指向子类内存,为什么当父类的成员函数不加virtual时,访问的还是父类的成员函数,而不是子类同名的成员函数
			
我认为是这样,类的成员函数都在代码区,不同的类的成员函数在代码区有自己的类名称空间限制,类的虚函数在虚函数表中,程序执行的时候,是先在虚函数表中找该成员函数,如果没有找到,就去该类在代码区的成员函数中 ...
 - vue懒加载实现
 - 简单实现双向数据绑定mvvm。
 - HDU 2155 Matrix
			
Matrix Time Limit: 3000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 215 ...
 - Spring 7大功能模块的作用
			
1. Spring 7大功能模块的作用 1) 核心容器(Spring core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系 ...
 - spring boot学习(转)
			
玩转Spring Boot 前言 首先在这里对Spring Boot做个简单的介绍,对Spring Boot也关注了挺久了,Spring Boot是由Pivotal团队提供的全新框架, ...