分享
2012软件设计师复习的综合资料(1).doc
下载文档

ID:3340640

大小:1.04MB

页数:177页

格式:DOC

时间:2024-03-02

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2012 软件 设计师 复习 综合 资料
上学吧() 从大禹治水看构件与集成 大禹治水    在远古的尧、舜时代,黄河流域经常发生了大水灾,洪水横流,五谷不收,家破人亡。所以尧派鲧去治水,鲧沿用了过去的传统法子,水来土挡,用土筑堤,堵塞漏洞。但由于洪水凶猛,不断冲击土墙,结果弄得堤毁墙塌,洪水反而闹得更凶了。鲧治水九年,劳民伤财,并没有把洪水制服,是一事无成。   舜接替尧后,就把鲧办罪处死,随后命鲧的儿子禹继续治水。大禹领命之后,寻找到了以前治水失败的教训,最后决定用疏导的办法来治理水患。大禹带领百姓是凿了一座又一座大山,开了一条又一条河渠,把黄河的主流加深加宽,把支流疏通与主流相接。同时,把原来的高处培修得更高,把原来的低地疏濬得更深,便自然形成了陆地和湖泽。把这些大小湖泽与大小支流连结起来,洪水就能畅通无阻地流向大海了。   相传大禹三过家门而不入,把整个身心都用在开山挖河的事业中。大禹用疏导的办法治水终于获得了成功。大禹治水,为民造福,永受华夏子孙所称颂,永为炎黄后裔所怀念。   集成与构件   “集成”是看到了信息化建设中的一个个信息孤岛,数据不能交换,资源不能共享,业务不能协同,如同洪水泛滥一样。传统的应用集成EAI是典型的“堵”法,可以说总是在事后解决问题,是头痛医头、脚痛医脚,治标不治本的办法。碰到了集成问题,才去想办法去解决,而解决眼前问题的同时又带来更多和更复杂的其它集成问题。所以,就如同鲧治水一样,鲧没有把洪水制服,EAI当然也不可能从根本上解决信息资源共享利用的问题。   因此解决信息孤岛,要学大禹治水,“疏”比“堵”更重要。“堵”是一时的、眼前的,“疏”是长远的,一劳永逸的。与集成的事到临头相比,构件就是“疏”的方法,是从源头上去堵。在构件体系下,信息资源将按标准、有层次的通过构件展开,数据是构件、展现是构件、流程是构件、服务是构件,一切皆构件。好比大禹治水,开山凿渠是构件库,主流支流是大小构件,贯通无阻是统一标准。   所以,构件可以实现信息资源的大“治”,用计算机术语来讲,就是“同构”,标准统一,架构统一,建设统一,管理统一,开发、部署、运行与维护实现同构,信息孤岛从设计源头上被消灭。 从测试角度看用户手册在软件质量中的地位      对于软件,开发者往往只注意到其功能和性能,而忽略了用户手册。其实用户手册也是衡量软件好坏的一个重要标准。好的用户手册可以帮助用户快速入门,是用户正确、充分使用软件的前提。对于开发者来说,好的用户手册可以减少培训和售后服务的费用。所以在测试中,不能忽略用户手册的重要性,应从以下多个方面考察用户手册的质量。     用户手册的完整性 重点考察用户手册内容的全面性与完整性,从总体上把握用户手册的质量。这一项看似简单,但在实际测试中我们发现,很多开发商还是无法做到这一基本标准。很多软件由于开发过于仓卒,在付诸使用时,用户手册中缺少关于某些模块的说明,让用户使用起来比较困 难。在测试工程师的眼里,优秀的用户手册内容应该是包括软件的所有功能模块。     用户手册的描述与软件实际功能的一致性 考察用户手册与软件实际功能的一致程度。当确认用户手册基本完整后,我们还要注意用户手册与实际功能描述是否一致。这种问题往往是由用户手册跟不上软件版本的更新速度造成的。对用户来说,容易造成对描述不一致的功能的误解和苫螅?进而影响用户对软件的使用。优秀的用户手册应该根据软件的升级而及时更新,手册描述应该与软件实际功能保持一致。     用户手册的易理解性 考察用户手册对关键、重要的操作有无图文说明,文字、图表,是否易于理解。对于关键、重要的操作仅仅只有文字说明肯定是不够的,应该附以图表使说明更为直观、明了。优秀的用户手册应该是图文并举,易于理解。     用户手册提供学习操作的实例 考察对主要功能和关键操作提供的应用实例是否丰富,提供的实例描述是否详细。当前大量软件的用户手册只有简单的图文说明,而无应用实例。这样的用户手册看起来就像是软件界面的简单拷贝,对于用户来说,实际上没有什么帮助。例如财务软件,用户手册就应该提供具体建帐实例及具体帐务处理的实例,这样才能使用户看完用户手册后,能够独立完成新帐套的建立并逐渐学会使用软件处理帐务信息。优秀的用户手册不仅要对主要功能和关键操作提供应用实例,而且对实例的描述应做到详细、充分,易于用户理解。     用户手册的印刷与包装质量 考察用户手册包装的商品化程度,印刷质量。有些用户手册是简单打印、装订而成,过于粗糙,不易于用户保存。优秀的用户手册应提供商品化包装,并且印刷精美。 软件的质量是由各个方面构成的,用户手册就是其中重要的一环。特别是在当前软件业快速增长的时期,软件开发者过于注重功能与性能而忽略用户手册,使得用户手册的质量问题尤显突出。所以对于测试人员应该充分认识到用户手册的重要性,严把用户手册的质量关,以促使软件整体质量有一个提高。 从菜鸟到大师细看程序员的五种层次 软件界一个无可争议的事实是,不同程序员的效率有差别,而且差别很大。许多专家将优秀程序员和一般程序员区分地很清楚。大多数研究得出结论认为,一般程序员跟优秀程序员之间在工作效率和质量上存在10:1的关系:优秀程序员和水平较差的程序员的编码时间比例为1:20;debugging时间比为1:25;代码数量比是5:1;程序执行速度比例是10:1。而且发现,程序员的代码质量和效率跟工作经验没有关系。   让我们看看一些软件大腕们是如何看待优秀程序员和一般程序员的:   Randall E. Stross:无论是从软件标准、创造性、开发速度、还是设计思路或者解决问题的能力上来说,优秀程序员比差的程序员都何止好一点。   Bill Gates:一个优秀的机床工值一个一般机床工的好几倍,而一个优秀程序员值一个一般程序员的10000倍。   Robert C. Martin:90%的代码是由10%的程序员写出来的。   程序员因此被分为五大类:   1. 大师级程序员(Visionary/Artist Programmer/)   大师级程序员是软件界绝对的稀有种族,他们可以创造出99.9%的程序员所创造不出来的东西。他们发明新的应用和软件模式来驱动软件产业的发展。Napster, Netscape以及World Wide Web都是大师级程序员创造的。对他们而言,软件更多的是艺术而非科学。在这个级别,速度和质量不是最重要的,他们创造出的财富才是最重要的。许多开发团队或者公司顶多也就一个大师级程序员,通常是这个公司的技术创始人或者CTO。   2. 开拓者程序员(Trailblazer Programmer)   开拓者程序员通常带来很好的主意和趋势。他们通常是最终产品的原型创作者,他们一天做出的事情大部分程序员需要几周甚至几个月。开拓者程序员总是在尝试新工具、新技术,不断地学习和搜寻方法来提高工作效率,并通常是其他程序员的导师和老师,而且你经常会发现当其他程序员早已离开的时候他们却依然工作到深夜。尽管这样级别的程序员工资很高,但是每个成功的公司或团队还是应该配备一两个开拓者程序员。   3.骨干程序员( Workhorse Programmer)   骨干程序员是一个公司或者开发团队的脊柱,这些人尽管不是很有创新性,但往往比较高效且值得信赖。给一位骨干程序员一套模板和合适的工具,他们总能以最短的时间交出错误最少的代码。   4.机械程序员( Drone Programmer)   许多程序员就是朝九晚五地为了填塞下自己钱包的机械程序员。他们不愿意接触新技术、避免学习新事物。许多公司或者开发团队都有许多这样的机械程序员,因为他们很便宜,但岂不知更贵的程序员才真正地更便宜。   5.白痴程序员( Idiot Programmer)   林子大了什么鸟都有,软件领域也不例外。编程需要抽象和逻辑思维,然而一些尚不具备此能力者由于向往着不错的薪水而加入了该领域。白痴程序员总是对最简单的算法也搞不清楚,他们总是错过软件截止日期,终日无所获。白痴程序员最好的出路就是换行。 从《三十六计》看软件测试之计[1]   《三十六计》是根据我国古代卓越的军事思想和丰富的斗争经验总结而成的兵书,古人用兵最讲究谋略,在中国古代战争史上,精彩的谋略计策层出不穷,令人眼花缭乱,但万变不离其宗,大抵都逃不过这三十六计的范围。时至今日,“三十六计”在我们日常的工作和生活中,同样可以有很广泛的应用。我是一名软件测试工程师,并热爱软件测试这一职业,目前从事测试已有一段时间,我很愿意将自已在从事软件测试工作中积累的一些经验,以及一些心得体会,借助三十六计中的若干计谋加以说明,与诸位同行分享。   总说   【原文】      六六三十六,数中有术,术中有数。阴阳燮理,机在其中。机不可设,设则不中。 【解析】   “兵以诈立”,多谋者胜。用兵要讲究谋略,“运筹帷幄,决胜千里之外”。同样的道理,无论从事什么样的工作,都需要讲究方式、方法。有了正确的方式方法,或者适时的运用一些小技巧,往往可以收到事半功倍的奇效。   第一计 瞒天过海   【原文】   备周则意怠;常见则不疑。阴在阳之内,不在阳之对。太阳,太阴。   【译文】   防备周全时,更容易麻痹大意;习以为常的事,也常会失去警戒。秘密潜藏在公开的事物里,并非存在于公开暴露的事物之外。公开暴露的事物发展到极端,就形成了最隐秘的潜藏状态。 【解析】   long,long ago,there is a 很厉害的程序员,名叫关羽,他是计算机专业科班出身,又拥有二十几年的编程开发经验,是当之无愧的资深软件工程师。虽然关羽的专业水平无庸置疑,但是他有一个缺点,就是自视过高,骄傲不可一世,他常常认为自己写的代码十分完美,几乎已经到了自恋的程度。他看不起测试人员,对他们提出的程序错误不仅不屑修改,甚至于不肯承认,并经常与测试人员起争执。有一年他在湖北荆州负责一个十分重要的大型系统的开发,而负责这个系统测试工作的正是关羽向来都瞧不起的吕蒙。这个吕蒙原本学历不高,只有中专文化程度,并且还不大注重学习,提高自己的能力。直到有一次被他的上司孙权教育了一顿,从此发奋图强,进步神速,技术能力迅速提高,早已不是当日的吴下阿蒙。起先吕蒙将发现的错误上报给关羽,关羽并不理会,还是如同以往一样,找出许多理由来搪塞,一会儿说这是个技术难点,无法修改,一会儿又说这是当初的需求没有写清楚。这吕蒙早就清楚关羽的为人,从此也不与关羽多加争辩,只是兢兢业业的做着自己的工作,将自己在测试过程中发现的所有小错误一一如实记录了下来。等到测试报告出来的时候,关羽傻了眼。由于他一时疏忽而犯下的一个小错误,并且错误扩散到整个系统的每个角落,已经无法修改。客户大为不满,项目终于失败!而老板一气之下也把关羽炒了鱿鱼。关羽的一世英名就这样毁在自己的大意上面。这就是在IT业界流传很广,十分有名的“关羽大意失荆州”的故事。   从这个故事中我们可以得到以下几个教训:   1、越是厉害的人物,越容易阴沟里翻船,水平很高的程序员,也很容易因为不注意细节而犯下一些低级的错误。所以身为一名测试者,不能迷信权威或专家,对就是对,错就是错,要勇于怀疑一切。时刻牢记我们代表的是最终用户,并建立这样一个观点:即使一个错误不是程序本身的原因,而是因为操作不便而使用户造成,严格说来,那仍然是一个错误。 从《三十六计》看软件测试之计[2]   2、测试者与开发者的地位是相对独立,但绝不是势同水火,双方彼此同样是项目组的成员,在保证软件产品质量这个大方向上是一致的,彼此都应该互相尊重对方的劳动成果,虚心对待。关羽的直接领导诸葛亮早就告诫过他这一点,让他一定要尊重测试组的劳动成果,不要双方闹翻。可关羽硬是不听,于是造成项目失败。 3、在测试工作中,测试者与程序员的沟通是十分重要的。在双方互相尊重的基础上,彼此都要本着对事不对人的原则,保持严谨的科学态度,共同完成软件的开发。上面的故事中,吕蒙的做法其实也不是十分的正确,不仅遭到了大量关羽的fans的指责,而且长久背负着做人不厚道的骂名,这些倒不重要,更为重要的是,最终整个系统、整个开发团队失败了,他同样是个失败者。更好的做法是在测试的工作中,就要注重沟通问题,当一个错误一直不被修改的时候,与开发人员沟通失败后,应该及时上报给项目的管理者,尽早寻求解决的方法,而不是将错误一直留到测试结束后才暴露出来,此时的错误可能已经造成十分严重的后果,测试报告写得再漂亮也已经没有多大的意义。基于以上陈词,本庭宣判:本案关羽负主要责任,吕蒙负次要责任。关羽斩首,吕蒙打五十大板!^_^   4、想要做好测试工作,学历和技术并不是最重要的,重要的是要有责任心和细心,中专毕业证书是中专学校发的,大学毕业证书是大学发的,而有了责任心和细心的测试员,就不再是普通的测试工程师,而是优秀的测试工程师了。 在开发一个软件产品的过程中,每一个程序员都需要跟成千上万行的代码打交道,他们自己写的代码就像大宝SOD蜜一样的天天见,看多了难免叫人头昏眼花胸闷心烦……再加上每天都看见的东西,很容易就会产生思维定式。一个人偶尔犯错并不可怕,可怕的是他对错误熟视无睹,错啊错啊的就习惯了,于是很自然的把错的当成对的。俗话说“老虎也有打盹的时候”,水平再高的程序员也会有犯错误的时候,因此必然会有一些错误和缺陷是很难被自身发现的,其原因可能是他在阅读需求规格的时候惦记着那天和女朋友吵架的事情开了小差,从而没有好好地理解需求;也可能是他那天正好失恋心情不好而犯迷糊,更可气的是他居然说女朋友都跟别人跑了我的程序写得那么好有什么用,我偏要这么写……所以说没有BUG的软件是不存在的(否则广大和我一样的软件测试工作者靠什么混饭吃?^_^)。 “阴在阳之内,不在阳之对”,我们那些无比智慧而英明的祖先在这里清楚的告诉我们,一个软件产品中最大、最致命的BUG,往往不是如你想象的那么隐蔽、那么难找,而经常是潜伏在你最没有防备、以为最不可能出错的那些地方。这便再一次的证明了这样一个道理:在软件的世界里,不是缺少BUG,而是缺少发现BUG的眼睛! 初学者福音C语言的编程风格    缩进格式 Tab是8个字符,于是缩进也是8个字符.有很多怪异的风格,他们将缩进格式定义为4个字符(设置为2个字符!)的深度,这就象试图将PI定义为3一样让人难以接受.   理由是:缩进的大小是为了清楚的定义一个块的开始和结束.特别是当你已经在计算机前面呆了20多个小时了以后,你会发现一个大的缩进格式使得你对程序的理解更容易. 现在,有一些人说,使用8个字符的缩进使得代码离右边很近,在80个字符宽度的终端屏幕上看程序很难受.回答是,但你的程序有3个以上的缩进的时候,你就应该修改你的程序.    总之,8个字符的缩进使得程序易读,还有一个附加的好处,就是它能在你将程序变得嵌套层数太多的时候给你警告.这个时候,你应该修改你的程序.   大符号的位置   另外一个C程序编程风格的问题是对大括号的处理.同缩进大小不同,几乎没有什么理由去选择一种而不选择另外一种风格,但有一种推荐的风格,它是Kernighan和Ritchie的经典的那本书带来的,它将开始的大括号放在一行的最后,而将结束大括号放在一行的第一位,如下所示:   if (x is true) { we do y }   然而,还有一种特殊的情况:命名函数:开始的括号是放在下一行的第一位,如下: int function(int x) { body of function }   所有非正统的人会非难这种不一致性,但是,所有思维正常的人明白: (第一) K&R是___对___的,(第二)如果K&R不对,请参见第一条. (:-))......另外,函数也是特殊的,不一定非得一致.   需要注意的是结束的括号在它所占的那一行是空的,__除了__它跟随着同一条语句的继续符号.如"while"在do-while循环中,或者"else"在if语句中.如下:   do { body of do-loop } while (condition);   以及 if (x == y) { .. } else if (x > y) { ... } else { .... } 理由: K&R.   另外,注意到这种大括号的放置方法减小了空行的数量,但却没有减少可读性.于是,在屏幕大小受到限制的时候,你就可以有更多的空行来写些注释了.   命名系统 C是一种简洁的语言,那么,命名也应该是简洁的.同MODULE-2以及ASCAL语言不同的是,C程序员不使用诸如ThisVariableIsATemporaryCounter之类的命名方式.一个C语言的程序员会将之命名为"tmp",这很容易书写,且并不是那么难以去理解. 然而,当混合类型的名字不得不出现的时候,描述性名字对全局变量来说是必要的了.调用一个名为"foo"全局的函数是很让人恼火的.全局变量(只有你必须使用的时候才使用它) ,就象全局函数一样,需要描述性的命名方式.假如你有一个函数用来计算活动用户的数量,你应该这样命名--"count_active_users()"--或另外的相近的形式,你不应命名为"cntusr()". 有一种称为Hungarian命名方式,它将函数的类型编码写入变量名中,这种方式是脑子有毛病的一种表现---编译器知道这个类型而且会去检查它,而这样只会迷惑程序员. --知道为什么Micro$oft为什么会生产这么多"臭虫"程序了把!!. 局部变量的命名应该短小精悍.假如你有一个随机的整数循环计数器,它有可能有"i",如果没有任何可能使得它能被误解的话,将其写作"loop_counter"是效率低下的.同样的,""tmp"可以是任何临时数值的函数变量. 如果你害怕混淆你的局部变量的名字,还有另外一个问题,就是称function-growth-hormone-imbalancesyndrome.   函数 函数应该短小而迷人,而且它只作一件事情.它应只覆盖一到两个屏幕(80*24一屏),并且只作一件事情,而且将它做好.(这不就是UNIX的风格吗,译者注). 一个函数的最大长度和函数的复杂程度以及缩进大小成反比.于是,如果你已经写了简单但长度较长的的函数,而且你已经对不同的情况做了很多很小的事情,写一个更长一点的函数也是无所谓的. 然而,假如你要写一个很复杂的函数,而且你已经估计到假如一般人读这个函数,他可能都不知道这个函数在说些什么,这个时候,使用具有描述性名字的有帮助的函数. 另外一个需要考虑的是局部变量的数量.他们不应该超过5-10个,否则你有可能会出错.重新考虑这个函数,将他们分割成更小的函数.人的大脑通常可以很容易的记住7件不同的事情,超过这个数量会引起混乱.你知道你很聪明,但是你可能仍想去明白2周以前的做的事情.   注释   注释是一件很好的事情,但是过多的注释也是危险的,不要试图区解释你的代码是注释如何如何的好:你应该将代码写得更好,而不是花费大量的时间去解释那些糟糕的代码. 通常情况下,你的注释是说明你的代码做些什么,而不是怎么做的.而且,要试图避免将注释插在一个函数体里:假如这个函数确实很复杂,你需要在其中有部分的注释,你应该回到第四章看看.你可以写些简短的注释来注明或警告那些你认为特别聪明(或极其丑陋)的部分,但是你必须要避免过多.取而代之的是,将注释写在函数前,告诉别人它做些什么事情,和可能为什么要这样做.   你已经深陷其中了.   不要着急.你有可能已经被告之"GUN emacs"会自动的帮你处理C的源代码格式,而且你已经看到它确实如此,但是,缺省的情况下,它的作用还是不尽如人意(实际上,他们比随便敲出来的东西还要难看- ainfinite number of monkeys typing into GNU emacs would never make a good program)   于是,你可以要么不要使用GUN emacs,要么让它使用sanervalules.使用后者,你需要将如下的语句输入到你的.emacs文件中.(defun linux-c-mode() "C mode with adjusted defaults for use with the Linux kernel."(interactive) (c-mode) (c-set-style"K&R") (setq c-basic-offset8))   这会定义一个M-x Linux-c-mode的命令.当你hacking一个模块的时候,如何你将-*- linux-c -*-输入在最开始的两行,这个模式会自动起作用.而且,你也许想加入如下   (setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.〖ch〗$" . linux-c-mode) auto-mode-alist))      到你的.emacs文件中,这样的话,当你在/usr/src/linux下编辑文件的时候,它会自动切换到linux-c-mode .   但是,假如你还不能让emaces去自动处理文件的格式,不要紧张,你还有一样东西: "缩进" .   GNU的缩进格式也很死板,这就是你为什么需要加上几行命令选项.然而,这还不算太坏,因为GNU缩进格式的创造者也记得K&R的权威, (GNU没有罪,他们仅仅是在这件事情上错误的引导了人们) ,你要做的就只有输入选项"-kr -i8"(表示"K&R,缩进8个字符). "缩进"有很多功能,特别是当它建议你重新格式你的代码的时候,你应该看看帮助.但要记住: "缩进"不是风格很差的程序的万灵丹. 成长的烦恼:初涉设计模式 相信很多人都喜欢看这部喜剧,我是很喜欢,里面包括了成长中的悲欢离合,你在其中可以寻找你成长的足迹。   编程成长之路何尝不是这样的呢?   故事就是从这里开始的。   小王是刚毕业的学生,进入一家软件公司,薪水不错。年轻人充满干劲,有着远大的目标。前三天参加了公司的培训,三天没写代码了,手痒。第四天,项目经理走过来说:“小王,写一个整型链表的排序算法吧,我们在项目中要用。”   冒泡是小王在脑海中第一个浮现出来的。翻开某某圣经,摘了段冒泡算法,修改了一些代码的书写风格(有些圣经代码风格不咱的),代码大致如此:         BOOL     Sort(ListInt)         {               冒泡排序算法               {                      比较语句               }               return TRUE;        }   小王检查了一下,还用测试用例测试了一把,确保万无一失,交给了经理。经理说了句不错,乐坏了小王。   第二天,经理跑过来说:“把你昨天的代码改一下,现在要比较浮点型了,还有能否速度上提高一点?”   小王上网查了一下,选择了快速排序算法,不忘把昨天写的备份了一把,然后在昨天函数的基础上改。代码大致如此:        BOOL     Sort(ListInt)        {               快速排序算法               {                      比较语句               }               return TRUE;        }        Easy吗?测试交差。   一年后……   镜头切换……   小王坐在计算机前熟练的编写着程序,而且旁边还放着本《设计模式》的书。知道了面向对象编程,知道了设计模式,但理解还不够深刻。排序算法也演变成比较文件名了。   一日经理过来说:“小王,现在我们的排序算法要用在嵌入式平台中,你做一些算法的研究工作,给出一份报告。”   这不是策略模式的典型应用吗?定义一系列的算法,把它们一个个封装起来,并且使他们可以相互转换。   这样,小王把一些流行的排序算法都试了一遍,总共有七八种,换一种算法速度也很快,新的算法插入到系统中,老算法从系统中"退休",实现插件式替换。       CSort    *pSort = new CBubbleSort;       CClient.ListSort(pSort); 如果要改成快速排序,只要如此:       CSort    *pSort = new CQuickSort;       CClient.ListSort(pSort);   测试交差,当然经理自己也有想法,又让小王试了另外的几个算法,小王都能轻松的完成。策略模式的作用在这里淋漓尽致的发挥了,小王心里特别有成就感。   过了些日子,客户提出需要按文件名、日期进行排序,小王觉得这还是比较简单的,   改代码的主要工作是copy-paste,就四个函数,也就很快完成了。   客户的需求是不会停止的,为了加强功能,提出需要按文件大小、文件的类型排序,天知道客户还会提出什么要求。   “再也不能这样活”,小王听着歌,陷入了沉思。   “排序的算法和比较算法分开来会如何呢?把它们脱耦,使得二者可以独立地变化。这句话怎么这么熟悉,我肯定在哪里看到过。”小王忙翻开《设计模式》,开始查阅。   “Got it,这不就是桥梁模式(Bridge)。”一阵欣喜,马上就干。         客户端代码如下:         CSort *pSort  = new CQuickSort;         CCompareType   *pType = new CNameCompare;         pSort->SetType(pType);         pSort->Sort(pList);         哈哈,客户们,你们尽管提要求吧。 测试之颠,必先利其器 孔子曰:“工欲善其事,必先利其器”,其大体意思是:孔子告诉子贡,一个做手工或工艺的人,要想把工作完成,做得完善,应该先把工具准备好。时至今日想起此话很有道理,在我们的测试工作中又何尝不是呢!只是对其“器”即所谓的工具的范围更广了而也。   在纷繁复杂和反复无常的测试工作中其所用的“器”那是至关重要的,其器可以从两方面来讲:一方面是测试时所具备的工具;另一方面则是测试人员本身,这一点是对器的含义的衍生,相对前者就更加重要了。   工具是基础,是开展一切事项的根本前提,在人类起源之初因为原始的高级动物具备了工具从而使之开始劳动,进而成为现在我们人类,可想而知其工具的魅力所在。   在测试工作中使用一个好的测试工具是很有必要的,目前市场上所出现的测试工具不难分出如下几类:   为减少重复测试工作的自动化测试工具   高精度专业化的专用测试工具   软件开发过程中各阶段使用的辅助测试工具   面对如此繁多的测试工具我们应该如何对待呢?其实每一个工具均有其自身的特点,这也是每个工具存在的唯一理由,不可能有一种工具什么都能做,或者什么都不能做,要是真有什么都不能做的工具那就不叫工具了。在这里需要强调的是并不是使用的工具越多测试工作就做得越好,其实即使在经济上允许的情况下使用了一些没有必要使用的工具也许是一种累赘,况且据我所知很多公司都不愿意把大把的钱花在买测试工具上,更何况该测试工具是一种累赘。   简单来讲就是在当前环境下我们要使用适合当前项目和符合公司及团队运作的测试工具。所谓的当前环境是指目前在项目进度和项目预算这种前提下是否允许我们使用某个测试工具;所谓适合当前项目是指是否在这个具体的项目中使用这个测试工具能够提高测试效果和效率;所谓的符合公司及团队运作是指公司及团队的发展战略及相关规程是否能够使这个测试工具能够更好的运作起来以此来发挥其最佳效果。   分析好以上所说的“三个所谓”的问题,对于决定是否需要这个测试工具那是一件非常容易的事了,如果没有解决好以上“三个所谓”的问题那么就最好不要选用这个测试工具。关于如何选择一个测试工具请参考WAYNE先生的一文《如何选择嵌入式白盒测试工具》,在此文中对于测试工具的选择有非常精辟的阐述。那么拥有一个非常适合的在业界也是比较优秀的测试工具就够了吗?当然不是了,要不测试人员就要下岗了。   测试人员是灵魂,工具毕竟只是个听从指挥和执行命令的一个实体,不能像人一样发挥主观能动性,不具思维,更不用说是发散思维了,不能执行一些创造性的工作。所以说除了有一个非常适合的在业界比较优秀的测试工具之外,更重要的还需要一个非常优秀的测试人员,需要这个灵魂来*纵测试工作的一切。   一个优秀的测试人员具备如下素质是很有必要的:一、软件开发和设计功底,这个是基础,如果一个不懂得开发的人员来做测试工作其实很容易想象测试工作是多么的糟糕,其道理也很简单,在此也不再提及,但很遗憾的是在这个观点上往往会有人知错犯错,导致总是会有一些测试人员不是很懂得开发的一些东西,这种现状希望在不久后会彻底消失;二、测试理论和测试思想,这点就很容易理解了,这也是作为一个测试人员的基础,要做到这点相对比较容一些;三、不仅要学会使用测试工具,更要在平时的测试工作中加以提炼创造测试工具,以至更好的为测试工作服务,提高测试效率和测试工作的共用性;四、测试人员个人的素养,这里主要是指个人的沟通、交流等方面的能力,还有就是测试人员所具备的比较特殊的发散思维和逆向思维。   在测试工作中除拥有一个好的测试人员外,更加拥有一个适合的比较优秀的测试工具,这两者相结合,那么做好一项测试工作就很容易了,只要拥有了这两项利器相信测试工作会获得更大的成功,需要说明的是并不是每一项测试工作一定需要测试工具来辅助完成,而是需要应该需要的工具。当然还需要组织及团队有效的推动和支撑,这样其测试工作将会发挥到极致,以至登上华山之颠!时至那时,测试行业的发展将会拔开云雾阳光普照。 测试工程师的十二最   测试工程师最开心的事:发现了一个很严重的bug,特别是那种隐藏很深,逻辑性的错误.偶第一次发现这种问题的时候,听到上司和开发人员的表扬时,高兴的就想扭pp.不过现在慢慢矜持些了,呵呵.   测试工程师最提心吊胆的事:版本release出去后,客户发现了很多或很严重的bug.经过紧张的系统测试之后,好不容易可以轻松一下了,却又陷入了每天担心正在做验收或使用的客户一封邮件或一个电话说产品有问题.碰到好些的老板还会比较乐观的看这样的问题,最惨的就是有些人一顿臭骂,之前的辛苦,加班全部都给抹杀了.   测试工程师最憎恨听到的话:"为什么这个bug没有在测试的发现呢?"这句话经常是客户发现bug后,老板对测试人员的质问.当然这里排除那种很明显的错误.其实谁都知道bug是不可能全部发现的,这句话其实也是客户对大头,大头对小兵一级一级问下来的.除了希望测试人员警惕之外,还有更多的是一种"踢猫"的行为.对于这句话,偶第一次听到这句话的反映是"我们怎么可能发现所有的bug呢",后来变成"制造bug的人不是我们,是开发",到现在的"让我查查我的日志,问问开发这个bug的原因,为什么我们会没有找到,下次我们会怎样"的回复.   测试工程师最郁闷的事:"刚才那个版本打包打错了,你们要重测".新版本来了,马上投入紧张的测试,希望能够多找些bug.没想到辛苦了可能大半天,开发人员说打包打错了,你重测吧.这种情况虽然可以通过规范流程之类的办法控制发生的机率,但人总会犯错,多少而已.碰到这样,你除了提醒开发部门下次注意,你除了重测没有太多办法.   测试工程师最不想面对的事:在测试晚期或最新的版本里发现了以前一直存在的问题,特别是当问题很严重时决定到底报不报bug.报吗,开发人员肯定会问以前有没有这个问题,不报吗,客户发现更惨.毕竟客户或老板的责备比开发部门或主管的责备轻许多,最后还是会报到bug库里的.   测试工程师最不想做的事:申请版本推迟发布.由于在版本发现了太多的问题,觉得产品不能达到发布的标准,建议公司推迟发布产品.这时虽然大家都知道产品有问题,尽管你自己也不希望这样,但谁都觉得你是一个制造麻烦的人,毕竟市场的压力很大呀.   测试工程师最丢人的事:辛苦的发现了一个bug,居然是该配的参数没有配等一些自己的失误造成的.有些该注意的地方居然测试时忘了,找出的问题给开发人员一顿臭扁,无比丢人啦.   测试工程师最怕的事:一天,甚至几天都没有发现一个bug!经过一段时间的bug高峰期后,有段时间会发现bug数量的减少,最可怕的就是一天都没有发现一个bug.偶有时会难过的吃饭都没心情.搞得偶的开发朋友说了一句最让人吐血的话:"要不要我在代码里放几个bug给你呀,hoho"   测试工程师最伤心的事:每年的调薪,发bonus或发股票时,测试工程师总比开发工程师少.偶有一同事在调薪的第二天就申请转开发,说测试太没前途了.   测试工程师最有力的保护方法:把你认为是bug的问题都提交到一个正式的,可以追踪的地方(一般来说是bug库).有时总会碰到一些很小的或是很难判断的问题,犹豫一定是否要报,特别是一些UI的问题.有时问开发人员,他们可能会轻描淡写的回复你导致你没有report它.但多年的经验一定要报,了解bug流程走向的人都知道,后面还有人verify,还有开发经理判断,如果不是bug,自然他们会回复,会写明原因.说白了,出了问题也不是你的事情.当然一开始经验不足时会收到一些白眼球,但慢慢经验多了,对系统熟悉了,自然这种情况会少些.人也可以从一些问题中发现自己的弱点.但如果不报,那天客户提出来,你除了懊悔还要面对指责,严重的炒鱿鱼.   测试工程师最任重道远的事:测试驱动开发.碰到这种开发模式的项目,既是测试扬眉吐气的机会,也是可能会陷你于深渊的恶潭.你就必须打起十二分的精神.等于你在引导开发,有什么问题一定要提出来,否则你就等着被盲目的牵着鼻子走了. 测试工程师最期待的事:测试能够越来越受重视,测试工程师的考核越来越合理. 操作系统\UML与面向对象\数据库考试模块指导 操作系统和数据库是程序员和软件设计师每年的必考内容,从1987年到2005年春季软考都少不了它们的身影。   近年来,程序员和软件设计师大纲虽做了一些大的改动,但操作系统部分变动并不是很大,上午分值多是1到5分之间,下午是不确定出题,也就是可能会出到,也可能没有。但不可大意,如2004年秋季下午题的第四题就是道操作系统题。   另外,在出题形式上更趋于具体的分析,而不再是纯粹的概念题。如PV原语操作就比较多偏向于对生产者/消费者问题的解答。大纲所列知识点虽不能全部都涉及到。不过再通过我们对历年题型的综合分析后(特别是1995到2005春季),可以明确的是操作系统方面的题目,一般集中在进程,存储管理和作业管理这几个方面。1998年到2000年这几年的操作系统,有很多是重复出题,而且都集中在上面说的几个方面。希望各位考生在复习时把主要精力放在主要知识点上。   数据库在程序员和软件设计师的出题中比重不小。分值上午一般会有5分左右,下午有和软件工程结合出题,或者与UML联合出题的情况。这种结合多是考查ER模型到关系模式的转换,以及用SQL来建立关系模式,2005年春季考试上下午都有数据库的题,且下午是独立题目。而且我们思达网校的老师一致认为这是考生朋友们应

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开