建议24:边界,边界,还是边界

 import java.util.Scanner;

 public class Client {
//一个会员拥有产品的最大数量
public final static int LIMIT = 2000;
public static void main(String[] args) {
//会员当前拥有产品数量
int cur = 1000;
Scanner input = new Scanner(System.in);
System.out.print("请输入需要预定的数量:");
while(input.hasNextInt()){
int order = input.nextInt();
//当前拥有的与准备订购的产品数量之
if(order>0 && order+cur<=LIMIT){
System.out.println("你已经成功预定的"+order+"个产品!");
}else{
System.out.println("超过限额,预订失败!"); }
}
}
}

模拟一下输入:

请输入需要预定的数量:
800
你已经成功预定的800个产品!
2147483647
你已经成功预定的2147483647个产品!

这个数字远超了2000的限额,但是竟然预定成功了.这个2147483647是不是很眼熟?没错,这是int类型的最大值,因为这个值再加上1000的时候超出了int类型的范围,所以结果反而变成了负的。一句话归结其原因:数字越界使校验条件失效

所以在单元测试中,有一项测试叫做边界测试(也有叫做临界测试),如果一个方法接受的是int类型,那么以下三个值是必测的:0、正最大、负最小。如果这三个值都没问题,这个方法才是比较安全可靠的。

其中正最大和负最小是边界值,如果这三个值没有问题,方法才是安全可靠的.我们的例子就是因为缺少边界测试,导致生产系统产生了严重的偏差.

就算你再Web界面做出了严格严谨的校验,但其实也只能防普通用户(这里普通用户指不懂HTML、不懂HTTP、不懂Java的简单使用者),而对于高手,这些校验基本上就是摆设,通过对数据进行拦截分析,再写个模拟器进行发送,一切的前段校验就都变成了浮云!!

所以,必要的数据验证要放在服务端进行

最新文章

  1. Oracle常量
  2. Opengles 管线编程介绍
  3. Spring框架学习之第5节
  4. ubuntu无线上网静态ip配置以及配置静态IP 之后无法正常上网的解决方案
  5. B. Fixed Points
  6. [Linux]ubuntu安装ftp服务器
  7. wcf中 生成x5.09证书的工具
  8. git使用介绍
  9. Problem F: 多少个最大值?
  10. Robot Framework学习笔记(四)------Screenshot 库屏幕截图
  11. WEB消息推送-框架篇
  12. node多人聊天室搭建
  13. JavaApi
  14. MySQL视图小例子
  15. 【Python】UI自动化-1
  16. SpringCloudConfig与SpringCloudEureka 注册中心与配置中心高可用的意义
  17. pandas DataFrame 索引(iloc 与 loc 的区别)
  18. mysql/mariadb学习过程中出现的问题与解决
  19. 多线程在javaweb中的应用
  20. web普通项目映射为maven项目

热门文章

  1. DelphiXE Android自适应屏幕办法
  2. Spring入门(4)-注入Bean属性
  3. Serializable 序列化使用限制
  4. freemaker获取字符串长度
  5. Unity3D之空间转换学习笔记(三):3D数学
  6. 【Java】C/C++与Java的简单比较
  7. Volley使用指南第三回(来自developer.android)
  8. linux杂谈(十八):DNS服务器的配置(一)
  9. StructureMap 学习笔记(1)
  10. BOOL,int,float,指针变量与零值比较的if语句