码迷,mamicode.com
首页 > 其他好文 > 详细

软件测试 - 实验四

时间:2016-04-15 23:04:51      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

一、找出函数中存在的问题。以下题目均在Lab04项目中完成。

1、 某站点通过用户输入的用户名和密码(在login.jsp登录页中输入)来判断出现什么样的界面,如果是管理员(即用户名为admin或administrator)跳转到管理员页面(welcome_admin.jsp),非管理用户跳转到普通用户界面(welcome.jsp)。游客访问站点是,无需输入用户名和密码,直接进入普通用户界面(welcome.jsp)。

要求:找出UserOperation.java文件中的getUserRole ()方法存在的问题,说明问题产生的原因,并修改它

说明:不要求编写Junit单元测试用例,可以自己设想测试数据,通过静态分析,配合动态运行调试找出问题所在。

相关代码:

UserOperation类:

 1 package com.fenglong.service;
 2 /**
 3  * 该类专门负责用户相关的各种操作
 4  * @author XXX
 5  * 更新时间:2016-4-1
 6  */
 7 public class UserOperation {
 8     /**
 9      * 根据页面传入的用户名判断是否为admin(这里假设用户名为admin即管理员用户),
10      * 若为admin用户则进入管理员界面,非admin用户进入普通用户界面
11      * @return 用户角色
12      */
13     public String getUserRole(String userName){
14         String userRole="guest";
15         if(userName.equals("admin") || userName.equals("administrator")){
16             userRole="admin";
17         }
18         
19         return userRole;
20     }
21     
22 }

user_role_validate.jsp页面

 1 <%@ page language="java" pageEncoding="gbk" import="java.sql.*" %>
 2 <jsp:useBean id="UserOpeBean" scope="page" class="com.fenglong.service.UserOperation"></jsp:useBean>
 3 <html>
 4     <body>
 5         <%
 6             String userName=request.getParameter("userName");
 7             String userPassword=request.getParameter("userPassword");
 8             String userRole=UserOpeBean.getUserRole(userName);
 9             if(userRole.equals("admin")){
10         %>
11                 <jsp:forward page="welcome_admin.jsp"/>
12         <%        
13             }else{
14         %>
15                 <jsp:forward page="welcome.jsp"/>
16         <%
17             }
18         %>
19 </body>
20 </html>

 

问题:不管是什么角色的用户,只要输入的用户名是admin或者adminstrator就可以进入管理页面

原因:只验证了用户输入的用户名,没有对密码进行验证

修改:

 1 public String getUserRole(String userName,String userPassword){
 2 
 3     String userRole="guest";
 4 
 5     if(userName.equals("admin") || userName.equals("administrator")){
 6         userRole="admin";
 7     }
 8     
 9     //假设管理员密码为123456,如果密码验证不通过将用户角色改为游客
10     if(!userPassword.equals("123456")){
11         userRole = "guest";
12     }        
13 
14     return userRole;
15 }

user_role_validate.jsp页面修改:

 1 <%@ page language="java" pageEncoding="gbk" import="java.sql.*" %>
 2 <jsp:useBean id="UserOpeBean" scope="page" class="com.fenglong.service.UserOperation"></jsp:useBean>
 3 <html>
 4     <body>
 5         <%
 6             String userName=request.getParameter("userName");
 7             String userPassword=request.getParameter("userPassword");
 8             String userRole=UserOpeBean.getUserRole(userName, userPassword);
 9             if(userRole.equals("admin")){
10         %>
11                 <jsp:forward page="welcome_admin.jsp"/>
12         <%        
13             }else{
14         %>
15                 <jsp:forward page="welcome.jsp"/>
16         <%
17             }
18         %>
19 </body>
20 </html>

 

2、 用户注册(register.jsp)时要输入年龄字段,用户输入的参数由UserOperation.java文件中的validateUserAge()方法,转换为数值型,判断年龄是否在18~26之间(包括18和26),如果年龄在此区间内,则返回true,跳转到login.jsp页,否则弹出提示框,提示“用户年龄输入不正确”。

要求:找出UserOperation.java文件中的validateUserAge()方法存在的问题,说明问题产生的原因,并修改它

说明:不要求编写Junit单元测试用例,可以自己设想测试数据,通过静态分析,配合动态运行调试找出问题所在。

相关代码:

 1 package com.fenglong.service;
 2 /**
 3  * 该类专门负责用户相关的各种操作
 4  * @author XXX
 5  * 更新时间:2016-4-1
 6  */
 7 public class UserOperation {
 8     
 9     /**
10      * 将用户注册时输入的年龄转换为数值型,
11      * 判断年龄是否在18~26之间(包括18和26),如果年龄在此区间内,则“验证通过”,跳转到validateuser.jsp页
12      * @return 验证通过返回true,否则返回false
13      */
14     public boolean validateUserAge(String userAge){
15         if(Integer.parseInt(userAge)<18 || Integer.parseInt(userAge)>26){
16             return true;
17         }
18         return false;
19     }
20 }

user_registe_validate.jsp页面

 1 <%@ page language="java" pageEncoding="gbk" import="java.sql.*" %>
 2 <jsp:useBean id="UserValidateBean" scope="page" class="com.fenglong.service.UserOperation">
</
jsp:useBean> 3 <html> 4 <body> 5 <% 6 String userName=request.getParameter("userName"); 7 String userAge=request.getParameter("userAge"); 8 String userPhone=request.getParameter("userPhoneArea")+"-"+
request.getParameter("userPhoneNum")+"-"+request.getParameter("userPhoneExteNum"); 9 10 if(UserValidateBean.validateUserAge(userAge)){ 11 out.println("<script>confirm(‘用户年龄输入不正确!‘)</script>"); 12 }else{ 13 %> 14 <jsp:forward page="welcome.jsp"/> 15 <% 16 } 17 %> 18 </body> 19 </html>

 

问题: 如果用户输入的年龄是字符串,如abc,程序会出错

原因:没有进行异常处理,或者没有对用户的输入进行限制

修改:

 1 public boolean validateUserAge(String userAge){
 2     int age;
 3     //捕捉异常,如果产生异常,将年龄赋值为0
 4     try {
 5         age = Integer.parseInt(userAge);
 6     } catch (Exception e) {
 7         age = 0;
 8     }
 9     if(age < 18 || age > 26){
10         return true;
11     }
12     return false;
13 }

 

二、利用黑盒测试中的等价类划分完成以下题目

3、某程序规定:"输入三个非0正整数 a 、 b 、 c 分别作为三边的边长构成三角形(暂不考虑特殊三角形的情况)。请根据给出的说明,用等价类划分法进行划分,并给每个等价类规定唯一的编号。

 待续.....

 

软件测试 - 实验四

标签:

原文地址:http://www.cnblogs.com/zwblog/p/5396748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!