实验目的
(1) 根据实际情况,综合应用各种软件测试技术
(2) 熟练掌握MyEclipse+Junit的Java编程和单元测试实验内容
一、 找出函数中存在的问题。以下题目均在Lab05项目中完成。
1、 请给MySQLConnBean.java中的类和每个方法都加上注释
2、 找出项目中存在的缺陷,并给出解决的方案(至少3个,不包含下面那个举例)。说明:这里所说的缺陷不一定都是错误,而是明显需要改进的地方。如:不可以无限输入密码,容易被暴力破解,存在安全隐患。解决方案:密码输入3次错误,关闭浏览器。最好再加上验证码。1、
1 package org.easybooks.bookstore.jdbc; 2 import java.sql.*; 3 /* 4 * 作者:张伟 5 * 时间:2016-4-22 6 * 内容:jdbd的数据库连接和出现的问题的修改 7 * */ 8 9 public class MySQLConnBean {10 private Statement stmt=null; //定义一个 statement对象,等会用来执行SQL语句用的11 private Connection conn=null; //定义一个变量:等会用来创建数据库连接12 private ResultSet rs=null; //定义结果集,等会用来存放查询结果13 public void openConn() throws Exception {14 /*15 * 加载mysql的驱动类16 * 数据库连接加载的账户和密码分别为root和12345617 * 连接数据库18 * */19 Class.forName("com.mysql.jdbc.Driver");20 String url="jdbc:mysql://localhost:3306/test";21 String user="root";22 String password="123456";23 conn=DriverManager.getConnection(url, user, password); 24 public ResultSet execQuery(String sql){25 /*26 * 1、需要传入一个 conn 连接做参数,然后用这个conn连接创建statement对象,27 调用该方法即可拿到一个statement对象来使用,并获得结果。28 * 2、如果出错,抛出异常,显示出错的时间点和出错信息29 * */30 rs=null;31 try{32 stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);33 rs=stmt.executeQuery(sql);34 }catch (SQLException e) {35 System.err.println("Data.executeQuery:"+e.getMessage());36 }37 38 return rs; //返回rs39 }40 41 public void closeStmt(){42 /*43 * 执行完所有操作后,调用closeStmt()方法来关闭数据库连接44 * 如果出错,抛出异常,显示出错的时间点和出错信息45 * */46 try{47 stmt.close();48 }catch(SQLException e){49 System.err.println("Data.executeQuery:"+e.getMessage());50 }51 }52 53 public void closeConn(){54 /*55 * 执行完所有操作后,调用closeConn()方法来关闭数据库连接56 * 如果出错,抛出异常,显示出错的时间点和出错信息57 * */58 try{59 conn.close();60 }catch(SQLException e){61 System.err.println("Data.executeQuery:"+e.getMessage());62 }63 }64 }
2、
缺陷1:openConn()方法,当不存在test数据库,或者用户名密码不正确时,将发生异常
解决方案:应对openConn()方法添加try…catch捕获错误,并对错误进行处理。缺陷2:即便为openConn()方法添加了try….catch,在validate.jsp页面依然会出错,原因是数据库未连接,那么ResultSet rs=MySqlBean.execQuery(strSql); 根本无法执行。
解决方案一:在validate.jsp中添加try…catch;解决方案二:将openConn()方法的返回值改为boolean型,连接成功返回true,否则返回false。在validate.jsp判断连接成功再执行后面的操作解决方案三:通过设置错误处理页面来处理方法有很多,大家可以思考更简便更有效的方法进行处理。缺陷3:密码未加密,存在安全隐患
解决方案:采用非加密算法对密码进行加密(如:MD5加密),再存入数据库。登录时采用同样的算法进行解密。缺陷4:不登录,一样也可以进入welcome.jsp页,访问网站内容
解决方案:对于只有登录用户才能访问的页,要判断session,或者用拦截器、过滤器详细做法参考http://blog.csdn.net/lidawei201/article/details/8513853缺陷5:用户登录容易被暴力破解
解决方案:设置验证码二、 请按要求对下面的Java代码进行测试。代码的功能是:用折半查找法在元素呈升序排列的数组中查找值为key的元素。
(1)要求采用基本路径法给出程序控制流图;
(2)算出环路复杂性(3)给出所有的独立路径,以及对应的测试用例和预期结果(1) 程序控制流图如下:
(2)有以下三种方法:
1、通过控制流图的边数和节点数计算。设E为控制流图的边数,N为控制流图的节点数,则定义环路复杂性为 V(G)= E – N + 2 ; V(G)=E-N+2=16-14+2 = 4 2、通过控制流图中判定节点数计算。若设P为控制流图中的判定节点数,则有V(G) = P + 1 V(G)=P+1=3+1=43将环路复杂性定义为控制流图中的区域数。该控制流图中有4个区域:R1、R2、R3、R4,因此其环路复杂性为4。(3)独立路径
PATH1:1-2-3-4-5-6-8-10-11-12-4-13-14
PATH2:1-2-3-4-5-6-8-9-12-4-13-14PATH3:1-2-3-4-5-6-7-12-4-13-14PATH4:1-2-3-4-13-14
用例编号 | 路径 | 测试用例 | 预期结果 |
1 | PATH1 | Arry[4]={2,4,6,8} key=2 | 0 |
2 | PATH2 | Arry[6]={2,3,6,8,13,15} key=15 | 5 |
3 | PATH3 | Arry[4]={1,2,3,4} key=2 | 1 |
4 | PATH4 | Arry[3]={1,2,3} key=4 | -1 |