Page1软件测试经验与心得交流唐荣军rongjun.tang@jrdcom.comOfficePhone:+86-755-33956551Page21.软件测试概述1.1经典V模型介绍这是一个非常单纯、非常理想的一元线性模型,正是因为它太理想、太单纯了,以至于都无法应用于软件工程实践,几乎被业界所抛弃,只有在软件工程的教科书或培训文档上还能找到这个模型,偶尔被人们提及,也属于被批驳的对象。一元线性模型是人类最容易掌握并能熟练运用的一种思维方法,人们总是把一个复杂的非线性问题转化为一系列的线性问题,然后逐个求解,高等数学里的偏微分就是这样一种思想。重温这个模型有助于我们理解软件工程里最核心的东西!需求开发验收测试系统测试高层设计集成测试详细设计单元测试编码实现Page31.软件测试概述1.2我们所处的位置阿尔卡特流程把手机产品开发定义为OR、DR0、DR1、DR2、DR3和DR4等几个关键里程碑(Milestone),DR是英文DeliveryReview的缩写。跟软件有关系的三个关键里程碑(Milestone)是DR1、DR2和DR4:–DR1解决“做什么”和“不做什么”的问题,软件需求开发及功能定义要在这个阶段完成–DR2是fullfeature全部开发结束–DR4是软件交付生产,也就是说在DR4的时候要能够发布量产软件软件工程各阶段的定义DR1DR2DR3DR4DR5需求开发软件设计与功能开发JRD内部测试与改错TMCQA验收软件维护需求变更Page4单个功能测试单个功能测试集成测试系统测试验收测试新开发模块新开发模块……1.软件测试概述1.3我们所采取的策略V模型所展现的是一种把软件工程化整为零、分而治之的战略艺术,单元测试、集成测试、系统测试和验收测试体现了“由小到大”、“由内至外”和“循序渐进”的思想!下面把单元测试称为单个功能测试。单个功能测试的粒度最小,由开发工程师自行完成测试,在软件工程学的定义里,属于白盒测试的范畴,我们现在使用simulation加手工来完成,离这个理论定义是有差距的。集成测试是连接单个功能测试与系统测试的桥梁,以后将由新成立的integrationteam来完成。系统测试的粒度最大,由软件部的TestBranch采用黑盒测试方式完成,主要的测试依据是软件需求文档或者FeatureList。验收测试的内容跟系统测试非常接近,主要区别是测试人员不同,在软件工程之定义里,验收测试一般由上帝(客户)来执行,对JRD软件部来说,TCT的QA软件测试组就是我们的上帝!Page51.软件测试概述1.4测试流程规范测试计划(TestPlan)应该明确测试的范围,即测什么,如果说不清楚测什么,至少要说清楚不测什么,否则测试将是苦海无边,回头也找不到岸;计划还应该明确测试项目在时间上怎么安排,先测什么,后测什么;第二步应该明确测试的方法,即怎么样测,要对在第一步中所确定的测试项目进行展开,明确测试的需求并编制测试规范(TestSpecification)及测试用例(TestCase);第三步执行测试用例(TestCase);最后要撰写测试报告(TestReport),目的是使软件缺陷能够得到迅速的修复,同时也使相关的部门或同事能够清楚地了解软件开发的进展情况,软件测试报告并无固定的格式,只要能够完整、清楚地反映当前的测试情况就可以了。–撰写测试报告时可以参考我们在学校时写的物理或者化学试验报告的格式,这些报告的格式是非常严谨的!编制测试报告步骤4步骤1制定测试计划步骤2编制测试规范及用例步骤3执行测试Page61.软件测试概述1.5手机软件质量的属性1.6手机软件质量的要素市场角度:用户最关注的、能够成为买点的功能研发角度:对软件整体质量产生重大影响的功能性质量属性正确性(correctness)健壮性(robustness)非功能性质量属性性能(performance)易用性(usability)兼容性(compatibility)Page71.软件测试概述1.5手机软件缺陷的判定依据软件需求定义文档相关国际标准、国家标准、行业标准没有在需求文档中写明的隐含的约定俗成–是表示选中,还是表示未选中?全世界人民都在用√表示肯定,用×表示否定,可是搞不懂为什么微软就是要弄出这种反人类行为–没有谁规定手机必须要支持关机闹钟,但如果你现在设计一款无关机闹钟的手机,那无疑是在给自己掘坟墓,当然,如果有人就好这一口,那另当别论–2003年7月我们在新疆作调研的时候,还碰到有用户拿着5288问我们,“可不可以给我焊个马达?”看着他那望穿秋水的眼神,我却只能残酷地告诉他:曾经有一个马达摆在我们面前,可是我们认为不重要,就把它去掉了,直到你来投诉的时候,我们才后悔莫及,如果你以后能再买我们的手机,我们一定设计一个马达,如果要给这个马达加上一个期限,我希望它能振动一万年!•后面的这两个案例已经超出了软件测试的范畴,我把它们写在这里是期望能够给大家提供一个更为广阔的思路!Page81.软件测试概述1.7手机软件测试理念手机开发的三个关键要素是:质量(Quality)、成本(Cost)和上市时间(TimetoMarket),这三个要素相互制约和影响,一款成功的手机开发,往往是这三个要素的完美折衷。测试只能证明软件存在缺陷(Defect),却不能证明不存在缺陷(Defect),“彻底地测试”是不现实的,要考虑上市时间和测试成本等因素的限制,不允许无休止的测试,我们应当祈祷:软件缺陷在用户换掉他的手机之前一直没有机会发作!并非所有测试出来的问题都会被修复。手机软件是属于嵌入式的,软件的运行跟硬件结合得非常紧密,因此在手机软件测试的过程中,硬件是不能忽略的一个因素。测试是为了证明手机软件存在错误,而不是为了证明软件没有错误,所以成功的测试在于发现了迄今为止没有发现的问题。Page92.系统测试概述2.1功能测试2.2健壮性测试2.3矩阵测试2.4UI测试2.5兼容性测试(IOT)2.6性能测试2.7临界测试2.8可靠性测试Page102.系统测试概述2.1功能测试这是手机软件测试工作中最核心和最基本的一项测试,该测试的主要内容是检查软件是否符合需求定义,并通过构造正常的操作来检查手机的动作是否正确;在这个测试里,正确性是最最重要的手机软件质量要素。手机的功能(若无特别指明,均指软件功能)按照可见性可以分为两类:显性功能和隐性功能。隐性功能就好像是地下党员,你在共产党员的花名册里永远找不到他们的名字。–显性功能:指在菜单里可以看得到的功能–隐性功能:指在菜单里看不到的功能–举个例子,电话本的显性功能有增加、编辑、删除、拨打等,这些功能可以在电话本的菜单里面看得到,姓名列表排序则属于一个隐性功能,因为在电话本的菜单里没有这样一个子菜单,但它却是一个实实在在的功能在实际的测试过程中,显性功能通过菜单遍历可以很容易地进行无遗漏的测试,但是隐性功能却很容易为我们所忽略!一个有效的解决办法是去检查软件的功能定义列表(FeatureList),从这个列表里面找出那些隐性的功能。Page112.系统测试概述2.2健壮性测试这项测试主要是检查手机软件对异常操作的容错能力,异常操作通常要考虑异常输入操作及异常条件两个方面–小时候看电影发现,日本鬼子往往一枪就over了,八路军打一枪顶多流几滴血,仍然能够冲锋陷阵,这说明八路军的健壮性比日本鬼子的健壮性要强手机软件的很多功能的实现是有很多隐含的条件的,在健壮性测试中,要检查当这些条件不满足的时候手机的反应–我们举一个GD85-1的例子,动感无限自动更新的功能是基于GPRS实现的,当使用一张不支持GPRS的SIM卡在GD85-1上执行自动更新时手机会重启–橘生淮南为之橘,橘生淮北为之枳,这说明橘的健壮性太差Page122.系统测试概述2.3矩阵测试矩阵测试是使手机处于一个特定的状态,然后构造一个异步事件,检查当这个异步事件发生时手机软件的性能根据事件的来源,异步事件可以分为外部事件和内部事件–外部事件举例:SMS到达、来电呼入、CB-SMS到达、非关机状态拔电池、插入耳机等–内部事件举例:闹钟响闹、日程表事件提示、低电告警、自动关机等Page132.系统测试概述2.4UI测试这里主要测试手机软件的易用性、用户界面的友好性及美学性,我们应该把诺基亚定为自己的榜样,学习他们UI设计的简洁性,我们应当以西门子为榜样,学习他们UI的严谨性。–傻瓜相机在问世之前,摄影只是少数人手机耐以炫耀的玩物,光圈、快门、景深等深奥的摄影技能摧残了无数摄影爱好者那颗火热的心;自从傻瓜相机一声炮响,仿佛1842共产党宣言的发表,从此轰轰烈烈的摄影运动迅速传遍了五大州四大洋。旧时王榭堂前燕,飞入寻常百姓家。傻瓜手机是我们UI设计的终极目标!UI测试遵循的原则:–求美原则,检查在UI的布局里,各种要素是否能传达一种美感,布局是否合理,色彩是否合谐,”科技美学化“不是一句挂在墙上印在纸上的口号,而应该成为实实在在的行动–正确性原则–一致性原则,同样的一个功能的UI在不同的情景(scenario)所呈现的方式应该保持一致–普遍性原则Page142.系统测试概述2.5兼容性测试(IOT)测试手机对不同地区SIM卡的兼容能力,这部分尤其在STK中表现的很突出,我们经常可以发现一些异地的SIM卡中的STK菜单中会有乱码,这就是兼容性不好造成的–2006年7月,成都客服中心报告:成都郊县双流、都江堰地区M360在使用移动动感地带新卡2.0版本(64K)时出现“开机断电”故障;经调查,除M360外,还有398和U58也有这样的问题,而其它机型如E787未见本故障,固可初步判定为SIM不匹配问题。–2004年11月,我们在印度东北部的昌吉达尔做SIM的兼容性测试,发现Q515在点播SPICE的SIM卡中任何一条STK的内容之后,屏幕就一直显示一个沙漏动画,按任意键手机都没有反应。–2005年3月,在印度作IOT测试时发现在使用AirTel的SIM卡时无法正确显示网络运行商的名称。测试我们的手机跟其它品牌手机的数据交换能力,例如,使用NOKIA手机存储一个SIM卡电话本记录,当使用MTK平台手机读取时,发现姓名后面会显示有一个问号–两只手表的困惑,当你手上戴了两只手表的时候,你往往无法确定现在是几点几分。–如果这个数据是要经过网络传输的,那么我们应该假定数据在传输过程中不会被网络所污染,例如联通和移动的网络之间本身就存在兼容性问题。–兼容性的商业游戏规则是弱者应当努力与强者兼容,而强者应当努力避免被兼容。GE18-1发送一个有相片的MMS给NOKIA6230,6230不支持该相片在MMS中的显示,这是典型的强者不兼容弱者的案例。Page152.系统测试概述2.6性能测试性能测试从负荷及容量两个方面考虑,有些教材把这个测试叫做压力测试,内容是一样的,换汤不换药–考察手机在高负荷状态下的运行情况。所谓高负荷,就是多个功能快同时在运行,使手机CPU资源高负荷地运转。–考察手机在满容量状态下的运行情况。在测试前,应设法使手机所有的用户内存全部存满,然后在进行一些相应的操作,观察手机的性能情况。2.7临界测试所谓临界测试,就是指数据在保存、删除、传送、发送时或者这些动作即将发生时,考察手机软件对外部干扰事件的处理情况。–例如,MTK平台的某些机型在即将删除一条短信息时收到一条新信息,但删除的却不是刚刚选定的那条信息,而是刚刚收到的这条新信息!Page162.系统测试概述2.8可靠性测试可靠性是指在一定的环境下、在给定的时间里,手机软件不发生故障的概率。可靠性本来是硬件领域的术语,比如某个电子设备在刚开始工作时挺好的,但由于器件在工作中其物理性质会发生变化(如发热),慢慢地系统的功能或性能就会失常。软件在运行过程中不会发生象硬件那样的物理变化,但是并不代表软件现在运行是正确的,那它一辈子运行也是正确的,说不定哪一天它就不正常了。很多小朋友在小的时候是个好孩子,但并不代表他老了