201671010423马丽莎 《英文文本统计分析》结对项目报告
1.博文简要信息表:
||
|:--😐:--:
|项目|内容
|软件工程|任课教师博客主页链接
|作业的要求|作业链接地址
|课程学习目标|(1)体验软件项目开发中的两人合作,练习结对编程(Pair programming)
(2)掌握Github上增量发布软件的操作方法。
2.我的队友:
姚玉婷同学的园子 |
github链接地址 |
3.对结对方的实验二的项目成果进行评价
-
点评内容
- 首先,项目的src文件夹未提交到Github上, 代码规范、行文清晰流畅,还有注释,其次行文中涉及代码的也使用了博客园代码控件。但是软件的基本功能中要求的柱状图未实现,程序设计实现中写了你有哪些类,这些类分别负责什么功能,实现过程也画出了流程图, 但是缺少result.txt的运行截图,再接再厉。加油。
-
点评心得
- 自己对文件的上传不太了解,提交到Github上的项目没有包含src文件夹,功能也暂时未实现全,比如柱状图的实现。截图欠缺了result.txt的截图,代码部分还有待提高,努力。但是我的类只有一个,可以分几个类,分别实现对应功能,然后一个测试类或者主函数类。这样代码结构就比较清晰完美。程序是在控制台输出运行结果,希望在下次结对作业中,能够实现人机交互。加油!
4.结对项目源码在Github仓库主页地址:
|
|:--:
| Github仓库主页地址
5.结对项目实施过程
-
需求分析
- 实验2要求的功能;
- 单词频数用可视化柱状图
- 统计该文本行数及字符数;
- 各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
- 可处理任意用户导入的任意英文文本;
- 人机交互界面要求GUI界面(WEB页面、APP页面都可);
- 附加分功能:统计文本中除冠词、代词、介词之外的高频词;
- 附加分功能:统计前10个两个单词组成的词组频率。
-
软件设计:使用类图
-
核心功能代码展示:
- 上传数据及保存文件
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 检测是否为多媒体上传
if (!ServletFileUpload.isMultipartContent(request)) {
// 如果不是则停止
PrintWriter writer = response.getWriter();
writer.println("文件类型有误: 表单必须包含 enctype=multipart/form-data");
writer.flush();
return;
}
// 配置上传参数
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
factory.setSizeThreshold(MEMORY_THRESHOLD);
// 设置临时存储目录
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置最大文件上传值
upload.setFileSizeMax(MAX_FILE_SIZE);
// 设置最大请求值 (包含文件和表单数据)
upload.setSizeMax(MAX_REQUEST_SIZE);
String uploadPath = "D:\\Project\\workspace" + File.separator + UPLOAD_DIRECTORY;
// 如果目录不存在则创建
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
-
程序运行:程序运行时每个功能界面截图
-
人机交互界面要求GUI界面(WEB页面、APP页面都可);
-
单词频数用可视化柱状图
-
统计该文本行数;
-
统计该文本字符数;
-
统计结果输出;
-
各种统计功能均提供计时功能,显示程序统计所消耗时间(单位:ms);
-
可处理任意用户导入的任意英文文本;
-
结对的过程
- 非常感谢姚玉婷同学在本次合作中非常耐心、不遗余力的帮助我这个编程水平和他相差甚远的学渣,合作很愉快,对我来说合作的过程就是一个学习的过程,正所谓“三人行必有我师”。结对编程可以促进参与项目双方自身的提高,结对工作的时候,水平较低的一方会潜移默化地受水平略高的程序员影响,这种学习比起从网站上找教学视频和自己抱着各种参考书啃是不一样的,更容易理解并且接受,而且更容易上手。
-
6.展示PSP
任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
计划 | 10 | 8 |
估计这个任务需要多少时间,并规划大致工作步骤 | 15 | 18 |
开发 | 500 | 550 |
需求分析 (包括学习新技术) | 100 | 120 |
生成设计文档 | 10 | 15 |
设计复审 (和同事审核设计文档) | 10 | 12 |
代码规范 (为目前的开发制定合适的规范) | 20 | 25 |
具体设计 | 100 | 90 |
具体编码 | 300 | 330 |
代码复审 | 20 | 15 |
测试(自我测试,修改代码,提交修改) | 50 | 60 |
报告 | 15 | 15 |
测试报告 | 5 | 6 |
计算工作量 | 5 | 3 |
事后总结 ,并提出过程改进计划 | 6 | 4 |
7.小结
结对编程,在每一时刻都是一个程序员在编程,说效率如何高,也只是1+1>1,但是否大于2呢?答案是肯定的。首先,一个人的编程,平均很难实现1>80%×1的工作效力。但是在和同伴一起工作时,必须保持思维一直高度集中,所以平均都可以达到1>80%×1的个人效力,同时有了一遍代码评审,使得出错几率就降低,减少了bug的产生。也由于两个人的思想汇集,能创造了很多新编程算法或结构重用等。所以着眼于整个项目来看,这个实践确实大大提高了效率。本次结对编程,就很好的证明了1+1>2这一点。