构建之法学习(第八章 需求分析)

 

第八章 需求分析


一、软件需求分析步骤

         1. 获取和引导需求,即需求捕捉

                  找到软件的利益相关者,了解和挖掘他们对软件的需求,引导他们表达出对软件的需求。利益相关者即最终用户、客户、市场分析师、监管机构和软件工程师。

         2. 分析和定义需求

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

         3. 验证需求

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

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

      在软件的生命周期中,需求在发生变化,技术在发展,团队成员的能力也在提高。这些都要求我们不断对需求进行重新审核并做出相应的调整。

 

二、软件需求的划分

    1. 对产品功能性的需求

      要求产品必须实现某些功能。例如,学校的选课软件只允许有学生身份的用户浏览并选择课程,同时要求学生选择某一门课时必须要满足“先修课”的要求,等等

    2. 对产品开发过程的需求

      要求软件的开发流程必须满足某些约束条件,例如,开发过程必须产生某种类型的文档,必须在某个时间点达到某个状态,必须对源代码施以某种约束(安全性核查、代码版权核查、代码规范和支持文档的核查)

    3. 非功能性需求

      这也叫“服务质量需求”。例如,股票交易系统必须在一定时间内返回用户查询结果(它对时间的要求要比“科技文献检索”网站要高),火车票购票系统、大学选课软件必须能支持一定数量的用户同时访问,等等

    4. 综合需求

      有些需求并不是单单一个软件模块就能满足,例如,“购物网站必须在24小时内把货物发送到用户手中”,这个需求牵涉到软件系统、货物派送系统、送货部门、监控系统等不同部门的功能和执行能力。软件团队和客户代表要在需求阶段把这些问题定义清楚。

 

三、获取用户需求——用户调查

         1. 焦点小组

    找到一群目标用户的代表,加上项目的利益相关者来讨论用户想要什么,用户对软件的评价等等。

         2. 深入面谈

    通过详细的面谈,广泛而深入地了解用户的背景、心理、需求等。这通常是一对一的采访。这种方法费时费力,效果往往取决于主持面谈的团队成员的能力。

         3. 卡片分类

    收集反馈时利用“卡片分类”的办法,把各种需求做成便于规整的小卡片(也可以写在小贴纸上),反复进行 讨论-->明晰定义-->归类-->排序 的活动。

         4. 用户调查问卷

    指向用户提供事先规定好的问题,让用户回答。

         5.用户日志研究

           要求用户记录自己日常工作或生活中与所用软件相关的行为,供软件团队分析。

         6.人类学调查

           和目标用户“同吃同住同劳动”。

         7.眼动跟踪研究

         8.快速原型调研

           用户参与式设计,拿一些纸张模型,让用户去使用,得到反馈。

         9.A/B测试

            决定试验哪两种不同的UI,以及衡量标准、数据收集流程、试验运行时间、人数

    在技术上实现A/B测试(通常在5%—10%的用户上运行试验)

    收集数据,分析数据,形成结论。

 

四、竞争性需求分析的框架

       N(Need,需求):

       充分了解用户的痛苦,他们对已有软件、服务不满意的地方。

       A(Approach,做法):

       在技术、商业模式等方面拥有独特的招数。

       B(Benefit,好处):

       独特的做法下,考虑这个产品/服务会给客户/用户带来什么好处。

       C(Competitors,竞争):

       分析清楚敌我的优势和劣势,满足用户需求。

       D(Delivery,推广):

       想办法把创新的产品交到用户手中。

 

五、功能分析的四象限方法

   维持——以最低成本维持此功能

   抵消——快速地达到“足够好”,“和竞争对手差不多”

   优化——花大力气做到并保持行业最好

   差异化——产生同类产品比不了的功能或优势

   不做——砍掉一个功能,不一定要做所以的功能

 

这里写图片描述

 六、计划和估计

  软件项目计划的一个重要环节就是估计项目各类工作(特别是各种功能)所需的时间。

  *目标:表明一个希望达到的状态。

  *估计:以当前了解的情况和掌握的资源,要花费多少人力物力时间才能实现某事。

  *决心:保证在某个时间之前完成预先规定的功能和质量。

  整个软件项目的时间估计:

    1.自底向上。团队成员各自估计底层模块和单个功能(及单元测试)所需的时间,再加上集成及基本测试的时间,就是大概的开发时间。

    2.回溯。团队从整个项目最终交付之日往回倒推

  项目的复杂程度的决定因素:

    1. 需求的复杂程度:程序员是第几次实现类似的需求?

    2. 技术的复杂程度:程序员是第几次用这个技术实现?

 

posted @ 2017-06-03 17:19  FvU  阅读(167)  评论(0编辑  收藏  举报