1. 需求的概念在多数软件公司会有两部分需求⼀部分是用户需求一部分是软件需求。在企业中经常听到两个词用户需要和软件需求用户需求是没有经过合理的评估通常是一句话软件需求是开发人员和测试人员执行的依据例如1.用户需求一句话做一个五彩斑斓的黑经过评估后无法实现开发与产品产生冲突2.用户需求一句话 用户可以“在线”下单购买购物软件中的商品1. 用户可正常浏览商品详情、选择规格与购买数量2. 支持将商品加入购物车3. 可填写收货地址、提交订单4. 支持支付支付后正常扣款5. 支付成功后订单状态更新商品库存对应扣减经过评估后可以实现开发和测试以此为工作依据1.1 用户需求用户需求可以简单理解为甲⽅提出的需求如果没有甲⽅那么就是终端⽤⼾使⽤产品时必须要完 成的任务。该需求⼀般⽐较简略通常是⼀句话。用户的需求是五花八门往往只是⼀句话比如实现⼀个声控灯实现⼀个软件的登录功能1.2 软件需求或者叫功能需求该需求会详细描述开发⼈员必须实现的软件功能。软件需求是测试⼈员进行测试工作的基本依据。用户需求和软件需求有什么不同呢看看下面的案例女朋友饿了的例子用户需求女朋友说, 我饿了, 这是⼀个用户需求. 很简略.软件需求需要你和她反复的沟通了解更加详细具体的需求, 来制定解决⽅案.比如你问她, 想吃啥?, 她说, 随便吃米饭炒菜?, 不想吃; 那你想吃啥?, 随便吃油泼面?, 不想吃; 那你想吃啥?, 随便...最终理解清楚用户需求之后, 知道女朋友想吃的是你做的红烧肉, 那么再去研究肉怎么买, 怎么做等等的具体步骤, 是软件需求.在工作中我们实际见到的软件需求文档类似于下面的表述软件需求规格说明书 ⼀、用户需求平台支持邮箱注册⼆、软件需求注意用户的需求不能直接作为开发和测试的依据。针对用户的需求产品经理需要进行需求分析技术可行性、市场可行性、成本投入和收益占比等后才可转变为软件需求2. 开发模型2.1 什么是“模型”随着软件工程学科的发展人们对计算机软件的认识逐渐深入。软件工作的范围不仅仅局限在程序编写而是扩展到了整个软件生命周期如软件基本概念的形成、需求分析、设计、实现、测试、安装 部署、运⾏维护直到软件被更新和替换新的版本。软件工程还包括很多技术性的管理工作例如过 程管理、产品管理、资源管理和质量管理在这些方面也逐步地建立起了标准或规范。2.2 软件的生命周期认识具体的开发模型之前先了解软件的⽣命周期。什么是生命周期生命周期指的是从生命的开始到生命结束的⼀段时间。以人为例⼈类的生命周期是从生命孕育的开 始中间会经历幼年童年少年青年老年最终直至死亡。而软件/产品的生命周期也是如此需求的开始是软件生命的起点中间会经历需求的计划、设计 程序开发程序测试等阶段直至软件不再进行维护便到了生命的重点。案例假如我想要建造⼀套房子别问问就是⼀个人造房子房字的生命周期流程是什么样的因此我们就得到了软件开发的⽣命周期需求分析⸺计划⸺设计⸺编码⸺测试⸺运⾏维护对于软件的输入、生命周期中每个阶段都在做什么呢产品经理:定需求明确需求是否正常执行中项目经理:为整个项目负责人员调配等工作交互:设计交互图前端:设计前端内容(框架、技术、工具)后端:设计后端内容(框架、技术、工具)测试:测试用例、测试计划(测试类型、工具等)...例如做一盘土豆丝买土豆精选指定品种土豆削土豆规定形状、采用对应削法洗土豆明确清洗方式、清洗次数烹饪确定烹饪方式、操作步骤食用配套筷子、摆盘、刀具、勺子等软件上线之后在线上环境使用下可能会出现一些意想不到的情况正常使用没有问题但是在极端的情况下会出现问题性能问题比如淘宝双十一并发太大2.3 常见开发模型2.3.1 瀑布模型瀑布模型在软件工程中占有重要地位是所有其他模型的基础框架。瀑布模型的每一个阶段都只执行一次因此是线性顺序进行的软件开发模式。 瀑布模型的一个最大缺陷在于可以运行的产品很迟才能被看到。这会给项目带来很大的风险尤其是集成的风险。因为如果在需求引入的一个缺陷要到测试阶段甚至更后的阶段才发现通常会导致前面阶段的工作大面积返工业界流行的说法是“集成之日就是爆炸之日”。尽管瀑布模型存在很大的缺陷例如在前期阶段未发现的错误会传递并扩散到后面的阶段而在后面阶段发现这些错误时可能已经很难回头再修正从而导致项目的失败。但是目前很多软件企业还是沿用了瀑布模型的线性思想在这个基础上做出自己的修改。例如细化了各个阶段在某些重点关注的阶段之间掺入迭代的思想。在瀑布模型中测试阶段处于软件实现后这意味着必须在代码完成后有足够的时间预留给测试活动否则将导致测试不充分从而把缺陷直接遗留给用户瀑布模型优缺点总结瀑布模型存在很严重的项目风险那瀑布模型就不能够被采⽤了吗瀑布模型的适⽤场景需求固定的小项目然而企业中存在许多些规模庞大、复杂度高、风险大的项目这种情况下可以哪种模型呢2.3.2 螺旋模型⼀般在软件开发初期阶段需求不是很明确时采⽤渐进式的开发模式。螺旋模型是渐进式开发模型的 代表之⼀。这对于那些规模庞⼤、复杂度高、⻛险⼤的项⽬尤其适合。这种迭代开发的模式给软件测试带来了新 的要求它不允许有⼀段独⽴的测试时间和阶段测试必须跟随开发的迭代⽽迭代。因此回归测试 的重要性就不言而喻了。适⽤场景规模庞大、复杂度高、风险大的项目。2.3.3 增量模型、迭代模型增量开发能显著降低项项目险结合软件持续构建机制构成了当今流⾏的软件工程最佳实践之⼀。增量开发模型⿎励⽤⼾反馈在每个迭代过程中促使开发⼩组以⼀种循环的、可预测的⽅式驱动 产品 的开发。因此在这种开发模式下每⼀次的迭代都意味着可能有需求的更改、构建出新的可执 ⾏软件 版本意味着测试需要频繁进⾏测试⼈员需要与开发⼈员更加紧密地协作。与此类似的有⼀个迭代开发增量开发和迭代开发往往容易被⼈但是其实两者是有区别的。增量是 逐块建造的概念迭代是反复求精的概念。增量模型是先画⼈的头部再画⾝体再画⼿脚……迭代模型是先画整体轮廓再勾勒出基本雏形再细化、着色...适用场景⼤型项目需求不明确增量将大需求拆分成小需求每个小需求独立开发上线迭代基础版本、优化版本1、优化版本2...2.3.4 敏捷模型在早期迭代瀑布模型⾮常流⾏来完成⼀个项⽬。但是现在开发⼈员在使⽤它开发软件时⾯临着各种各样的问题。主要困难包括在项⽬开发期间处理来⾃客⼾的变更请求以及合并这些变更所需的⾼成本和时间。为了克服瀑布模型的这些缺点在1990年代中期提出了敏捷软件开发模型。敏捷模型主要旨在帮助项⽬快速适应变更请求。因此敏捷模型的主要⽬的是促进项⽬的快速完成。要完成这项任务需要敏捷。敏捷性是通过使过程适应项⽬删除对特定项⽬可能不是必需的活动来实现的。此外避免任何浪费时间和精⼒的事情。在敏捷模型中需求被分解成许多可以增量开发的⼩部分。敏捷模型采⽤迭代开发。每个增量部分都是在迭代中开发的。每次迭代都旨在⼩⽽易于管理并且只能在⼏周内完成。⼀次为客⼾计划、开发和部署⼀个迭代。没有制定⻓期计划。实际在工作中一款产品的功能是不断在变化的。例如王者 v23版 v24版 还有浏览器...敏捷模型中有⼀个⾮常重要的《敏捷宣⾔》宣⾔内容个体与交互重于过程和⼯具强调高效的沟通可用的软件重于完备的文档强调轻文档、文档不应该作为工作验收的标准客户协作重于合同谈判主动及时了解当下的需求响应变化重于遵循计划能够主动迎接变化宣⾔中主要运⽤了对⽐的⼿法然而在每对⽐对中后者并非全⽆价值但我们更看重前者。通过敏捷宣⾔可以总结出敏捷模型的四个特点轻⽂档轻流程重⽬标重产出。敏捷开发有很多种⽅式其中scrum是⽐较流⾏的⼀种。Scrum是敏捷模型中的⼀种⼜称为迭代式增量软件开发模型。在scrum模型中主要有三个⻆⾊和五个重要会议。三个⻆⾊scrum由product owner(产品经理)、scrum master(项⽬经理)和team(研发团队)组成。• 其中product owner负责整理user story(⽤⼾故事)定义其商业价值对其进⾏排序制定发布计划对产品负责。• scrum master负责召开各种会议协调项⽬为研发团队服务。• 研发团队则由不同技能的成员组成通过紧密协同完成每⼀次迭代的⽬标交付产品。迭代开发与瀑布不同scrum将产品的开发分解为若⼲个⼩sprint(迭代)其周期从1周到4周不等但不会超过 4周。参与的团队成员⼀般是5到9⼈。每期迭代要完成的user story是固定的。每次迭代会产⽣⼀定的交付。scrum的基本流程如上图所⽰产品负责⼈负责整理user story形成左侧的product backlog。• 发布计划会议product owner负责讲解user story对其进⾏估算和排序发布计划会议的产出就是制定出这⼀期迭代要完成的story列表sprint backlog。• 迭代计划会议项⽬团队对每⼀个story进⾏任务分解分解的标准是完成该story的所有任务每个任务都有明确的负责⼈并完成⼯时的初估计。• 每⽇例会每天scrum master召集站⽴会议团队成员回答昨天做了什么今天计划做什么有什么 问题。• 演⽰会议迭代结束之后召开演⽰会议相关⼈员都受邀参加团队负责向⼤家展⽰本次迭代取得的成果。期间⼤家的反馈记录下来由po整理形成新的story。• 回顾会议项⽬团队对本期迭代进⾏总结发现不⾜制定改进计划下⼀次迭代继续改进以达 到持续改进的效果。敏捷中的测试• 轻⽂档和快速迭代◦ 敏捷模型中强调轻⽂档所以测试⼈员不应使⽤传统的Excel编写测试⽤例的⽅法更多的是 使⽤思维导图、探索性测试强调⾃由度设计和执⾏同时进⾏根据测试结果不断调整测 试计划、⾃动化测试等◦ 敏捷讲求合作在敏捷项⽬组中测试⼈员应多主动跟开发⼈员了解需求、讨论设计、⼀起研究bug出现的原因。2.4 测试模型测试模型中有两个⾮常重要且具有标志性的测试模型V模型和W模型2.4.1 V模型V模型最早是由Paul Rook在20世纪80年代后期提出的⽬的是改进软件开发的效率和效果。是瀑布模型的变种 。优点• 明确的标注了测试过程中存在的不同类型的测试并且清楚的描述了这些测试阶段和开发过程期间 各阶段的对应关系有效提升测试的质量和效率。• V模型指出◦ 单元和集成测试应检测程序的执⾏是否满⾜软件设计的要求◦ 系统测试应检测系统功能、性能的质量特性是否达到系统要求的指标◦ 验收测试确定软件的实现是否满⾜⽤⼾需要或合同的要求缺点仅仅把测试作为在编码之后的⼀个阶段未在需求阶段就介⼊测试。缺点同瀑布模型。2.4.2 W模型(双V模型V模型中未将测试前置的问题在W模型中得以解决。W模型增加了软件各开发阶段中应同步进⾏的验证和确认活动。W模型由两个V字型模型组成分别代 表测试与开发过程图中明确表⽰出了测试与开发的并⾏关系。特点测试的对象不仅是程序需求、设计等同样要测试测试与开发是同步进⾏的优点• 有利于尽早地全⾯的发现问题。例如需求分析完成后测试⼈员就应该参与到对需求的验证和确 认活动中以尽早地找出缺陷所在。同时对需求的测试也有利于及时了解项⽬难度和测试⻛险及早制定应对措施显著减少总体测试时间加快项⽬进度。缺点• 需求、设计、编码等活动被视为串⾏的• 测试和开发活动也保持着⼀种线性的前后关系上⼀阶段完全结束才可正式开始下⼀个阶段⼯ 作。• 重流程⽆法⽀持敏捷开发模式。对于当前软件开发复杂多变的情况W模型并不能解除测试管理⾯临着困惑。