任务一:
博文链接:https://www.cnblogs.com/yanglulu-yang/p/10556444.html
对博文的点评:
1.博文结构:她的博文结构主要是先根据要求给出了个人项目的需求分析,先是做到了目标明确,然后进行了各个功能的详细设计,每个步骤都很详细,也说明了每个步骤应用到的知识点,进行了说明,一目了然,结构很简单,博文设置的很整齐,样式很好看。刚好老师也评价了我的博文设计不太整齐,确实也是我应该学习的地方。
2.博文内容:她的博文内容主要详细的介绍了试验二各个功能的需求,进行一一的解释,包括文件读入功能的实现、单个单词我的个数查找、单词频数存入指定文件、柱状图的显示。还有重点代码的截取以及截取原因,后面psp的展示,最后对最终的试验以及对自己的总结。博文结构基本上是按照"任务内容"的各个环节进行展开的,比较紧凑,但是还是有些列没有展示的实现,包括一些在程序设计中可能会忽视的一些问题,还有一些报告的设计做到了不到位或者是实现。
3.在两个人共同探讨的过程中,其实发现了很多的问题,在psp设计中,就计划共完成需要的时间与实际共完成的时间,本身就存在很大的差异性,计划时间只是在她的计划时的设定内,并没有时间展开行动,也并没有考虑到一些客观的因素,其实在醒目在实际开发的过程中是遇到很多现实的问题,就比如刚开始的java环境的配置就会占据一定的时间,再加上一些自己本身对项目开发的能力,包括对java学习的知识基础,还有一些客观原因,这都是导致计划时间与实际开发时间存在差异的根本原因。
对源代码的点评:
github链接:https://github.com/yanglulu-yang/WordCount
1.软件结构:阅读完对方同学的代码,她的思想是主要设计了三个类,WordCount、WordEntrty和test1,其实她真正用到了两个类,Test1没用到,可能是由于粗心,导致了多余的类以及多余的代码。她在WountCount中包含了主方法,是整个程序的和核心,也是程序运行的入口,起到了人机交互的作用,也实现了方法的调。
2.代码规范:首先,从她的代码中可以看出,命名是没有做到太准确的规范,比较随意的命名,其实这对以后代码的复审以及修改都会造成很大的影响,对于其他程序员的浏览和阅读都会造成较大的困难。再就是类的结构,WordCount主要设涉及到了运行该项目的主流程,但其中也包括了一些方法、WordEntrty中主要实现了方法的封装,是不是将方法的使用全部封装在WordEntrty中,该类实现对方法的具体以及专门的封装,对各个功能的实现,专门为WordCount提供可调用的方法,为WordCount简介代码,结构清晰,使程序员一目了然,为以后代码的维护提供一定的方便性,当然也包括在Test1中的代码。所以自己也得注意自己书写代码的规范以及结构的设计和类的设计以及方法的封装,为别人的浏览提供了很大的方便性,通过阅读她的代码,想到了换位思考。
3.功能实现:阅读完对方同学的代码,虽然在代码结构的设计上有一些缺陷,但是基本上实现了老师所要求的基本功能,包括一些自己之前学习没涉及到的知识点,自己也学到了很多,是值得自己学习的。
4.人机交互:其实和对方同学的人机交互界面的实现是有相似性的,都是通过java控制台通过用户输入功能编号的形式来展示指定的功能的,自己也知道这对于真正的、团队项目以及软件项目的开发是绝对不现实的,不仅用户体验度低,而且仅适用于专门开发人员对于软件工程开发的一个过程,是绝对不适用于成品的。所以在接下来的学习中,我们将会结对编程实现人机界面,使用web前端技术,在一定程度上会大大提高用户体验度的。
任务二:采用两人合作方式,设计开发一个英文文本统计分析软件,使之具有题目指定功能:
她的github仓库源码链接:https://github.com/yanglulu-yang/WordCount
1.需求分析:
(1)读入Word.txt文本实现英文文本词汇的统计。
(2)指定单词的查找出现的频数用柱状图的形式统计,柱状图的形式必须和要求的形式一样。
(3)包括高频词汇的个数统计,将统计结果存放至result.txt中。
(4)统计该文本行数及字符数;
(5)各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
(6)可处理任意用户导入的任意英文文本;
(7)人机交互界面要求GUI界面(WEB页面、APP页面都可);
2.类图的设计
软件设计:
2.1 WordCount.java 类:对所有功能的方法的一个封装
2.2WordServlet.java :与web页面相联系的servlet类,是java内容与web交互的一个java封装好的类
2.3WordCount.jsp:一个前台页面,需要在网页中展示的页面
类图:
3.核心代码:
我们组主要通过前端web页面的实现,前台与后台的紧密联系与实现主要通过Servlet类来实现,应用请求与响应技术,包括session会话技术来主要实现,也使用了TomCat服务器,应用jsp页面,使用重定位技术实现页面的跳转,实现了主要的功能。
代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//编码格式的设置
PrintWriter out=response.getWriter();
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//获取前台页面的值
String FileName=request.getParameter("FileName");
String words=request.getParameter("word");
String wordnum=request.getParameter("wordnum");
String wordlines=request.getParameter("wordlines");
String result=request.getParameter("result");
String id=request.getParameter("id");
//创建WordCount对象
WordCount wordCount = new WordCount();
if(id.equals("0")){
//文件的上传
map=wordCount.Count(FileName);
out.print("<script>alert('上传成功!!');location.href='html/WordCount.jsp'</script>");
}else if(id.equals("1")){
long startTime=System.currentTimeMillis();
//指定单词的查找 TreeMap:map
str=wordCount.one(words, map);
//System.out.println(str);
Iterator<String> it1 = map.keySet().iterator();
//遍历
while(it1.hasNext()){
//键值对的形式存放
String key = (String) it1.next();
Integer value = map.get(key);
}
long endTime=System.currentTimeMillis();
float excTime=(float)((endTime-startTime)/1000)*1000;
//存放至session对话中
request.setAttribute("map", map);
//耗时
request.setAttribute("excTime",excTime);
request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
}else if(id.equals("2")){
long startTime=System.currentTimeMillis();
//高频词的统计 返回单词和个数 ArrayList:map1
int num=Integer.parseInt(wordnum);
map1=wordCount.two(map,num);
long endTime=System.currentTimeMillis();
float excTime=(float)((endTime-startTime)/1000)*1000;
request.setAttribute("map1", map1);
request.setAttribute("excTime",excTime);
//request.setAttribute("num", num);
request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
}else if(id.equals("3")){
//统计文本行数以及字符数
long startTime=System.currentTimeMillis();
List<String> lines=wordCount.statistics(FileName);
for (int i = 0; i < lines.size(); i++) {
System.out.println(lines.get(i));
}
long endTime=System.currentTimeMillis();
float excTime=(float)((endTime-startTime)/1000)*1000;
request.setAttribute("excTime",excTime);
request.setAttribute("list", lines);
//页面跳转
request.getRequestDispatcher("html/WordCount.jsp").forward(request, response);
}else if(id.equals("4")){
long startTime=System.currentTimeMillis();
//写入至result.txt中
wordCount.three(map);
long endTime=System.currentTimeMillis();
float excTime=(float)((endTime-startTime)/1000)*1000;
request.setAttribute("excTime",excTime);
out.print("<script>alert('存放成功');location.href='html/WordCount.jsp'</script>");
}
}
4.程序运行(截图):
4.1文件的上传:
4.2指定单词的查找:
4.3高频单词的查找
4.4文本行数以及字符数的统计
. 4.5文件的存放
4.6柱形图的显示
5.描述结对的过程,提供两人在讨论、细化和编程时的结对照片(非摆拍)
在项目开发的过程中,两人进行了很多次的讨论,包括最开始的环境配置,主要是TomCat的添加,其次后面的主要功能大多数的难题就是前台页面和后台页面的交互,参数的传递、全局变量和局部变量的设置,以及servlet向jsp页面传递数据和jsp向servlet中传递数据,以el表达式,jstl的使用、javascript的使用,在这些知识点方面都到很大的问题。但是,这次结对项目为自己也带了很大的帮助,不仅回顾了一些以前的知识点,也懂的了团队的力量,队友的一些想法和我的完全不同,让自己意识到原来问题也可以这样解决,打破了自己的思路,意识到散发思维的重要性。除此之外,对eclipse的一些环境为配置有了了解,我们这次主要用了standard.jar,jstl.jar等jar包,在jar包的支持下,完成了本次的项目。
6.PSP展示:
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) |
Planning | 计划 | 6 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 |
Development | 开发 | 200 |
Analysis | 需求分析 (包括学习新技术) | 3 |
Design Spec | 生成设计文档 | 5 |
Design Review | 设计复审 (和同学一起审核设计文档) | 5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 3 |
Design | 具体设计 | 14 |
Coding | 具体编码 | 180 |
Code Review | 代码复审 | 6 |
Test | 测试(自我测试,修改代码,提交修改) | 6 |
Reporting | 报告 | 10 |
Test Report | 测试报告 | 6 |
Size Measurement | 计算工作量 | 5 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 5 |
7. 小结感受:两人合作真的能够带来1+1>2的效果吗?通过这次结对合作,请谈谈你的感受和体会。
总结:通过这次合作,体会到了开发一个项目,团队合作的重要性,团队的合作情况会直接影响项目的质量,这对项目开发有很大的影响。尽管在合作的时候会遇到很多的分歧,但只要通过交流、沟通,理性对待,包括试验和测试最终选择一个合适的解决方法。团队合作还有另外一个好处就是对一个问题会有多种解决方法和多种思路,对解决负复杂问题是有很大的帮助的,在项目开发的过程中会节约大量的时间,多种方案可以选择最优的一个,提高项目的质量。
我的github源代码链接:https://github.com/runju/project4