一、仓库地址: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