一、验收测试驱动开发

针对MVP采用的假设验证过程很很像敏捷中经常提到的测试驱动开发(TDD), 我称之为【验证假设驱动开发HVDD(Hypothesis Validation  Driven Development)】 ,涉及到如下四步流程:

1).提出需要验证的前提假设

2).建立观测数据指标

3).开发最小可行产品

4).搜集数据验证假设

当你想要开发MVP的时候,为避免过度开发,避免浪费,建议考虑如下简单原则: 放弃对你将要进行的假设验证没有直接用处的一切功能、流程或努力,以达到快速实验的目的。巴菲特的投资理论里面讲“少即是多”,也是同样的道理。

很多人肯定会担心MVP的质量问题。其实,质量与速度总是相辅相成的,开发MVP,与我们所提倡的高质量产品并不矛盾。在MVP里,我们只是首先拿一个客户的刚性需求,并对其进行重点开发,把这个功能做到极致(极致的意思,其实质量是很重要的一环),而忽略其他暂时对验证假设无用的功能,然后迅速投向市场。

虽然有时,我们的MVP可能看起来很简陋,或者还不能称之为一个理想的合格产品,但一定要有勇气拿出来晒一晒,让用户提前检验;如果客户认可,则继续完善;如果客户根本不认可,需要立即更换方向,开始下一次实验。如果你一直待在自己的金字塔里,闭门造车,即使做出来一堆“漂亮的垃圾”,但因无用,浪费更多,干做无用功。

采用验证假设驱动开发(HVDD),只是帮我们解决了快速检验前进的方向对或不对的问题,但要真正占领一个细分市场,还需要跨越多条鸿沟。

其实之前,我们还做过另外一个试验,这里也分享给大家,是关于求职者是否有打印彩色简历的需求。[样例来源【敏捷一千零一夜】

我们依然从验证假设出发。

1. 提出需要验证的前提假设

  • 价值假设:学生用户因为项目经验、实际工作技能等简历要素的缺乏,应届学生相互之间可比性较差,会倾向于在简历形式等方面下功夫,以赢得面试机会。而彩色的简历,会让他们脱颖而出,故他们可能会打印彩色简历。

  • 增长假设:学生用户应该具备很强的羊群效应,因为同学都在打印彩色简历,故自己也会打印。

2. 建立观测数据指标:

有打印彩色简历需求的学生占所有学生求职者的比例;

3. 开发最小可行产品

通常如果把在线简历转换成可打印的彩色简历,需要如下功能

1) 多种输出模板的选择(模板开发需要提前进行)

2) 个性Logo上传 (譬如学校校徽)

3) 在线微调(类似在线PS,需要精确控制输出内容,避免将原本一页的内容输出到两个打印页面,这肯定是很大的一块工作)

4) 预览

5) 生成可打印的文件或图片

初步估算,如果把上述内容全部实现,估计2个迭代左右(20工作日);根据前面名片的经验,这次我们也没有急于开发这项功能,而是采用了类比和反证分析法来验证我们的假设。

4. 搜集数据验证假设

首先,我们参加了天津大学举办的华北地区应届本科生双选会,在会上,看到只有很少比列的学生拿的是彩色简历,应该不到1%;在天津大学校园内有三家较大的打字复印社,学生们的简历多数是从这里打印的,调查了一下复印社的老板,他们说打印彩色简历的比例少之又少,虽然有,但很少见,估计七八十人有一个;定向调查了三家招聘应届生较多的公司,HR一致反馈,彩色简历很少,每天收上来几百份,最能看到一两份。从这三个数据,我们可以在没有开发任何功能代码的情况下,轻松验证了之前的价值假设不成立,那自然增长假设也就没有意义了!于是,这个功能被果断的束之高阁。

二、测试驱动开发

测试驱动开发,英文全称Test-Driven Development,简称TDD,是一种不同于传统软件开发流程的新型的开发方法。它要求在编写某个功能的代码之前先编写测试代码,然后只编写使测试通过的功能代码,通过测试来推动整个开发的进行。这有助于编写简洁可用和高质量的代码,并加速开发过程。

2.1、基本原理

试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码,然后只编写使测试通过的功能代码,从而以测试来驱动整个开发过程的进行。这有助于编写简洁可用和高质量的代码,有很高的灵活性和健壮性,能快速响应变化,并加速开发过程。

