qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

如何保证软件质量?浅析软件带来的业务风险

如何保证软件质量?浅析软件带来的业务风险

企业在软件质量保证上的投资是值得的,对于降低企业的业务风险也是必要的。

  软件项目风险高、软件质量差一直是困扰我们企业的一个大问题。根据日前由美科利(Mercury)与Economist Intelligence Unit合作撰写、发布的报告,在中国有76%的企业IT项目没有达成预期的业务目标。

  这份题为“管理IT业务风险,保护组织远离IT失败”的报告以全球性的调查为基础、调查了全球1000多位的IT经理而成。该报告在关于中国的研究报告部分说,中国的IT项目失败的原因主要是无法应对IT项目开发阶段的变化、低质量的软件以及项目管理中的资源和资金问题。而项目管理、应用管理以及开发工具将是许多企业明年为提高IT性能而投资的三个最重要的领域。

  事实上,由于软件出现故障导致业务中断的事件我们时有耳闻。2005年4月,一个软件的小Bug让美国航空集团公司损失了数十万美元,当时一些机票的价格被错误地定为1.86美元; 更严重的例子是,2003年8月美国东北地区的大停电正是由软件Bug造成的,这次停电让数百万人陷入黑暗。还有我国的首都机场也曾因软件故障导致一度停运。

  “要保证软件不出问题,有几个关键环节需要控制。一个是软件开发阶段,即在项目计划、需求分析、软件开发等几个关键环节进行软件质量控制,另一个是在运行阶段,对软件实时监控,即进行配置和性能优化,保证软件顺利运行。” 美科利全球运营高级副总裁Jay Larson说。

  出于时间和开发资金的原因,很多企业常常让软件仓促上线。对此Jay Larson认为,企业不能把软件质量控制建立在软件供应商已满足CMM5认证、建立在软件供应商是业内最好的企业之上,而应该对交付的软件进行严格测试

  Jay Larson 说: “不管是预算多么紧张,时间多么不够用,测试过程是不能打折的。为了保证测试的顺利,测试部分的预算应该占总预算的20%以上。更何况,与国外企业的软件相比,中国软件系统要大得多。因为大所以软件复杂,软件出错的概率也更高,从而使得软件质量保证更为重要。”

  据了解,重开发轻测试是很多企业常犯的错误。实际上,这是本末倒置。根据美科利的统计,经过美科利的测试软件测试后,其软件缺陷数会降低75%,单个项目的投资回报率可以达到350%.显然,企业花在软件测试上面的投资是值得的。而值得注意的是,由于自动化的测试工具的出现,与以前纯人工的软件测试相比,测试效率有了很大提高,同时测试成本也有了很大程度的下降。

  另外,软件质量保证是一个长期的工作。这体现在两个方面: 一方面,不仅在软件部署和重大升级时需要进行测试,而且在打补丁和小的发布时都需要进行测试。而后者很容易被企业忽略。另一方面,也是更重要的,需要对软件进行长期的监控,即生产中和生产后的监控,也就是生命周期的测试。

  值得高兴的是,在一些软件密集型企业,如金融、电信企业已经意识到软件质量的重要性。据美科利大中国区总经理卢汝文透露,已经有企业和美科利探讨组建企业软件质量中心。卢汝文说,“我们能看到的趋势是,越来越多的CIO开始关注软件质量、关注其失败后带来的业务风险。”

posted @ 2011-12-07 11:33 顺其自然EVO 阅读(163) | 评论 (0)编辑 收藏

国内软件测试发展状况分析

