转:做自己的系统分析师

 转:做自己的系统分析师 <script language="javascript" type="text/javascript">document.title="做自己的系统分析师 - "+document.title</script>

        这几天我在看软考的《系统分析师教程》,六百多页的书看了两百多页,现在感觉心里很复杂。再加上前几天和以前几个要好同事聚会,谈到软件系统的设计时有些争论,让我不得不写些什么。希望此文能以此文同中国从事软件开发的同行共勉。

前言

说来很不巧,我毕业于四川外语学院,没有受到过大学里面正规计算机课程的教育,在软件设计上的所有技能,基本上都是学习人家的代码,和看微软网站上的那些TechNotes。当时之所以选择英语院校,希望读懂人家的技术文档,是其中的一个原因。毕竟从现在很流行的Windows到Unix,他们的技术文档大都是英文写的。扯远了,其实开发一个好的系统,看懂有价值的技术资料是一个因素,更重要的因素在于对系统的分析和设计。

由于自己没有受到过真正的计算机方面的理论教育,所以最初,在进行软件开发的时候心里面特别没有底,在写代码的时候,我都特别小心,生怕写出来的程序在结构上不合理,执行效率低下。工作了一段时间,开始自己设计软件的系统的一部分,当时又怕自己设计出来的系统在结构上不合理,使后期开发无法进行。所以,我一都在思考软件的设计方法,不断的总结。

一直以来,我把系统设计、分析看成是一件很神圣的工作,虽然自己很早听说过有这样的考试认证,但是还是没有去报名,甚至没有去买考试用书。其原因就是我认为自己应该先多写代码,多接触工程实践,多积累一些经验,然后再来接受系统分析的工程方法。而现在,我在这行干了五年,我想我的经历应该可以让我来接受正规的系统分析方法了吧! 所以,我要把我学习的过程和我以前在工作中对系统分析的一些经验写出来,希望大家批评、指教!

第一篇 系统分析到底分析些什么

一句话,系统分析就是“分析软件系统在它的生存周期与生存环境中,各个对象与它的关系 ”,记住是关系,这是我这几天看书,然后结合自己的开发经历所得出的结论。

一个大型的软件系统,它所涉及的关系多,所以这个系统做起来就复杂;一个小的软件,它所涉及的关系少,所以这个软件做起来就简单。但是在通常的情况下,这些关系需要系统分析人员去发现,通过各种手段:翻阅资料、采访相关人员等等。如果越多的关系被系统分析人员发现,那么系统分析员对系统的设计可能就越全面,系统结构对未来的不确定因素的适应能力可能会更强。

在这里,我一直在强调“可能”。在我开始思考系统设计之前,我就觉得只要我掌握了正确的系统分析方法,那么我设计出来的系统在结构上是最合理的,在性能上是最稳定的,这个系统近乎是一个完美的系统。现在看来,这种想法很幼稚,作为对关系的分析,本身就和个人的经验、价值观有直接的、非常紧密的联系。所以我们要正确的对待系统分析师这个职业,他不是神,他只是一个将系统的开发风险尽可能降低到最低的人。

第二篇 如何分析

并不是每个公司都有自己专门的系统分析师,但是每个公司都有自己的系统分析工作,我想这是中国大多数软件公司所面临的现状吧。我们不能够因为没有系统分析师的存在,而把那些客观存在,需要我们去分析的东西丢在一边,最后只能是搬起石头扎自己的脚。

