标签:
一、找出函数中存在的问题。以下题目均在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