|
我也来说说自己的想法:
2个观点我更倾向于反方的;
我的理由:
不了解程序是怎么回事,不至于不能做测试,但要做个优秀的测试人才是不可能的。
举个C的例子,C编程的时候,当处理字符串时你是用strcpy呢,还是csrcpy_s,是用strcat呢,还是strcat_s呢?这类问题对于有经验的开发来说很浅显,但对从未亲手写过代码,了解过编程是怎么回事的人可能有点难吧。我刚写代码的时候也对这2者的区别不以为然,从来就不把VS的WARNING当回事。直到后来才发现,原来这函数功能虽然一样,但其中1个明显有安全隐患。
这里有个安全隐患叫做内存溢出(问题越谈越深了,不知道不懂程序怎么回事的人能不能了解),strcpy,strcat之类的函数由于未对目的字符串参数的长度校验,产生了这样1个安全隐患。这里有的人又会说,溢出就溢出吧,和安全有啥关系?
那么我们再来了解下什么叫内存溢出(这些知识如果不了解,要怎么对这类问题有测试意识呢,没有意识就更别提发现这类问题了),简单的说就是利用计算机某种执行程序的机制和程序漏洞(strcpy,strcat这类存在安全隐患的函数)达到攻击的目的。
好了,我是不是又该再介绍下计算机怎么执行程序的?这个问题就大了,我也只了解皮毛中的皮毛,我就说下和溢出有关的(也是前不久查的资料哈哈,本人非常热爱学习滴),堆栈,内存的概念在编程里很重要的,程序调用1个函数的的物理过程,就是先把函数的参数压入栈底(先进后出的机制),然后,嘿嘿这里可重要了,将返回地址压入栈中(返回地址就是当被掉函数执行完后,计算机要知道下1个执行语句的地址,CPU顺序执行代码的嘛),再然后,被调函数的变量空间分配之类7788的事情,再然后寄存器跳转到函数内部,再然后,有个EBP的寄存器的值压入栈中(保存栈底地址,以便函数退出后恢复到原来位置,个人这么理解不知道对不对),后面就8谈了,谈不下去了,说的越多错的越厉害哈哈哈,怕丢人。。。
好了,想想如果栈中的返回地址被覆盖掉会怎么样?如果是乱七八糟的东东还好,程序顶多死给你看,如果是段恶意代码呢,如果是段获得ROOT权限的代码呢?那你隐私不全没了嘛?一开始还想有没有人做这种无聊的事,居然还真有人做这种事情,这样也就出现了所谓的内存溢出攻击了~~~让你吃过1次苦头,看你以后还敢不敢用strcpy,strcat了。。哈哈
说了那么多,无非想证明1点,对程序不了解,怎么测试?当然学过编程的人就一定牛了?也未必,要看他学的怎么样了?不过编程好的人,能发现其他人发现不了的问题,且多是严重或致命缺陷的。。。
很多人看不起黑盒的,总觉得白盒高档点,本人有点不同的看法,其实都是测试,同样需要扎实的编程基础,良好的逻辑思维能力,我到感觉看的见代码的人在检查上述安全隐患时,还比黑盒测试人员容易呢,毕竟他们看的见嘛。。。你说谁更高档,谁又低挡了呢?如果黑盒测试人员能把白盒测试问题给发现了,那才叫牛B呢。。那八成是个资黑了(资黑可没源代码看的哦~~)。。哈哈。。
好了,综上所述,编程是为了了解程序,不要为了代码而代码,了解程序,编程,写代码是个非常好的途径(本人就在不断努力中,哈哈),做测试的时候便更有底气。。。问题能测的更深入。。。 |
|