看了《系统分析教程》之后,让我对如何做系统分析有了新的认识,但是里面提到的各种方法,动不动就要小组支持,安排会议,这些活动档次太高,咱们平时做的那些系统玩不起,那是不是因此我们就放弃系统分析呢?答案是否定的。我认为,软件系统的规模有大小,系统分析的规模也有大小,不同规模的系统,它的分析方法也应该不一样,下面我把我分析的方法写出来,希望大家批评指教。

  1. 接到一个工程后,脑子里对这个工程大致有个数,然后就把开发工具打开,开始干了(这种方法很土,和软件工程方法是背道而驰的)。 但是,当代码写道一定程度的时候一定要停下来,你要对以做的开发做记录。记录什么呢?比如:重要的处理过程,窗体的名称以及它的功能描述以及你当时认为有用的东西。然后继续写代码。在后来的开发过程中,当你回复前一段时间写的代码而不能马上理解它的意思的时候,你就得马上记录。当软件快开发到一半的时候,这时你对软件的整体构架比较清晰了,你就得分析出软件的基础模块,回顾以前的记录文档,看是否有其它模块也拥有你分析出来的基础模块的功能,如果有,那么就得对程序进行调整。调整完成之后,你就可以继续后面的开发了,系统做到这个地步,一般成功的把握就有90%了。这种方法只适合于做规模比较小的系统,例如一般的进销存系统,功能比较单一的小软件。
    后来我把这种分析方法命名为攀岩式分析,作为一个攀登者,需要的是力气和勇气来面对面前的大山,然后迈出第一步,攀登一截就打下一个钉子固定好,然后继续攀登,就算不小心失足,由于有前面的钉子固定,也不至于掉下万丈深渊。
    在没有系统分析团队支持的情况下,这种方法可以在一定程度上降低软件系统的开发和维护风险
  2. 当拿到一个系统开发任务的时候,先整理出开发任务中的数据对象,然后然后分析他们之间的关系,通过关系的分析,找出隐藏的数据对象;确定软件的功能框架,根据功能框架,画出数据流图和控制流图;分析基本的功能框架,然后做出一个基本的系统,然后拿给“领导 ”看。
    以上的描述是我碰到的真是情况后的处理办法,这个办法结合了结构化分析和原型开发中容易操作部分。
    在很多时候,我们可能接到一个比较大的开发任务,而拿到手里的却是一页草草几十字的“需求分析”,并且可能是有问题的需求分析。因为那页纸上写的内容实际上也是系统分析范畴中的资料,但是里面却杂糅模块功能描述、数据实体描述、数据存储描述等等信息。而我们该怎么办,撒手不干了?
    这时,首先要做的就是挑出里面的名词,将其做成矩阵,对有关系的名词打上标记,并注明是什么关系。在这个分析中,肯定会遇到问题,而我们要做的就是先把这些问题记录下来,这些问题最好不要立即去问“领导”们,因为他们可能也不清楚。
    接下来要做的是根据那份“需求分析”,指定出系统的功能框架,分析出最基本的框架,然后从最基本的框架着手,对框架的功能作进一步分解,然后再绘制的数据流图和控制流图,在绘制数据流图的时候,提取数据实体,建立基本的数据库(如果需要使用数据库的话),当然这个做法和《系统分析师教程》中的提到的方法也是大相径庭的,但是没有办法,因为我们连对象之间的关系都没有弄清楚,哪里来的逻辑分析严密的数据实体分析呀,为了工作,硬着头皮也要上啊。
    接下来就是按照上面的设计,把系统做出来,然后叫领导看,让领导多提意见,称领导在看程序的机会,顺便把押在手里面的问题拿出来,问题能解决多少算多少吧,然后继续开发,然后继续让领导审查,领导越高兴,问题解决的周期就越短,反之则越长。
    这些都是我的土方法,是没有办法的办法呀,工作还要继续干,并且还要干好呢!

第三篇 是系统分析师还是程序员?

我本来打算把这篇的标题定为“系统分析师和程序员的关系”,在我看了两个网友的留言后,我决定放弃这个标题,一个网友评论说,系统分析师应该消失,因为现在的原型化开发已经让系统分析师失去了价值;一位网友评论说,他在一个七八十人的小公司里面工作,认为系统分析师存在的必要性很大,并且说如果没有系统分析师的队伍,可能会失去竞争力。我认为这两种看法都过于偏激,因为他们都没有考虑到,不论是系统分析师和程序员还是其它搞开发的人员,他们都是软件公司的一部分。

作为一个软件公司,作为一个企业,都有自己的生存法则,大公司有大公司的活法,小公司有小公司的活法。大公司实力大,人数多,能够接到大的项目,那么他必然要有自己专门的系统分析师团队来维护公司正常的业务运营;而小公司,通常接到的项目都比较小,人数又有限,要想支持一个专业的系统分析师团队是不可能的。我现在就在一个小公司里面工作,接到任务后,直接就和客户打交道,直接从客户那里获取他的需求信息,然后自己整理资料,分析系统的结构,然后编码,然后测试,这些事情是没有人来为我完成的。

所以我认为,系统分析师可以有两种定义:一种从职务的角度来定义:这个人是我们公司的系统分析师;一种是从专业的角度来定义:这个人具备系统分析的专业知识。但不管从哪种角度来定义,它们都具备同一个特点:他们都要完成系统分析的工作。

分析本身就是一项复杂的活动,它的复杂不仅体现在它所涉及对象本身,还涉及到指导分析的方法论。而这些都是通用的哲学,他同样可以知道我们在其它领域更好的开展活动。所以对于系统分析这项活动,作为一个程序员,也要去学习它,实践它,这对我们是有好处的。

所以,不管我们所处的环境如何,是大公司还是小公司,至少我们都应该做自己的系统分析师。

 到此,有关我对系统分析师的感慨写完了,这篇文章只是我个人对系统分析师的看法,局限性很大,还希望大家多多指教。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
