合作者: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结对编程的更多相关文章

  1. 结对编程--基于android平台的黄金点游戏

    游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...

  2. 结对编程-地铁续(有种上个学期OO的既视感)

    我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...

  3. 结对编程项目——四则运算vs版

    结对编程项目--四则运算vs版 1)小伙伴信息:        学号:130201238 赵莹        博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...

  4. 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结

    1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...

  5. 结对编程—黄金点游戏WinForm单机版

    本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...

  6. Week4 结对编程

    1.照片 1.1  结对编程参与者:李文涛.黎柏文 1.2  展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...

  7. 结对编程——关于Fault、Error、Failure程序设计

    一.问题描述:         构造程序,分别是:         •不能触发Fault         •触发Fault,但是不能触发Error         •触发Error,但是不能产生Fai ...

  8. GUI、模块化与结对编程(homework-03)

    摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...

  9. BJDP结对编程活动

    7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1.      金锐分享单元测试的Mocking技术,20 mins 2.      伍 ...

随机推荐

  1. 云上建站快速入门:博客、论坛、CMS、电子商务网站统统搞定

    现在制作一个网站已经越来越容易了,只要知道清晰的流程之后都是可以很快的建好一个企业或者个人网站的!免费的建站程序很多,下面听哥给你亮出来,建站一般来说分主要有这四步:申请域名.申请虚拟主机.制作网页, ...

  2. 省选模板_STL

    目录: 1. multiset 2. reverse 1.multiset namespace STL{ int main(){ multiset<int>::iterator s; mu ...

  3. Iterator与Asyc/Await的实现

    https://wanago.io/2018/04/23/demystifying-generators-implementing-async-await/

  4. thinkphp queue

    composer create-project topthink/think composer require topthink/think-queue php think queue:work -- ...

  5. [USACO18JAN] MooTube (离线并查集)

    题目大意:给你一棵边权树,定义两点间距离为它们唯一路径上的最小路权,求与某点距离不大于K(k为已知)的点的数量 带权并查集维护集合内元素总数 路和问题 都按权值大到小排序,枚举问题, 建权值不小于K的 ...

  6. java实验程序基础中的问题总结 java图形化界面

    一,课程中的问题 1,知道程序实现的大体框架,但是不能具体到每一个细节,这需要平时的积累. 2,在不同文件夹中定义的类之间有没有联系,类与类之间可以通过接口相互联系. 3,如何在一个对话框中显示文本, ...

  7. 在Vue中使用了Swiper ,动态从后台获取数据的之后,swiper滑动失效??

    在Vue中使用了Swiper ,动态从后台获取数据的之后,swiper滑动失效?? 是因为swiper提前初始化了,那时候数据还没有完全出来.这里有两种解决办法 1. 使用vue提供的$nextTic ...

  8. Nutch2 WebPage 字段解释

    Nutch2 WebPage 字段解释 Nutch2.2.1 id

  9. 利用VisualVM监视远程JVM

    VisualVM介绍 VisualVM是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump.Thread Dump.内存对象实例情况.GC ...

  10. nyoj 1189 yougth和他的朋友们 (DP)

    题目:pid=1189" target="_blank">nyoj 1189 yougth和他的朋友们 这题目是14年北京赛区的原题.讲题的时候说有三种解法,我们是 ...