总所周知,一个码农的工作寿命不可能超过40岁,因为那时,他已经没有精力去编程和思考一些算法问题了,而且公司更想要那些刚刚毕业的大学生,精力旺盛,而且工资水平不高,还能熬夜,所以,一个40岁之后的码农如何可以拜托事业的名义呢?就是上升成为产品经理,为什么产品经理的工资待遇高而且不用写代码呢?因为他们能直接和客户交流,懂得客户需求什么,客户想要的是什么,可以将用户的抽象描述用专业的术语转达给程序员,这样才能有好多软件。
所以,你需求了解用户需要的什么,用户为什么要这样做。
客户所定义的“需求”对开发者似乎是一个较高层次的产品概念。而开发人员所说的“需求”对用户来说又像是详细设计了。实际上,软件需求包含着多个层次,不同层次的需求从不同角度与不同程度反映着细节问题。需求是指明必须实现什么的规格说明。它描述了系统的行为、特性或属性,是在开发过程中对系统的约束。软件需求包括三个不同的层次—业务需求、用户需求和功能需求—也包括非功能需求。业务需求(business requirement)反映了组织机构或客户对系统、产品高层次的目标要求,它们在项目视图与范围文档中予以说明。用户需求(user requirement) 文档描述了用户使用产品必须要完成的任务,这在使用实例(use case)文档或方案脚本(s c e n a r i o)说明中予以说明。功能需求(functional requirement)定义了开发人员必须实现的软件功能,使得用户能完成他们的任务,从而满足了业务需求。所谓特性( f e a t u r e )是指逻辑上相关的功能需求的集合,给用户提供处理能力并满足业务需求。
开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。每个软件产品都是为了使其用户能以某种方式改善他们的生活,于是,花在了解他们需要上的时间便是使项目成功的一种高层次的投资。这对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的。但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢?然而,即便并非出于商业目的的软件需求也是必须的。例如软件库、组件和工具这些供开发小组内部使用的软件。当然你可能偶尔勿需文档说明就能与其他人意见较为一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价。
上面的描述就是软件需求需要解决的问题。