博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[改善Java代码]边界,边界,还是边界
阅读量:6466 次
发布时间:2019-06-23

本文共 1227 字,大约阅读时间需要 4 分钟。

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

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的简单使用者),而对于高手,这些校验基本上就是摆设,通过对数据进行拦截分析,再写个模拟器进行发送,一切的前段校验就都变成了浮云!!

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

 

转载于:https://www.cnblogs.com/DreamDrive/p/5424950.html

你可能感兴趣的文章
ERDAS软件应用(四)遥感影像数据增强
查看>>
修改OBS为仅直播音频
查看>>
完整版:《开源框架实战宝典电子书V1.0.0》内测版下载地址!
查看>>
OCA读书笔记(3) - 使用DBCA创建Oracle数据库
查看>>
CKEditor的使用-编辑文本
查看>>
HDU------checksum
查看>>
puppet来管理文件和软件包
查看>>
Python基础进阶之路(一)之运算符和输入输出
查看>>
阻塞非阻塞异步同步 io的关系
查看>>
ClickStat业务
查看>>
DMA32映射问题
查看>>
POJ 1269 Intersecting Lines(判断两直线位置关系)
查看>>
MSSQL数据库跨表和跨数据库查询方法简(转)
查看>>
spring3.0.7中各个jar包的作用总结
查看>>
Windows 10 /win10 上使用GIT慢的问题,或者命令行反应慢的问题
查看>>
梯度下降(Gradient descent)
查看>>
Windows平台分布式架构实践 - 负载均衡
查看>>
Android快速开发常用知识点系列目录
查看>>
EJB2的配置
查看>>
最容易理解的对卷积(convolution)的解释
查看>>