201671010435-王潇-软件工程结对项目
- 博客任务
任务1 | 要给出所点评作业的博客、github链接地址,点评内容和点评心得 |
任务2 | 需要给出结对项目源码在Github的仓库主页链接地址; |
任务3 | 博文作为结对项目实施过程的文字资料,请完整包含下面7个部分: |
- 作业互评
点评的博客地址 | https://www.cnblogs.com/jessiyx/p/10506954.html |
github链接地址 | https://github.com/jessiyx/jessiyx |
评论与心得 | 这位同学非常清楚的将实验的内容清楚的展现出来,并且该实现的功能基本上都实现了出来,思路清晰明了,结构清晰易懂,感觉是下足了功夫的,该同学的学习态度值得学习,但是就是柱状图的功能还没有完全的实现,总体非常不错,值得学习和借鉴。 |
- 实验目的与要求
项目 | 内容 |
软件工程 | 任课教师博客主页链接 |
作业要求 | 作业链接地址 |
课程学习目标 | 熟悉软件开发整体流程,提升自身能力 |
本次作业在哪个具体方面帮助我们实现目标 | 第一次体验一个完整的工程 |
- 需求分析
- 实验2要求的功能;
- 单词频数可视化柱状图要求是以下样式:
- 统计该文本行数及字符数;
- 各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
- 可处理任意用户导入的任意英文文本;
- 人机交互界面要求GUI界面(WEB页面、APP页面都可);
- 附加功能:统计文本中除冠词、代词、介词之外的高频词;
- 附加功能:统计前10个两个单词组成的词组频率。
- 软件设计(类图表示)
- 核心功能代码展示
- 统计每个功能运行的时间:
while (num != 0) {
switch (num) {
case 1:
long startTime1=System.currentTimeMillis();
Find rs = new Find();
rs.find(wordsCount);
long endTime1=System.currentTimeMillis();
double time1=(endTime1-startTime1)/1000;
//long time1=endTime1-startTime1;
System.out.println("功能1实现的运行的时间为:"+time1+"秒");
break;
case 2:
long startTime2=System.currentTimeMillis();
Valuesort vs = new Valuesort();
vs.valuesort(wordsCount);
long endTime2=System.currentTimeMillis();
long time2=endTime2-startTime2;
System.out.println("功能2实现的运行的时间为:"+time2+"毫秒");
break;
case 3:
//实现统计每一行的单词数量
long startTime3=System.currentTimeMillis();
SortWords sortword=new SortWords();
sortword.SortWords();
long endTime3=System.currentTimeMillis();
long time3=endTime3-startTime3;
System.out.println("功能3实现的运行的时间为:"+time3+"毫秒");
break;
case 4:
//实现统计文本文档的行数
long startTime4=System.currentTimeMillis();
//EnterCount ec=new EnterCount();
//ec.
EnterCount entercount=new EnterCount();
entercount.enterCount();
long endTime4=System.currentTimeMillis();
long time4=endTime4-startTime4;
System.out.println("功能4实现的运行的时间为:"+time4+"毫秒");
break;
}
System.out.println("再次选择想要了解的:");
num = in.nextInt();
if (num > 2) {
System.out.println("请输入正确问题序号");
}
}
}
- 统计文档的行数和字符数:
try{
if(file.exists()){
FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr);
int lineNum = 0;
while (lnr.readLine() != null){
lineNum++;
}
System.out.println("该文本文档的总行数为 : " + lineNum);
lnr.close();
}else{
System.out.println("File does not exists!");
}
}catch(IOException e){
e.printStackTrace();
}
while((line = reader.readLine()) != null)
{
if(line.equals(""))
{
paragraphCount++;
}
if(!(line.equals("")))
{
characterCount += line.length();
// \s+ is the space delimiter in java
String[] wordList = line.split("/s+");
countWord += wordList.length;
whitespaceCount += countWord -1;
// [!?.:]+ is the sentence delimiter in java
String[] sentenceList = line.split("[!?.:]+");
sentenceCount += sentenceList.length;
}
}
- 程序运行(功能界面截图)
人机交互界面首页.
细节功能.
页面设计.
实现的功能.
功能实现结果.
- 描述结对的过程,提供两人在讨论、细化和编程时的结对照片
1)结对编程
结对编程场景:两位学习伙伴坐在一起,面对着同一台显示器,使用着同一键盘,同一个鼠标,他们一起思考问题,一起分析问题,一起编写程序。
- PSP描述
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 30 | 60 |
· Esitimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 200 | 400 |
· Development | 开发 | 200 | 300 |
· Analysis | 需求分析(包括学习新技术) | 60 | 50 |
· Design Spec | 生成设计文档 | 20 | 15 |
· Design Review | 设计复审(和同事审核设计文档) | 15 | 15 |
· Coing Standard | 代码规范(为目前开发制定合适的规范) | 20 | 20 |
· Design | 具体设计 | 20 | 30 |
· Coding | 具体编码 | 200 | 300 |
· Code Review | 代码复审 | 7 | 9 |
· Test | 测试(自我测试,修改代码,提交修改) | 17 | 25 |
· Reporting | 报告 | 10 | 15 |
· Test Report | 测试报告 | 15 | 22 |
· Size Measurement | 计算工作量 | 2 | 1 |
· Postmortem&Process Improvement Plan | 事后总结,并提出过程改进计划 | 3 | 2 |
- 小结感受
感受和体会:
(1)两人合作真的可以大于每个人所付出的工作量和思考问题的能力,两人结对编程,不仅可以分配巨大的工作量,而且还可以将两个人人互看成需求人员,也就是用户,使得项目的需求分析能够更加的完整,需求更加详细。
(2)另外对于两人结对编程不仅使得每个人锻炼了思考问题的能力而且可以锻炼团队如何合作的能力。对于这次结对合作,我觉得我学会了如何进行小团队之间进行合作,以及汲取队员的优秀之处,弥补自己的不足。所以两人合作我觉得是可以起到1+1大于2的作用。
- github项目地址
github项目地址[https://github.com/LAUGHwangxiao/ExperimentFour]