合作者: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. Dobble的学习视频地址

    http://www.tebaidu.com/file-f698fb45eb1b5c59571936118968d86c89194311.html

  2. .net基础总复习(2)

    第二天 文件操作常用类 File类   //操作文件的 //复制.剪切.创建.移除 //File.Create(@"C:\Users\BDSOFT\Desktop\new.txt" ...

  3. [luogu] P3745 [六省联考2017]期末考试 (贪心)

    P3745 [六省联考2017]期末考试 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布. 第 \(i\) 位同学希望在第 \(t_i ...

  4. 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] A】Paper Airplanes

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 统计每个人需要的sheet个数. 乘上k 然后除p就是需要的pack个数了 [代码] #include <bits/stdc+ ...

  5. [terry笔记]python内置函数

    总结一下内置函数,Build-in Function. 一.数学运算类 abs(x) 求绝对值 complex([real[, imag]]) 创建一个复数 divmod(a, b) 分别取商和余数注 ...

  6. ORDER BY排序子句

    10.ORDER BY排序子句   用于指定将查询结果排序的字段.     //查询emp表所有记录,结果按ename升序排列   select empno,ename   from emp   or ...

  7. Linux下MySql数据库常用操作

    1.显示数据库 show databases; 2.选择数据库 use 数据库名; 3.显示数据库中的表 show tables; 4.显示数据表的结构 describe 表名; 5.显示表中记录 S ...

  8. java判断string数组中是否包含某个元素

  9. HDU 4312 Contest 2

    题目要求两点间的最大值作为距离即: 即是切比雪夫距离.而切比雪夫距离与曼哈顿距离的转换却很巧妙. 把平面坐标所有点绕原点逆向旋转45度后,所得点的曼哈顿距离之和除以√2,即是切雪比夫距离.旋转点的公式 ...

  10. 微信企业号开发:微信用户信息和web网页的session的关系

         微信企业号的用户是须要验证的,因此能关注企业号的用户事实上就是已经通过验证的用户.但企业应用中打开一个网页,在这个网页中怎样依据微信用户的信息创建web应用中最长使用的session呢?微信 ...