一、仓库地址:https://git.coding.net/Enther/Teamwork.git
二、预计PSP及实际PSP对比展示
SP2.1 |
Personal Software Process Stages |
Time : SeniorStudent(h) |
Time : SDE(h) |
Planning |
计划 |
5 |
6 |
Estimate |
估计这个任务需要多少时间,规划大致步骤 |
1 |
1 |
Development |
开发 |
200 |
240 |
Analysis |
需求分析 (包括学习新技术) |
98 |
130 |
Design Spec |
生成设计文档 |
0.5 |
1.5 |
Design Review |
设计复审 |
0 |
0 |
Coding Standard |
代码规范 |
1 |
1.5 |
Design |
具体设计 |
2 |
2.5 |
Coding |
具体编码 |
93 |
98 |
Code Review |
代码复审 |
2 |
5 |
Test |
测试 |
1.5 |
2 |
Reporting |
报告 |
4 |
6 |
|
测试报告 |
3 |
3.5 |
|
计算工作量 |
1 |
1.5 |
|
事后总结 并提出过程改进计划 |
1 |
1 |
三、看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节收获
(1)information hiding:看了这篇博客 https://blog.csdn.net/gongchuangsu/article/details/53895916
- 隐藏复杂度:这样你就不用再去应付它,除非你要特别关注的时候;
- 隐藏变化源:这样当变化发生时,其影响就能被限制在局部范围内。复杂度的根源包括复杂的数据类型、文件结构、布尔判断以及晦涩的算法等等
- 信息隐藏的价值:信息隐藏有着独特的启发力,它能够激发出有效的设计方案。信息隐藏同样有助于设计类的公开接口。在设计的所有层面上,都可以通过询问该隐藏些什么来促成好的设计决策 养成问“我该隐藏些什么?”的习惯,你会惊奇的发现,有很多棘手的设计难题都会在你面前化解
(2)Interface Design:运用接口编程,对出题模块和计算模块设计接口增强了程序的可扩展性,可维护性
(3)Loose Coupling:Loose Coupling即松耦合,耦合程度越高,模块与模块之间的联系性就更高,系统的灵活性就越低,报错率就更高。我们在设计过程中尽可能地让算式的产生和计算,优先级判断相互独立,但是我们目前使用的算法还可能出现性能方面的不稳定性(一般出现在加减乘除带括号运算的情况中),在程序设计中将出题模块、计算模块、运算符判断模块等均封装到不同的方法中,降低程序的耦合度
四、计算机模块接口的设计与实现过程
各个模块的主要功能:
将一些关于数据库的操作写到sql包中;jsp有三个,第一个是选择界面(选择一些简单的参数,例如整数或者分数,出题数据范围,算式运算符个数,式子个数等等),将这些参数传到第二个jsp中,在第二个jsp得到用户输入的参数,并且生成相应的算式题目,在第三个jsp中判断对错,在jsp中调用包中的类,直接使用.java中的分数整数类,在一些数据库操作中也是直接调用封装好的sql包中函数,来实现连接数据库,插入数据等操作
接口实现代码如下:
import java.util.HashMap; import java.util.Map; publicclass Main { publicstaticvoidmain(String[] args) { long st = System.nanoTime(); if(args.length < 1) { System.err.println("Please set the file name."); } IOController controller =newIOController(args[0]); WordCounter wc =newWordCounter(); String line; while((line = controller.readLine()) != null) { wc.countWord(line); } System.out.println(wc.countList.entrySet()); controller.writeFile(wc.countList); System.out.println((System.nanoTime()-st) / 1e9); } }
五、计算机模块接口部分的性能改进
六、计算机部分单元测试展示
代码覆盖率:
七、计算机部分异常处理说明
1.输出值异常
:
2.运算符异常
八、界面模块的详细设计过程
将一些关于数据库的操作写到sql包中;jsp有三个,第一个是选择界面(选择一些简单的参数,例如整数或者分数,出题数据范围,算式运算符个数,式子个数等等),将这些参数传到第二个jsp中,在第二个jsp得到用户输入的参数,并且生成相应的算式题目,在第三个jsp中判断对错,在jsp中调用包中的类,直接使用.java中的分数整数类,在一些数据库操作中也是直接调用封装好的sql包中函数,来实现连接数据库,插入数据等操作
系统结构图:
预计实现的界面:
九、界面模块与计算机模块对接
以下是部分js代码展示:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> < String path = request.getContextPath String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
<%@ page language="java" import="java.util.*" import ="java.sql.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@page import="entity.*"%> <%@page import="sql.*"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>判断答案</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <% request.setCharacterEncoding("utf-8"); Statement stmt=null; Connection con=null; try{ Class.forName("com.mysql.jdbc.Driver"); con=DriverManager.getConnection("jdbc:mysql://127.0.0.1/web_number","root","baohui"); stmt=con.createStatement(); //out.print("数据库连接成功"); //out.print("<p>"); } catch(Exception e) { out.print(e); } //Sql.lianjie(); String sql="select * from web"; ResultSet rs=stmt.executeQuery(sql); for(int i=0;i<10;i++) { //sql语句执行 int number=0; String shizi=null; String jieguo=null; if(rs.next()) { number=rs.getInt("number"); shizi=rs.getString("shizi"); jieguo=rs.getString("jieguo"); } //进行比较,判断对错 out.print(shizi+"= "); String name=request.getParameter("name"+i); out.print(name); String name1=jieguo; if(name.equals(name1)) { out.print(" "); out.print("<font color=greeen face=楷体>正确</font>"); } else { out.print(" "); out.print("<font color=red face=楷体>错误</font>"); } out.print("<p>"); } stmt.close(); con.close(); %> </body> </html>
十、描述结对过程并提供照片
描述结对过程: 对于此次结对项目,我们在互相进步在完成。由于时间之间不好协调,因此我们共同作业的部分不多,前后台我们没有很细致的分工。在一起作业的过程中,感觉不再是孤军奋战。在两个人思维碰撞中,共同努力完成此次作业
十 一、结对项目优缺点
结对的优点:
1. 程中遇到困难时双方可以互相鼓励,这要比一个人闷头苦想好的多
2. 相监督,避免了在做项目过程中有惰性
3. 替写代码,既减少了产生的bug,两个人又不会很累,效率有所提高
4. 彼此的团队协作和沟通交流的能力
结对的缺点:
1. 偶尔会出现分歧,会让效率下降
2. 时间问题,我们两个人都有各自的时间课程安排,彼此进度不一致,两个人可以一起做项目的时间不多
我(赵瑞雪)的优点:比较有耐心,曾过项目经验识,能出一些新颖的点子,合作过程中积极向上+乐观
我(赵瑞雪)的缺点:我的选修课比较多,时间分配上更多是需要对方来配合我的时间
王怡镔的优点:性格温和,做事踏实,善于合作,在写代码的过程中特别细心
王怡镔的缺点:Java语言基础不是特别好
最后总结:
首先,我要谢谢我的小伙伴,因为她带给我学习过程中相互讨论相互学习的感觉,使我们都能投入到学习当中去,用我们共同的力量去寻求更好的解决问题的方法。通过结对学习,使我们之间受益匪浅。 两个人合作还可以发现多方身上的优点,找出自己身上的不足,并能相互监督让彼此变得更好,还可以彼此分享好的学习经验,所以我们认为两个人合作的效率远远大于一个人。在交流与学习的过程中,既掌握了知识,又学到了他人的一些思想与方法,这是我觉得本次实验中学到的最重要的东西!通过这次结对编程的经历我对编程也有了更进一步的了解:
1. 每个人对编写代码的想法都是不同
2. 对同一个问题(即使很小的问题)从多个角度思考,能有不同的认识
4. 结对编程对程序的质量有明显的提升
5. 在编写程序中多个人的想法、思路对程序功能有不同的实现方法
通过这次编程,我觉得能够带来1+1>2的效果,之前一个人做的时候,遇到不懂得问题时,就会陷入迷茫。当两个人一起编程时,有不懂的还可以一起讨论,说出自己的意见,也为整个编程过程节约了时间,除此之外,两个人一起合作时就会产生更多更好的想法,可以更好的优化整个项目的设计,遇到问题时可以相互帮助解决问题,效率也比较高!
原文地址:https://www.cnblogs.com/mrxueren/p/8766719.html