边界,边界,还是边界

简介:
复制代码
 1 import java.util.Scanner;
 2 
 3 public class Client {
 4     //一个会员拥有产品的最大数量
 5     public final static int LIMIT = 2000;
 6     public static void main(String[] args) {
 7         //会员当前拥有产品数量
 8         int cur = 1000;
 9         Scanner input = new Scanner(System.in);
10         System.out.print("请输入需要预定的数量:");
11         while(input.hasNextInt()){
12             int order = input.nextInt();
13             //当前拥有的与准备订购的产品数量之
14             if(order>0 && order+cur<=LIMIT){
15                 System.out.println("你已经成功预定的"+order+"个产品!");
16             }else{
17                 System.out.println("超过限额,预订失败!");
18             
19             }
20         }
21     }
22 }
复制代码

模拟一下输入:

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

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

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

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

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

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

 


本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5424950.html,如需转载请自行联系原作者

相关文章
|
3天前
表格的边界
表格的边界。
17 0
|
3天前
|
存储 算法 前端开发
1637. 两点之间不包含任何点的最宽垂直区域
1637. 两点之间不包含任何点的最宽垂直区域
24 0
|
3天前
leetcode-1034:边界着色
leetcode-1034:边界着色
30 1
|
3天前
|
机器学习/深度学习 算法 C#
C# | 凸包算法之Jarvis,寻找一组点的边界/轮廓
这篇关于凸包算法的文章,本文使用C#和Jarvis算法来实现凸包算法。 首先消除两个最基本的问题: 什么是凸包呢? 凸包是一个包围一组点的凸多边形。凸多边形是指多边形中的每个内角都小于180度的多边形。 凸包算法有什么用呢? 凸包算法的作用是找到这个凸多边形,并且使用最少的点来绘制出它的轮廓。凸包算法在计算机图形学、计算几何和机器学习等领域中有着广泛的应用。
39 0
|
10月前
|
C++
C++ 计算一个区域的内切圆, 区域内的一个点
C++ 计算一个区域的内切圆, 区域内的一个点
72 0
|
11月前
|
Java Spring
你动了别人的代码边界
前段时间呢,需要和xx公司进行对接。由于手上活比较多没忙不过来,领导就先帮我把接口调试完成了,并写好了相关的demo。然后我根据demo把代码整合进业务系统,并重写了相关代码。后来领导看了我写的代码,发现和他写的的demo不太一样,然后就问我为什么要重写?在一番争论后,领导对我说了句:你到底懂不懂抽象啊,你动了别人的代码边界。
|
开发者
做游戏之前知道边界很重要
对于不少人来讲这会是一条很有价值的信息,当然前提是你看的到,并且看的明白。直到今天也会不时的有人来问,能不能做棋牌游戏,或者是自己想要做个棋牌游戏,甚至是有的人已经着手做了。如果你也有做棋牌类游戏的想法,并且有幸看了今天的这篇文章的话,那么你大概是能省下很多的时间和精力,或者说省下不少钱。
54 0
|
数据采集 监控 算法
调整限界上下文边界
调整限界上下文边界
调整限界上下文边界
LeetCode 1637. 两点之间不包含任何点的最宽垂直面积
给你 n 个二维平面上的点 points ,其中 points[i] = [xi, yi] ,请你返回两点之间内部不包含任何点的 最宽垂直面积 的宽度。
67 0