程序员的反思:从软件测试角度看开发
上一篇 / 下一篇 2012-03-30 09:22:29 / 个人分类:杂谈
最近比较忙,而且情绪上有些浮动,但控制的非常好。这几天协会搞一个编程比赛,部分的题目是我出的,所以最后大家决定让我做测试人员,对协会的比赛进行评测。我虽然已不担任协会职务,却毅然接受了。51Testing软件测试网 aee$U j Y
Jsh,i:M'L(M+r5V\3C0 首先,我了解了测试相关的概念,阅读了《软件测试》、《软件测试的艺术》、《微软的软件测试之道》、《软件测试经验与教训》等,并结合自身的测试经历来做一些记录,希望抛砖引玉。
:Qoc#i!hU,A0(Y Z`)BF0 虽然协会测试用不上这些,既然让我做了,我就应当力求公正公平,准确有效。在做好这个工作的余下时间里,作了一些浅薄的思考,现在拿出来跟大家一起分享。
;j"z Bz$m8n051Testing软件测试网;X1HPx,|M.B_PL1D微软虽然有很多不足,制作的程序漏洞不少,但不可否认,在其快速开发的进程中,将测试放在比较重要的位置,也是其获得较多正面评价的原因之一:
m'wycF {0n(W0%],l.]/}8|(E0 微软的组织结构:51Testing软件测试网wvbR{(bo2KH|
u9o9z'\lt NZ+p~0微软的“大公司小团队”战略,小团队布局:
*DK U%p+cLW@ T0Y`d Q6y|0以下是读书心得,摘抄:51Testing软件测试网6O6l5S x!Q8x
软件测试或系统测试大约占用50%的项目时间和超过50%的总成本。
1K1m)Z f)P]X0测试是为发现错误而执行程序的过程。(人类的行为总是倾向于具有高度的目标性,确立一个正确的目标有利于实现这一目标,这里我们确立我们的目的是发现错误)51Testing软件测试网B8Z?|"H&z
软件测试的大多数问题都是心理学问题。
!}?CEZ&@.N7L&b*n0程序员应当避免测试自己的程序。
W A&iVP0一个测试用例必须包括两个部分:1、对程序的输入数据的描述2、对程序在上述输入数据下的正确输出结果的精确描述。51Testing软件测试网#W)~y)C]{Jq
黑盒测试主要将重点集中放在发现程序不按其规范正确运行的环境和条件。
8Gco)zDF x;U0白盒测试主要是对程序的逻辑结构进行检查,从中获取测试数据。51Testing软件测试网mg#H b)Y^U
检查程序是否“未做其应该做的”仅仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”。51Testing软件测试网.m)B1\ ^;_C5}
程序某部分存在更多错误的可能性,与该部分已发现错误的数量成正比。
,~0kd&KFf5?9k-o0至少编写足够的测试用例,使得每一种可能均被测试,每个入口点都至少被调用一次。51Testing软件测试网.m*n4K/w+rtu
经验证明,考虑了边界条件的测试用例与其他没有考虑边界条件的测试用例相比,具有更高的测试回报率。所谓边界条件,是指输入和输出等价类中那些恰好处于边界、或超过边界或在边界以下的状态。51Testing软件测试网4N}qUf-`m;r
错误猜测,是一种通过举出测试用例,找出程序漏洞的方法。51Testing软件测试网/l&GF8M8Vj"O;L#^
](RT0Fe#h9v:I @9H,L0 模块(单元)测试:是对程序中的单个子程序、子程序或过程进行测试的过程。
&p0V"p,]%`5E&[]051Testing软件测试网 QN#UiL:n系统测试:将系统或程序与其初始目标进行比较,包含两方面的含义1、系统测试并不局限于系统,如果产品是一个程序,那么系统测试就是一个视图说明程序作为一个整体是如何不满足其目标的额过程。2、根据定义,如果产品没有一组书面的、可度量的目标,系统测试也就无法进行。51Testing软件测试网6c/~ S/iT}%_'k
(ihMv:\V0 容量测试:使程序经受大容量数据的检验,其目的是为了证明程序不能处理目标文档中规定的数据容量。51Testing软件测试网WDS1^9o3Ieg\aX vO
Q4e"_%|tW0 强度测试:使程序承受高负载或强度的检验,所谓高强度是指在很短的时间间隔内达到的数据或操作的数量峰值。51Testing软件测试网8v#in,T%{+IPc0a
,?G9z9e'R{b0 易用测试:发现人为因素或易用性问题。(用户智力、背景、输入输出是否简介有效、错误诊断是否直接、语法风格问题、信息是否冗余不利于安全、确认信息是否需要)
u8XgL:{Z6_051Testing软件测试网'z^;~I0]5e安全性测试:是否达到安全目标。51Testing软件测试网Ea)wWb]D(t
@jj|#ANE6X0 可恢复性测试:故意将程序错误的置入某个系统中,判断系统是否可以从中恢复。
3dT7Z:D,Ch:jT051Testing软件测试网,g ` |*X~$G7~测试结束准则:1、用完了安排的测试时间后,测试便结束2、当执行完所有的测试用例都没有发现错误,测试便结束。
[ S,iZ1f'm h-s:a0s(MX)|7ZZ/f0 调试:是执行一次成功的测试之后要进行的工作。
y-?2nuBl2u0E1g&i*}N,r,w0 所有的测试都是基于模型。
'cF+F6a#@Y051Testing软件测试网#Qe#GO0Dg/I%q3J P3E)g不要将实验与测试混淆起来。51Testing软件测试网L_`s&XX
)A6\6h"] A _{N0 威胁建模:威胁模型就象功能计划或设计文档一样,是一种规格说明。而最大的不同在于威胁模型的意图是找出一个应用程序能被攻击的所有可能的方法,然后根据概率和可能的危害来排优先级。好的威胁建模需要分析和调研技能—这两种技能使得测试在这过程中很适用。51Testing软件测试网-I}!yAIrZ!Z
51Testing软件测试网1FZwb `y测试用例的设计:
?5[E*Y+UktiHN0在实际测试过程中的心得:51Testing软件测试网 TQ0u"gqDn m|
1、许多同学对于题目没有读的很严谨,在输出上没有严格按照规范,输出错误是严格判错的。
I+^.[/{0D+z02、有一个非常重要的问题是,对于边界条件没有把握好,我设计的每一种情况的边界情况考察2次,较多同学没有做好这一项,可能是时间比较紧,另外就是没有养成良好的测试和思考习惯,有的溢出、有的呈现出错误的结果等等。51Testing软件测试网 JC*w0AUj
3、对于程序输入值,有同学没有考虑输入完全错误和输入越界的情况。51Testing软件测试网E'c8BX!n-` sGv
4、还有同学图省事,简单的使用某些看似等价的语句,一测试,立刻原形毕露。51Testing软件测试网"D"DU1O^!} mC^
测试完毕后的对自己程序设计的反思:51Testing软件测试网*s+}s-b"r V&bG
3FYF)l-[5k7]0 1、要严格考察输出是否满足程序功能需求。
!^wq4|8bC%~HDS)p051Testing软件测试网AM!l5] l1}!O:oF2、对于边界条件一定要小心,要经过严密的思考,在编程中也要注意思考的逻辑与程序逻辑的等价性。51Testing软件测试网6c/~,gC!I&uB
51Testing软件测试网8XHS.IB3、对于程序的输入,严防各种类型的输入。51Testing软件测试网h7GUo8@ u
/mKUq_q0 4、每一个语句的有效性非常重要,它们的流程在某些情况下是正常的,在另一种情况下可能出现错误,不能简单的等效之(有不同的触发因素:环境变量、特殊的值)。
zh~:Xtt+_S1yQ0.uj1l"I/[0 5、软件测试是非常重要的一个环节,测试别人的程序,能够提高自己的编程意识。软件测试是非常严谨的,不容出错的。51Testing软件测试网7N s@kidj9c y,}
`s6|2K5YFZ7v0 程序员有时候犯的最大错误,不是说写错了某个程序,而是当程序出错后,简单的调试成功,或者在外力下被迫调试成功,就再没有对出错的原因进行深入的分析,这样做没有从思想和方法上防止类似的情况发生。如果我们换一个思考的角度,通过不断调试自己或别人的程序,从反面来思考,是否对我们的编程具有一定的“前瞻性思考”呢?51Testing软件测试网? IMi*u yQZ
/{8Bt)uH0 我们有时候总是说,自己工资不够高,现在还是码农,是否是因为我们缺乏优秀的思维角度,不具有这样的一种“前瞻性思考”呢?是否也应该从此处来反省我们的程序员之路?
9G.p$W;Q3w-_051Testing软件测试网A4Z&~!?t q W&m.} {最后附上微软的聘人标准:
&OX,j1eEplgB051Testing软件测试网9o3uU?)cRu c6o0}问题的分析和解决能力:这个能力对测试人员非常重要,因为对问题进行解剖和找出问题的症结是提高产品质量的关键。51Testing软件测试网zd#o&wZa&H
51Testing软件测试网$y8|E;\%HKE5wr0t面向客户的创新:应聘者是否以客户为本,是否能够充分理解软件如何才能帮助客户解决问题,并对此充满兴趣和热情。
i"RR8l!x s["D+`+R2c!Z'T051Testing软件测试网dS[ah F精湛的技术:我们注重的是应聘者是否通晓网络和操作系统,不仅能写代码,而且能够优化代码。
nS-a1S/g6_051Testing软件测试网Mxe9^ w项目管理:对测试人员来说,这个能力是指如何有效支配个人的时间,以及如何策划和确保一个有许多互相牵制成分的计划得以按时完成。