构建之法05
这篇博客我打算记录一下软件工程中必不可少的组成部分-需求分析。
我以前理解的需求分析是用户对这个软件的要求,希望实现的功能,但是通过阅读才发现,原来需求并不仅仅是指用户的要求,需求来源其实包括很多方面:来自管理机构(“敏感词”屏蔽)、软件企业本身(真想不到这也是,但是一想还真是,这关系到软件公司的财政来源要打广告挣钱)、技术团队本身(这是我万万没有想到的,以前总是注意用户,其实我们开发人员也是需求分析中重要的组成部分,我们要考虑到边界条件,难易程度,长期演化等等问题)。以上这些我从没考虑过的问题都是必须要考虑到的问题。
对于开发者来说,从开发者角度来说的需求分析应该是比较简单的的,那么如何来获得用户需求呢?我想就快速原型调研和A/B测试调研进行相应的记录介绍。
快速原型法,就是用一种简单的事物工具对所要开发的软件进行简单的模拟。例如可以用纸张去画,通过画出软件界面,从而更加明确软件的功能。我觉着这是一个非常好的办法,直观简单,而且能最大限度的了解用户的需求,比较具象。这就像读电子书和读纸质书的区别,纸质书就像这个小工具,可以谁是记录,随意记录,方便灵活,但是电子书就像是空谈,非常不方便。还有就是像教师上课讲PPT和是用黑板的巨大差别,我总是觉得PPT的发明毁了无数的有志学子。
A/B测试,简单来说就是用旧版的产品和新版的产品同时让部分用户选择使用,分析新版使用率和使用反馈,从何获得更进一步的用户的需求。这让我想到了360做的主页:打开是旧版,但是顶部有一个新版入口,用户可以选择使用两者中的任意一个,这样进行用户的需求调研,不会让已有的用户流失掉。
以上说的都是从一家公司的角度出发,没有考虑到竞争的存在,下面简单介绍一下竞争需求分析的框架。简单来说,竞争就需要分析挖掘市场需求,分析自身优势,分析对手优势,找准关键,一举拿下。方法有NABCD(Need Approach Benefit Competiors Delivery)。即首先充分了解用户的痛苦和需求、找到解决办法、指出为用户带来的好处(要充分考虑用户迁移成本问题)、分析市场大小和竞争者的优势、最后最重要的是要考虑如何推广。我认为其中最关键的是“竞争”,要分析自身和对手的优势劣势,找准最痛最痒的地方。
关于软件功能的定位问题。这个可以用下图来表示。分为外围功能、杀手功能、必须需求、辅助需求。
这里边最关键的是杀手功能,即自己团队开发的核心功能,只有找准自己的定位,才能最快的成功,额,类似于一美遮百丑。
关于估计问题。文中讲述了一个称谓Wideband Delphi的方法。主要说的是有组织的进行讨论,每次讨论针对不同的角度,不同的问题,列出各种假设,找到针对此问题的最佳假设。最后就能够获得整个工程的最佳假设。这样来的好处是能够快速的明确工程的各种问题,而且在一定程度上会非常的全面,我觉得这种方法很好。
关于分而治之的讨论。这是一种应用最广泛的方法吧。大事化小,小事化了。当面对一个十分复杂的问题的时候,我们可以将它进行一层一层的划分,对每一个小问题进行解决,最后整个工程就被解决了,非常完美。