四月 2
Satisfy the Customers::变化的来由
CHANGE! (from "Head First Design Pattern")

无论我们对一个应用程序的需求分析的多么到位,我们的设计做的多么的好,我们仍然需要面对变化带来的一系列问题。我们必须不断的改进我们的程序,否则它会很快“死掉”。

有时候我们不理解,为什么一个看起来相当简单的系统,在开发过程中竟然会面对如此多的变化。有时候我们不断的怀疑自己的能力,我们不停的在改进软件,但是它还是不能让客户完全满意,总是有新的变化要加入到软件中去。我们为此寝食难安。

俗话讲“追本溯源”,我们必须首先理解这些变化究竟是如何产生的,也许才能有对策来应付如此多的变化。如果我们不清楚变化产生的原因,我们似乎很容易迷失在变化带来的迷魂阵中,彷徨,无奈,甚至绝望。

虽然变化是多样的,但是肯定是有来源的。

想想我们从哪里开始入手开发软件的吧。Aha,用户需求分析!我们收集来自用户的需求,用于建立我们对于系统开发目标的认识。所有的一切都来自用户的需求,除非,我们仅仅是在做一场游戏。问题是,用户他们本身了解自己想要什么么?很显然,对于绝大部分用户,答案是否定的。

处在不同工作岗位的人对于自身的领域问题的认识是截然不同的,不要指望一个普通的员工能够了解整个系统的方方面面。我们通常的软件需求的获取来自为数不多的“需求提供者”,他们可能是公司的管理人员,于是他们会遗漏很多具体工作的细节;他们也可能是一个具体的工作人员,但是他对别的岗位的工作完全是一知半解。如果我们幸运,可能面对的是对整个目标领域十分了解的专家,我是指那种真正的专家,他们研究整个问题领域,他们可以通过计算预测领域问题,他们可以说出大部分的细节问题。但是从某种意义上说,这样的人几乎很难找到,即使有,他们恐怕也仅仅对于常态问题能够给出详细描述,而对于非常态问题,可能会有所遗漏。而对于一个复杂系统来讲,可能一些非常态问题一个领域从业人员干了一辈子也未必见到,但是却需要在程序中有所考虑,因为程序运行的速度如此之快,以至于会经常出现百年一遇的非常态问题。总之,不要指望从用户那里获得一个完整的、清晰的需求。这是变化的第一个来源,在需求分析的时候不可避免的产生了。

于是,我们竭尽全力的去挖掘需求,我们把分析人员放在现场和领域专家一同工作,深入方方面面,争取给出一个相对比较完整,比较清晰的需求分析报告。但是,相当多数的领域专家对于计算机系统和软件实现并没有什么概念(应该说是全部,因为他们如果了解这方面的话,就不需要我们去给他做软件分析设计了)。于是我们经常发现,我们根据采集的需求构造的系统实现交给用户试用的时候,他们会突然间想到很多新的需求。因为他们不知道计算机能做什么,只有看到一些具体的实现之后,才能想到他们想要的东西。而随着实现的不断改进,他们总能想到新鲜的东西。这样其实也不错,至少他们觉得计算机很酷,居然能做这些,让他们不断的接近自己的梦想。还有一种可怕的情况,我们把按照需求构造的软件给用户看的时候,他们会瞪大眼睛,用一种让人心碎的口气说到:“这根本不是我们所需要的!”……变化又来了,用户会对自己需求的看法进行变化,通常他们看到了软件中新的可能性或者自己内心深处原本想要的一些东西。

原本,我以为需求的变化基本来自用户,这些计算机盲不清楚他们想要些什么,不可理喻,好端端的就要改变原本的需求。但是我在软件的开发过程中发现了一个在很久以前我根本没有注意到的问题。我们开发人员自己也会要求对软件系统进行改变。这种改变可能来自:我们开发人员随着开发的进行,对于领域问题有了自己的一个深入的认识,对问题的处理产生了新的看法,决定用一种更好的方法来实现领域问题;而有时候,我们发现原本设计的结构会带来一些实现上的困难,比如循环依赖,类爆炸等等各种各样的问题,我们主动的会为了下一步的开发而改进原本的设计,这同样引入了对于系统的变化。可以这样说,就算用户特别好糊弄,根本不会变化需求(通常这样的用户不付钱),我们开发人员本身也会带来变化。Anyway,谁会容忍自己的程序没有达成自己的想法呢?程序员本身就是一群骄傲自满,非常自我的极端主义者,他们甚至会为自己的想法争的面红耳赤,拼的头破血流。

还有一点也是十分重要的,IT业的发展速度是惊人的,其他领域的发展速度也同样不慢。这是一个繁忙的时代,人们不停的前进,只为了能勉强跟上时代的步伐。技术在不断的变化,就在5年之前,谁会想到今天Web应用的模样?我们的软件也必须在多个方面变化,平台,开发环境,应用领域的变化,新的技术应用等等等等。如果不变化,那就只能失去竞争力,等着从这个地球上小时吧。

变化是多样的,我们无法准确预测一个系统会在开发过程中要面临什么样的变化。整个世界就是在变化中不断的前进着。与其抱怨自己的开发总是遭遇变化,不如好好的思考关于变化的本质问题,积极的去面对变化,在软件中包容变化,更加有效的应对用户和自己的漂泊不定的心。使用户满意的软件才具有存活的资本。

当然,这也不是说因为变化不可避免,我们就不必在需求收集和系统分析阶段付出努力了。这个世界的迷人之处在于未来的不可预测,而这个世界的合理之处也在于又一些规律可以让我们大概猜猜。当规律和实际结果逐渐比对的过程中,我们总是能找到一些更加准确的规律。我们只是不必为了做不到最好而烦恼,不必陷入过度设计和分析的陷阱。我们可以利用经验更好的处理变化,让自己和开发出来的软件适应变化。

Trackback: http://tb.donews.net/TrackBack.aspx?PostId=807544