测试驱动开发的基本过程如下:

  • 快速新增一个测试
  • 运行所有的测试(有时候只需要运行一个或一部分),发现新增的测试不能通过
  • 做一些小小的改动,尽快地让测试程序可运行,为此可以在程序中使用一些不合情理的方法
  • 运行所有的测试,并且全部通过
  • 重构代码,以消除重复设计,优化设计结构

简单来说,就是 不可运行/运行/重构--这正是测试驱动开发的口号。

2.2、测试驱动开发中测试的特征

测试驱动开发中需求分析和详细设计的范畴,在代码基本完毕以后,并且这些测试也成为单元测试的一个部分。

2.3、本质优势

  • TDD根据客户需求编写测试用例,对功能的过程和接口都进行了设计,而且这种从使用者角度对代码进行的设计通常更符合后期开发的需求。因为关注用户反馈,可以及时响应需求变更,同时因为从使用者角度出发的简单设计,也可以更快地适应变化。
  • 出于易测试和测试独立性的要求,将促使我们实现松耦合的设计,并更多地依赖于接口而非具体的类,提高系统的可扩展性和抗变性。而且TDD明显地缩短了设计决策的反馈循环,使我们几秒或几分钟之内就能获得反馈。
  • 将测试工作提到编码之前,并频繁地运行所有测试,可以尽量地避免和尽早地发现错误,极大地降低了后续测试及修复的成本,提高了代码的质量。在测试的保护下,不断重构代码,以消除重复设计,优化设计结构,提高了代码的重用性,从而提高了软件产品的质量。
  • TDD提供了持续的回归测试,使我们拥有重构的勇气,因为代码的改动导致系统其他部分产生任何异常,测试都会立刻通知我们。完整的测试会帮助我们持续地跟踪整个系统的状态,因此我们就不需要担心会产生什么不可预知的副作用了。
  • TDD所产生的单元测试代码就是最比较好的开发者文档,它们展示了所有的API该如何使用以及是如何运作的,而且它们与工作代码保持同步,永远是最新的。
  • TDD可以减轻压力、降低忧虑、提高我们对代码的信心、使我们拥有重构的勇气,这些都是快乐工作的重要前提。
  • 快速的提高了开发效率。

三、缺陷驱动开发

四、特征驱动开发

4.1、为什么需要FDD

FDD没有传统工程中冗长的设计过程,而是通过边设计边开发进行迭代完善,因此它非常适合项目的快速开发,由于不断的竞争,现在一个项目的交货周期越来越短,需要在极短的时间内开发一个可维护、可拓展的高质量软件系统已经是形势所逼。

  软件开发人员喜欢新的事情,使用FDD每两周就有新的事情可做,而且每两周就可以交货完成一些工作,离目标越来越近,这种 Closure感觉在开发队伍中是很重要的,可以让大家万众一心,有一种拧在一起的冲劲,从而潜在地提高开发人员的积极性。

  同时,项目经理也会喜欢FDD,通过FDD,他们能够知道规划什么、以及确立关键开发阶段,经理们可以频繁参与项目协调和管理,同时掌握大家的工作成果,从而了解整个项目完成的百分比进度,例如是完成了57%还是其他数字。

  软件系统的客户也回喜欢FDD,他们能够参与或看到开发过程中的关键阶段,能够看见前一阶段的开发结果,以确认和他们要的是否一致,并提出下一步修改意见。

4.2 FDD是什么?

FDD是一个模型驱动( model-driven)、短期遍历(short-iteration)的过程. 注意,FDD是一个开发过程,过程总是有起点和终点,FDD的起点是起源于创建一个全局的模型轮廓(不要求很精确,大概模样就可以),然后大概是两周的一系列的"design by feature, build by feature"的迭代,逐渐丰富模型功能内容,features是指小的、以软件用户的视角看是有用的特征功能,一个FDD开发过程

翻译过来就是:开发整体模型--》构建功能列表--》计划功能开发--》按照功能设计-->按照功能构建

