首页 > 代码库 > 第八章需求分析小结

第八章需求分析小结

需求分析方法:

1.获取和引导需求

软件团队需要找到 软件的利益相关者,了解和挖掘他们对软件的需求,引导他们表达出对软件的需求。

 不同的项目需要不同的手段,这一步骤也被叫做“需求捕捉”,形容真正的需求稍纵即逝,需要靠火眼金睛和敏捷的身手来发现并抓住它们。另外,很多时候用户并不知道自己确切的需求,或者不愿意表达完整的需求,软件团队需要设身处地,替用户着想,引导出需求。有些需求在实现之前,并没有用户明确表达具体的需求(例如:没有用户说“我希望有一个偷菜的软件,我可以偷别人家的菜”),但是,成功的团队还是可以从“用户需要和朋友之间玩游戏,用户有证明自己能力的需求”这些角度出发,挖掘出需求。另外,软件团队可以分析技术的发展趋势以及产业的变化、社会发展的大趋势,推测用户会产生哪些新的需求。例如,看到全球定位系统(GPS)技术的成熟、地理信息系统的发展、私家车的普及和智能手机性能的不断提高,我们可以推测出利用手机给汽车导航将是一个普遍的需求

需求还可以来自各种 管理机构 

例如一些互联网服务对不同年龄用户的内容管理\“敏感词屏蔽”、快速删除网上内容,等等

需求不仅来自外界,还可以来自 软件企业本身 

软件企业=软件+商业模式。企业所采用的商业模式会对软件提出需求。一个免费的互联网服务到达一定规模后,企业就会考虑如何让这个服务带来收入,例如一个免费的互联网电子邮件服务会考虑对用户收费,支持几种不同等级的用户,在邮件中附带广告,或者在页面显示广告,等等。这些“需求”并不是来自用户,事实上绝大部分用户都反感这样的“需求”,但是企业需要一个能维持它生存和发展的商业模式,尽管这个模式的种种需求未必都是对用户有利的

需求还可以来自技术团队本身 

团队在考虑软件的代码、架构、所依赖平台的长期演化的时候,会提出技术性的需求,包括代码的迁移、架构的演化、平台的变化,或者引入新的技术。例如,为了提高将来的开发效率,一个手机软件的开发者决定逐步引入跨平台的语言和框架;一个依赖客户端/服务器(Client/Server)架构的软件需要支持新的HTTPS协议;原来后台的数据服务使用了专用的数据库和专门的小型机,现在改为基于开源技术的软件和硬件;软件前端代码需要支持某种自动测试工具,以便更有效地进行自动测试,等等

有些需求的目的是要 更好地了解用户的行为和需求

例如,我们要在软件的各个功能点加上收集信息的代码,并在后台实现数据收集、整理、报告和数据挖掘(Data Mining)工作。此类技术在一些公司叫Telemetry—遥测技术

2. 分析和定义需求(Analysis & Specification)

这是指对从各个方面获取的需求进行规整,定义需求的内涵,从各个角度将需求量化(需求实现的最后期限,实现需求大致所需的时间和资源成本,各个不同需求的优先级,需求带来的收益,等等)

3. 验证需求(Validation)

软件团队要跟利益相关者沟通,通过分析报告、技术原型、用户调查或演示等形式向他们验证软件团队对于这些需求的认知

4. 在软件产品的生命周期中管理需求(Management)

在软件的生命周期中,需求在发生变化,技术在发展,团队成员的能力也在提高。原来认为重要的事情可能不再重要,有些功能原来技术上很难实现,现在出现了捷径,一些相关的法规会发生变化,外部的合作伙伴突然发生变化,这些都要求我们不断对需求进行重新审核并做出相应的调整

 

 

获取用户需求:

用户最需要的> 
  用户表达出来的> 
    软件团队能理解的 + 团队的商业目标> 
       软件团队成员具体表达出来的(PM写Spec)> 
         在各种约束条件下,具体执行表达出来的(Dev写代码)> 
           验证通过的(Test)> 
             通过各种渠道告诉目标用户(发布/推广)> 
               用户终于能用上了,但是他们不满意

 

竞争性需求分析的框架 —— NABCD模型:

1. N(需求) 
你的创意解决了用户的什么需求?这个需求可以是明确的、公开的(例如:希望能上网玩三国杀)也可能是说不清道不明的,例如——以前没人说:嗯,如果我能找到这样一个网站,我可以去偷菜,就好了……我们要充分了解用户的痛苦,他们对已有软件、服务不满意的地方。但是用户往往也不了解颠覆型的创新。例如,亨利·福特是汽车行业的先驱,如果他深入用户(马车夫),征询他们的需求,马车夫会告诉他:我希望我的马跑得更快一些

2. A(做法) 
好,你找到了需求,下一步怎么办,得看看你有什么招数,特别是独特的招数,来解决用户的痛苦。你不能说我会C++,所以我一定可以写好这个软件。你得有独特的办法,例如,有人脸识别技术,会做超大规模的数据处理。那你(你的团队)会什么呢?只会冒泡排序?这些招数不光是技术上的,也可以是商业模式上的(例如,我们第一个做众包的服务)、地域的(例如,我们对本市的公交线路很熟)、人脉的(例如,我们认识很多大学生)、行业的(例如,我们有地图测绘行业的资质),或者是成本上的(例如,我们能找到更便宜的资源来维护网站)。

3. B(好处) 
这时候你已经有了独特的做法,那你这个产品/服务会给客户/用户带来什么好处呢?如果用户已经有一个解决方案(例如用户已经在用QQ聊天),那你的新的聊天软件具体有哪些好处,能让用户离开现有产品,使用你的产品呢?这还有一个用户迁移成本的问题——用户要花费多少精力、时间、金钱才能得到你的产品的好处?如果你要求用户必须有8GB内存、最好的显卡、10Mbps以上的宽带连接,才能使用你的“更好的”视频聊天工具,那么会有多少用户愿意支付这个成本呢?

4. C(竞争) 
竞争对手也没有闲着,这个市场有多大,目前有多少竞争者在瓜分,你了解么?你的产品如果不是最先进入某个市场的,你还能赢么?先进入市场的产品,有所谓的先发优势,当然也有劣势。后面进入市场的产品,有种种不利的因素,但是也有后发优势。

 5. D(推广) 

在实际项目中经历多次的NABC之后,许多人意识到这个框架还应该加一个元素D:Delivery。怎样把你的创新产品交到用户的手中?例一,你想到了一个好主意,建一个比hao123更好的导航页面!我们姑且认为NABC都没问题,那如何把这么好、这么简单的产品交到(Deliver)用户手中呢?例二,你想到了一个手机的应用,NABC都不错,那如何把产品交到千万个用户手中呢?很多同学会说,把它提交到应用商店去啊!但是在中国大陆有多少个手机应用商店?你的应用提交上去之后,会在相应的产品类别中名列第几?有多少人会看到?

第八章需求分析小结