系统分析、设计——你合格吗?
blueski推荐 [2007-1-31]
出处:Java夜无眠
作者:蔡学镛
1、系统分析是什么?
系统分析工作是解决一个问题的工作,目标是将一个对计算机应用系统的需求转化成实际的物理实现,其中复杂就复杂在实际的面太多.在系统分析过程之中注意问以下的问题,可能会所进行的系统分析设计工作有帮助。
1)您所完成的系统目的是什么?注意不是功能要求,而是目的.也就是为什么要建设、为什么要现代建设。
2)您所完成的系统有哪些方面参与,各方面的初衷是什么?那些人可能在系统建设中起重要作用,他们会采取什么样的态度?你对他们有多少影响力?
3)您的系统是否有一个明确的评价标准?最好从参与的各方面都进行考虑。
4)你的系统设计思想是什么?是否能够得到各方面的认可。
5)你对参与系统设计开发的人员了解吗?他们的特长在哪里,是否愿意与你合作,为什么?你对他们有足够的影响力吗?
6)你的系统开发计划是否完善?你的计划表有明确的阶段吗?任何一阶段都应该怎样完成?如何对这一阶段完成的情况进行评价?
7)你对所采用的系统开发方法以及工具是否熟悉?你的伙伴是否熟悉?
8)你所完成的系统是否有原型?计算机的或者物理的。
以上的几个问题都是在系统分析以及系统规划时涉及到的,供各位参考。
“需求分析实际应该是问题分析”。我们的软件系统要解决的是问题。而不是用户提出的需求。经常发现系统完成后,客户说“我的问题还没有解决“。可是,需求分析稿上的目标都搞定了。
既然是问题分析,所以,熟悉目标系统的知识就是必要的。甚至,可以说,一个好的系统分析员也应该是好的业务专家。
在中国作分析重要的是人气,因为中国的企业级信息系统的建设在很大程度上可以说并非确有需求,而是迫于某种压力。用户在很多时候考虑的不是系统的长远发展,而只是短期的成果,要求开发单位在很短的时间内完成一个很大的系统的开发,没有时间对系统进行周密的分析,在这种情况下,很多开发商就会粗分析,粗设计,尽快进入编码阶段,这样的系统的生命周期肯定不会很长。说了这么多,只是想说,系统分析员确实应是业务和管理专家,并且需要有很好的语言组织能力,他需要根据问题域中存在的问题去尽力说服用户,引导用户需求,毕竟,我们是专家,如果让用户牵着鼻子走,系统不会是成功的系统。(当然了,这要建立在用户是可引导的前提下)
2、基本素质
a、系统分析员基本功
好的系统分析员都是从优秀的程序员中产生的,坚实的编程功底、丰富的经验是今后做系统分析的基础。
没有对系统本身进行过透彻剖析过,很难领会到其中一些难以言述的精华。但并不等于好的程序员就能够成为好的系统分析员。
合理的知识结构。语言能力、文字表达能力、技术的全面性等是对系统分析员的基本要求。比如说c/s和3层开发,如果仅仅对netscape公司的产品熟悉还不够,还需要了解比如微软等产品,并且要了解他们中产生历史,发展思路,技术优劣,以应付各种穷追猛打的提问。但更重要的是,这是你为应用定制技术要求的前提。
b、任务难度的预测能力
系统分析员要具备快速的任务难度预测能力以及具备快速确定开发小组人员构成和任务划分的能力。(我将这条归为思想,而不是能力)昆虫自然会长出翅膀,而思想却需要长期的浸润。要做到这点,需要大量的思考、学习。设计远比编程重要。当今软件业的发展,各种开发工具的出现,编程已经不是什么问题,
程序员的工作某种程度上讲是将别人现成的东西拼凑堆砌起来。系统分析员要清楚的认识到,现在大多数程序员没有学会怎么去整体的了解一个系统,有些甚至不了解编程(这不是说他们不会写代码)。可视化的开发工具加五花八门的控件,程序员可以偷点懒了。(这可不是夸大,我好几年的管理工作,接触过大量的程序员)基于技术,跳出框架。基于现有技术结合用户需求思考问题,设计时跳出框架。
c、系统分析员思想
系统分析员要有面向用户的思想。系统分析员应当有能力将自己扮演成用户,来了解要交付的项目看起来想什么样式,感觉想什么,从而了解用户的想法并挑选出合理部份去开发。从这个意义上说,系统分析员才能获得有意义的见解去引导他的开发组成员。系统分析员头脑中要对项目结局有一个清楚的认识,并保证项目不偏离方向。系统分析员要有根植于技术,高于技术思考问题的思想。纯粹的程序员通常对最终结果考虑的不是很多,当一种新的技术在市场上出现时,他们对能否按时交付的考虑就比较少,而强烈希望他们的计划能够建立在新的技术之上。因此,系统分析员的想法和行动要象一个用户,又要能够站在技术的高度,成为真正的用户、程序员之间的代言人。
d、系统分析员的关键
获得信任。系统分析员最重要的素质是获得信任,这是成为优秀系统分析员的关键。成熟最为关键。成熟可以为整个项目组提供正确的支持,能够理解技术怎样才能解决用户的需求。
3、葵花宝典
设计的过程就是将事务处理抽象成计算机模型的过程
1. 首先要明白设计远比编程重要。
2. 平时注重训练自己的思维严谨性和从全局考虑问题的能力。建立冷静思考问题的处事态度。
3. 设计时(尤其是数据库设计时)不要完全被规矩约束,设计好比作诗,懂得韵律是对的,但完全被韵律所束缚,就作不出好诗了。
4. 多做设计,经常总结自己的不足之处和成功之处,向他人请教。
5. 专门去找别人设计的漏洞和不足,也是提高自己设计水平的重要手段。
6. 经验是重要的,但如果观念老化而不善于总结提高,所谓的经验就成为束缚自己进步的枷锁。
7. 学好数学特别是理论数学如数学分析、运筹学、数学模型等。多玩策略性经营游戏也是有益的。推荐《帝国时代》和《模拟首都3000》以及《大富翁》。(但不要沉陷在里面)
8. 根据项目情况和开发平台工具的特点确定最佳的设计方法。模块化设计方法和面向对象设计。两种设计方法的结合使用。
9. 将复杂无序的过程用模块化的方法进行分解,但要注重事务间的联系,并且用开放的眼光去设计。
10. 设计时对严谨性、灵活性、开发效率、客户要求四个方面做衡量取舍。
11. 设计时还要根据整个工程的进度安排和客户对软件的要求而决定是否设计得足够灵活和严谨。
12. 复杂而无条理是最糟的设计,简单实用并不一定是最好的,但一定不是最坏的。
13. 训练自己良好的表达能力,能用清晰明确而且简单的描述表达出自己的基本思路。
14. 在一个项目中建立统一的系统分析模式和文档模板,这其中包括今后软件变量、字段命名规则等。同时,一个项目中必须至少有一个人对整个系统设计进行检查和进行全局的考虑。