探索软件测试——概念篇
目录1认识软件测试1.1什么是测试1.2为什么需要软件测试2软件测试和开发的区别3需求3.1 用户需求3.2 软件需求4 开发模型4.1什么是模型4.2 软件的生命周期4.3 常见开发模型4.3.1 瀑布模型4.3.2 螺旋模型4.1.3 增量模型、迭代模型44.1.4 敏捷模型4.1.4.1 Scrum模型1认识软件测试1.1什么是测试测试是一个广义的概念指通过系统性的方法、工具和流程对某个对象如软件、硬件、系统、流程等进行检查、验证和评估以确定其是否符合预期要求、是否存在缺陷或问题并评估其质量、性能、可靠性等特性。测试在我们的生活中随处可见我们的生活中随处可见举⼀个⽇常⽣活案例商场买⾐服买⾐服的整个过程中都伴随着测试⾏为外观测试初筛选⾛进⻔店先挑⾐服测试是否存在符合个⼈审美的⾐服试穿测试选择尺码测试试穿之后⾐服对个⼈的外观是否有提升⾯料测试纯棉、涤纶、布料....价格测试询价⼼理预期是300以下我们对于这些因素的要求是否满足我们的预期这些都可以称之为是测试。所以软件测试就是软件测试是软件开发过程中的一项关键活动旨在评估软件产品或系统的质量、功能和性能以发现缺陷、验证需求是否得到满足并确保软件能够按照预期运行。1.2为什么需要软件测试我们从企业为什么会需要软件测试岗位角度出发企业最终的⽬的是“盈利”互联⽹企业借助软件/系统来跟⽤⼾交互从⽽获得盈利也就是说企业的 受众群体主要是⼴⼤的使⽤⽤⼾⽽⽤⼾的使⽤感受将直接影响企业的盈利若产品质量太差将导致 ⼤量⽤⼾的流失所以企业⾮常重视测试。2软件测试和开发的区别1从工作内容上看软件测试主要是对产品是否能满足用户的需求而开发确实对产品的功能进行制作开发二者对于产品的运用属于不同的角度2在难易程度上看软件测试对比于开发需要学习的知识框架起始更多但是由于软件测试的开发广度大专业度相对较低所以软件测试的难度略低于软件开发软件开发的专业性要求极高测试⼈员经常会进⾏测试动作⽽开发⼈员进⾏进⾏调试动作维度调试开发目的调试的任务是定位并且解决程序中的问题测试的任务是发现程序中的缺陷参与⻆⾊主要由开发⼈员完成测试主要是由测试⼈员和开发⼈员来执⾏⿊盒测试主要由测试⼈员完成、单元/集成测试主要是由开发⼈员执⾏执⾏阶段开发阶段测试贯穿整个软件开发⽣命周期⾼频⾯试题1.⾛测试岗位为什么还要学习开发知识1测试⼈员也需要编写代码如⾃动化测试、性能测试、开发测试效率⼯具等。测试⼈员需要能够看懂代码、了解开发框架。2学好开发知识能够提⾼软件测试质量。通过查看代码中数据的⾛向能够更好的从代码层面去发现问题。3需求在多数软件公司会有两部分需求⼀部分是用户需求⼀部分是软件需求3.1 用户需求用户需求可以简单理解为甲⽅提出的需求如果没有甲⽅那么就是终端用户使⽤产品时必须要完成的任务。该需求⼀般⽐较简略通常是⼀句话比如我想要实现一个声控灯3.2 软件需求也叫做叫功能需求该需求会详细描述开发人员必须实现的软件功能。软件需求是测试⼈员进⾏测试⼯作的基本依据。用户需求和软件需求的区别就在于一个是用户的角度张口就来的一句话而软件需求则是需要软件开发的一系列人员进行分析实现功能4 开发模型4.1什么是模型随着软件⼯程学科的发展⼈们对计算机软件的认识逐渐深⼊。软件⼯作的范围不仅仅局限在程序编写⽽是扩展到了整个软件⽣命周期如软件基本概念的形成、需求分析、设计、实现、测试、安装部署、运⾏维护直到软件被更新和替换新的版本。软件⼯程还包括很多技术性的管理⼯作例如过程管理、产品管理、资源管理和质量管理在这些⽅⾯也逐步地建⽴起了标准或规范。4.2 软件的生命周期了解具体的开发模型之前我们得先来了解软件的生命周期⽣命周期指的是从⽣命的开始到⽣命结束的⼀段时间。以⼈为例⼈类的⽣命周期是从⽣命孕育的开始中间会经历幼年童年少年⻘年⽼年最终直⾄死亡。⽽软件/产品的⽣命周期也是如此需求的开始是软件⽣命的起点中间会经历需求的计划、设计程序开发程序测试等阶段直⾄软件不再进⾏维护便到了⽣命的重点。假如我想要建造⼀套房⼦别问问就是⼀个⼈造房⼦房⼦的⽣命周期流程是什么样的步骤总结映射软件流程为什么要建房⼦商品房还是普通住宅建造100层技术上是否可⾏明确合理的建房⽬标需求分析什么时候开发建房⼦计划竣⼯时间多久可以交房计划好时间计划建房前明确流程先打地基做基础框架砌墙、粉刷、⽔电⼯程......设计好具体的建房流程设计按照前⾯的流程和时间实施建房中....施⼯中编码房屋建造完成开发商验收成果、买家验收房⼦品质房⼦是否牢固是否漏⽔及其他偷⼯减料的地⽅是否按照规定来建造的检查房屋建造结果测试检查结束开始逐步⼊住使⽤中出现了各种情况如房屋漏⽔、墙⾯掉⽪、下⽔道堵塞等问题⼀边使⽤⼀边找物业修理使⽤并及时维护运行维护因此我们就得到了软件开发的⽣命周期需求分析⸺计划⸺设计⸺编码⸺测试⸺运⾏维护对于软件的⽣命周期中每个阶段都在做什么呢阶段具体过程产出需求分析分析需求是否合理分别从市场需求、技术等⽅⾯进⾏分析。该阶段会输出需求等⽂档计划对成⽴的需求执⾏需求执⾏计划多⻓时间内完成该需求每段时间具体完成哪些功能。该阶段会输出计划等⽂档。设计将需求细化成⼀个个任务团队成员各司其职领取任务并进⾏技术设计如何进⾏架构设计设计哪些接⼝、采⽤什么技术该阶段会输出技术等⽂档。编码开发⼈员参考需求⽂档、设计⽂档、交互图等等⽂件进⾏代码的编写。代码⽂件等⽂档。测试测试⼈员需要介⼊到软件的测试中来参考测试⽤例对软件进⾏测试。测试⽤例、测试设计与计划、测试报告等⽂档运行维护项⽬测试结束之后项⽬需要进⾏上线并对产品进⾏线上的维护。线上的维护主要分为三个⽅⾯。分别为修复性维护、完善性维护和预防性维护4.3 常见开发模型4.3.1 瀑布模型瀑布模型在软件工程中占有重要地位是所有其他模型的基础框架。瀑布模型的每⼀个阶段都只执行⼀次因此是线性顺序进⾏的软件开发模式。瀑布模型的⼀个最大缺陷在于可以运行的产品很迟才能被看到。这会给项目带来很大的风险尤其是集成的风险。因为如果在需求引⼊的⼀个缺陷要到测试阶段甚⾄更后的阶段才发现通常会导致前面阶段的工作大面积返工业界流行的说法是“集成之日就是爆炸之日”。尽管瀑布模型存在很大的缺陷例如在前期阶段未发现的错误会传递并扩散到后面的阶段而在后面阶段发现这些错误时可能已经很难回头再修正从而导致项目的失败。但是目前很多软件企业还是沿用了瀑布模型的线性思想在这个基础上做出自己的修改。例如细化了各个阶段在某些重点关注的阶段之间掺入迭代的思想。在瀑布模型中测试阶段处于软件实现后这意味着必须在代码完成后有足够的时间预留给测试活动否则将导致测试不充分从而把缺陷直接遗留给用户。优点缺点强调开发的阶段性线性结构每个阶段只执行⼀次是其他模型的基础框架测试后置前⾯各阶段遗留的风险推迟到测试阶段才被发现导致项目大面积返工失去了及早修复的机会必须留有足够的时间给测试活动否则导致测试不充分将缺陷直接暴露给用户产品质量差周期太长产品很迟才能被看到和使用可能会导致需求/功能过时4.3.2 螺旋模型⼀般在软件开发初期阶段需求不是很明确时采用渐进式的开发模式。螺旋模型是渐进式开发模型的代表之一。这对于那些规模庞大、复杂度高、风险大的项目尤其适合。这种迭代开发的模式给软件测试带来了新的要求它不允许有⼀段独立的测试时间和阶段测试必须跟随开发的迭代而迭代。因此回归测试的重要性就不言而喻了。优点缺点强调严格的全过程风险管理强调各开发阶段的质量。增加风险分析和原型项目中可能存在的风险性与风险管理⼈员的技能水平有直接关系需求人员、资金、时间的增加和投入可能会导致项目的成本太⾼4.1.3 增量模型、迭代模型4增量开发能显著降低项目风险结合软件持续构建机制构成了当今流行的软件⼯程最佳实践之⼀。增量开发模型鼓励用户反馈在每个迭代过程中促使开发小组以⼀种循环的、可预测的方式驱动产品的开发。因此在这种开发模式下每⼀次的迭代都意味着可能有需求的更改、构建出新的可执行软件版本意味着测试需要频繁进行测试人员需要与开发人员更加紧密地协作与此类似的有⼀个迭代开发增量开发和迭代开发往往容易被⼈但是其实两者是有区别的。增量是逐块建造的概念迭代是反复求精的概念这两种模型往往是结合使用的他们都是用于大型项目目标不明确的项目4.1.4 敏捷模型在早期迭代瀑布模型非常流行来完成⼀个项目。但是现在开发人员在使用它开发软件时面临着各种各样的问题。主要困难包括在项目开发期间处理来自客户的变更请求以及合并这些变更所需的高成本和时间。为了克服瀑布模型的这些缺点在1990年代中期提出了敏捷软件开发模型。敏捷模型主要旨在帮助项目快速适应变更请求。因此敏捷模型的主要目的是促进项目的快速完成。要完成这项任务需要敏捷。敏捷性是通过使过程适应项目删除对特定项目可能不是必需的活动来实现的。此外避免任何浪费时间和精⼒的事情。在敏捷模型中需求被分解成许多可以增量开发的小部分。敏捷模型采用迭代开发。每个增量部分都是在迭代中开发的。每次迭代都旨在小而易于管理并且只能在几周内完成。⼀次为客户计划、开发和部署⼀个迭代。没有制定长期计划。敏捷模型中有⼀个非常重要的《敏捷宣言》宣言内容个体与交互重于过程和⼯具强调沟通的效率可用的软件重于完备的文档 强调轻文档文档不应该成为工作验收的标准客户协作重于合同谈判主动了解当下的需求响应变化重于遵循计划能够主动迎接变化宣言中主要运用了对比的手法然而在每对比对中后者并非全无价值但我们更看重前者。 通过敏捷宣⾔可以总结出敏捷模型的四个特点轻文档轻流程重目标重产出。敏捷开发有很多种⽅式其中scrum是比较流行的⼀种4.1.4.1 Scrum模型Scrum是敏捷模型中的⼀种又称为迭代式增量软件开发模型在scrum模型中主要有三个角色和五个重要会议三个角色scrum由product owner(产品经理)、scrum master(项目经理)和team(研发团队)组成。其中product owner负责整理user story(⽤⼾故事)定义其商业价值对其进⾏排序制定发布计划对产品负责。scrum master负责召开各种会议协调项⽬为研发团队服务。研发团队则由不同技能的成员组成通过紧密协同完成每⼀次迭代的⽬标交付产品迭代开发scrum的基本流程如上图所示产品负责⼈负责整理user story形成左侧的product backlog产品待办列表。发布计划会议product owner负责讲解user story对其进行估算和排序发布计划会议的产出就是制定出这⼀期迭代要完成的story列表sprint backlog。迭代计划会议项目团队对每⼀个story进行任务分解分解的标准是完成该story的所有任务每个任务都有明确的负责⼈并完成工时的初估计。每日例会每天scrum master召集站立会议团队成员回答昨天做了什么今天计划做什么有什么问题。演示会议迭代结束之后召开演示会议相关人员都受邀参加团队负责向大家展示本次迭代取得的成果。期间大家的反馈记录下来由poproduct owner 整理形成新的story。回顾会议项目团队对本期迭代进行总结发现不足制定改进计划下⼀次迭代继续改进以达到持续改进的效果