脓包和软件开发
脓包在医学上的定义是:身体某部组织化脓时因脓液积聚而形成的隆起物。当然我们常常用它来比喻无用之人,也进一步将其引申为社会丑恶现象。
乍一看这和软件开发有什么关系?软件开发者不应该都是一群不善言辞,只会埋头干活,凭真本事吃饭的人吗?应该不会和脓包扯上关系呀。
但是,据我观察软件开发过程中,不仅存在脓包现象,而且还呈越来越严重的趋势。
谈谈软件开发中脓包
一个完整的软件开发过程,大体上会经历需求-设计-开发-测试-上线
这几个步骤。先简单看看每个阶段应该做些什么:
- 需求阶段:主要包含需求分析与需求设计,需求分析的主要工作就是梳理清楚组织/人群需要改进的的问题。不管是做项目还是产品,如果没定位清楚问题,那以后就是做无用之功。接着需求设计的工作就是针对前面问题,描述应该如何利用系统或产品去改进,也就是系统/产品需要具备的表现。
-
设计阶段:这里主要是指编码之前的设计。需求阶段已经定义好了系统/产品需要具备的表现,设计阶段的工作就是为了满足功能需求,对问题进行提炼,将现实世界映射到软件世界,对软件系统中解决方案进行业务核心域封装。
-
开发阶段:这个阶段开始进行编码,把设计阶段的业务核心域用代码进行实现,同时需要兼顾满足一些质量需求和设计约束。也就是完成业务核心域到非核心域(编码)的映射。编码之所以被称为非核心域,是因为具体用哪种语言或哪种技术,对系统来说并不重要。
-
测试阶段:验证核心域设计是否满足需求,也就是真正解决了用户问题。同时还会验证是否满足规定的质量需求和设计约束。
-
上线阶段:将系统或产品交付进入实际使用的阶段。
在上述过程中,每个阶段都会产生脓包,尤其是前面二个阶段。本篇文章就先来说说需求阶段会产生的一种脓包。
正确的废话
这个脓包常常产生与需求阶段,它的外在体现集中在产品文档中,比如:需求规格说明书或产品规格说明书中。
比如这么一个需求描述:为了满足HR的考勤需求,所以需要做一个考勤功能。
你有没有看出来这个描述的问题?
如果没有get到关键点,我再换一个:为了满足你要吃阿莫西林的需求,所以药厂要生产阿莫西林。
怎么样?相信你看完后瞬间就反应过来了:哎,这明显不对嘛!
你再回头对比看看两个描述,结构上是不是完全一样。
很明显,写出这种需求描述的人,根本就没有进行深入思考,或者说根本就没在思考。没有哪个病人自己会有吃阿莫西林的需求,正如没有哪个HR会有考勤的需求一样。
病人要吃阿莫西林肯定是因为生病了,可能是呼吸道感染,可能是胃部出现了问题。吃药是为了解决病症,至于吃什么药不是病人自己随便决定的,需要去看医生。
同样HR可能是需要记录上下班时间进行绩效核算,可能需要统计员工工作积极性,可能是所以需要某种系统来进行信息管理。
所以这种正确废话式的脓包是我们在需求阶段要警惕的,要避免这种脓包也很简单,推荐使用用户故事的结构去描述产品需求。用户故事的三段式结构:作为某角色
我需要活动
以便于上商业价值
,能够强迫我们做更深层次的思考。