zoukankan      html  css  js  c++  java
  • 读《有效需求分析》

    最近在一个技术群里看到张逸大佬强力推荐一本关于需求分析的书《有效需求分析》,于是在 Kindle 上下单了,读完后有一种相见恨晚的感觉。

    本书特点

    从书中的一些案例可以看出,作者擅长 ToB 软件的需求分析,如果您是从事的 ToB 软件的相关工作,那阅读本书时会有更多的共鸣。

    书中有大量的案例,阅读起来不仅不枯燥,反倒觉得挺有意思,特别是一些日常生活中例子,能引发我们更多的思考。

    每一个章节都有能落地的产物输出,所有的产物整合在一起就是完整的需求文档,可以让你不仅知道一些理论,还知道怎么落地。

    我们常见的问题

    1、辛辛苦苦开发的系统,跟客户演示的时候达不到客户的预期;

    2、上线后,客户反复提出“变更”,从客户视角来看是功能没有按要求完成,从开发的视角感觉客户在百般刁难;

    3、边界难以控制,已经按照“要求”完成了,客户还不断提出新的东西。

    读完这本书可以立即解决这些问题吗?答案肯定是不能,但能给我们带来启发和思考,能让我们在解决这些问题的路上往前迈进一步。

    书中的内容不少,本文只是我结合自己的认知把觉得重要的点展开来说说。

    什么是需求

    什么是需求?书中给出了一个非常精炼的回答:现实和期望之间的差距。就是中间这个差距需要我们去思考、调研,这是一个迭代的过程,直到最后达到期望甚至超过期望,如果用了一些错误的方法,或者被客户牵着鼻子走,最后结果可能还不如现实。

    方案不是需求

    开篇例举的一个生活中的小例子充分说明了什么是需求,什么是方案:

    晚上小孩吵着说要吃饼干,最后给了点面包,小孩吃完就乖乖睡着了,在这里吃饼干是方案,需求是小孩的肚子饿了,当没有饼干时,可以使用第二种方案,给他吃面包也可以解决这个需求问题。

    如果客户的接口人稍微懂点技术,在做需求调研时就很容易提出方案级的需求,这时就需要警惕了,需要用一些问题来深挖背后的真是需求,比如:

    • 为什么会有这样一个项目,是因为同行业都有?还是因为内部管理需要?
    • 这个系统是哪些角色的人用?能解决他们什么问题?
    • 没有这个系统的时候现在是怎么来解决这些问题的?
    • 用户使用这功能的频率是多少?这功能如果做砸了,对谁影响最大?

    如果能挖到真实的需求,就可以根据情况来制定最优方案了。如果我们“完美”地满足了客户提出的“方案级需求”,最终的结果未必能让客户满意,客户通常善于发现问题,提出问题,但给出的方案往往不能完美解决问题。

    在公司的内部其实也存在着这种问题,比如项目团队的同事在遇到产品满足不了的功能时,需要给产品提需求,经常看到的需求描述是:

    • 在某某功能模块添加一种按钮类型;
    • 在某某地方需要多一种搜索条件的配置。

    这些都是方案,而不是需求,项目的同事根据自己的理解和认知完成了从需求到方案的转换,而这个方案很多时候并不是最优。

    所以每每收到这种“需求”时,会马上跟项目的同事反复确认客户到底想要什么,了解到真实背景后,才能结合产品的功能给出合适的解决方案。

    干系人

    任何企业准备上一套系统有各种各样的原因,可能是为了提高生产效率、提高协同办公效率,也可能是为了做一些政绩。所以针对不同的场景,我们首先需要找出这个系统的相关干系人。

    识别干系人有几个重要的判断标准:

    • 是否是关键部门复杂人?
    • 是否对项目有一票否决权?
    • 系统上线是否对大量的使用者产生负面影响?比如:工作模式改变等
    • 识别出的人员是否与项目有直接关系?

    如果能够准确的识别关键关系人,还需要对关系人进行分析:

    • 同一类如果有多个干系人,需要选出最有代表性的一个;
    • 不同干系人之间是否有利益冲突;
    • 干系人的专业背景、兴趣爱好(方便日后沟通);
    • 不同的干系人在各自角色上希望项目能解决什么问题?
    • 对项目的落地有什么担心?

    做项目不光是要做好事,关键还要能搞定人,能让重点干系人感受到系统的价值,项目就容易成功。

    我认为项目的前期最核心的就是上面两个步骤:挖出核心诉求和找出重点干系人。剩下的就是分解需求进行开发实现了。不同的团队对需求分解和开发实现肯定都有适合自己的方式和方法,具体可以去阅读本书,下面说说在项目需求调研过程中经常会忽略的非功能性需求。

    非功能性需求

    非功能性需求通常指,安全性、性能、扩展性、稳定性等等,这些非常重要,但也是最容易被我们忽视掉的。

    非功能性需求针对不同的客户或系统会有不同的侧重点,比如:

    • 费控系统对计算的准确性要求高,接口需要做幂等处理等等;
    • 客户是集团性质的企业,而且系统是全员使用,并发量大,性能上有较高的要求;
    • 一些合资企业,系统需要进行多语言支持,可能还会进行跨地域部署;
    • 事业单位、政府机构对 UI 层面会有独到的见解;
    • 公检法司的项目中会对安全性要求比较高,包括可能有些数据列需要加密。

    这些非功能性的需求在调研阶段应该和功能性需求一起同步进行,根据客户的特征进行分析和识别,最终作为开发交付的一个检查项进行检查。

    上面列举的都是和系统本身相关的一些要求,除此之外,还有很多的外在因素也是在前期调研时就应该考虑的,比如:

    • 客户希望上线的时间节点?
    • 如果功能较多,能不能进行分期交付?
    • 客户有没有明确的技术上的要求,比如不能使用 Windows 部署,或者开发语言只能使用 Java?
    • 有没有历史系统需要做数据迁移?如果有需要达到什么样的目标,是整体切换还是需要双系统并存一段时间进行逐步替换?
    • 是否需要和第三方系统进行对接?如果需要,需要知道第三方系统的接口人信息以及接口规范。

    现在各种各样的书籍琳琅满目,感兴趣的书买了,就有机会去阅读,这是我一直以来的一个观点,做需求每个项目负责人都有自己的方法,但多读书学习一些方法和技巧,没准哪天就能用上了。再说了,多读书,往上可以提升我们的格局和眼界,往下也能夯实和固化我们的能力。

    希望本文对您有所帮助!

    本篇文章由一文多发平台ArtiPub自动发布

    微信公众号:不止dotNET
    作者: oec2003
    出处: http://oec2003.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则 保留追究法律责任的权利。
  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/oec2003/p/14678538.html
Copyright © 2011-2022 走看看