软件开发框架(更新中)相关推荐

  1. ubuntu18.04“软件与更新”中无附加驱动问题(已解决)

    刚安装完ubuntu18.04系统之后,想开启独显驱动,但是在"软件与更新"中不现实附加驱动(尝试过网络上其他方法但没有解决).这里我在"软件与更新"的&quo ...

  2. 软件测试题(更新中)

    1,Beta 测试是验收测试的一种.请判断这句话的正确与否. 正确 2,语句if(a>5 && b<0)满足条件组合覆盖需要设计测试用例的个数为( ) 4 if语句中的a& ...

  3. Docker部署常用软件(持续更新中)

    mysql数据库安装 mysql数据库部署以docker为例 执行命令启动mysql #-d后台运行 --name容器名称 -p端口映射 -v目录映射 #-e MYSQL_ROOT_PASSWORD ...

  4. 精品软件不断更新中(6月27日)

    Microsoft Virtual PC 2007 正式版 下载地址: http://www.xun6.com/file/3f77f2514/Microsoft+Virtual+PC+2007+%E6 ...

  5. 【STM32-V7】STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22)

    [STM32-V7]STM32H743XIH6开发板,丰富软件资源,强劲硬件配置,大量软件解决方案持续更新中(2020-07-22) 参考文章: (1)[STM32-V7]STM32H743XIH6开 ...

  6. 找软件完全安装手册——【19年3月】各行业软件大全\系统安装、系统装机、软件安装、各种完全手册更新中(来自第一设计群)

    找软件完全安装手册--[各行业软件大全\系统安装.系统装机.软件安装.各种完全手册更新中(来自第一设计群) 各类软件安装包.安装手册(新手点我进入下载指南) 大菜单(完全卸载清理各种软件.回复本公众号 ...

  7. 提升工作效率的软件及网站(不断更新中)

    软件类 CopyTranslator.exe  在线翻译软件,官方下载地址链接,按照他的readme.md安装即可. WinSCP.FileZilla  本地计算机和远程服务器便捷传文件(这个只是偷懒 ...

  8. 亲测好用的软件(持续更新中)

    目录 系统管理类 微软电脑管家 XMeters Geek Uninstaller 系统辅助类 Snatch WizTree Search Everything 个人管理类 MyLifeOrganize ...

  9. 【1.1,已适配机房助手7.5】更新中!淦翻极域、机房助手的超强软件,附代码思路

    本文内容仅供学习,不得用于商业用途 这是0.5版本的截图,最新版是1.1,功能丰富了一些.传送门 目录 使用说明 任务栏托盘图标 快捷键 杀掉极域进程 挂起(即冻结)/恢复极域 破解密码 杀掉学生机房 ...

最新文章

  1. 一个古老的问题HashMap与Hashtable区别
  2. Spring Boot 2.x基础教程:MyBatis的多数据源配置
  3. 二叉排序树经典算法速成
  4. Markdown与 $\LaTeX$ 公式的使用入门指南
  5. 如何进行云主机迁移?看这一篇文章就够了!
  6. Kafka概念入门(一)
  7. 【深入理解Java虚拟机学习笔记】第三章 垃圾收集器与内存分配策略
  8. 高速公路上边有没有人脸识别摄像头_人脸识别特征介绍以及难题概括
  9. python爬虫之使用fake_usragent随机更换User_Agent
  10. 洛谷p5369[PKUSC2018]最大前缀和
  11. markdown编辑器Typora的使用方法(保姆级教程)
  12. OSPF三种验证配置
  13. git中的origin
  14. 怎样将多个视频快速分割成两段或者多段
  15. Wallpaper Engine壁纸推荐,让程序猿的桌面优美起来
  16. 设计模式六大原则——单一职责原则(SRP)
  17. 按下 Home 键后发生了什么事?
  18. 突击蓝桥杯嵌入式(一)——内容概览
  19. MIPI摄像头工程=7系列FPGA + OV5640(MIPI) + 15 分钟 + VITIS
  20. Exoplayer的缓存 二 下载服务DownloadService

热门文章

  1. oracle 取上季末日期,怎么获取上上个季度最后一天日期
  2. hdu7244-Winner Prediction(22多校第十场1001 dinic最大流)
  3. 在JAVA中调用MATLAB程序
  4. python程序论文答辩_毕业论文答辩的程序是怎样的?
  5. antv x6 v2 使用笔记
  6. mysql连接时报错:2003 - Can‘t connect to MySQL server on ‘127.0.0.1‘ (61 “Connection refused
  7. VC++类型转换大全
  8. 一个html页面(包括js代码)导入另一个html页面
  9. 如何转换为html格式,怎样将Excel在线转HTML网页格式
  10. Java 常用集合类学习