11 1 1 [模拟] 系统分析师数据库系统(一) 选择题 第1题: 若系统中存在一个等待事务集(T<sub>0</sub>,T<sub>1</sub>,T<sub>2</sub>,…,T<sub>n</sub>),其中T<sub>0</sub>正等待被T<sub>1</sub>锁住的数据项A<sub>1</sub>,T<sub>1</sub>正等待被T<sub>2</sub>锁住的数据项A<sub>2</sub>,…,T<sub>n-1</sub>正等待T<sub>n</sub>锁住的数据项A<sub>n</sub>,T<sub>n</sub>正等待被T<sub>0</sub>锁住的数据项A<sub>0</sub>,则系统处于 (1) 的工作状态。 A.并发处理 B.封锁 C.循环 D.死锁 参考答案:D 第2题: 在一个采用 (2) 数据库体系结构的网络数据库应用系统中,计算机C上运行着DBMS软件和应用程序,并存有所有的用户数据,其余各节点作为终端通过通信线路向计算机C发出数据库应用请求。 A.集中式 B.主从式 C.客户机/服务器 D.分布式 参考答案:A 关系R(A,B,C)满足下列函数依赖:F={B C,B A,A BC},关系R的候选关键字为 (3) ,该关键模式属于 (4) 。 第3题: A.AB B.A和B C.A和BC D.AC和AB 参考答案:B 第4题: A.1NF B.2NF C.3NF D.BCNF 参考答案:D 从结构的角度看,数据仓库有3种模型:企业仓库、 (5) 和虚拟仓库。数据挖掘就是要智能化和自动化地把数据换为有用的信息和知识,目前已有多种数据挖掘方法。如果需要一个示例库(该库中的每个元组都有一个给定的类标识)训练集,该方法称为 (6) 。 第5题: A.用户仓库 B.产品仓库 C.关系型OLAP D.数据集市 参考答案:D 第6题: A.关联规则挖掘 B.特征描述 C.聚类分析 D.分类分析 参考答案:D 第7题: 在局部E-R图合并为总体E-R图的过程中, (7) 是错误的。 A.不同局部E-R图中出现的相同实体,在总体E-R图中只能出现一次 B.在总体E-R图中可以添加属于不同局部E-R实体之间的联系 C.在总体E-R图中可以删除在原局部E-R图中存在的联系 D.在总体E-R图中不能删除任何不同实体间的联系 参考答案:D 设p={(A1,A2),(A1,A3)}是关系R(A1,A2,A3)上的一个分解,表4-1是R上的一个关系实例r,R的函数依赖集为 (8) ,分解D (9) 。 第8题: A.F={A<sub>1</sub> A<sub>2</sub>,A<sub>1</sub> A<sub>3</sub>} B.F={A<sub>1</sub> A<sub>2</sub>} C.F={A<sub>1</sub> A<sub>3</sub>} D.F={A<sub>1</sub>A<sub>3</sub> A<sub>2</sub>,A<sub>1</sub>A<sub>2</sub> A<sub>3</sub>} 参考答案:D 第9题: A.是无损连接的 B.是保持函数依赖的 C.是有损连接的 D.是否保持函数依赖是无法确定的 参考答案:C 设学生选课关系模式为SC(Sno,Cno,Grade),其中Sno为学号,Cno为课程号,Grade为成绩,SOL杳询语句如下: 与该查询等价的元组演算表达式为{t| (10) (SC(u) SC(v) (11) t[1]=u[1])。 第10题: A. B. C. D. 参考答案:B 第11题: A. B. C. D. 参考答案:A 第12题: 在分布式数据库中, (12) 是指各场地数据的逻辑结构对用户不可见。 A.分片透明性 B.场地透明性 C.场地自治 D.局部数据模型透明性 参考答案:D 第13题: 数据仓库通过数据移从多个数据源中提取数据,为了解决不同数据源格式不统一的问题,需要进行 (13) 操作。 A.简单移 B.清洗 C.集成 D.聚集和概括 参考答案:B 设关系模式R〈 U,F 〉,其中U={H,I,J,K,L),若F={H IJ,J K,IJK L,L H,L K),则F的最小函数依赖集F<sub>min</sub>={ (14) }。关系模式R的候选关键字有 (15) 个,R属于 (16) 。 第14题: A.H I,H J,J K,IJK L,L H B.H I,H J,J K,IJ L,L H C.H I,H J,J K,IJ L,J K D.H I,J K,IJ L,L H,L K 参考答案:B 第15题: A.1 B.2 C.3 D.4 参考答案:C 第16题: A.1NF B.2NF C.3NF D.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值