【背景】

  记忆中,自2000年以来,软件测试在国内的兴起,犹如一阵春风来,业界感知到了,在网上终于看到些许软件测试相关的招聘信息了。接着便有了专业网站,培训机构等,再后来是更多的岗位需求,更多的培训机构等。那么10年后,国内的软件测试到底发展到一种什么样的程度,又将会走向何方?带着这些问题,我搜集了一些资料,及结合亲身经历的一些案例,作以下总结分析,与大家分享。(了解不全面,不正确之处,欢迎拍砖!)

  【行业发展概况】

  ■ 测试专业走入高校

  1、2010年12月16日,国内知名测试专业网站51testing与郑州轻工业学院软件学院人才培养实训基地签署协议,共同培养软件测试人才;(http://www.51testing.com/html/00/n-210000.html

  2、 目前,国内多间高校已专设有本科段软件测试方向的专业,如广州华软软件学院,如下图所示,电子科技大学成都学院,北京民族大学信息工程学院等学校;

  3、 2011年11月12日~13日,由国家教育部软件工程专业教学指导分委主办的“2011年高等学校软件测试课程教学论坛”,在上海同济大学召开,无疑对国内软件测试人才的培养,及测试领域的全面发展起到积极推动的作用。这里要特别感谢软件测试领域知名专家朱少民老师的分享,下面是来自兴浪微博关于此事的截图。

  ■ 测试技术沙龙多样化

  1、对于线下的技术沙龙活动,51testing应是国内举办场次最多,时间最早的一家了。自2007年开始,分别在一线城市的北京,上海,深圳轮流举行。在深圳举行的沙龙一般情况我都会参加,每次去叫上一些朋友,都有一些收获。乘着国内软件迅猛发展的态势,社会发展步伐的需求,今年7年份在天国之府的成都也开始举行,使得更多的同行朋友可以相互交流、分享,何尝不是一件好事;

  2、软件测试是软件研发过程中不可或缺的一环,在网上不少软件研发社区也有专门的测试版块,在线下也组织一些演讲活动,如MPD(亚太软件研发团队管理)峰会,自去年开始,就在全国各地作不同巡回演讲,对推动软件测试领域的发展无疑是正向的。


 ■ 测试专业微群层出不穷

  自今年以来,比较关注微博生活,几乎在半年多的时间里,我就收到不下10个测试微群的邀请。比如敏捷测试,落地微群,软件测试,软件测试俱乐部等,尽管这些微群的影响力还不足够突出,但有一点足可以说明在线上活动的测试同学非常活跃,大家都在积极讨论,相互学习与分享,且这种氛围的交流没有国界,常能让你感受到世界没有距离,技术无界,非常High!(这一点也是互联网的优势哦J)。

  ■ 不可忽视的信息福射影响

  从今年收到的一些二三线城市,如苏洲,桂林等地一些读者朋友的来信中,领略到社会对软件测试需求的变化,测试对软件质量的重要性已从几年前的认识层面,上升到了实施层的执行阶段。现在,这股气息已扩散到了华夏大地的大江南北。尽管目前他们那边的软件园才刚刚建成,公司软件开发模式还属小作坊等,但国内外此领域发展已有的积累一定可以使他们成长得更快,更顺利。这亦是好事,也是社会发展大环境的影响,大势所趋,信息化网络化社会发展的必然。

  综上,看到发生在我们身边的这些变化,相信测试朋友们与我有一样:高兴,鼓舞倍增。然而,不时不时在网上或一些书报上,总是提及软件测试正处于萌芽阶段、初级阶段云云,一年过去了,二年过去了,几年后还是萌芽、初级阶段吗。常在想,我们现在到底走到一种什么阶段,这些阶段的划分又是以什么标准来判断的呢,并试图通过研究国内外一些知名企业软件测试的发展情况,尝试给出一个比较合理的答案,以致能按图索翼,寻找一些规律。以是有了下面的“测试领域发展阶段浅析”

  【测试领域发展阶段浅析】

  下面是世界顶级的软件公司微软的软件测试发展历程图,从这个图中或许我们可以找到一些比较、借鉴。

  ■ 图解

  1、1975年微软成立,1979年,招入第一个测试实习生,名叫Lloyd Frink。<<微软的软件测试之道>>中有相关的故事介绍,也就在那时,微软开始意识到软件研发团队中需要有测试人员,属测试认识的萌芽阶段。

  2、1983,招入第一个全职的STE(Software Test Engineer)。在测试意识萌芽了近4年后,微软件有了第一个正式的测试人员,接下来也就有第二个、第三个正式的测试人员,意味着从测试的萌芽阶段迈入到测试初始阶段,属测试发展的必由路径。

  3、1985, 招入一批STE(下图为当时微软刊登在西雅图时报上的一则招聘广告),并成立独立的测试部门,标志着在微软公司,软件测试步入了正轨,开始了他们正式的软件测试发展时期。到了2005年,他们在全球已有9000多名STE。由于公司业务的发展,及技术积累到一定程度,量变带来一系列的质变等。STE已不能很好地表达对这个岗位人员的称呼时,他们对测试工程师的称谓改为SDET(Software Development Engineer in Test),这又是一个进步,是历经了20年历练后总结出来的给测试人员的最合适的称谓。那么这20年,对于微软的测试来说,它是一个高速发展变化的发展阶段,而在SDET之后是迈向更高一个台阶的阶段。

(注:上图来自于《微软的软件之道》)

 从宏观的角度,纵横国内外关于软件测试的所见所闻所感,分享下我对国内软件测试发展阶段的看法(划分),如下图所示。

  ■ 图解

  1、萌芽阶段:2000年之前,国内软件公司有专门设立软件测试岗位的可说是少之又少,大部分情况是代码设计人员编码完成后,进行调试,对基本功能自行进行确认。据悉,即使是目前排名等一的软件公司华为也是在1997年才有正式的测试岗位。

  我是在1997年开始在一家台资企业从事软件测试的,那时找到这份工作向同学、朋友说起,基本没人知道是做什么的。好在自己是学计算机出身,软件工程这门课中有一些章节专门介绍软件测试。俗话说“既来之,则安之”,既然选择了这份工作,还是需要把它做好,这是对工作负责的基本要求,于是到处找相关的书籍、资料进行学习,只可惜那时基本找到的仍是软件工程类的书。后来,随着国内互联网产业的发展,在90年代未,在家里终于可以方便地通过电话线上网了。记忆比较深刻的是上国外的www.QAForums.com网站,也就在哪,发现了我们与国外测试领域发展的区别。

  2、初始阶段:2000年后,由于互联网信息产业的迅速掘起,不仅改变着我们的工作方式,也影响着日常生活中我们与同学、朋友之间的交流方式。也就是在互联网上,在国内首家上线的“中国人才热线”上,第一次看到有一家港资公司发布了招聘软件测试员的信息。后来,每隔一段时间,我又到网上搜搜,发现关于招聘软件测试员、甚至提到招聘软件测试工程师的公司越来越多,甚喜!朦胧前行几年后,终于依稀看到前方的曙光,正穿过厚厚的云层向我们走来,走来……。

  自2003年后,随着国内软件外包公司的快速发展,市场把对软件测试的需求推向了一个高潮。同时,属国内高科技领域的软件行业一方面是受国家政策的倾斜,另方面也是社会发展之需,本土软件公司的发展势头同是异常迅猛。而大家都知道,有软件的地方,就需要有软件测试,因为软件测试仍是至今为止最好的提高软件质量的手段。此阶段,在互联网上百度或google一下“软件测试员”,“软件测试工程师”,便有成千上万的相关信息出来。冥冥之中,全国上下,大大小小与软件相关的公司都开始设立软件测试岗位,并招聘相关人才。也正因为有这些社会需求,全国各地的测试培训、测试服务机构犹如雨后春笋般不断地涌现,如领测软件测试,北大青鸟、达内,51testing等,也就在这个阶段的2004年,目前国内知名的测试专业网站51testing出现了。

  3、发展阶段:如同其他专业领域一样,随着时间的推移,社会大环境的发展变化,测试专业领域的发展也在不断地发展变化着。软件测试是一门技术性很强的专业,与软件开发之间的关系非常密切,在测试模式、测试方法上与开发的模式、架构直接相关。比如:由.net架构开发的软件,测试对象分析必会涉及到.net软件运行原理及相关知识等。如果操作系统是采用嵌入式开源Linux系统,那么采取的测试模式、方法会与Linux系统相关,等等。

  大家都知道,在IT领域,软件的开发技术更新换代日新月异,换而言之,伴随着不断变化的测试对象,测试技术、测试方法、测试知识也在快速地变化着。近几年,大家对这方面的讨论比较多,或许是要学要做的事多了,在网上讨论一些如薪水低,测试不受重视,技术含量低等这些方面的贴子少了,取而代之更多的是相对比较务实的贴子。如工作中的点滴总结分享,问题解决方法分享,技术应用分享,行业信息分享等。

  最后是最近这二三年,测试专业走进了高校,可以说给测试领域人才的培养起到了突破性的推进作用。为什么这么说,在学校的集中成培养,可以更系统地学习相关专业知识,例如统一的课程,用书,实习与管理,相当于批量生产。

posted @ 2011-12-07 11:32 顺其自然EVO 阅读(875) | 评论 (0)编辑 收藏

项目管理杂谈

项目管理有个前提,资源稀缺,如人力、时间、资金等。比如,有一个政_府官员,有一笔拨款,于是上了一个政绩项 目,这类项目一般不缺资源,所以也不需要进度管理,做啥时候就啥时候,更不用项目管理软件。如果进度拉长可以增加预算,于是得到更多灰色收入,那么效率可 能是一种负担。我不是危言耸听,你看中国有多少.gov的僵尸网站?

  项目管理 vs 人的管理

  其实,标题的意思是,项目管理过程中,关注于项目,还是关注于人。是人适应项目,还是项目适应人。

  偏向于人的管理,即人本管理,我认为,对于像软件这种思考型行业更有效。因为思考型行业的管理,本质是人脑的管理,人心的管理。人脑的管 理,就是将人的智商充分发掘出来,高效率地工作;人心的管理,就是让员工自动自发、培养其责任感和热情。管理是因为不协调才需要约束,如果大家自动自发、 有责任感,还需要把管理挂在嘴边吗?

  最好的管理,是员工感觉不到被管理

  任何外在的手段,无非是让其产生压力、恐惧,如被淘汰、降薪、加班,通过这种力来推动项目。但人的效率,只有在充分自由的环境下才能够发 挥。引力(激励)比推力更有效。《人件》比任何项目管理工具书,更能从根本上解决问题。

  项目的风险,往往来源于人的风险,如沟通不畅,上下不齐心。

  信任本身就是一种约束,监督会加强团队的隔阂。

  激励比控制更容易规范员工行为。

  如果说在项目管理和人的管理间找到一种关系,那就是:设定目标,然后站在执行者的角度考虑问题。

  项目管理的前提,是人的管理。人的问题解决后,再来谈管理项目。

  项目管理,本质上是关注如何在有限的资源下,达到设定的目标。所以,它涉及到成本管理、进度管理和人力管理等资源方面,范围管理和质量管理 等目标方面,以及达成目标所需要的沟通管理和采购管理。

  成本管理 打个比方,计算器可以为我们DIY电脑时省钱吗?

  人力管理和沟通管理:关键是处理人的关系,关注当事人的利益

  范围管理:也许写在纸上大家也就明白了

  质量管理:决定于流程和执行力度

  采购管理:就看PM的商务沟通水平了

  也许,项目管理软件,最后会简化到一个进度管理和任务分配工具,而进度管理,往往Excel甘特图更实用。

  当然,我说的是中小型项目,大型、规范的项目和团队,可能就很依赖于项目管理软件来做进度。

  完成项目,需要一种方法,这种方法可能就依赖工具,也许工具本身就提供一种方法。工具有一定的使用环境,就如同我以前一篇文章中, 谈到的一段经历:

  Bug管理

  Bug管理,这两年,我们经历了三个阶段。

  先说说使用环境吧,因为这是 决定一管理软件是否适合的最核心条件之一。

  人员:有开发人员和不懂软件的业务人员 问题主要是业务员提出

  距离:原来一年大家在一个办公室,后来IT部和业务部分,距离约1km

  项目:旅游电子商务网站,包括前台和后台。这类网站重业务和用户体验,技术上没难度

  最开始,使用的是Bug管理系统JIRA 用了约一年,基本上是推,业务人员不适应,最后我觉得反馈一个问题很烦琐,自己主动废弃了。

 后来,使用Excel,当然这是为bug管理定制的Excel,执行一个月就觉得不行,因为问题汇总、截图等不方便,简单问题这样汇报似乎也太累。

  最后,使用Foxmail邮件用得非常顺,特别是业务部和我们分开情况下。因为邮件有三个特性很受用:抄送人,延迟执行,贴图。

  有些很小并且及时的问题,直接通过QQ完成。

  反正,在我们这个小团队,最后一种方式,直到现在都觉得很适合我们。

  其实,在Bug管理的背后,有一个非技术支撑:信任。我们的重点不在责任界定、责任追究等和权限有关的事情上,我们只关注目标:问题被及时 发现、及时解决,以及解决过程中的低成本协作。

  开始应用一款项目管理软件,都存在不习惯、甚至抵触的问题。最难的是改变人的思 维习惯,其次才是行为习惯。前者需要有效的培训和辅导,培训的效果,取决于团队成员多大程度的认同而不是会用,后者可 能需要痛苦的练习。

  项目管理 vs 过程管理

  能够将这两个概念清晰区分的人,一般都有真正的项目管理经验。前面说过,项目管理,本质上是关注如何在有限的资源下,达到设定的目标。项目管理,本身和具体开发的实物无关,比如甘特图几乎可以描述任何项目。这就是为什么有些项目还会有产品经理。过程管理,本质上是实现具体实物所需的步骤或流程,而它和具体实物、以及项目团队关系很大。

  我将两者拿出来比较,主要是因为,我觉得项目的成功与否,与采用的过程关系很大,而这在项目管理软件中很难体现。比如开发企业信息系统,要 建立数据库:

  如果是大项目,可能有专门的DBA负责建库,不需要和谁一个个字段确认。

  如果是中小项目,可能是PM或PL负责建库,也不需要其他人确认。最混乱的情况是,各模块开发人员自己建表。

  如果是偏产品,小团队,比如我建立过一个流程,对我们很实用:

  引用

  1、项目经理先和某开发人员沟通需求及业务字段

  2、开发人员在一个规范的Excel表格中建表

  3、告知经理,review一下字段命名及类型等,微调

  4、开发人员在开发数据库中建表

  5、建完后告知经理,再次review

  这样,把本来建库的繁琐工作授权给开发人员,解放了经理,也提升了他,还保证了质量。过程其实非常敏捷。

  权力并不会带来真正高效的的管理

  可能有人说,我也带过项目呀?如果你带的一批人,一开始都和你关系不错,直到项目结束,你可能并没有接触到真正棘手的管理。当你的项目组,都是一批 有个性、工作性质不同的人,你这时候才会深刻体会到,沟通、协作有多大的挑战,如果再加上一个项目期限,我姑且抛开项目本身的业务复杂性。比如,技术牛 人,往往很有个性,喜欢自己来一套,不遵守团队规范,并且不太喜欢主动反馈,因为自我感觉都OK。如果强推规范和流程,往往会埋没一位人才。

  还有一种情况,就是大公司的“资深”项目经理,这类人往往受公司高层支撑,比较强势。如果遇到项目组某成员不服管,往往是,要么打入冷宫, 要么驱逐出队,而不是站在员工角度,和他沟通。这种行为可以理解,因为找刺头沟通很烦,再说替换他毫不费力。这样的资深的项目经理,往往并没有多少管理经 验(管理=管人+管事),因为权力并不是领导力,权力并不会带来真正高效的的管理:员工主动性、责任心。再说,他并没 有利用好资源。如果该队员是他带入的,这样做,是一种对己对人都不负责的行为。对于项目经理的他,选择即责任。

posted @ 2011-12-07 11:31 顺其自然EVO 阅读(131) | 评论 (0)编辑 收藏

针对Linux集群的高级监控工具sinfo概述

 你是不是面临这种情况:想搭建某种网络集群,但又要处理许多不同的计算机,想密切跟踪这所有计算机几乎是不可能的事?如果你负责满满一屋子的计算机,还要负责使用这些机器的那些用户,又该如何是好?sinfo也许正是你苦苦寻觅的那款工具。Freshmeat网站上的介绍如下:

  Sinfo是一款监视工具,使用广播方案来发布关于你本地网络上每一台计算机的运行状况的信息。它支持显示多方面的内容,比如处理器、内存使用情况、网络负载以及关于每一台计算机上五个主要进程的信息。Sinfo使用ncurses,以一目了然的方式来显示信息。

  Sinfo可以显示关于多台计算机的系统信息,以便管理。使用的时候可以通过-s选项查看更多信息。

  安装过程

  如果你使用基于Debian的系统,比如Debian和Ubuntu等系统,可以使用二进制包,可以在你的repo中找一下。考虑到该软件包括了一个启动守护程序sinfod,我强烈建议使用这个可选的二进制文件,因为这个过程的许多方面实现了自动化(它也是我在这里探讨的版本)。不过,为了确保发行版中立,与往常一样,我还在安装过程中介绍了源版本。

  说明文档对代码库的要求如下:

  ● ncurses:用于终端处理的代码库(5.7版本)。

  ● boost:可移植的C++源代码库,使用Boost.Bind和Boost.Signals(1.42版本)。

  ● asio (>=1.1.0):asio是一个跨平台的C++代码库,用于网络编程(1.4.1版本)。

  如果你通过源代码编译,还需要上面这些代码库的开发包(-dev)。libboost-下的开发包的数量相当多,所以要是你在编译过程中遇到了任何问题,请先检查libboost是不是安装全了。

  对于使用源代码来运行的那些人来说,一旦你搞定了代码库要求,就可以获取最新的tarball文件(下载地址)。解压缩,在新的文件夹中打开终端,输入以下命令:

$ ./configure
$ make

  如果你的发行版使用sudo:

$ sudo make install

  如果你的发行版使用root:

$ su
# make install

  在我继续下文之前,应该解释一下:sinfo分平常的应用软件部分和后台守护程序这两个部分。守护程序的安装每个发行版都不同,这部分我就不具体说了,细节可以查看源代码tarball文件的使用说明文件和官方网站。

  使用

  Sinfo是一款“半图形用户界面(GUI)”的命令行程序,使用起来实际上很容易,不过高级用户会通过命令行的参数选项符让它处理一些相当出色的任务。想让该程序在基本模式下运行,只要输入:

$ sinfo

  如果你只是在自己的机器上安装了sinfo,显示的信息将仅是你这台机器的信息。你可以从这个屏幕上看到可用内存、处理器占用率和主机名称等信息。文末的附录列出了适用的快捷键命令,只要按一个键,就可以切换该程序的不同部分。

  不过在这种情况下,sinfo其实只是更漂亮的top而已。使用sinfo的目的是,你可以一下子显示来自好几台机器的信息,以便密切监视局域网的运行情况。

  要做到这一点也很容易:只要在网络上的其他计算机上也安装并运行sinfo,运行之后你就会发现两台计算机的信息分别在两个计算机上都有显示。继续把它安装到其他联网计算机上,显示列表就会越来越长。

  这些只是基本功能,更丰富的功能方面又如何呢?很显然,因篇幅所限,我没法在这里一一介绍(你其实应该查阅参考手册页,了解更多详细内容),不妨看一下我偏爱使用的一些功能。


 在命令行,如果你添加了-W参数选项符(或者--wwwmode),就像这样:

$ sinfo -W

  输出就会从平常的类似top的屏幕变出HTML输出——对于喜欢借助自动化网页等方面进行远程管理的那些人来说,这非常方便。

  在编写某种命令行脚本时,你可以添加参数选项符-s(或者--ysteminfo)输出一大段重要的系统信息。举例来说,我的两台机器显示了以下的额外信息:

192.168.1.2   knightro-bigdesktop i686
↪Linux 2.6.32-27-generic #49-Ubuntu SMP Wed De
cpus: 4  MHz:  800.0
RAM: 3276.5 MByte   swap: 7629.4 Mbyte
load 1min:  0.0   load 5min:  0.1   load 15min:  0.1

192.168.1.1   nhoj-desktop x86_64
↪Linux 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 0
cpus: 2  MHz: 1000.0
RAM: 2007.6 MByte   swap: 2047.3 Mbyte
load 1min:  0.1   load 5min:  0.2   load 15min:  0.1
uptime    0 days, 19:13:03

  这样一种信息表明sinfo有许多潜在用途,我立即想到了可以在局域网派对(LAN party)上用于监视和故障排除。要是任何一个节点有问题,主机在试图隔离这个问题时很可能就能够立即着手处理。

  结语

  sinfo设计精巧,安装方便,我认为这款程序会很快闯出自己的一片天地。但愿它会像其他标准应用软件那样变得司空见惯,成为一款常用工具。也许对它进行移植就能实现这个目标。

  附录:sinfo键盘命令

  ● q键—退出sinfo。

  ● Page up键, Page down键 — 滚动屏幕,每次滚动一页。

  ● Up arrow/u键, down arrow/d键 —滚动屏幕,每次滚动一行。

  ● Home键—跳到最上面一行。

  ● s键 — 切换显示系统信息。

  ● o键 — 切换显示你自己机器的进程。

  ● n键 — 切换显示网络信息。

  ● D键 — 切换显示磁盘负载。

  ● t键 — 切换显示主要的X个进程。

  ● c键 — 将处理器负载条形图的标度从log(对数模式)、lin(线性模式)切换至full(全模式)。

posted @ 2011-12-07 11:30 顺其自然EVO 阅读(179) | 评论 (0)编辑 收藏

QL Server数据库占用过多内存的解决方法

QL Server数据库占用过多内存的解决方法

 经常有网友会问,SQL Server占用了太多的内存,而且还会不断的增长;或者说已经设置了使用内存,可它没有用到那么多,这是怎么一回事儿呢?

  下面,我们来具体看以看SQL Server是怎样使用内存的。

  最大的开销一般是用于数据缓存,如果内存足够,它会把用过的数据和觉得你会用到的数据统统扔到内存中,直到内存不足的时候,才把命中率低的数据给清掉。所以一般我们在看statistics io的时候,看到的physics read都是0。

  其次就是查询的开销,一般地说,hash join是会带来比较大的内存开销的,而merge join和nested loop的开销比较小,还有排序和中间表、游标也是会有比较大的开销的。所以用于关联和排序的列上一般需要有索引。

  再次就是对执行计划、系统数据的存储,这些都是比较小的。

  我们先来看数据缓存对性能的影响,如果系统中没有其它应用程序来争夺内存,数据缓存一般是越多越好,甚至有些时候我们会强行把一些数据pin在高速缓存中。但是如果有其它应用程序,虽然在需要的时候MS SQL会释放内存,但是线程切换、IO等待这些工作也是需要时间的,所以就会造成性能的降低。这样我们就必须设置MS SQL的最大内存使用。可以在SQL Server 属性(内存选项卡)中找到配置最大使用内存的地方,或者也可以使用sp_configure来完成。如果没有其它应用程序,那么就不要限制MS SQL对内存的使用。

  最后我们来看查询的开销,这个开销显然是越低越好,因为我们不能从中得到好处,相反,使用了越多的内存多半意味着查询速度的降低。所以我们一般要避免中间表和游标的使用,在经常作关联和排序的列上建立索引。

posted @ 2011-12-07 11:29 顺其自然EVO 阅读(180) | 评论 (0)编辑 收藏

从思路开始 Java如何实现条件编译

 条件编译绝对是一个好东西。如在C或CPP中,可以通过预处理语句来实现条件编译。代码如下:

  • #IFDEF DEBUG 
  • #UNDEF DEBUG 
  • #ENDIF 
  • #define DEBUG 
  • #IFDEF DEBUUG 
  •   /* 
  •    code block 1 
  •    */ 
  • #ELSE 
  •   /* 
  •    code block 2 
  •   */ 
  • #ENDIF
  •   但是在JAVA中却没有预处理,宏定义这些东西,而有时在一些项目中,我们又需要条件编译。那么,在JAVA中,该如何实现条件编译呢?

      我们来看一个例子。

      编写一个helloworld程序。代码如下:

  • public class Hello { 
  •     public static void main(String[] args) { 
  •         System.out.println("Hello, world!"); 
  •     } 
  • }
  •   保存为Hello.java并编译,得到一个class文件,并且观察到文件大小是417字节。然后我们对这个文件进行反编译,用jd-gui。得到代码如下:

  • import java.io.PrintStream; 
  • public class Hello 
  •   public static void main(String[] paramArrayOfString) 
  •   { 
  •     System.out.println("Hello, world!"); 
  •   } 
  • }
  •   得到这个有什么用呢?

      现在我们再来对源代码进行修改,修改后的代码如下。

  • public class Hello { 
  •     public static void main(String[] args) { 
  •         if(false) { 
  •             System.out.println("Hello, world!"); 
  •         } 
  •     } 
  • }
  •   进行编译,这时我们再看它的大小,只有255字节。怎样?想到什么了吧?没错,编译器会对代码进行优化,对于条件永远为false的语句,JAVA编译器将不会对其生成字节码。下面我们再来对该class文件进行反编译,果然代码如下:

  • public class Hello 
  •   public static void main(String[] paramArrayOfString) 
  •   { 
  •   } 
  • }


  •  利用JAVA编译的这一优化机制,我们就可以实现JAVA的条件编译了。

  • public class Hello { 
  •     public static void main(String[] args) { 
  •         if(false) { 
  •             System.out.println("Hello, world!"); 
  •         } 
  •     } 
  • }
  •   定义一个final的变量,然后再在if语句中使用。代码如下:

  • public class Hello { 
  •     public static void main(String[] args) { 
  •         final boolean DEBUG = true
  •         if(DEBUG) { 
  •             System.out.println("Hello, world!"); 
  •         } 
  •     } 
  • }
  •   当条件编译使用得多时,上面将极不利于代码的修改及维护,这时就可以用一种更为灵活的方法。定义一个静态类,里面专门定义用来控制条件编译的变量。然后再在具体的代码中导入该类,使用这些final变量。代码如下:

  • public class DebugConfig { 
  •     public static final boolean BLUETOOTH_DEBUG = false
  •     public static final boolean WIRELESS_DEBUG = false
  • }
  • if ( DebugConfig.BLUETOOTH_DEBUG) { 
  •     // TODO 
  • }
  • posted @ 2011-12-07 11:25 顺其自然EVO 阅读(171) | 评论 (0)编辑 收藏

    测试用例之度——系列之颗粒度(上)

    测试用例是测试工作的核心。测试工作是讲究投入产出比的工作,这也是测试用例设计的指导思想。

      测试用例有度的概念,正如亚里士多德在《伦理学》中讨论道德为例:道德意味着过与不及之间的状态。面向测试用例,网上流传着这么一句话:“不同的机构会有不同的测试目的;相同的机构也可能有不同测试目的,可能是测试不同区域或是对同一区域的不同层次的测试”

      下面就列举测试用例设计的方方面面,看不同的团队,不同的测试目的,如何把握测试用例设计之度。

      颗粒度:

      颗粒度的粗细,有无标准?什么是粗?什么是细?

      1、以功能点划分?

      仅仅覆盖所有的功能性需求为粗?

      仅仅正向覆盖所有的功能需求(功能、性能)为粗?

      正向/负向覆盖所有的功能需求(功能、性能)以及正向覆盖性能需求为粗?

      正向/负向覆盖所有的需求为细?覆盖到产品包,涵盖兼容性、升级、安装、易用性为细?

      2、以STEP划分?

      每条用例有一个STEP为粗,三?五?十为细?以上为细?

      以测试设计思路的体现?

      只采用正向为粗?只采用正/负向为粗?考虑应用场景为细?考虑业务逻辑为细?

      3、以数量级?

      百条?千条?万条?

      4、以数据覆盖?

      等价类是粗?穷举是细?

      每个人、每个机构判定测试用例粗细的标准都不一样,没有标准的答案。所以测试用例颗粒度的粗细,本身就是一个相对而言的标准。

      尝试用图示来表示颗粒度粗细的常规概念:




     测试用例颗粒度粗、细的特点是什么?

      用例设计分析:

      粗颗粒度面向宏观,面向正向的功能点、大的功能模块和整体性,体现测试用例的设计思路;细颗粒度面向微观,面对具体的一个个功能点的正向/负向逻辑,体现测试用例的细节和完备性。

      面对测试执行人员:

      粗颗粒度用例不容易被测试新手执行,因为很多约定成俗的操作、现象,甚至行业术语都不清楚。细颗粒度用例相对较易被测试新手执行。

      覆盖度:

      粗颗粒度覆盖度可能小于细颗粒度用例(粗颗粒度只覆盖全部正向和部分负向,细颗粒度覆盖全部正向、负向、其他等);但还有一种可能性,就是粗细用例均覆盖全面,但是深度不同。类似下雨的降雨量不同,对农作物(产品)的意义不同。

      可维护性:

      毫无疑问,测试用例和需求的匹配,测试用例本身的维护是大多数团队的工作难点重点,粗颗粒度便于维护,方便和需求保持高度一致;细颗粒度用例,越细越不容易维护,维护成本过大,特别是需求频繁变更会导致不可维护。

      类似的概念,比如自动化测试环节,GUI不停改变导致的脚本重写类似。

      时间:

      粗颗粒度构架和评审的时间较短,适合周期较紧的项目;细颗粒度构建和编写的时间较长,适合周期宽松或更倾向于质量的项目。

      资源:

      粗颗粒度占用资源较少(人力、评审、会议室等),适合小团队或同一团队多项目模式;细颗粒度占用资源较多,适合大团队或单一项目模式。

      风险:

      毫无疑问,粗颗粒度用例的风险是漏测,存在很大概率漏测的风险,依赖于测试人员的个人素质;细颗粒度也存在漏测,不过相对更可能是测试人员自己的想当然跳过用例不执行。

      细颗粒度用例最大的风险就是可维护性,或者投入产出比。

    posted @ 2011-12-06 11:41 顺其自然EVO 阅读(883) | 评论 (0)编辑 收藏

    开发的自测宝典

     常常会听到说开发自测之后主流程都走不通,常常会遇到测试同学对着开发自测的结果直摇头,常常会自己心里觉得开发自测之说不靠谱。

      不知道这个现象是不是普遍,不过却很让测试同学头痛。以开发自测为主的项目,结果测试同学还是投入大量的时间去执行测试,来保证项目质量。说开发冒烟自测通过再提交测试,结果测试同学冒烟测试时仍不通过。

      有过几多次吐血经历之后,有了一些小小的经验,貌似可以提高开发自测质量。

      提供测试用例,尤其要标注冒烟用例。因为开发在做测试时往往是遵循自己开发的思路来执行,很可能遗漏一些场景及步骤,所以提供测试用例,开发就可以根据用例来进行执行。

      有了用例结果提交的代码还是冒烟不通过,怎么办!!看开发同学执行一个冒烟用例,要了解为什么开发根据用例来执行用例还会出现冒烟不通过,是不理解用例还是用例写的不到位。

      提供测试数据给开发同学。开发同学可能只了解自己开发模块的相关业务,对于准备测试数据确实不是开发同学的强项,而且开发同学准备的测试数据往往会按照代码逻辑来准备。所以测试同学可以站在用户的角度准备测试数据来进行测试更容易发现问题。

      测试同学把关边缘用例。可能开发同学比较奔放吧,要不然咋体现测试同学比较细心呢。有些边缘业务还是需要测试同学自己把关,尤其是应用间有交互的模块,需要多关注。

      测试同学参与验证bug,执行相关模块用例。我想测试同学在验证bug的时候常说的一句就是“还是有问题”,这个很难让人淡定,所以最好还是测试同学参与一起验证BUG。因为已经发现的问题,再未被解决发布到线上,这个就比较悲剧。还有个现象就是修复了一个BUG引发新的问题,测试同学会本身有一种惯性测试的特点——就是测试关联模块,这点可以比较好的避免新问题的遗漏。

      让开发执行引发bug的用例。这个不知道有没有效果,本身这点的出发点是为了让开发可以bug身上找出灵感,想想代码的其他地方有没有缺陷或者漏洞。

      最后一点是兼容性的测试。这个是跟前端关系很大,前端出现的很多BUG就是兼容性bug了。提醒前端同学在自测的时候要注意兼容性问题,目前要求测试的浏览器有IE6,7,8;firefox;chrome。

      差不多使上这些绝招,相信开发的自测会变得靠谱起来的。

    posted @ 2011-12-06 11:40 顺其自然EVO 阅读(128) | 评论 (0)编辑 收藏

    如何有效实现软件的需求管理(3)

    如何有效实现软件的需求管理(3)

     【本篇为《如何有效实现软件的需求管理》第三篇,(第一篇第二篇)】

      第二阶段:需求分析与设计(怎么去做)

      既然需求已经获取了,也就是说客户已经跟我们说了要做什么或者我们自己想出来的一些需要做的功能,好了,那现在就真正开始进入需求管理阶段了。

      首先就是需求分析阶段了,所谓的需求分析,简单点来说就是把获取的需求分析一下,看看是否真的是客户所想的,看看是否是我们产品能做的。 有时候一个需求就是客户一句话,但是真正理解起来并不是一句话就能解决的,所以你可能需要再跟客户确认,了解他们的真实意图。(下面就是一张经典的需求分析出错的图,呵呵,我大学时老师讲到过,这次碰巧又被我看到了,就借来一用)

      对于一个需求而言,它不是简简单单一个功能上的操作,它有可能是一个性能需求,也有可能是安全保密需求,甚至还有可能是用户接口需求、成本消耗需求、可靠性需求等,所以在需求分析的阶段,不是说跟客户交流几句话就能把这个需求完全搞清楚的,而且即使搞清楚了这个需求,能不能做(可行性)也不可能一下子想清楚。

      所以为了解决这种问题,各种需求分析的方法也相应而生。如果你在大学的时候学过软件工程的话,可能你会记得像结构化分析方法之类的方法,什么数据流程图啊、数据字典啊、判定表啊,等等,也许当初你为了应付考试,就匆匆背了一下,到现在想必也应该忘了,即使你当初很用心地去看了,去理解了,我相信没有真正在工作中用到的话,你其实没有真正理解它们。

      不过,如果你想从事需求分析相关的工作,我可以告诉你,这些知识还是很有用的,需求分析还是需要用到它们的,当然很多时候你应该不会直接用到这些理论,但是总是间接的用了体现它们思想的工具。(比如UML建模)

      今天谈的是需求的管理,所以对于怎么做需求分析这种技术性的活,我不多说了,因为前面也说了,这个靠一篇文章是不能教会的,要真的教会我可能得出一本书了,呵呵。所以我还是侧重于如何去管理。

      我们自己公司经常用到的需求分析建模工具是FreeMind,基于思维导图原理,还行挺好用,之前用它的原因是我们用的需求管理工具TechExcel的DevSpec自带了这个小工具,用用挺好用,而且可以与需求点以及相关文档做关联,实时同步需求的变更,所以就用上了,其实以前也用过Visio,也挺好的,不过白猫黑猫,能抓老鼠就是好猫,只要适合就行了。(下面是FreeMind的截图,功能还是很强大的,下面也会具体谈到)

      谈到建模,也许有人问,为什么要建模,建模有啥好处,呵呵,这个问题本来不想回答,但是总是有人在问。

      一方面,咱们在开发软件或者硬件,但是你拿到需求后不可能马上就能给客户看到这个产品是怎样的,所以你有必要做个模型出来,让客户能看看涨什么样子,是不是符合他们的要求,这种就是简单的建模,对于硬件而言,你可以把缩小版的样子给客户看,对于软件而言,你可以把这个软件的架构啊,可以实现的功能啊、数据流啊、程序流啊之类的列出来让客户去看;

      另一方面,我们在实际开发中,可能有很多地方不能实际去验证,需要通过建模方式模拟验证,比如原子弹爆炸,我们不可能天天去爆炸一颗原子弹去验证是否符合设计,而是通过仿真模拟来验证,输入的数据跟真实原子弹的实物数据一样,然后配合实际的物理与化学逻辑,用工具模拟出爆炸情况。

      (未完待续

    posted @ 2011-12-06 11:35 顺其自然EVO 阅读(205) | 评论 (0)编辑 收藏

    LoadRunner前传:压力测试前的分析准备工作

    LoadRunner只是一个压力测试的实施工具,相当于具体执行测试的人员。测试的执行固然重要,但其一举一动必须按照既定的计划进行,所以说测试计划(方案)才是“运筹于帷幄之中”的“大将”。

      今天的话题就是在LoadRunner实施之前进行的准备工作——测试方案。在测试方案中应该存在几幅比较重要的图。如果没有这几幅图,压力测试的准备工作不能算完善。

      1、系统的拓扑结构图,如:

      2、任务分布图

      主要描述在一天内,有多少并发用户会进行什么操作。如:

      3、Transaction Mix

      主要描述:

      ×一天内平均有多少业务,最多时会发生多少业务?




      4、User Profile

      描述的了实际的用户使用了系统的哪些功能,以及所占比例的情况。

      有了以上的几幅图后,LoadRunner专家在设计脚本、安排负载时才能有章可循,这样测试的结果才能最大程度的接近实际状况,否则只能是盲人摸象。

      注:以上的图形引用自LoadRunner Workbook。



    posted @ 2011-12-06 11:34 顺其自然EVO 阅读(188) | 评论 (0)编辑 收藏

    仅列出标题
    共394页: First 上一页 351 352 353 354 355 356 357 358 359 下一页 Last 
    <2024年11月>
    272829303112
    3456789
    10111213141516
    17181920212223
    24252627282930
    1234567

    导航

    统计

    常用链接

    留言簿(55)

    随笔分类

    随笔档案

    文章分类

    文章档案

    搜索

    最新评论

    阅读排行榜

    评论排行榜