本人属性小白,因课程需要 自学软件测试相关内容,攥写此系列记录要点。如有不足,请多指教。
一、实际案例——会流血会流泪
1994年秋天,迪斯尼公司发布了第一个面向儿童的多媒体光盘游戏Lion King Animated Storybook。这是迪斯尼首次进军这个市场,通过大力宣传,其产品销售额非常可观。孩子们都准备在夏天当一次 “狮子王”。然而在发售后,电话支持部门就淹没在愤怒的家长和哭诉玩不成游戏的孩子门电话狂潮中。后经证实,程序员用于开发游戏的系统在大众中并不常见,游戏无法正常运行。
美国爱国者导弹防御系统首次应用在海湾战争中对抗伊拉克飞毛腿导弹攻击。当时大家对这套系统赞誉有加,但不能否认它也出现了一些导致士兵伤亡的情况。其中一枚在沙特阿拉伯的多哈击毙了28名美国士兵。是的,你没看错,确实是美国士兵。分析专家发现一个软件缺陷导致系统时钟错误并最终导致跟踪系统准确度丢失。
可以看出,软件缺陷总会在意想不到的地方出现。随着应用领域的不同,其造成的影响和后果也会不同。最新的一个例子是在微信的安卓版本中输入“2个数字+15个中文句号”,接收和发送消息的手机都会停止响应。是谁这么无聊,这样的一种文本组合缺陷都能被发现。这也从一个侧面反映出软件测试的变幻莫测。
二、软件缺陷——隐藏的杀手
1.软件缺陷判断
有人会说,只要运行出了问题就是软件缺陷。那么我们该怎么判断呢?可以参考以下五条规则:
①软件未达到产品说明书标明的功能。
②软件出现了产品说明书指明不会出现的错误。
③软件功能超出产品说明书指明范围。
④软件未达到产品说明书虽未指出但应达到的目标。
⑤软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者用户认为不好。
需要注意的是:每一个使用软件的人都会有自己的体验和想法,针对第五条,作为软件测试员最好能全面的客观评价,做到合情合理。
2.软件缺陷修复费用
从开始到计划、编制、测试、一直到公开使用的过程中,都可能发现软件缺陷。下图显示了随着时间推移,修复软件缺陷的费用是如何增加的。
从小虫子的体型可以看到:费用呈几何数级。随时间推移,数十倍地增长。在编写产品说明书早期发现问题,费用可能只要几角钱;随着时间雪球越滚越大,到最后发现问题,其处理费用可能达到上百元。
3.软件测试员
软件测试员的目标是发现软件缺陷。
经常有产品开发小组要测试员只是为了证实软件可以运行,而不是找缺陷。如果只测试应当达到的功能,建立测试使其通过,就会遗漏功能不足之处。这样会漏掉软件缺陷,浪费项目本身和公司钱财。作为软件测试员,不应该只一门心思找软件缺陷,还应该考虑如何在开发过程中尽快找出软件缺陷,以便降低修复成本。
软件测试员的目标是找出软件缺陷,尽可能早一些。
然而,软件测试员相当于客户的眼睛,是第一次使用软件的人,代表客户说话,应力求完美。
因此,软件测试员的目标是找出软件缺陷,尽可能早一些,并确保其得以修复。
三、软件测试——活跃的警察
1.测试原则
完全测试程序是不可能的。初涉软件测试者可能认为拿到软件后就可以进行完全测试,找出所有软件缺陷,并使软件臻于完美。年轻人,梦想还是要有的,不过在这里我不建议你实现。即使是最简单的程序也不行,因为:输入量大;输出结果多;软件实现途径多;软件说明书没有客观标准,不同角度有不同标准。举个例子,测试一款计算器,你真的要从0一直算下去吗?
测试无法显示潜伏的软件缺陷。这可以用农场的一个例子帮你理解。假设你是负责检查马匹是否感染寄生虫的检疫员。如果你在马身上发现了寄生虫的痕迹,可以断定这匹马感染了。但牵一匹外表完全正常的马到你面前,你能说这匹马是健康的吗?很明显,你并不能这么说,况且总不能把马切开一块块检查吧。如果真是那样的话,晚饭就有着落了。回到软件测试,你可以报告已发现的软件缺陷,却无法报告潜伏的软件缺陷。唯一方法是持续观察。
软件测试员在产品小组中不受欢迎。软件测试员的目标还记得吗?如果你不能正确告知,就会给编写人员一种砸场子的感觉。这更多的涉及人与人之间的交流艺术,有几点小建议:提早发现软件缺陷,早期产生影响小,容易让人接受;控制情绪,找到缺陷不要兴高采烈的去告诉同事,仿佛自己打了胜仗一样;不要总报告坏消息,花点时间和同事聊聊天。
还有几项测试原则在此不再叙述,感兴趣的话可以自己去找找相关资源。
2.几对术语比较
精确VS准确
思考一下,假如对计算器进行测试,你会测试返回结果是精确的还是准确的呢?或是两项都测试呢?假如测试网球或格斗游戏的模拟程序呢?
验证VS合法性检查
验证是保证软件符合产品说明书的过程;合法性检查是保证软件满足用户要求的过程。通过一个例子来加深理解。
1990年4月,Hubble天文望远镜被送上赤道上空。它是一个反射望远镜,主要利用一面巨大的镜子来放大观察目标。制造镜子是一项严格要求精度和准确度的艰巨任务,地面上的测试又极其困难,只能在发射前仔细检查其全部属性。当Hubble上天之后问题便出现了,它无法正确聚焦。一位观察家发现镜子精度极高,但准确度不够。测试虽然保证镜子符合产品说明——验证——但不能保证其满足最根本的要求——合法性。
质量VS可靠性
软件测试员常会错误的以为质量和可靠性是一回事。如果他们测试的程序一直稳定、可靠,就会认定这是高质量的产品。其实,可靠性只是质量的一个方面。软件用户对质量的看法可能包括功能是否齐全,产品能否在各种机型上运行,甚至包装盒的色彩。为了确保程序质量高且可靠性强,软件测试员必须在整个产品开发过程中进行验证和合法性检查。
测试VS质量评判(QA)
软件测试员的目标是找出软件缺陷,尽可能早一些,并确保其得以修复。
软件质量评判人员的主要职责是创建和加强促进软件开发并防止软件缺陷的标准和方法。
软件测试员会做一些QA工作,QA人员会进行一些测试。双方的工作和任务是交织在一起的。重要的是了解自己的工作职责,并使其与开发小组的其他成员顺利交流。
参阅书籍:《软件测试》(美)Ron Patton著 周予滨 姚静 等译