老菜鸟侃需求分析的“再回炉”

去年四月份即许诺为女儿写个学习工具(妞妞加油站,有搞成系列的想法),却由于一个软件项目的开发工作一拖再拖,直到年底才腾出个把礼拜搞了个七七八八,正好赶上闺女的考试。小试了几刀,感觉效果还是比较明显,有兴趣的家长可以down一下试试。CSDN上传了一下,名字是“小学语文学习加油站(家长版)”,DelphiXE+Firebird,Ribbon2010风格,自动生成拼音,支持多音字,能按每一课、每单元、全书生成资料或测试卷子,区分了生字、多音字、成语、文言文、古诗、作家作品等单项知识,单纯从语文基础知识学习来看,应该能满足要求了。

由于我是一个自由软件人,经常会接一些朋友之间帮忙的活儿,年届四十时,经常会小小自满一下,一般数据库项目哥都见过了,还有什么需求难得倒哥?孰不知,就是这个小小工具软件让我开始重新审视需求这两个字,让我意识到,需求的整理和落实是需要用户和技术人员共同来“回炉”、“淬火”、“锻造”的,而其中“回炉”竟是最令人头大,却又是最重要的一部分。

先说问题,谈到小学语文,我的理解就是从拼音-词语-句子-作文这样一个过程来螺旋上升的,当初在软件设计时,第一个目标就放在生字和词语上,嘴里还念叨着,把生字、生词都写会了,至少能拿到五十分罢。正是因为这个想法,让我实实在在体味了一下回炉的痛苦。

教训之一、需求的理解切忌闭门造车、自编自演。

有了先前的想法,我的工作路子就很明显了,把字词句堆到数据库里,然后再模仿孩子的的考卷用Word输出来就得了。这不,板砖马上就不请自来了:

孩子:我们上课又不是一下子把一本书学完,每次都写那么多,作业怎么办?

老师:其实我们最头疼的工作主要是重复劳动太多,别的不说,就拿输个拼音来说罢,虽然word里面有注音的工具,但效率还是不高。常常是这边录入那边还录...

我:每次出个卷子要么得选内容选半天,要么就一下出来五六张纸,孩子做完还好说,孩子不做,那纸不就浪费了?

我明白过来设计上出了偏差的时候,已经基本写完了“词语”、“字”两部分。咬咬牙、跺跺脚,一边儿调整数据结构,一边儿重新梳理需求,所幸,我的技术设计框架抗击打能力较强,才最终没有淹没在闺女的唾沫之下。

  心得:技术设计上必须不折不扣地坚持继承等OO思想,必须着眼重用、扩展的“通用”思想,那样子的程序,才不会怕“变”,才会耐“变”。当然,在编程之中,时时地通过重构来规范自己的代码,使之沿续这种设计思想,落实这种设计思想就是程序员良好的职业养成了。

 

教训之二、需求的落实必须坚决屏弃“补丁”思想,更多把功夫下在专业知识的学习上。

补丁历来是用来救火的不得已手段,在时间能力允许的范围内,还是不要用补丁罢。否则,补丁必然会越打越多,直到影响到程序本身的乳壮。这个感悟是在我遇到了近义词反义词、成语、造句时体会到的。当时,“词语”一部分设计中我仅考虑了成语,其它几部分虽然也有考虑,但重视不够,心里想着:顶多就是再建一两个从表嘛。等到我拿到老师用的《语文XX详解》,我才意识到自己又犯了一个错误,首先,最优的录入方案应该是在录入时即进行勾选,哪个词是成语,哪个词可以用来造句,哪个词的近义词是什么,反义词是什么,另起几个窗体,再进行勾选,是绝对的费时费力。其次,加入几个从表,就需要在界面上加入几个按钮,增加了软件操作的繁琐不说,也加大了软件使用的难度。

又是一番的咬牙跺脚之后,把开发工作停下,静下心来研究了《语状》、《详解》等多本学习参考工具书后,对数据库进行了新一轮的重构。

心得:遇到问题后,不要急于下手改动,而要再次细细咀嚼需求,“回炉”后再“淬火”,补充专业知识,从全局来把握改动范围,这样才能真正做到有的放矢,从根本上避免补了旧洞又添新坑的尴尬。

 

 

posted @ 2012-01-04 03:05  wolf1860  阅读(2013)  评论(11编辑  收藏  举报