总是很难忘记生活的点点滴滴, 脑海中总是闪过好多的曾经, 美好的回忆, 但成长中却让我们失去了很多, 很想在忙碌的生活中淡淡忘记; 不曾放低的东西却始终让我忘记不了, 但我还要在忙碌的生活中继续生活!

发布新日志

  • 十种技能方法提高IT人薪酬

    2008-06-20 09:19:57

    1.熟悉SAAS产品

    IT人员配备和随需应变的咨询公司Bluewolf的共同创始人和负责人Michael Kirven说,SAAS(软件服务)知识在用人要求条件中的比例已经从三年前的5%提高到了35%。拥有这方面知识的人可能很快提高自己的薪酬,无论他们是否知道alesforce、Google Apps或者WorkDay。每一个人都需要知道这些产品如何适合当前的IT架构。

    2.获得SAP知识或者经验

    位于费城的人才和外包服务公司Yoh Services复杂战略和营销的副总裁Jim Lanzalotto称,他支持拥有SAP技术的人,因为SAP技术顾问的需求量和现有人员之间的缺口有3至4万。

    3.获得一个行业的垂直的技术专长

    Kirven说,做一个Java程序员或者一个熟练的.Net开发人员就是一件很好的事情。但是,随着系统越来越复杂,企业不仅需要这些人学些这些编程语言,而且还要了解具体的垂直市场知识,如金融、零售或者媒体,并且了解所有这些知识。

    4.获得一个虚拟化项目

    IT job board Dice网站称,它看到招聘列表中对虚拟化知识人才的需求在过去的六个月里提高了40%,特别是需要了解VMware技术的人。

    5.提高你的商务技能

    Lanzalotto认为,商务经验对于提高IT专业人员的薪金水平是非常重要的。他说,最好的首席信息官不仅仅是一个技术人员,而且应该是能够在技术和业务两个方面都能够工作的业务人员。

    6.获得开源软件产品开发经验

    Kirven说,由于时代已经发生了变化,首席信息官采用MySQL和其它开源软件技术不会有失去工作的风险。事实上,业务人员经常会喜欢开源软件,因为它可能为公司省钱。

    7.更近一步了解能够让你的公司赚钱的技术

    在大型银行或者金融机构工作的人都知道你越接近能够让你的公司赚钱的技术,你的工作岗位对于你的公司就越重要。IT人员也是如此。参与让你的公司增加收入或者节省金钱的项目的IT人员很少会被人忽略。

    8.首席信息官需要架构技能

    Kirven称,IT架构是一个极好的职场道路,不仅因为这是一个高级的职位,而且还因为这些职位几乎完全是不会外包出去的。

    9.付费参加项目管理认证学习的人

    许多研究报名,虽然并非所有的证书都比印刷证书的成本值钱,但是,企业继续付出高价的费用聘用拥有关键证书的人才。其中最最主要的两个项目管理证书是PMP(项目管理专业人员)和PMO(项目管理办公室)。

    10.跳槽

    IT专业人员从一个地方搬迁的另一个地方的比例提高了20%。当你在你的技术专长领域寻求进一步发展时,换一个地理环境也许会有帮助。不同地区对于IT专业人员的技术需求是不同的。

  • 提高软件开发知识的12条建议

    2008-06-19 10:41:35

    1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!

            2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域, 将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。

            3、软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都 要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个 “高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。

    4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何 使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。

            5、书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。 对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上 都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智 慧,才算是真正拥有了它。

            6、不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发 Windows应用程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、 Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、 JBossSpring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。 试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!

           7、在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的 存在都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的 经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、 Delphi)进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借    Spring、Hibernate、 JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模 式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。

           8、养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软 件开发人员而言,有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结 论不应该被局限在软件开发领域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到 自己的知识库中。但是,最好还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。

           9、理论与实践并重,内外双修。工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产 品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程 师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设 计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法。

          10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开 发的产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具, 5、6年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术 和思想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大家都懂,但有多少人真正能做到呢?

             11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源 项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、 通信、网络等方面的技术,反过来也是一样。如果当他别人拿着合同找你合作,你却这也不会,那也不熟时,你将后悔莫及。

            12、书到用时方恨少,不要将自己的知识面仅仅局限于 技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明:“对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。 可见,掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等 知识,有空花时间看看,韬光养晦、未雨绸缪。

           本文的总结:

           A:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。

           B:提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。

           C:在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友。

  • BS系统的少少经验!

    2008-06-19 10:18:11

    特别留意的按钮:ESC键,退格键;IE快捷键或常用键,

    退格键:令TOMCAT曾经出现的错误:Software caused connection abort: socket write error

    1.参考不能过滤;(%号,字符等因素

    2.网页加载的信息是否正确(是返回上一操作的信息?)

    3.参考有时有记录但不能选择得到记录;
    4.并发操作(多人操作,有一个出现错误后,是继续等待,还是相互之间不受影响)

    5.数据是否错乱;(同一单据看到的信息是另一用户的信息?)

    6.网页操作速度慢(网络问题?内存问题?并发操作?

    7.多层页面是否相互影响,网页失效问题,登录系统不操作是自动退出系统登录界面,
    进行的操作能不能保存?

    8工具栏设置是否恰当,按钮是否能引导用户进行操作,

    9.不需要的功能或者测试过程中有问题(可有可无的功能)最好不要在用户使用过程中出现;

    10.执行SQL语句或过程时,是否重复操作;

    11.先确定,后取消,返回的值是否恰当;

    12.不同IE版本,不同公司的浏览器,制作的控件是否都能运行起来,最好设置一些脚本帮助用户设置;

    13.用户的不同权限和不同系统:(销售操作员,人事系统,财务系统,哪些人可以看到金额)

    14.JS编辑的规则是否跳过,或者编辑的规则不合理?

    15.光标是否定位在编辑上或者焦点上;

    16.参考有多页面时,(第一条,最后一条,第一页,下一页,最后一页选择的数据是否正确)

    17.在经常出现错误的地方,经常操作就会发现一定的规律或者错误;

    18.录入数据时,输入法是否为全角或者半角,注意出现错误的环境;

    以上只是根据现在测试遇到的情况,如有不符请根据自己情况自行总结!
    因为我觉得自己都有很多东西要去总结,写得不对或者有建议都希望指出不足的地方!

  • 软件测试管理之Bug分析:为bug预防奠定基础

    2008-06-18 10:41:19

    软件测试管理之Bug分析:为bug预防奠定基础

        生产软件的企业安排很多测试人员来测试它们的软件产品。测试的目的就是发现bug以便修正它们。正常情况是尽快处理可能的bug,从而减少修正bug的成本。因为,众所周知,bug越早被发现并修正,所消耗的资源越少。问题是在很多情况下,由于修正已发现的bug,测试过程不得不停顿下来。如果一个软件存在各种各样的问题在里面,我们为什么不考虑去努力预防bug,而不仅仅是修正它们。这就是真正的质量。

    预防的重要性

        正如我们所知,bug应该尽早地在开发过程中被发现。修正处于开发阶段的产品的bug的成本远远低于修正处于QC(Quality Control,质量控制)阶段的产品的bug,而相对与修正已经发布给客户的产品的bug的成本更是可以忽略不计。原因就是当你修正一个bug的时候,相当于把你之前做的事情重做一次。因此,越晚修正bug,你所重做的事情就越多。如果bug修正是在产品测试之前,那么重做的工作只有代码实现。如果bug修是在测试阶段,那么重做的工作就包括代码实现和测试。另一个导致成本增加的因素是依赖的组件和流程(process),随着项目的进行,产品依赖的组件和流程也会随之增加。从另一个层面来讨论这个问题。如果bug发现和修正越早,开发成本越少,那么在第一时间就避免bug引入是不是成本消耗得更少?如果bug可以被完全预防,那么在开发过程中就不会出现重复工作的情况。这个被克劳士比极力推荐的观点非常有意义,而且在很多情况下已得到严密的证实。然而,并不是所有的生产软件产品的组织都试着去避免bug。它们花费了大部分的精力在产品发布给客户之前发现和修正其中的bug。在某些情况下,软件企业并不试着去达到这样的目标。在产品发布之后,企业通过迅速修正产品中的bug来处理客户的抱怨。这是因为,这样的企业始终处于“问题解决模式”,它们并不试图发现问题的根本原因,而只是把局部的大火扑灭。

        这种模式并不仅仅导致重复工作直接带来成本的增加,而且会带来一个长期效应,而这将影响企业的业务。首先,发布带有bug的产品将给企业的声誉造成影响,并可能造成对潜在客户的影响——他们在是否建立合作关系上拿不定主意。另外,由于企业需要资源来不断解决现有产品中的问题,那么开发新产品的资源势必减少。

        对很多人来说,零缺陷的软件产品似乎是不切实际的。我们总是听到软件开发者说:“软件永远有bug”。产品进入QC阶段时含有bug并不奇怪,因为我们“期望”开发人员制造bug。不幸的是,发布一个包含很多bug的产品给客户仍然不令人感到惊讶。甚至连客户本身也不再感到惊讶。

        事实上,每个软件企业都可以通过一些简单的方法,在不增加任何额外资源的情况下预防bug。bug预防在于一个简单的道理:最好的方法是适当借鉴我们自己的经验。

    今天的发现就是明天的预防

        为了能够预防bug,我们必须首先了解bug的来源。软件bug可以分为几个类别(可能相互之间有所重叠)。第一类bug可能是随机的,它们通常是因为一时的疏忽造成的。尽管这些bug可能由于其随机性很难预防,但是,适当的分析将有助于避免这些bug。

        另一类的bug来自于需求的误解、开发环境的错误或者纯粹由于缺乏解决问题的相关技术。这类bug共同的特点是都来自于开发人员。除非被发现,否则这些bug将一直存在。例如,一个还不完全理解需求的开发工程师在单元测试阶段可能无法发现这些问题,只有当产品被其他组织(如QC组)测试时才会发现产品实现与需求不一致。这使得在前期避免类似问题的出现更加重要。

        软件中的bug往往倾向于重复出现,即使是一个随机出现的bug。软件bug的不断出现不仅表现在同一个开发人员的工作上,而且表现在一个项目甚至是企业的层面上。这当然不是说公司中的每一个开发人员都会犯同样的错误。但是,至少其中一些的错误足以成为经常性出现的问题。所以,为什么我们认为重复的错误是一个好消息?因为可以预见的bug更容易预防。事实是我们可以找到一些常见的问题,并采取相应的措施去预防它(或至少减少类似错误出现的次数)。

        人为bug的子集?那么这些bug被预防的可能性更大。域bug?域bug和产品的问题域或解决方案域紧密相关。这样的bug有更大的机会重现,因为开发人员、项目组甚至企业不断地在这个域上工作。

        现在的问题是如何预防各种bug的产生。基于这次讨论的目的,我建议我们设定一个更加实际的目标。让我不要考虑完全预防某个bug,而是将目标设为——预防我们已经知道有一定可能性产生的Bug。这意味着我们可以通过我们各种发现bug的活动来促进将来的bug预防。当某个bug被发现时,我们就有了一个很好的机会来阻止类似问题的发生。

    记录bug   长筒袜

        前提条件是持续跟踪发现的bug并正确地记录它们,离开了这个前提条件将不能将bug发现作为一个工具来预防bug。不论你使用bug跟踪系统,还是只手写了一个报告总结测试的结果,重要的是保存这些数据以便用于后来的分析。在分析bug时,bug记录的问题值得注意。bug的定义越广泛,bug分析的数据越有用。报告bug的测试人员应该明白这一点,并不限于狭义上的bug。可能的话,测试人员应该运用他们的经验对bug产生的原因做最初的假设。我们将稍后在阐述分析过程时讨论这个问题。和记录bug同样重要的是bug分析的第一步。仅仅跟踪过去的bug不能预防bug的发生,因为许多不同的bug可能来源于同一个核心问题。不同于信息收集,适当地分析bug的原因对bug预防非常有用。

    缺陷分析

    目标

        上面我们说明了bug分析的理由。如上所述,最终目标是预防bug而不是修正它们。然而,我们可以定义一个重要的子目标,这就使不断提高整个开发团队(包括QC组)的技能和实践经验。当然,这两个目标是息息相关的。离开了不断的知识累积,也不能实现bug预防。不过,我觉得有必要提及这个子目标以强调持续性的过程。bug预防并不是一个不切实际的目标。但是,你不能期望它在一夜之间发生。你应该为开发小组提供教育和知识,以使他们逐渐改善他们的工作。

    策略

        本次讨论的焦点——bug预防策略非常简单和容易实现。秘诀就是使用在大多数开发环境中已经存在的过程元素。我们不会介绍任何新的花费昂贵的活动,也不会引入一些新的角色到开发过程中。

        我们的策略是发现bug,找出bug的根源,然后寻找一个方法来预防类似的bug在将来出现。因为QC过程已经用于在目前的产品中发现bug,因此该策略的大部分工作实际上已经执行,大多数开发过程缺少的正是分析在QC过程中发现的bug。正如你将看到,尽管策略的这一部分并不需要昂贵的花费,但是却带来了极大的额外价值。

    分析过程

    (1) Bug发现和初步分析

        如前所述,bug分析的第一步是发现bug。然而,发现bug的QC工程师(注:测试工程师)不应该满足于记录bug的表面症状。QC工程师的一个重要职责就是试图发现bug的根本原因。QC小组在检验产品质量时,不应该将产品看作一个黑盒,而应该像开发人员那样了解产品的内在,包括深入源代码,理解产品的设计和实现。这些能力都是QC小组开始bug分析的基本要求。熟悉了产品的代码,QC工程师就可能推测出bug的根本原因。我要强调是下面这个短语的本质:bug的根本原因?bug的根本原因并不是产生这bug的源代码所在,尽管这些信息可能和分析过程关系密切。但是,发现bug的根本原因意味着找到造成这些错误的原因。通过一些实例来说明这个问题可能更清楚一些。

        让我们看一个普遍存在的关于线程同步的问题。假设一个多线程的应用程序需要同步地访问某个数据结构。被指派测试这个产品的QC工程师发现在某种情景下,应用程序尽管没有Crash,但是会停止响应。正常的QC过程是,这个bug被记录在bug跟踪系统中,并描述了测试情景和停止响应的实际结果。然而,如果这个QA工程师熟悉源代码,就可以进行bug产生原因的初步分析。例如,这个QC工程师可能断定这个bug产生的原因是之前的线程没有释放mutex,从而造成了冲突。这些分析可以记录在bug的详细说明中,作为bug分析的一个基础。

    (2) Bug修订和进一步分析

        一如既往,发现一个bug之后,开发人员应该负责处理它。但是,如果bug的发现过程包含了bug根本原因的初步分析,那么关于如何解决这个bug,开发人员可能拥有了更多的信息。虽然这不是QC工程师bug初步分析的目的,但是它可能为开发人员提供了更多的观点。除了修正缺陷以及记录实现的具体步骤,开发人员还应该对bug进行进一步的分析。这次分析应该着眼于导致bug产生的开发情景。

        在线程同步的例子中,开发人员不应该仅仅记录增加了一个调用来释放mutex(注:Mutal Exclusion = 互斥锁,保证了共享数据不会同时被多个线程访问,只向一个线程授予对共享资源的独占访问权)。反之,开发人员应该找出没有释放mutex的原因。假设分析的原因是:因为需要同步的方法超过一个的返回点,因此开发人员在某些控制路径上忘记清理代码。

        这一类简单的分析实际带来了非常大的价值。不同于记录具体问题的具体解决办法,我们现在有了可以解决许多情况的经验,有些情况甚至并不涉及到线程同步和释放mutex。但是,分析过程并没有结束,我们需要进一步的分析来将收集的所有数据转换为实践,从而帮助在将来避免类似bug的发生。

    (3) bug预防分析

        分析的最后一步就是寻找一个预防类似错误的方法。这一方法不仅涉及到开发、QC工程师,还涉及到不直接负责代码编写的资深开发人员。

        这一阶段的成果是一些有用的实践经验,开发人员可以通过这些实践预防bug而不是修正bug。这些实践不应该是某个具体问题的解决方案。在我们线程同步的例子中,可能得到这样一个实践:是否有审计范围机制来获取和释放资源?这种实践 (不一定适合所有编程语言)可以指导开发人员用一个类(class)封装资源, 这样构造(constructor)函数容易分配和而与析构(destructor) 函数释放资源。如果遵守这样的约定, 当程序结束这方法时,不管控制路径是怎样的,资源(上述例子中获得的mutex)总能被释放。

        Bug预防分析是整个bug分析过程的核心。这一阶段总结出的实践可以在更广泛的范围内预防潜在的缺陷。由于分析结果的广泛应用性,分析某个具体问题的投入将很容易被收回。

        非常重要的是我们前面所举的例子是一个随机性的bug。开发人员由于疏忽而忘记了释放资源。在代码实现时,这样的bug是随机产生的,但是类似bug产生的几率却非常高。所以,尽管这一类bug是随机的,但仍然可以被预见并防止发生。

    (4) 发布经验

        分析得出的实践经验应该被记录并发布,这样其他的开发人员就可以通过学习这些经验避免类似的错误。一个发布经验最好的办法就是知识库。这将使得新的知识在组织内流动并被相关的开发人员所学习。

        如果不将分析结果传达给组织内相关的其他人员,那么分析的目的就没有达到。避免下一个bug出现的唯一办法就是让开发人员知道如何避免它,并鼓励他们这么做。

    Bug分析实例

        让我们研究另外一个例子,以便更好地理解bug分析的益处。在这个事例中,QC工程师进行了如下的操作:当输入一个长字符串到应用程序时造成其崩溃(crash)。这一结论本身就需要一定程度的分析,但这个QC工程师并不满足于这样的分析,进一步研究了相关的代码,发现crash的原因是输入字符串时的处理有问题。其中一个步骤是将输入的字符缓存在一个固定大小的数组中,而这个数组有时候显得太小了。和线程同步的例子一样,QC工程师的初步分析带来了很大的价值,开发可以更容易的发现和修正这个bug。此外,记录缺陷的真正原因而不是表象,将帮助其他人避免类似的bug。

        接着,开发人员开始修正这个bug。当修正的时候,她不仅记录了解决措施,并说明了导致缺陷产生的原因。在这个例子中,造成bug的原因是在操作未经处理的C/C++缓冲区时,没有经常检验缓冲区的大小是否不够。然而,这个结论甚至可以被进一步总结为更广泛应用的经验以便帮助开发人员在以后避免类似的缺陷发生。所以,在分析的最后阶段,开发人员在组内更资深的开发人员的帮助下,得到了下面的实践经验:避免使用未经处理的C/C++缓冲区,尽量使用安全的collections和strings,如标准模版数据库中提供的可用collections和strings。这样就完全可以避免前面发现的这个bug。

    益处

        Bug分析带来了很多的好处。第一个好处就是帮助产生错误的开发人员总结经验,并使他在将来避免类似的错误。有时,只修正一个具体的bug而不去分析它产生的原因并不会帮助在日后得到提高。在这种情况下,只有深入分析和资深开发人员的指导才能使开发人员成长和提高能力。

        更广泛的好处是使得其他开发人员从同事的错误中吸取教训。分析总结的实践经验可以预防bug的产生,这样的知识在组织内的成员间共享。某个开发人员产生的bug可以帮助组织内的其他人避免类似的bug出现。

        从更一般的角度来看,发布最佳实践(如bug分析总结的实践)促进了组织内成员的学习和自我提高。这样看来,Bug分析的价值还不仅仅是缺陷的预防。

        另一个好处是通过从更广的角度上记录bug,组织内的其他QC工程师将知道如何发现类似的错误。除了分享组织内的测试知识和经验,bug分析过程可以促进开发更好的测试技术和工具,从而帮助发现类似的bug。所以,就算缺陷没有被完全预防,也能更容易被发现。

        作为上面所有好处的结果,QC在一轮测试中将有更多的时间来测试更复杂的情景并发现更“狡猾的”bug。如果类似的bug都已经被预防而不容易产生,而且QC都有更好的技术来发现类似的bug,就有了更充裕的时间来进行更高级的测试。当然,组织所生产的产品的质量也将得到提高。

        最后,我想强调的是bug分析不仅收集了执行中的问题,而且从这些问题中总结了实践经验。举例来说,导致一个bug产生的原因可能是需求不够清楚。这样,通过bug分析得到的经验提供了一种方法来预防需求不清楚。这个经验可能不会对组织中的开发人员产生效果。所以尽管QC工程师开始验证开发人员的实现结果,但是还需要改善开发流程,如需求收集、设计流程等。

        真正的质量是生产没有bug的产品。任何其他目标都使组织内的成员从思想上接受软件缺陷是正常工作流的一部分。所以,第一步就是防止相同的bug再次发生。我们可以很轻易地执行这个目标。我们可以通过某个开发人员产生的一个bug提高整个组织的实践经验。

        通过深入产品分析一个bug,我们可以明白这个bug的机制:为什么会产生?如何去预防它?下一次我们如何更容易地发现它?只要花一点时间去理解我们的bug,而不是仅仅是尽快修正它,我们就可以从中得到经验。这样,因为一个缺陷所浪费的时间也可以转化为投入:确保类似的错误永远不会再发生。

  • IT人不要一辈子靠技术为生

    2008-06-17 16:13:41

        一. 在中国你千万不要因为学习技术就可以换来稳定的生活和高的薪水待遇,你千万更不要认为哪些从事 市场开发,跑腿的人,没有前途.

      不知道你是不是知道,咱们中国有相当大的一部分软件公司,他们的软件开发团队都小的可怜,甚至只有1-3个人,连一个项目小组都算不上,而这样的团队却要承担一个软件公司所有的软件开发任务,在软件上线和开发的关键阶段需要团队的成员没日没夜的加班,还需要为测试出的BUG和不能按时提交的软件模块功能而心怀忐忑,有的时候如果你不幸加入现场开发的团队你则需要背井离乡告别你的女友,进行封闭开发,你平时除了编码之外就是吃饭和睡觉(有钱的公司甚至请个保姆为你做饭,以让你节省出更多的时间来投入到工作中,让你一直在那种累了就休息,不累就立即工作的状态)

      更可怕的是,会让你接触的人际关系非常单一,除了有限的技术人员之外你几乎见不到做其他行业工作和职位的人,你的朋友圈子小且单一,甚至破坏你原有的爱情(想象一下,你在外地做现场开发2个月以上,却从没跟女友见过一面的话,你的女友是不是会对你呲牙裂嘴).

      也许你拿到了所谓的白领的工资,但你却从此失去享受生活的自由,如果你想做技术人员尤其是开发人员,我想你很快就会理解,你多么想在一个地方长期待一段时间,认识一些朋友,多一些生活时间的愿望.

      比之于我们的生活和人际关系及工作,那些从事售前和市场开发的朋友,却有比我们多的多的工作之外的时间,甚至他们工作的时间有的时候是和生活的时间是可以兼顾的,他们可以通过市场开发,认识各个行业的人士,可以认识各种各样的朋友,他们比我们坦率说更有发财和发展的机会,只要他们跟我们一样勤奋.(有一种勤奋的普通人,如果给他换个地方,他马上会成为一个勤奋且出众的人.)

      二.在学习技术的时候千万不要认为如果做到技术最强,就可以成为100%受尊重的人.

      有一次一个人在面试项目经理的时候说了这么一段话:我只用最听话的人,按照我的要求做只要是听话就要,如果不听话不管他技术再好也不要.随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者.

      朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间象别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能.你需要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要.(如果你没有做过1年以上的真正意义上的开发不要反驳我).

      如果你幸运的能够听到市场人员的谈话,或是领导们的谈话,你会隐约觉得他们都在把技术人员当作编码的机器来看,你的价值并没有你想象的那么重要.而在你所在的团队内部,你可能正在为一个技术问题的讨论再跟同事搞内耗,因为他不服你,你也不服他,你们都认为自己的对,其实你们两个都对,而争论的目的就是为了在关键场合证明一下自己比对方技术好,比对方强.(在一个项目开发中,没有人愿意长期听别人的,总想换个位置领导别人.)

      三.你更不要认为,如果我技术够好,我就自己创业,自己有创业的资本,因为自己是搞技术的.

      如果你那样认为,真的是大错特错了,你可以做个调查在非技术人群中,没有几个人知道C#与JAVA的,更谈不上来欣赏你的技术是好还是不好.一句话,技术仅仅是一个工具,善于运用这个工具为别人干活的人,却往往不太擅长用这个工具来为自己创业,因为这是两个概念,训练的技能也是完全不同的.

      创业最开始的时候,你的人际关系,你处理人际关系的能力,你对社会潜规则的认识,还有你明白不明白别人的心,你会不会说让人喜欢的话,还有你对自己所提供的服务的策划和推销等等,也许有一万,一百万个值得我们重视的问题,但你会发现技术却很少有可能包含在这一万或一百万之内,如果你创业到了一个快成功的阶段,你会这样告诉自己:我干吗要亲自做技术,我聘一个人不就行了,这时候你才真正会理解技术的作用,和你以前做技术人员的作用.

      [小结]

      基于上面的讨论,我奉劝那些学习技术的朋友,千万不要拿科举考试样的心态去学习技术,对技术的学习几近的痴迷,想掌握所有所有的技术,以让自己成为技术领域的权威和专家,以在必要的时候或是心里不畅快的时候到网上对着菜鸟说自己是前辈.

      技术仅仅是一个工具,是你在人生一个阶段生存的工具,你可以一辈子喜欢他,但最好不要一辈子靠它生存.

      掌握技术的唯一目的就是拿它找工作(如果你不想把技术当作你第二生命的话),就是干活.所以你在学习的时候千万不要去做那些所谓的技术习题或是研究那些帽泡算法,最大数算法了,什么叫干活?

      就是做一个东西让别人用,别人用了,可以提高他们的工作效率,想象吧,你做1万道技术习题有什么用?只会让人觉得酸腐,还是在学习的时候,多培养些自己务实的态度吧,比如研究一下当地市场目前有哪些软件公司用人,自己离他们的要求到底有多远,自己具体应该怎么做才可以达到他们的要求.等你分析完这些,你就会发现,找工作成功,技术的贡献率其实并没有你原来想象的那么高.

      不管你是学习技术为了找工作还是创业,你都要对技术本身有个清醒的认识,在中国不会出现BILL GATES,因为,中国目前还不是十分的尊重技术人才,还仅仅的停留在把软件技术人才当作人才机器来用的尴尬境地.(如果你不理解,一种可能是你目前仅仅从事过技术工作,你的朋友圈子里技术类的朋友占了大多数,一种可能是你还没有工作,但喜欢读比尔.盖茨的传记).

     

  • 网页设计基本常识

    2008-06-17 16:08:30

    . 什么是Web服务器?Web浏览器的作用是什么?简述浏览器打开文件的步骤。

      答:Web服务器是用于存储WWW文件并响应处理客户机请求的计算机。浏览器的作用在于解释并显示超文本文档,包括指向其他文档的引用(或指针),与其他HTTP服务器上非常相似,这些指针也称为链接。从一个超文本页上选择一个链接时,浏览器将请求送回支新的服务器,然后在客户端上显示另一个充满链接的页面。

      打开一个Web文件的基本步骤如下:

      A在浏览器中指定要访问的Web文件的URL.

      B浏览器将请求发给服务器。

      C服务器将靖求转递给指定URL处的服务器。

      D该服务器将文件送回到服务器上。

      E服务器将文件送回到客户端浏览器上。

      F浏览将文件显示在计算机屏幕上。

      2. IP地址与域名之间存在对应关系吗?如果存在,那么二者是怎样对应起来的?如果不存在,试讲述在Internet中是如何惟一地标识一个资源的位置的?

      答IP地址与域名存在着对应 的关系。IP地址上全球通用地址,在协议软件中IP地址由表及里2位二进制浸透表示,每八位为一组,以圆点“。”分隔,在面向用户的文档中,IP地址被直观地表示为四个以圆点滴隔开的十进制数,其中每个十进制浸透对就一个八位二进制数组(即一个字节),每个十进制数可取值0~255.IP地址理一种层次型地址,在概念上分为三个层次:主机、由主机构成起来也不方便。为了解决这个问题,同时也为了便于网络地址的分层管理各分配,自1984年起在互联网上采有了一种字符型的地址标识,这便是域名(Domain Name)。

      域名系统,域名标识了一个有户所属的机构、所使用的主机或节点机。域名的命名方式自然称为域名系统,域名必须ISO有关标准进行。

      同IP地址类似,域名采用层次型命名机制,域名由n级组成,各级之间以圆点分隔。

      域名是人们容易记忆的字符型号主要内容名,IP地址则是计算机容易处理的数值型主机名,两者均描述了主机在Internet中的地址,而且一一对应。域名系统实现了域名—IP地址映射。

      域名系统实质是一个公布式数据库,包括突出数据的标准格式,数据库查询方法,以及本地更新数据的标准方法

      域名系统将主机的信息管理公布与许多国家地区和组织,用户在自己的域名上更新所在域的信息,域名服务器则将这些信息传送给其他的域名服务器。另外,域名服务器能被几乎所有的计算机软件所有,包括电子邮件,远程终端,文件传输程序。

      3.图象处理工具主有哪几样应用?

      答 图象处理工具可对图象进行编辑,修饰,优化,图形文件格式转化等处理。

      A图形编辑包括制作业面中的字体,制作3D效果,建立透明GIF文件,插入背景,阴影,处理字体,箭头,徽标等业面元素,并能对图形进行剪辑,移动和旋转处理

      B图象修饰是指对网业中已有的图象加以认识和做其他的修改,包括调整图象亮度和对比度,采用变体,给黑白图象着等以改善网页中图象的质量

      C图象优化是指采用各种滤镜对已建立的图象进行色彩校正的优化处理。

      一般来说,图象处理工具包括公用图象处理工具,专用图象处理工具,网页制作软件自代图象处理工具

      4.为了满足爷面制作的目标,应该注意哪些问题?

      答 要注意以下几个问题

      A网页结构  网页结构要清晰,易于导航,思路和脉络要符合访问者的想法。可采取的措施有:采用框架结构表现主题,索影和正文;网页的大小一般控制在50KB以内;在网页的尾部放上联系方式,如E-MAIL,以方便访问者能建立联系,反馈必要的信息               B页面内容 一般情况下,网页都要以内容为主,不必过分的追求复杂的表现形式,但必须写好简介,要有特色,避免太空,泛泛而谈。页面本身要简单,结构复杂的网页不仅要花费很多的精力,而且由于超连接复杂,让浏览者阅读时也感觉困难

      C文字 在以内容为主的前提下,应当尽量把形式与内容结合起来。既不要把页面弄的花哨,也不呀只讲内容完全不讲究文字和图片的安排,要容易阅读。要注意:网页的标题要简洁,明确,能反映整个文档的内容;在文本叙述部分使用水平线分割不同的部分;对重点的文章和段落要使用强调字体表达

      D图形 设计好图形并合理使用能给网页增色。网页中插入的图形尽量要小,网页中图形要附加文字说明,使人在图形出来之前了解相关内容;不要为图形加太长的交互文本,也不要把所有的超连接放在图上;控制页面中的图的数量,不要滥用图象GIF

      5.什么是所见既所得的网页制作工具?什么是标记形网业制作工具?他们的优缺点?

      答 标记型网业制作工具既直接书写原代码。他的好处是用户可很方便的控制代码。由于都是自己书写,没有冗余部分,因此能非常好的把握整个HTML文件在浏览器中的表现;最大的缺点是用户必须非常熟悉HTML语言。

      可视化网页制作工具既所见既所得的方法制作网页,可以非常直观的对网页进行排版,往往使设计工作事半功倍。它不需用户对HTML标记熟悉,只要用户有好的创意,就能够作出符合用户需求的网页。但是它有个致命的缺点:难以精确的达到与浏览器完全一致的显示效果,而且它生成的代码也不能完全适应各种不同的情况,往往出现冗于度高,不如手工书写来得简洁。

      6.在学习网页制作时,可以从哪些方面来增强学习效果?

      答 A从了解HTML的基本标记开始。

      B选择自己认为顺手的工具,从第一个页面开始。

      C多访问他人网页,从中受到启发

      D深入分析成功的网站,网页。

      7. 网站设计的过程中,最中要的一个原则是什么?为什么?

      答:网站最重要的原则是创意。虽然网站的主要目的是传送给人们它的信息,但在传递信息的同时还把他的文化传递给获取信息的这些人。软件的掌握是短期就能速成的,而且新的软件成出不穷,功能越来越强大,但是使用这些软件必须要有良好的网站设计概念才能创造优秀的网站,这是网站制作的核心。网站的制作是按一定的步骤进行的,不同的网站设计着对网站有不同的见解和看法,但是有个共同观点:仅会输入文本,制作超级连接,排列图片不是真正意义上的网页制作,因为网页制作最重要的一个原则是创意。

      8. 什么是信息看版?有什么作用?

      答:信息看版是WEB站点中为访问者提供的各种最新的信息集合。通常位于首页上,或者在首页打开的同时通过脚本控制同时把信息看版打开。

      9. 简述网站的设计流程,并详细描述流程中每个步骤应该进行的工作

      答:设计流程为8个部分:A初始商讨。收集相关信息,确定包括站点目标用户,要发布的内容及开发WEB服务器平台。B构思。设计师根据收集的信息,开始构思站点的内容组织,栏目的设置,页面的基本结构等。C综合内容讨论。设计师先制作一些初始页面,将陪以文章的图样打印出来也顾客讨论,研究。D页面布局与导航。一旦顾客同意了这些内容,设计师就开始编制WEB页面,站点也编制到页面中,让顾客看到页面的处世效果。E图形制作。顾客同意了站点的外观设计,设计师就将制作图形,进行图形优化。F内容流程。利用各种网页技术,把客户的书面材料和相并进行修改。G测试。在站点被提交给拥护之前,开发人员要彻底测试每个WEB页面和连接并进行修补。H验收交付。一但开始验收工作,客户要对站点进行大量测试,找出排版错误的地方,进行修改。在作完了必要的工作后,站点可以对外宣传,开放了。

      10. 什么是站点的风格,典型的商业网站的风格有哪些?

      答:站点的风格是指整个网站所采取的结构布局,色调,文字,标志,图案等要素带给浏览者的关于该网站的印象。商业公司的风格主要表现在如下方面:

      A公司的会标或商标应出现在页面的最上方,尽可能作到色彩醒目,同时站用面积小。B可采用主题图形产品广告来突出公司形象和风格。C主要栏目一般才用图文并茂的超连接,要考虑主要栏目的图片,文字的色彩配合,主题图形相互寸托。D不要把主要栏目和次要栏目放在同一个页面显示。E商业网站一般都有固定的栏目页面。F建立站内收索引擎,方便浏览者在站内查找所需要的信息

      11.在组织网站目录结构是需要遵循哪些原则?

      答:A不要将所有文件放在根目录下面。B按栏目内容分别建立子目录。C在每个栏目下面都建立独立的IMAGES目录。D目录的层次不要太深。E切忌使用中文目录。F不要使用过长的目录。G尽量使用意义明确的目录

     12.究网站的连接结构意义何在?主要的网站结构有哪几种?

      答:网站的连接结构是指页面间相互连接的拓卜结构。他建立在木结构基础之上,但是可以跨越目录。形象的说,每个页面都是一个固定点,连接则是每2个固定点之间的连线。一个点可以和一个点连接,也可以和多个点连接。更重要的是这些点不是分布在一个平面上,而是存在于一个立体的空间。研究网站连接结构的根本目的在于,用最少的连接,使浏览最有效率。一般的建立网站的连接结构有树型和星型2种,在实际中,总是将2重结构相互混合起来,我们希望浏览者可以方便快捷的达到自己需要的页面,有能清晰的知道自己的位置。所以最好的方法就是首页和2级页面间用星型连接,2级和3级之间用树型连接结构。

      13. 什么是页面的重心?为什么要使页面的重心平衡?常用的有哪几种重心平衡方法?

      答:重心平衡既页面重心反映的是网页上各种元素分布的协调程度。任何一个图片或者文字,都在网页上占有一定的空间,作为一个模块,其本身就具有重心位置,当插入到空白网页后就会明显的改变整个网页的重心。重心的平衡代表网页必须对称布局,虽然对称的分布更容易的获得重心的平衡,但是对称分布往往使页面失去活力,因此非对称布局反而是更多网页的首选。一般情况下,重心平衡是指在左右重心的平衡。而上重下轻也是网页构图经常采用的方法。既对页面上下重心的平衡上要求不严。这是因为由于在浏览器的滚动时,显示的是整个页面,访问者一般不会注意。

      14. 什么是WEB安全色?什么是抖动?2者之间是否有联系?

      答:WEB安全色是由于浏览器在显示各种颜色时是有选择的。它只能选择其中的216色显示。无论是BLUE,RED,GREEN的颜色通道,他都是采用跳跃的显示方法进行颜色的编码,既它们都只能在00-FF之间取值。这些跳跃的色彩被称为WEB的安全色,意思是在任何浏览器上都能显示。抖动是由于浏览器不能显示所有的颜色,因此伪造了在调色板中不能显示的颜色,通过邻近的象素混合而产生在图象中实际并不存在的颜色,达到一种补偿的目的。抖动的图象有很多颗粒,图象显示粗糙。抖动是由于WEB安全色的限制产生的,抖动时使用的色彩范围是在WEB安全色内的。

      15. 简述在电脑中是如何处理颜色的?

      答:在计算机中,每一个bit(位)可以有1和0两种状态,如果对应颜色,可以有黑和白2种颜色。如果是2个bit,就有00,01,10,11四中状态,依次类推,若采用8bit来表示颜色,就有256种颜色。如果是24位,就有2 的24次方既16777216种。为了进行色彩的配比,在计算机中每种颜色对应着一个色彩通道,大调整每种通道的色彩分量时,最后得到的颜色就可以改变。对于常见的24位色彩用16进制表示就应该是XXXXXX共6个数字,前2个数字表示红色的颜色分量,后2个数字表示绿色通道的分量,最后的表示蓝色通道的分量。许多图象处理软件,都提供色彩的调配功能,通过输入3原色的数值分量来调配,也可以直接进行调配。

      16. 简述大色块构图法和抽象构图法的方法及相关思路。

      答:大色块构图法在网页制作中比较流行,这是因为首先在大色块构图时,可充分利用表格单元格的底色来形成大幅面的色块,而不需要制作如表格那么大的单色块图象,只要在色块的边缘用图象来拼接就可以做出立体效果来,这样经济且做出来的网页不大。其次大色块构图具有很强烈的视觉冲击,因为大色块集中,醒目。使用大色块要注意3点:冷暖色调在均匀使用时不宜靠近,纯度较同的颜色不宜放在一起,整个页面最好有个主色调。 与大小色块相对应的是抽象线条构图。抽象线条构图使用一些圆弧线,直线和短线段来代替以往的大色块。这些线条的搭配显示一种简洁爽朗的美感。这就是抽象构图法:仅仅凭借简单的线条形成网页。在抽象构图中,色彩一般使用统一色调,它对页面融合有好处,同时也便于突出中心图片。

      17. 网站设计中应该注意的几个方面?

      答:网站设计需要遵从一定的通用规则,必须按照一定的规划、想法来实施。网页设计的原则不仅体现在网页的风格、层次构思和网页的页面构思中,还包括更多更广的设计思想。网页设计不应该从设计者本身出发,而必须要从访问者的角度来思考问题。共有8个方面要注意:1;网站的设计目的决定设计方案:在设计一个网站之前,应当有强烈的目的性和针对性。2;浏览者的需求第一位:不论如何,必须要搞清楚浏览者需要什么。3;页面的有效性:在全局设计阶段,创作者应当在每一个页面的有效性与过载之间进行权衡。4;页面布局统一性:页面布局往往能显示一贯网站的统一性,如使用同样的背景,提供导航系统等。5;使用表格和适当的帧结构来设计网页:可以让用户在尽量少的“重载”页面的情况下浏览所需的内容,提高浏览效率。6;谨慎使用图片:保证页面下载的速度和浏览器的兼容性。7;充分体现平面设计意识:学好平面设计的一般技能是网页设计能不断提高的基础之一。8;减少Java Applet和其他多媒体的使用:应该谨慎使用。

      18. 比较GIF格式和JPEG格式的原理与各自的适用范围。

      答:如果是自己设计的线条简单。色彩种类比较少的图形,或者是著作透明图形,制作动画,那么就用GIF格式。GIF文件能做动画,且它的压缩算法是通过精简色彩集来实现的;如果需要在网页上放置一副照片,那么就用JPEG文件,因为JPEG的压缩算法对包含有复杂的颜色的图片很有效。在GIF中最多允许有256种格式,而JPEG没有这个限制,且可以显示所有的RGB颜色,既24位真彩色。而GIF只有8位表示,只能显示256色。 如果在使用颜色数目大于256色的照片时,就用JPEG格式,这样能显示所有的颜色,而颜色小于256色的图片就用GIF格式,这样才不会造成浪费。

      19.HTML文件的基本结构是怎样的?主要有哪些基本标记组成?

      答:HTML文件的第一行是标记<html>,其结束标记是</html>,它标明这个文本文件为HTML文档。每一个HTML文件都包含这个标记,即以<html>开头,以</html>结尾。

      <head>标记为文件头标记,其结束标记是</head>,在文件头标记中,还可以再加入其他标记,如<title>标记、<meta>标记等。

      <title>标记为标题标记,其结束标记为〈/titlle〉,其中的内容会显示在浏览器的标题栏中,标示该网页的主要内容。

      接下来是〈body〉标记,它的作用是标识文件主体,结束标记是〈/body〉。其中的内容是浏览器页面中显示的主体内容。

      HTML文件的内容有三大部分,即文件头标记,<head>……</head>和文件体标记<body>……</body>和一些注释。头标记和体标记的内容又由其他的标记和文本及注释组成。也就是说,一个HTML文件应具有下面的基本的结构:

      <html> HTML文件开始

      <head> 文件头开始

      文头内容

      </head>文件头结束

      <body> 文件体开始

      文件体内容

      </body> 文件体结束

      </html> HTML文件结束

      20.试举出三种基本的页面排版标记,并举一个例子包含这三种基本排版标记。

      答:页面排版标记有:<title>、<hx>、<br>、<pre>、<p>等。举例如下:

      (1)。标题标记〈title〉title标记是文件头中出现的标记,它只能出现在文件头中。title标记的格式为:〈title〉文件标题〈/title〉

      (2)。标题字体标记( <hx>)

      标记<hx>中的x表示1-6的数字标题字体标记有六种,分别为h1 h2 ……h6,用于表示文章中的各级标题的大小。标记号越小,标题越大。

      基本使用方法是:<hx>标题内容</hx>

      (3)。转行标记(<br>)

      转行标记的格式为:……<br>

      它的作用为强迫文字转行,所显示的格式并不会因为浏览器窗口大小的改变而改变。

      21.META标记有什么作用?应该如何使用?

      答:META标记是一个非常游泳的标记,主要提供的有三种功能:动态链接、动态排列文件、网页关键词。

      (1)动态链接

      对于一个网页,可以设置其经过一定的时间自动链接到另一一个网页或者另一个站点,这个功能可以由动态链接标记来实现,其格式为:<meta http-equiv=“refresh” content=“#;URL=文件名或网址”>其中:http-equiv=refresh 是指定具体内容,其中,#号代表延迟的时间,单位是秒;URL为要动态链接到文件名或网址。这个标记属于<head>……</head>之间的标记。

      (2)动态排列文件

      此标记的作用是,当浏览器窗口大小改变时,文字的排版亦会随窗口大小的大小改变而改变,让文字都显示在窗口中。标记格式为,<meta http-equiv=“content-type” content=“text/html;charset=GB2312”>其中,charset=GB2312是指对中文的动态排列通过GB2312码来做,也可以为BIG5、EN(English)等编码。这个标记也应该放在文件头<head>……</head>标记中。并且,有此标记之后,文件中的文字不应再出现<br>等排版控制标记。

      (3)网页关键词

      搜索引擎分为两大类,一类为完全人工登录,比如Tahooo!;另一类为使用机器人自动搜索,比如ALTAISTA.以机器人自动搜索的搜索引擎会包含更多的内容。机器人会搜索网页META标记中所设置的描述关键字,把它们加入到搜索数据库中,用来索引网页。因此设置META标记非常重要,在格式中,content列出了所设置的关键字,这其中的内容可以自行设置,其间用逗号隔开。基本格式如下:<meta name=“keywords” content=“Internet,business,game”>和<meta name=“descrīption” content=“xxxxxxxxxxxxxxxxxxxxx”>

     22.发展DHTML的目的在于 解决什么问题?客户端动态网页技术的优点体现在哪里?

      答:原来的静态网页要与客户端进交互时,由于客户端不能够进行处理,一切的计算工作都需要在服务器端进行处理。而且客互端在把网页下载后,网页不能够再改变,如果需要改变,还需要与服务器通信后再次从服务器端下载下来。这样,不仅加重了服务器的负担,而且加重了网络传输的负担,延长了网页显示时间。因此,DHTML应运而生。

      DHTML着眼于以更少而更快的页面下载提供更丰富的图形和数据。特别是它使得以来于客户的反馈来提供不同的信息变得更容易。他的功能比HTML更为强大,并在保持了一些熟悉的语言的同时扩展了HTML,DHTML的概念是以更少、风快捷的页面下载,提供更丰富多彩的图形和数据,但是,从实质上来说,DHTML作为浏览器自带的功能,实际上只是一种概念,并不属于一种专门技术。DHTML就是一种即使在网页下载进浏览器以后仍然能够随时变换更新网页内容排版样式以及动画等等的技术,它是一种通过各种技术的综合发展而得以实现的概念,主要包括Javascrīpt,VBSscrīpt,DOM,CSS等。

      DHTML有三个最主要的优点,即动态样式、动态内容和动态定位。动态样式能使网页制作者改变内容的外部特征而不强制用户再次下载全部内容。动态内容可以使开发人员改变显示在一页上的文本或图象,以便内容能够交互式地对用户的鼠标和键盘操作做出响应。动态定位则让页面制作者以自动方式或对用户的操作做出响应的方式转移页面上的文本和图象。

      23.DHTML是一项具体的技术还是一系列技术所支撑的概念?都包括哪些方面?每个部分相应支持哪些功能?

      答:DHTML主要由四种技术组成,各个部分的名称及功能如下:

      (1)HTML4.0: HTML4.0包括许多增强特性,如大表格的分段显示,带有固定标题的可以滚动的表格,以及对长表格打印的更好支持。对HTML格式的增强侧重于使这些格式更灵活。

      (2)CSS:CSS控制用XML或HTML语言编写的文档的显示、CSS可以使页面布局和格式比HTML更精确。

      (3)DOM:文档对象模型为 HTML文档定义了一个与平台无关的程序接口。使用该接口可以控制文档的内容、结构和样式,Web开发人员借助DOM可以在其Web页中引入动态和交互式内容,而不必依赖于Web服务器来提供新的内容或改变现有内容的显示方式。

      (4)脚本语言:目前广为流行的Javascrīpt是由Netscape公司开发的一种脚本语言,其结构简单,使用方便,易学易懂。它的代码可以直接嵌入HTML文档之中,无需编译就可以支持Javascrīpt的浏览器中解释运行。通过使用Javascrīpt可以大大加强Web页的交互性。scrīpt可以使Web上显示的文本信息动起来或是加入一些动画,从而十Web页看上去活泼诱人。另外,一种脚本语言是微软公司开发的VBscrīpt,但是很多浏览器都不支持该脚本语言

      24.Javascrīpt主要可以实现什么功能?主要的特征元素包括哪些?

      答:Javascrīpt具有事件与事件处理句柄、变量与常量、表达式与运算符、函数、数祖、对象等各种元素,以及条件、循环、对象等控制语句。正是这些元素能以分别完成各种不同的任务,而使Javascrīpt成为功能强大的脚本语言。特征元素列举如下:

      (1)事件处理句柄

      (2)函数

      (3)对象

      25.从性能上说,Javascrīpt和Java以及Java Applet之间的差异体现在哪里?

      答:由于在机制上与三者完全不一样,所以它们之间也存在性能上的差异。主要体现在以下几个方面:

      (1)Javascrīpt的本质是解释的。一般说来,解释执行的代码比编译执行的代码来得慢。然而,在实际应用中,Javascrīpt脚本反而常比同样功能的Java程序快,比如滚动文本,这是因为Java程序实际上是运行在Java虚拟机上的,而Java虚拟机的效率比较低。

      (2)Javascrīpt实现了SRC属性。通过SRC属性可将脚本从HTML文档中分离出来,成为独立的文件,扩展名为js,可以方便的重复使用脚本。

      (3)Javascrīpt代码能方便的修改,并立即在浏览器中看到修改的结果。比处理Java代码的编辑、编译、上载、查看过程要快得多,因此开发周期比Java程序短。

      (4)Javascrīpt能有效的与DOM结合控制浏览器的行为,能方便的使用插件、浏览器事件、窗体等技术,以实现用户与网页的交互。

      (5)由于Javascrīpt代码置于HTML文档中,这样,Javascrīpt代码便暴露在众人面前。源代码存在安全问题。

      (6)虽然Javascrīpt的功能非常强大,但是它在处理非常复杂的应用时就被其自身机制的局限性所限制,比如股票站点的实时行情显示这类需要在用户、浏览器、服务器三者之间进行复杂的通信、交互的应用,如果使用Javascrīpt来实现几乎是不可能的,必须通过服务器端程序、客户端嵌入式程序等各个方面协同工作来完成这样复杂的工作。

      26. CSS都有那些基本的规则?具体是如何使用的?

      答:样式的基本规则是这样的:selector {property:value}对于单一选择符的复合样式声明应该用分号隔开:selector {property:value;property:value2;……}  其中,selector :也称选择符、选择器。可以分为3类,HEML标记中的标记(tag),class,ID.Property:就是希望要修改的属性。 Value:希望赋予property的值。通过CSS我们可以作到不需要逐个修改页面中的标记属性,而直接使用CSS进行定义来修改大量的页面效果,这对页面的风格统一化有很大的作用,而且能减轻网页的维护工作,提高网页维护工作的质量。

      27. 层叠样式表中的层叠的意义体现在何处?如何在HTML上引用CSS?并比较各自的优缺点。

      答:层叠样式表中的层叠意义在于如果同一个WEB文档中可以有多个样式单存在。这些样式单根据所在的位置,拥有不同的优先级,优先级最高,就会被最后在显示时采用。从样式单插入的形式来看分为3种:内联式样式单它利于现有的HTML标记,把特殊的标记加入到那些由标记控制的信息中。嵌入式样式单和scrīpt类式,嵌入到HTML的头文件中去,使用<style></style>标记装载。外部式样式单是一种保存在外部的样式单文件。外部文件以。CSS为扩展名。外部样式单的优点在于可以统一整个网站的所有网页的样式,有利于站点的维护。而嵌入式样式单的作用在于统一整个网页的样式,只需要改动某个样式定义,整个页面内的所有相应位置均改变,有利于整个页面内部的样式。内联式样式单的作用在于简化了HTML标记的属性,直接通过CSS控制显示样式,是页面的效果更加丰富。

      28. CSS中都可以使用哪些单位?什么是CSS中的单位继承关系?

      答:在样式单中,属性的单位多为长度单位,包括PX像素,PT磅,EM(一种排版单位,1EM=12PT),MM毫米,CM厘米,PC(1PC=12PT),IN英寸,这些单位可以用整数表示,也可以用实数表示,并且元素中对数值还有继承的关系。有的单位可以负值,如MARGIN,可以达到一些特殊的效果,如元素之间的从叠。另外还有其他的一些单位如角度单位DEG度,GRAD梯度,RAD弧度,频率的单位是HZ和KHZ.

      29. 什么是选择符?都有哪几种选择符?比较各种选择符的优缺点。

      答:选择符的作用在于定义CSS的名称,以便引用,它的作用就是定义函数的名称一样。在CSS中主要有3种选择符,他们分别针对不同的要求而设定,而各自的定义方式也不同。A超文本标记选择符,任何HTML元素都可以是一个CSS选择符,选择符仅仅是指向需要特别样式的元素。类选择符,单一个选择符能有不同的类,因而允许同一元素有不同的样式。ID选择符对于页面内所有的标记都可以定义一个ID,在CSS中的选择符可以根据ID个别的定义每个元素的样式属性,这种选择要尽量少,因为它具有一定的局限性。

      30. CSS的失效发生在什么情况下?如何避免这种情况?

      答:样式表的目的在于允许网页制作者去改变网页的显示效果,而不是完全代替HTML进行页面排版,正因为这个原因,完全依赖样式表的网页开发人员会发现他们的网页在某时对部分重要的用户来说不能正常的阅读。这些问题不仅仅是在使用CSS时因该考虑。当使用其他一些需要特定环境才能实现的效果时也要考虑,如FLASH和JAVAscrīpt,如果用户没有FLASH插件,FLASH就不能播放。

      31. RONTPAGE2000有哪些新功能与特点?

      答:RONTPAGE2000是能够快速而专业的建立和管理望站的工具。RONTPAGE2000保留和发展了98的优秀功能,并增加了许多新的功能。A更容易建立专业,美观的网站。B RONTPAGE2000不仅可以用来制作网页,更可以用来建设和维护网站,方便的检查,更新。C RONTPAGE2000比其他的OFFICE组建的整和性更加提高,打开和运行的速度更快,并拥有更方便的数据管理。D使用主页。E能用图形的方式展示一个完整的WEB页面,也可以向一个完整的WEB站点引入、引出HTML文件,且可以维护站点内的超连接的正确性。F能自动创建WEB站点的文本索引,通过RONTPAGE提供的WEBBOT搜索组建查找索引,可无须编程进行站点内的全文检索。G加强了数据库访问能力。

      32. RONTPAGE2000主要有哪些模块组成?

      答:站点模块,站点管理模块,网页制作模块,站点发布模块,站点维护模块。

      33. 什么是站点?虚拟目录和实际目录是一回时吗?描述2者的对应关系。

      答:站点是一个各种媒体的集合的抽象概念,在物理上它可能是一个有许多子目录的大目录,但是站点的许多媒体可能分布在其他各个不同的物理位置上。WEB通常以站点为单位来组织发布信息。虚拟目录就是为了组织不同的物理信息文件而设立的概念。在WEB站点系统中,虚拟目录被称为文件系统物理目录的别名。通过虚拟目录可以把分布在不同位置的资源组合起来,创建一个WEB站点。一般来说,WEB站点是建立在一个物理目录下的。

     34. 为什么要作好网站栏目设计?不好的设计可能带来什么后果?在网站栏目主要根据哪些原则进行划分?

      答:A确定栏目和版块。B确定网站的目录结构和连接结构。C确定网站的整体风格创意设计。建立完整的网站在栏目设计上要考虑以下方面:A紧扣站点主题B设计一个最近更新或网站指南栏目C设计一个可以双向交流的栏目D设一个下载或常见问题交流栏目E其他辅助内容。总结以上几点,划分栏目时需要注意:A尽可能删除与主题无关的东西B将网站最有价值的东西列在栏目上C方便浏览者查询。

      35. 网络广告计算方法有哪些指标?其概念和计算方法如何?

      答:有2种方法:CPM计费方法,为每千播放、下载次数成本。CPC计费,每千次点击率为计费模式。

      36. WEB服务器是如何工作的?

      答:WEB由客户机与服务器组成。客户是简单由TCP/IP加上WEB浏览器组成,WEB服务器由HTTPD加后台数据库组成。客户的浏览器和服务器用TCP/IP的HTTP建立连接,使得客户与服务器二者的超媒体传输变的容易。所有的WEB服务器统一使用TCP/IP,统一分配IP.使得客户和服务器的逻辑连接变成简单的点对点连接。客户机和服务器通过HTTP彼此传送信息来工作。几乎所有的以网页形式表现的HTML文件,都存储在专门的WEB服务器上,WEB服务器是一种在互联网上根据设定而采用的HTTP协议的计算机。它允许浏览器与WEB进行相互通信及连接转换。

      37. 如何选择虚拟主机?

      答:使用虚拟主机的目的是降低WEB成本,虚拟主机的评价标准主要有:A服务器的放置位置。B主机与网络连接的速度。C主机所运行的操作系统。D磁盘的空间大小。Ee-mail信箱的大小。F是否能够使用数据库。G是否支持微软的FRONTPAGE.H是否支持加密传输。

      38. 网页和WEB服务器之间的关系如何?通常WEB服务器可以通过哪几种方式获得?并对各个方案进行比较。

      答:要想创建并在互连网上发布网站,必须通过WEB来实现。实际上,可以用任何连接到互联网上的主机作为WEB服务器。一个服务器上有一个或多个站点。当公司有一定量的业务时,可以考虑主机托管的方式进行信息发布。而小公司可以考虑采用虚拟服务器,这样成本相对低一些。

      39. LOGO和BANNER是一回事吗?2者的区别在哪里?

      答:前者比较小,是站点的标志图案,主要用于网站间的友情链接。BANNER是指站点的旗帜广告,通常用于网站上的广告宣传。

      40. 站点推广主要是从哪几个方面来工作的?

      答:A传统的推广方式:公司印刷品、报刊杂志、户外广告。B搜索引擎。C网络广告交换。D邮件列表服务。E BBS讨论组的宣传。

      41. 结合自己的理解,谈谈XML能够解决的问题。

      答:HTML和XML都是用一对互相匹配的起始和结束标记来标记信息。他们的差别是HTML描述数据的显示方式,而XML描述的是数据的本身。拥护可以根据需要定义任何一种标记来描述文件的数据元素。他将改变浏览器显示,组织,搜寻信息的方式,而且克服了HTML连接容易断开的缺点,他的目的就是要通过标记来精确的表现信息的各种含义,能让不同的应用系统理解相同的意义。

      42. “结构良好”的规则是什么?什么样的XML文件才能满足。

      答:结构良好的规则是指:XML文件的结构是按其标记集的语法规则进行控制的。有一些一般规则应用于所有XML文件以确定文件是否结构良好。结构良好的文件至少要符合以下规则:文件的第一行必须是XML文档说明;文件必须包含一个元素;开始标记必须和结束标记配套使用;文件必须包括唯一的打开和关闭标记,文件的其他标记都必须包含在其中;标记之间不能从叠。

      43. 列举一个简单的XML文件,简述这个XML文件的基本结构。

      答:以下面的XML文件为例:

      <?xml version=“1.0” standalone=“yes”>

      <state stateid=“MN”>

      <city cityid=“12”>

      <name>johnson</name>

      <population>5000</population>

      </city>

      <city cityid=“15”>

      <name>pineville</name>

      < population >60000</ population >

      </city>

      <city cityid=“20”>

      <name>lake bell</name>

      < population >20</ population >

      </city>

      </state>

      44. 简单比较XML与HTML,分析2者的优缺点。

      答:XML诞生是在HTML遇到不可克服的困难后。XML有利于信息的发布和结构的组织化,使数据搜索更有效。XML可以使用URL别名是WEB维护更方便,也更稳定, XML可以使用数字签名使WEB应用更广阔拓展到安全领域。可认为未来的书写工具一定是XML.虽然HTML的格式化非常有用,但是XML却可重复使用页面内容。增强了搜索能力。同时,XML使用不仅仅限于WEB上。

      45. XML有哪些应用?举例说明。

      答:XML/EDI电子数据交换。EDI是用电子技术代替基于纸张的操作手段,用于公司间的单据交换,XML丰富的语言格式可以用来描述不同类的单据。安全保密措施好,可以加密,附上数字签名。  专用标记符号语言,目前开发的CML和MATH ML是XML应用于描述化学和数学公式的标记语言。CML可以描述分子与晶体结构,化合物,光谱等,MATH ML可将数字公式精确的显示在浏览器上。   频道定义格式CDF.它是微软在IE4.0上使用的XML数据格式,描述活动通道的内容和桌面部件。指明通道的信息及其更新情况。CDF使不同的平台的互操作成为可能。使WEB发布者可以控制推(PUSH)技术。互不兼容的平台可以获得相同的WEB内容

  • 测试工程师笔试集粹

    2008-06-17 16:05:13

    测试工程师笔试集粹

    这里主要是一些测试概念方面的知识,至于活学活用的问题,就必须依靠长期的学习和实际工作中遇到的不同情况来作答,答案如有不当请指出。

    答案需要根据自身经验来回答的题目没有写出明确答案,有兴趣的朋友可以写在留言中。

    1、软件测试

    使用人工或自动的方法来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果的区别

    2、集成测试的过程

    计划阶段、设计阶段、实现阶段、实施阶段

    3、白盒测试方法

    桌前走查、单元测试、代码评审、同行评审、代码走查、静态分析

    4、alpha和beta测试的区别

    都属于系统测试

    A是在实验室在专业测试人员的指导下,由非专业人士参加,测试问题可以马上得到反馈,代价较大

    B是开放型测试,内部测试稳定后,发布Beta版本让公共用户测试,缺陷不能有效地反馈,需要将收集的信息整理为有用的缺陷报告,成本较低

    5、测试结束的标准

    严重程度在某一可接受范围内的缺陷都已经关闭

    是否达到原先的覆盖定义标准

    团队集体同意

    6、软件测试活动的输出文档

    测试计划、测试用例、缺陷报告、测试总结

    7、测试活动中集成员的工作是

    开发桩模块和驱动模块

    8、软件缺陷等级

    严重程度

    致命性错误,严重性错误,一般性错误,告警错误,建议

    9、驱动模块、桩模块

    驱动模块:

    桩模块:集成测试前,要为被测模块编制一些模拟其下调用模块的程序

    10、白盒测试

    分为静态测试与动态测试2类测试方法

    静态分析是一种不通过运行来测试的技术,是检验软件的表示和描述是否一致,没有歧义没有冲突

    动态分析是软件在模拟的或真实的环境中运行之前、之中、之后,对软件系统行为的分析。

    动态分析包含了程序在受控的环境下使用特定的期望结果进行正式的运行。它显示了一个系统在检查状态下是正确还是不正确。在动态分析技术中,最重要的技术是路径和分支测试。分为:语句覆盖、路径覆盖、条件覆盖、分支覆盖、条件/判定覆盖、组合覆盖。

    11、项目测试的全过程(软件生命周期)

    测试流程:制定测试计划、测试设计与开发、实施软件测试、评审、版本发布

    12.缺陷报告的处理流程

    提交缺陷报告-》分配缺陷报告-》处理缺陷报告-》返测报告-》关闭缺陷报告

    13、软件生命周期(瀑布)

    计划-》需求分析-》设计-》编码-》测试 -》运行、维护

    14、V模型

    用户需求                          验收测试

      需求分析与系统           系统测试

          概要设计                集成测试

             详细设计           单元测试

                           编码

    15、常用的测试方法(测试策略)

    数据库测试、功能确认测试、界面测试、值域测试、版本验证测试、可用性测试、强度测试。安全性测试、裸机测试、安装测试、加密测试。

    功能测试、性能测试、压力测试、负载测试、易用性测试、安装测试、界面测试、配置测试、文档测试、兼容性测试、安全性测试、恢复测试

    16、常用的设计用例方法

    等价类划分、边界值分析、因果图、通过测试和失败测试、错误猜测、随机测试

    17、测试工作的认识过程及以后工作的建议

    18、缺陷报告、测试计划、用例、总结的组成

    19、基于WEB信息管理系统测试时应考虑的因素有哪些?

    20、软件本地化测试比功能测试都有哪些方面需要注意?

    21、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?

  • 网页打开慢的原因及解决办法

    2008-06-17 16:02:05

    影响网页打开速度的因素主要有如下几方面:
    1、网络防火墙的设置不允许多线程访问,例如目前WinXPSP2就对此默认做了限制,使用多线程下载工具就受到了极大限制,BT、迅雷都是如此。因此,同时打开过多页面也会出现打开网页速度慢的问题。
    2、系统有病毒,尤其是蠕虫类病毒,严重消耗系统资源,打不开页面,甚至死机。
    3、本地网络速度太慢,过多台电脑共享上网,或共享上网用户中有大量下载时也会出现打开网页速度慢的问题。
    4、使用的浏览器有BUG,例如多窗口浏览器的某些测试版也会出现打开网页速度慢的问题。
    5、访问的网站负荷太重,带宽相对太窄,程序设计不合理,也会出现打开网页速度慢的问题。
    6、用户和网站处于不同网段,例如电信用户与网通网站之间的访问,也会出现打开网页速度慢的问题。
    7、网络中间设备问题,线路老化、虚接、路由器故障等。
    8、是否和系统漏洞有关,也不好说,冲击波等病毒就是通过漏洞传播并导致系统缓慢甚至瘫痪的。

    解决的办法有:
    1、到新浪助手里,用IE强力修复,马上你就可以看到效果了。要不就是你本身的网速就慢。
    2、按下开始-运行,输入gpedit.msc,弹出组策略窗口,先选左边的计算机配置-管理模块-网络-QOS数据包调度程序,再选右边的限制可保留带宽上点右键,选择属性,在弹出窗口的设置中选“已启用”,将“带宽限制”改为0%,这样可以加快下载速度。网页打开慢与机器配置也有一定的关系,巧妙设置一下某些机关,也能改善机器运行速度、提高网页访问速度。下面再推荐一些可行的综合方法:


    一、清理磁盘和整理磁盘碎片。
    1、在我的电脑窗口,右击要清理的盘符—“属性”—“清理磁盘”--勾选要删除的文件--确定--是。
    2、清除临时文件,开始—运行—输入 %temp% --确定。3、用优化大师或超级兔子清理注册表和垃圾文件。
    4、关闭一些启动程序, 开始-运行-msconfig---启动 ,除杀毒软件、输入法外一般的程序都可以关掉。
    5、删除不用的程序软件。
    6、整理磁盘碎片--开始 --所有程序--附件--系统工具--磁盘碎片整理程序--选定C--分析--碎片整理。
    二、用优化大师或超级兔子优化你的计算机 ,再挑选以下办法进行再优化。
    1、禁用闲置的IDE通道
    右键点击“我的电脑-属性”,然后点击“硬件”接着点击“设备管理器”,在其中打开“IDE ATA/PATA控制器”然后分别进入主要和次要IDE通道,选择“高级设置”,在这里找到“当前传送模式”为“不适用”的一项,将此项的“设备类型”设置为“无”。
    2、优化视觉效果
    右键单击“我的电脑”--“属性”—“高级”,在“性能”栏中,点击“设置”--“视觉效果”,调整为最佳性能,或只保留一些必要的项目。
    3、启动和故障恢复
    "我的电脑"--"属性"--"高级"--"启动和故障修复"中点击“设置”,去掉"将事件写入系统日志","发送管理警报","自动重新启动"选项;将"写入调试信息"设置为"无";点击"编辑",在弹出记事本文件中:
    [Operating Systems] timeout=30 把 30 秒改为 0 秒。
    4、禁用错误报告
    "我的电脑"--"属性”--"高级”--点"错误报告”,点选“禁用错误汇报”,勾选"但在发生严重错误时通知我”--确定。
    5、设置系统还原
    单击“开始”--“所有程序”--“附件”--“系统工具”—“系统还原”,在系统还原界面,去掉“在所有驱动器上关闭系统工程还原”前边的勾,在“可用的驱动器”区中,选系统盘所在的分区,单击“设置”进入“系统还原设置”窗口,将“要使用的磁盘空间”调到5%或更小,“确定”返回,按上述方法将其它分区设禁用。
    6、关闭自动更新
    关闭自动更新具体操作为:右键单击“我的电脑”--“属性”--“自动更新”,在“通知设置”一栏选择“关闭自动更新。选出“我将手动更新计算机”一项。
    7、关闭远程桌面
    右键单击“我的电脑”--“属性”--“远程”,把“远程桌面”里的“允许用户远程连接到这台计算机”勾去掉。
    8、禁用休眠功能
    单击“开始”--“控制面板”--“电源管理”--“休眠”,将“启用休眠”前的勾去掉。
    9、关闭“Internet时间同步”功能
    依次单击“开始”--“控制面板”--“日期、时间、语言和区域选项”,然后单击“Internet时间”,取消“自动与Internet时间服务同步”前的勾。

     

  • 测试你适合什么职业(超级精准、科学)

    2008-06-16 15:09:44

    要求:每题考虑的时间不得超过10秒钟。
    每7题为一部分找出你选择最多的那个字母,按顺序进行排列。
     

       1.你倾向从何处得到力量:
      (E)别人。
      (I)自己的想法。
      2.当你参加一个社交聚会时,你会:
      (E)在夜色很深时,一旦你开始投入,也许就是最晚离开的那一个。
      (I)在夜晚刚开始的时候,我就疲倦了并且想回家。
      3.下列哪一件事听起来比较吸引你?
      (E)与情人到有很多人且社交活动频繁的地方。
      (I)待在家中与情人做一些特别的事情,例如说观赏一部有趣的录影带并享用你最喜欢的外卖食物。
      4.在约会中,你通常:
      (E)整体来说很健谈。
      (I)较安静并保留,直到你觉得舒服。
      5.过去,你遇见你大部分的异性朋友是:
      (E)在宴会中、夜总会、工作上、休闲活动中、会议上或当朋友介绍我给他们的朋友时。
      (I)通过私人的方式,例如个人广告、录影约会,或是由亲密的朋友和家人介绍。
      6.你倾向拥有:
      (E)很多认识的人和很亲密的朋友。
      (I)一些很亲密的朋友和一些认识的人。
      7.过去,你的朋友和同事倾向对你说:
      (E)你难道不可以安静一会儿吗?
      (I)可以请你从你的世界中出来一下吗?
    ----------------------------------------
      8.你倾向通过以下哪种方式收集信息:

      (N)你对有可能发生之事的想像和期望。
      (S)你对目前状况的实际认知。
      9.你倾向相信:
      (N)你的直觉。
      (S)你直接的观察和现成的经验。
      10.当你置身于一段关系中时,你倾向相信:
      (N)永远有进步的空间。
      (S)若它没有被破坏,不予修补。
      11.当你对一个约会觉得放心时,你偏向谈论:
      (N)未来,关于改进或发明事物和生活的种种可能性。例如,你也许会谈论一个新的科学发明,或一个更好的方法来表达你的感受。
      (S)实际的、具体的、关于“此时此地”的事物。例如,你也许会谈论品酒的好方法,或你即将要参加的新奇旅程。
      12.你是这种人:
      (N)喜欢先纵观全局。
      (S)喜欢先掌握细节。
      13.你是这类型的人:
      (N)与其活在现实中,不如活在想像里。
      (S)与其活在想像里,不如活在现实中。
      14.你通常:
      (N)偏向于去想像一大堆关于即将来临的约会的事情。
      (S)偏向于拘谨地想像即将来临的约会,只期待让它自然地发生。
    ----------------------------------------------------------------

      15.你倾向如此做决定:
      (F)首先依你的心意,然后依你的逻辑。

      (T)首先依你的逻辑,然后依你的心意。
      16.你倾向比较能够察觉到:
      (F)当人们需要情感上的支持时。
      (T)当人们不合逻辑时。
      17.当和某人分手时:
      (F)你通常让自己的情绪深陷其中,很难抽身出来。
      (T)虽然你觉得受伤,但一旦下定决心,你会直截了当地将过去恋人的影子甩开。
      18.当与一个人交往时,你倾向于看重:
      (F)情感上的相容性:表达爱意和对另一半的需求很敏感。
      (T)智慧上的相容性:沟通重要的想法;客观地讨论和辩论事情。
      19.当你不同意情人的想法时:
      (F)你尽可能地避免伤害对方的感情;若是会对对方造成伤害的话,你就不会说。
      (T)你通常毫无保留地说话,并且对情人直言不讳,因为对的就是对的。
      20.认识你的人倾向形容你为:
      (F)热情和敏感。
      (T)逻辑和明确。

      21.你把大部分和别人的相遇视为:
      (F)友善及重要的。
      (T)另有目的。
     ------------------------------------------------------------- 

                    22.若你有时间和金钱,你的朋友邀请你到国外度假,并且在前一天才通知,你会:
      (J)必须先检查你的时间表。
      (P)立刻收拾行装。
      23.在第一次约会中:
      (J)若你所约的人来迟了,你会很不高兴。
      (P)一点儿都不在乎,因为你自己常常迟到。
      24.你偏好:
      (J)事先知道约会的行程:要去哪里、有谁参加、你会在那里多久、该如何打扮。
      (P)让约会自然地发生,不做太多事先的计划。
      25.你选择的生活充满着:
      (J)日程表和组织。
      (P)自然发生和弹性。
      26.哪一项较常见:
      (J)你准时出席而其他人都迟到。
      (P)其他人都准时出席而你迟到。
      27.你是这种喜欢……的人:
      (J)下定决心并且做出最后肯定的结论。
      (P)放宽你的选择面并且持续收集信息。
      28.你是此类型的人:
      (J)喜欢在一段时间里专心于一件事情直到完成。
      (P)享受同时进行好几件事情。

     

    事业称心如意的秘密在于做你最想做的事。少数几个幸运儿早年便能发现这一秘密,但多数人都困在一种矛盾的心理苦役中,不知道自己能做什么、自己或别人认为我们该做什么、或自己认为自己想做什么。我们认为,只要你能细想想自己是什么样的人,其余一切也就水到渠成了。
    传统的事业道路分析只看"三大项":能力、兴趣和价值观。但这标准差远了!你的个性中也有一些方面需要引起注意。一般来说,个性越适合工作,对工作的满意度越高。
    人各有各的个性,就象一个内在胎记终生不变。个性评估分类系统的依据是一个人个性的4个基本特征,我们称之为"层面",因为它们可以看作是两种极端之间的连续体,如:

    我们与世界怎样互动,能量释放到何处
    (E)外向型-|-内向型(I)

    我们留意到的信息种类
    (S)感知型-|-直觉型(N)

    我们的决策方式
    (T)思考型-|-感觉型(F)

    我们喜欢一种更有条理(做决定),还是更随意性的(获取信息)生活方式
    (J)判断型-|-认知型(P)

    外向型的人把注意力和精力放在身外的世界,主动与人交往,喜欢互动。与人为伴就精神抖擞,常认识很多人。
    内向型的人专注于自我的内心世界,喜欢独处并陶然其中。他们总是先想后做,这意味着心理活动居多。他们不喜欢受人注目,一般比外向型的人更矜持。
    个性的第二层面与我们平时注意的信息有关。

    有一些人注重事实,其他人则注重愿望。
    感知型的人注重自己看到、听到、触到、嗅到和尝到的具体感受。他们只相信可以测量、能够记录下来的东西,只注重真实可靠的事。他们也相信自己的个人经验。
    直觉型的人更相信"第六感觉"(直觉)。他们善于理解字面以外的含义,对一切事情都要寻求一个内在意义。
    他们总能预示事件的发生,通常不愿意维持事物的现状,总想不断来点新花样。
    个性类型的第三层面涉及到我们做决定和结论的方式。
    思考型的人喜欢符合逻辑的决策,善于客观地分析一切,并常引以为豪。
    感觉型的人常因着自己的喜好和感觉决策。他们很能体贴人、常富有同情心,并因此自以为荣。
    个性类型的第四层面所关注的是,一个人更愿意有条理、还是随意地生活。
    判断型的人条理性很强。只要生活安排得有条不紊、事事井井有序,他们就快乐无比。凡事他们总要断个分明,喜欢决策。
    认知型的人生活散漫随意,生活机动性强时最高兴。他们乐意尝试一切可能的事情。他们往往理解生活,而不是努力控制生活。
    个性的每个层面都有两个彼此对立的极端,这样统共有八种个性偏好,每种用一个字母来表示。把这些字母组合起来,便代表16种个性。每一个人都可以在当中对号入座。

    ISTJ:内向、感知、思考、判断型
    这种人一丝不苟、认真负责,而且明智豁达,是坚定不移的社会维护者。他们讲求实际、非常务实,总是孜孜以求精确性和条理性,而且有极大的专注力。不论干什么,他们都能有条不紊、四平八稳地把它完成。
    对这类人而言,满意的工作是技术性的工作,能生产一种实实在在的产品或有条理地提供一种周详服务。他们需要一种独立的工作环境,有充裕的时间让自己独立工作,并能运用自己卓越的专注力来完成工作。
    ISFJ:内向、感知、感觉、判断型
    这种人忠心耿耿、一心一意、富有同情心,喜欢助人为乐。由于这种人有很强的职业道德,一旦觉得自己的行动确有帮助,他们便会担起重担。
    最令他们满意的工作是,需要细心观察和精确性要求极高的工作。他们需要通过不声不响地在背后工作以表达自己的感情投入,但个人贡献要能得到承认。


    INFJ :内向、直觉、感觉、判断型
    这种人极富创意。他们感情强烈、原则性强且具有良好的个人品德,善于独立进行创造性思考。即使面对怀疑,他们对自己的观点仍坚信不疑。看问题常常更能入木三分。
    对他们来说,称心如意的事业就是,能从事创新型的工作,主要是能帮助别人成长。他们喜欢生产或提供一种自己能感到自豪的产品或服务。工作必须符合个人的价值观。
    INTJ:内向、直觉、思考、判断型
    这类人是完美主义者。他们强烈要求自主、看重个人能力、对自己的创新思想坚定不移,并受其驱使去实现自己的目标。这种人逻辑性强,有判断力,才华横溢,对人对己要求严格。在所有类型的人中,这种人独立性最强,喜欢我行我素。面对反对意见,他们通常多疑、霸道、毫不退让。对权威本身,他们毫不在乎,但只要规章制度有利于他们的长远目标他们就能遵守。
    最适合的工作是:能创造和开发新颖的解决方案来解决问题或改进现有系统;他们愿意与责任心强,在专业知识、智慧和能力方面能赢得自己敬佩的人合作;他们喜欢独立工作,但需要定期与少量智囊人物切磋交流。
    ISTP:内向、感知、思考、认知型
    这种人奉行实用主义,喜欢行动,不爱空谈。他们长于分析、敏于观察、好奇心强,只相信可靠确凿的事实。由于非常务实,他们能很好地利用一切可资利用的资源,而且很会瞧准时机。
    对于ISTP这种人而言,事业满意就是,做尽可能有效利用资源的工作。他们愿意精通机械技能或使用工具来工作。工作必须有乐趣、有活力、独立性强,且常有机会走出工作室去户外
    ISFP:内向、感知、感觉、认知型
    这种类型的人温柔、体贴、敏感,从不轻言非常个人化的理想及价值观。他们常通过行动,而非语言来表达炽烈的情感。这种人有耐心、能屈能伸、且十分随和、无意控制他人。他们从不妄加判断或寻求动机和意义。
    适合的工作是,做非常符合自己内心价值观的工作。在做有益他人的工作时,希望注重细节。他们希望有独立工作的自由,但又不远离其他与自己合得来的人。他们不喜欢受繁文缛节或一些僵化程序的约束。
    INFP:内向、直觉、感觉、认知型
    INFP类型的人珍视内在和谐胜过一切。他们敏感、理想化、忠心耿耿,在个人价值观方面有强烈的荣誉感。如果能献身自己认为值得的事业,他们便情绪高涨。在日常事物中,他们通常很灵活、有包容心,但对内心忠诚的事业义无反顾。这类人很少表露强烈的情感,常显得镇静自若、寡言少语。不过,一旦相熟,他们也会变得十分热情。
    对INFP类型的人而言,最好的工作是,做合乎个人价值观、能通过工作陈述自己远见的工作;工作环境需要有灵活的架构,在自己激情高昂时可以从事各种项目;能发挥个人的独创性。
    INTP:内向、直觉、思考、认知型
    这类人善于解决抽象问题。他们经纶满腹,时能闪现出创造的睿智火花。他们外表恬静,内心专注,总忙于分析问题。他们目光挑剔,独立性极高。
    对于这类人,事业满意源自这样的工作:能酝酿新观念;专心负责某一创造性流程,而不是最终产品。在解决复杂问题时,能让他们跳出常规的框框,冒一定风险去寻求最佳解决方案。
    ESTP:外向、感知、思考、认知型
    这类人无忧无虑,属乐天派。他们活泼、随和、率性,喜欢安于现状,不愿从长计议。由于他们能够接受现实,一般心胸豁达、包容心强。这种人喜欢玩实实在在的东西,善于拆拆装装。
    对这种人来说,事业满意度来自这种工作:能随意与许多人交流;工作中充满冒险和乐趣,能冒险和随时抓住新的机遇;工作中当自己觉得必要时希望自我组织,而不是听从别人的安排。
    ESFP:外向、感知、感觉、认知型
    ESFP这一类人生**玩、充满活力,用自己的陶醉来为别人增添乐趣。他们适应性强,平易随和,可以热情饱满地同时参加几项活动。他们不喜欢把自己的意志强加于人。
    对于这类人来说,适合的工作是,能在实践中学习,利用常识搜集各种事实来寻找问题的解决方案;他们喜欢直接与顾客和客户打交道;能同时在几个项目或活动中周旋。尤其爱从事能发挥自己审美观的项目或活动。
    ENFP:外向、直觉、感觉、认知型
    ENFP这类人热情奔放,满脑子新观念。他们乐观、率性、充满自信和创造性,能深刻认识到哪些事可为。他们对灵感推崇备至,是天生的发明家。他们不墨守成规,善于闯新路子。ENFP这类人适合的工作是,在创造性灵感的推动下,与不同的人群合作从事各种项目;他们不喜欢从事需要自己亲自处理日常琐碎杂务的工作,喜欢按自己的工作节奏行事。

    ENTP:外向、直觉、思考、认知型
    这种人好激动、健谈、聪明、是个多面手。他们总是孜孜以求地提高自己的能力。这种人天生有创业心、爱钻研、机敏善变、适应能力强。
    令这类人满意的工作是:有机会从事创造性解决问题的工作。工作有一定的逻辑顺序和公正的标准。希望通过工作能提高个人权力并常与权力人物交流。
    ESTJ:外向、感知、思考、判断型
    这种人办事能力强,喜欢出风头,办事风风火火。他们责任心强、诚心诚意、忠于职守。他们喜欢框架,能组织各种细节工作,能如期实现目标并力求高效。
    ESTJ类型的人适合做理顺事实和政策以及人员组织工作,能够有效利用时间和资源以找出合乎逻辑的解决方案,在目标明确的工作中姝运用娴熟的技能。他们希望工作测评标准公正。
    ESFJ:外向、感知、感觉、判断型
    ESFJ类型的人喜欢通过直接合作以切实帮助别人。由于他们尤其注重人际关系,因而通常很受人欢迎,也喜欢迎合别人。他们的态度认真、遇事果断、通常表达意见坚决。
    这类人最满意的事业是,整天与人交往,密切参与整个决策流程。工作的目标明确,有明确的业绩标准。他们希望能组织安排自己及周围人的工作,以确保一切进展得尽可能顺利。
    ENFJ :外向、直觉、感觉、判断型
    这种人有爱心,对生活充满热情。他们往往对自己很挑剔。不过,由于他们自认为要为别人的感受负责,所以很少在公众场合发表批评意见。他们对行为的是非曲直明察秋毫,是社交高手。
    这种人最适合的工作是,工作中能建立温磬的人际关系,能使自己置身于自己信赖、且富有创意的人群中工作。他们希望工作多姿多采,但又能有条不紊地干。
    ENTJ:外向、直觉、思考、判断型
    这种人是极为有力的领导人和决策者,能明察一切事物中的各种可能性,喜欢发号施令。他们是天才的思想家,做事深谋远虑、策划周全。这种人事事力求做好,生就一双锐眼,能够一针见血地发现问题并迅速找到改进方法。
    最令ENTJ这类人满意的事业是,做领导、发号施令,完善企业的运作系统,使系统高效运行并如期达到目标。他们喜欢从事长远战略规划,寻求创造性的解决问题的方式。
    对号入座
    ISTJ:审计员、后勤经理、信息总监、预算分析员、工程师、技术作者、电脑编程员、证券经纪人、地质学者、医学研究者、会计、文字处理专业人士。
    ISTP:证券分析员、银行职员、管理顾问、电子专业人士、技术培训人员、信息服务开发人员、软件开发商、海洋生物学者、后勤与供应经理、经济学者。
    ESTP:企业家、业务运作顾问、个人理财专家、证券经纪人、银行职员、预算分析者、技术培训人员、综合网络专业人士、旅游代理、促销商、手工艺人、新闻记者、土木/工业/机械工程师。
    ESTJ:银行官员、项目经理、数据库经理、信息总监、后勤与供应经理、业务运作顾问、证券经纪人、电脑分析人员、保险代理、普通承包商、工厂主管。
    ISFJ:人事管理人员、簿记员、电脑操作员、顾客服务代表、信贷顾问、零售业主、房地产代理或经纪人、艺术人员、室内装潢师、商品规划师、语言病理学者。
    ISFP:优先顾客销售代表、行政人员、商品规划师、测量师、海洋生物学者、厨师、室内/风景设计师、旅游销售经理、职业病理专业人员。
    ESFP:公关专业人士、劳工关系调解人、零售经理、商品规划师、团队培训人员、旅游项目经营者、表演人员、特别事件的协调人、社会工作者、旅游销售经理、融资者、保险代理/经纪人。
    ESFJ:公关客户经理、个人银行业务员、销售代表、人力资源顾问、零售业主、餐饮业者、房地产经纪人、营销经理、电话营销员、办公室经理、接待员、信贷顾问、簿记员、口笔译人员。
    INFJ:人力资源经理、事业发展顾问、营销人员、企业组织发展顾问、职位分析人员、企业培训人员、媒体特约规划师、编辑/艺术指导(杂志)、口译人员、社会科学工作者。
    INFP:人力资源开发专业人员、社会科学工作者、团队建设顾问、编辑、艺术指导、记者、口笔译人员、娱乐业人士、建筑师、研究工作者、顾问、心理学专家。
    ENFP:人力资源经理、变革管理顾问、营销经理、企业/团队培训人员、广告客户经理、战略规划人员、宣传人员、事业发展顾问、环保律师、研究助理、广告撰稿员、播音员、开发总裁。
    ENFJ:人力资源开发培训人员、销售经理、小企业经理、程序设计员、生态旅游业专家、广告客户经理、公关专业人士、协调人、交流总裁、作家/记者、非营利机构总裁。
    INTJ:管理顾问、经济学者、国际银行业务职员、金融规划师、设计工程师、运作研究分析人员、信息系统开发商、综合网络专业人员。
    INTP:电脑软件设计师、系统分析人员、研究开发专业人员、战略规划师、金融规划师、信息服务开发商、变革管理顾问、企业金融律师。
    ENTP:人事系统开发人员、投资经纪人、工业设计经理、后勤顾问、金融规划师、投资银行业职员、营销策划人员、广告创意指导、国际营销商。
    ENTJ:(人事、销售、营销)经理、技术培训人员、(后勤、电脑信息服务和组织重建)顾问、国际销售经理、特许经营业主、程序设计员、环保工程师

  • 测试工具介绍之二

    2008-06-16 15:01:48

    【1】配置管理工具:ClearCase

    【2】需求管理工具:Doors。IBM放弃了原来自己的需求分析工具RequirePro,因为收购的Doors是目前市场的第一,但是带来的问题是需要整Doors产品进入Rational产品线系列

    【3】测试过程管理:RQM(Rational Quality Management),新研发产品,预计今年九月上市。目前IBM公司提供了一个中间产品,为CQTM,该产品与CQ(ClearQyest)是集成在一起的。

    【4】缺陷和变更管理工具:ClearQuest

    【5】手工测试管理工具:新研制的产品,RMT--Rational Manunal Testing,

    【6】测试环境管理:RLM

    【7】自动构建工具:BuildForge(收购产品)

    【8】功能测试(黑盒测试)工具:RFT--Rational Function Testing,该产品与HP QTP相比,中国用户很少

    【9】性能测试工具:RPT--Rational Performance Testing

    【10】白盒测试工具,分为静态测试工具RSAR(收购产品,支持C和Java)和比较有名的动态测试工具Purify Plus和支持嵌入式测试的工具RTRT

    【11】Web应用安全性测试:AppScan,收购前产品名称是WatchFire,能够扫描发现黑客侵入的漏洞等,应该比较有用。

    而HP公司软件测试产品线包括:(惠普公司的测试产品线是收购了测试行业的领先公司Mercury而获得的)

    【1】功能测试产品:QTP

    【2】性能测试工具:LoadRunner

    【3】测试管理工具:QC-Quality Center

    【4】测试监测工具:Opsware(收购产品,该产品以HP IT管理Openview可以形成良好地互补)

  • 性能测试

    2008-06-16 14:58:04

    转载:http://www.51testing.com/?action_viewnews_itemid_84042.html

     我最近在项目中兼任项目测试组长角色,这次项目中负责性能测试的QA组长调走了,只好由我硬着头皮顶上去。在这段日子里,使我对性能测试有了新的认识,性能测试绝不象大多数人认为的是一件简单的事情。目前,性能测试已跨越了单靠手工敲敲键盘、点点鼠标就可以完成的阶段,正朝着自动化和智能化方向发展。
      
      性能测试的重要性随着网络发展更凸显重要性,由于网络环境、数据库环境、应用服务器环境、系统平台和技术等的复杂性和多样性,难以预知的用户负载和愈来愈复杂的应用程序使软件性能非常难于控制。虽然,改善系统性能不是单单依靠性能测试就能完成的,但性能测试至今仍是控制性能有效的手段。
      
      
      什么是性能测试
      性能测试主要是通过自动化的测试工具模拟多种正常、峰值及异常负载来对系统的各项性能指标进行测试。一般来说,性能测试可概括为三个方面:在客户端性能的测试、在网络上性能的测试和在服务器端性能的测试。通常情况下,三方面有效的结合可以达到对系统性能全面的分析和瓶颈的预测。
      
      性能测试的基本策略是自动负载和压力测试。通过在一台或几台PC机上模拟成百上千的虚拟用户同时执行业务的情景,对应用程序进行测试,同时记录下每一事务处理的时间、服务器峰值数据、数据库状态等。它主要包括并发性能测试、疲劳强度测试、大数据量测试和速度测试等,其中并发性能测试是重点。
      
      (1)并发性能测试
      并发性能测试是一个负载测试和压力测试的过程,即逐渐增加负载,直到系统出现瓶颈或者不能接收更多负载,通过综合分析执行指标和资源监控指标来确定系统并发性能的过程。例如当负载压力逐渐增加时,通过检测系统的相应输出如通过量、响应时间、CPU负载、内存使用等来决定系统的性能。
      
      并发性能测试一般不采用手工方式,而是利用工具采用自动化方式进行。在测试时常常需要模拟真实环境测试,以考察在真实环境中的表现,这样测试出来的数据才有实际意义。目前,成熟的并发性能测试工具有很多,选择的依据主要是测试需求和性能价格比。
      
      (2)疲劳强度测试
      疲劳测试是采用系统稳定运行情况下能够支持的最大并发用户数,持续执行业务一段时间,通过综合分析执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。
      
      疲劳强度测试可以采用工具自动化的方式进行测试,也可以手工编写程序测试,其中后者占的比例较大。一般情况是以服务器能够正常稳定响应请求的最大并发用户数进行一定时间的疲劳测试,获取执行指标数据和系统资源监控数据。如出现错误导致测试不能成功执行,则及时调整测试指标,例如降低用户数、缩短测试周期等。还有一种情况的疲劳测试是对当前系统性能的评估,用系统正常业务情况下并发用户数为基础,进行一定时间的疲劳测试。
      (3)大数据量测试
      大数据量测试可以分为两种类型:一是针对某些系统存储、传输、统计、查询等业务进行大数据量的独立数据量测试;二是与压力性能测试、负载性能测试、疲劳性能测试相结合的综合数据量测试方案。大数据量测试的关键是测试数据的准备,可以依靠工具准备测试数据。
      
      进行性能测试的前提条件
      在任何性能测试活动开始前,软件应用程序必须达到性能测试接受标准。如果应用程序没有达到这些标准,则不应该进行性能测试,否则就是浪费时间和成本。进行性能测试的前提条件包括:
      
      (1)已通过单元测试能力
      在性能测试前所有应用程序必须先通过全面的单元测试策略,同时所附带的可被执行的单元测试代码应是完整和有效的。如果单元测试因为应用程序中的错误或缺少单元测试代码,那么应用程序则不应该进行性能测试。
      
      (2)已通过低负载级别能力
      在单用户和10个用户的低负载级别上,应用程序应该能在正常的计算时间达到合理的性能。如果应用程序无法在低负载级别正常运行,那么它肯定无法在更高负载级别正常运行。这时,开始性能测试将会浪费时间。
      
      (3)已准备好测试数据
      在性能测试期间执行应用程序所需的数据必须先准备好或已详细描述,以使性能测试小组能够建立与生产环境尽可能接近的模拟数据,要确保测试数据必须是真实、一致和完整的,任何与真实环境相差太远的测试数据都是无用的性能测试行为。

  • 软件测试工具介绍

    2008-06-16 14:54:31

    业级自动化测试工具WinRunner

      Mercury Interactive公司的WinRunner是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。

      工业标准级负载测试工具Loadrunner

      LoadRunner 是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner 能够对整个企业架构进行测试。通过使用LoadRunner ,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。

      全球测试管理系统testdirector

      TestDirector 是业界第一个基于Web的测试管理系统,它可以在您公司内部或外部进行全球范围内测试的管理。通过在一个整体的应用系统中集成了测试管理的各个部分,包括需求管理,测试计划,测试执行以及错误跟踪等功能,TestDirector极大地加速了测试过程。

      功能测试工具Rational Robot

      IBM Rational Robot 是业界最顶尖的功能测试工具,它甚至可以在测试人员学习高级脚本技术之前帮助其进行成功的测试。它集成在测试人员的桌面 IBM Rational TestManager 上,在这里测试人员可以计划、组织、执行、管理和报告所有测试活动,包括手动测试报告。这种测试和管理的双重功能是自动化测试的理想开始。

      单元测试工具xUnit系列

      目前的最流行的单元测试工具是xUnit系列框架,常用的根据语言不同分为JUnit(java),CppUnit(C++),DUnit (Delphi ),NUnit(.net),PhpUnit(Php )等等。该测试框架的第一个和最杰出的应用就是由Erich Gamma (《设计模式》的作者)和Kent Beck(XP(Extreme Programming)的创始人 )提供的开放源代码的JUnit.

      功能测试工具SilkTest

      Borland SilkTest 2006属于软件功能测试工具,是Borland公司所提出软件质量管理解决方案的套件之一。这个工具采用精灵设定与自动化执行测试,无论是程序设计新手或资深的专家都能快速建立功能测试,并分析功能错误。

      性能测试工具WAS

      Microsoft Web Application Stress Tool 是由微软的网站测试人员所开发,专门用来进行实际网站压力测试的一套工具。透过这套功能强大的压力测试工具,您可以使用少量的Client端计算机仿真大量用户上线对网站服务所可能造成的影响。

      自动化白盒测试工具Jtest

      Jtest是parasoft公司推出的一款针对java语言的自动化白盒测试工具,它通过自动实现java的单元测试和代码标准校验,来提高代码的可靠性。parasoft同时出品的还有C++ test,是一款C/C++白盒测试工具。

      功能和性能测试的工具JMeter

      JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具,100%的用java实现。

      性能测试和分析工具WEBLODE

      webload是RadView公司推出的一个性能测试和分析工具,它让web应用程序开发者自动执行压力测试;webload通过模拟真实用户的操作,生成压力负载来测试web的性能。

  • 体育赛事杂谈

    2008-06-14 10:03:42

    NBA进入激烈状态,湖人会出局,凯尔特人会夺冠?

    欧洲杯来了,看好荷兰和葡萄牙夺冠!会实现?其实西班牙也不错,这三支队现在很热,
    但我们办公室刚刚很冷了..

    同事要走了,我们一起来,却不是一起走,和同事有很多的话要说,我们共同努力过,却因为一些意外
    ,而选择离开,我其实心里感觉很不爽,又要重新找到更好的Partner,不过生活就是这样,有时不是你要选择,
    而是学会适应,但我们却不一定再见面,留给最好的工作态度给别人吧..自己也一定要继续努力了!

    精彩赛事的到来,每晚只看半场好球,已感到满足了,因为白天还要上班的缘故..

    哈哈刚好十二点开始睇球,却是有些感触...看这些球赛是享受...而中国队呢?失望而回,
    真的希望中国足球有好的环境,更多年轻球员有更好的技术,
    地大人多,真的找不到好球员?期待中...看看我们的羽毛球,
    还是我们的团队还不够好?多人的比赛,我们不行?
    今次世界杯预选赛,我们希望失败,
    因为失败更能让我们前进,
    他们生活太过优越了,但却没发挥自己应该有的水平,能怪谁?
    地震让我们团结起来,我们要自强才能自救,
    技术跟不上,最好的条件也不达成目标,

    中国加油,四川加油,汶川加油!还有更多的加油等着我们..

     

  • 详细分析软件测试的14种类型

    2008-06-14 09:29:54

    详细分析软件测试的14种类型

    软件测试是指使用人工或者自动的手段来运行或测定某个软件产品系统的过程,其目的是在于检验是否满足规定的需求或者弄清预期的结果与实际结果的区别。本文主要描述软件测试的类型。

      1. 数据和数据库完整性测试

      数据与数据库完整测试是指测试关系型数据库完整性原则以及数据合理性测试。

      数据库完整性原即:

      主码完整性:主码不能为空;

      外码完整性:外码必须等于对应的主码或者为空。

      数据合理性指数据在数据库中的类型,长度,索引等是否建的比较合理。

      在项目名称中,数据库和数据库进程应作为一个子系统来进行测试。在测试这些子系统时,不应将测试对象的用户界面用作数据的接口。对于数据库管理系统(DBMS),还需要进行深入的研究,以确定可以支1持测试的工具和技术。

      比如,有两张表:部门和员工。部门中有部门编号,部门名称,部门经理等字段,主码为部门编号;员工表中有员工编号,员工所属部门编号,员工名称,员工类型等字段,主码为员工编号,外码为员工所属部门编号,对应部门表。如果在某条部门记录中部门编号或员工记录员工编号为空,他就违反主码完整性原则。如果某个员工所属部门的编号为##,但是##在部门编号中确找不到,这就违反外码完整性原则。

      员工类型如下定义:0:职工,1:职员,2:实习生。但数据类型为Int,我们都知道Int占有4个字节,如果定义成char(1).就比原来节约空间。

      2. 白盒测试

      白盒测试是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。白盒测试分为动态白盒测试和静态白盒测试

      2.1 静态白盒测试

      利用眼睛,浏览代码,凭借经验,找出代码中的错误或者代码中不符合书写规范的地方。比如,代码规范中规定,函数必须为动宾结构。而黑盒测试发现一个函数定义如下:

      Function NameGet(){

      ….

      }

      这是属于不符合开发规范的错误。

      有这样一段代码:

      if (i<0) & (i>="0)

      …

      这段代码交集为整个数轴,IF语句没有必要

      I="0;

      while(I>100){

      J="J+100;

      T="J*PI;

      }

      在循环体内没有I的增加,bug产生。

      2.2 动态白盒测试

      利用开发工具中的调式工具进行测试。比如一段代码有4个分支,输入4组不同的测试数据使4组分支都可以走通而且结果必须正确。

      看一段代码

      if(I<0){

      P1

      }else{

      P2

      }

      在调试中输入I="-1,P1程序段通过,P2程序段未通过,属于动态黑盒测试的缺陷

      3. 功能测试

      功能测试指测试软件各个功能模块是否正确,逻辑是否正确。

      对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接受、处理和检索是否正确,以及业务规则的实施是否恰当。此类测试基于黑盒技术,该技术通过图形用户界面(GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。功能测试的主要参考为类似于功能说明书之类的文档。

      比如一个对电子商务系统,前台用户浏览商品-放入购物车-进入结账台,后台处理订单,配货,付款,发货,这一系列流程必须正确无误的走通,不能存在任何的错误。

      4. UI测试

      UI测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等

      用户界面(UI) 测试用于核实用户与软件之间的交互。UI 测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。另外,UI 测试还可确保UI 中的对象按照预期的方式运行,并符合公司或行业的标准。包括用户友好性,人性化,易操作性测试。UI测试比较主观,与测试人员的喜好有关

      比如:页面基调颜色刺眼;用户登入页面比较难于找到,文字中出现错别字,页面图片范围太广等都属于UI测试中的缺陷,但是这些缺陷都不太严重。

      5. 性能测试

      性能测试主要测试软件测试的性能,包括负载测试,强度测试,数据库容量测试,基准测试以及基准测试

      5.1负载测试

      负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。

      在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。

      比如,在B/S结构中用户并发量测试就是属于负载测试的用户,可以使用webload工具,模拟上百人客户同时访问网站,看系统响应时间,处理速度如何?

      5.2 强度测试

      强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。

      实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。

      比如:一个系统在内存366M下可以正常运行,但是降低到258M下不可以运行,告诉内存不足,这个系统对内存的要求就是366M。

      5.3 数据库容量测试

      数据库容量测试指通过存储过程往数据库表中插入一定数量的数据,看看相关页面是否能够及时显示数据。

      数据库容量测试使测试对象处理大量的数据,以确定是否达到了将使软件发生故障的极限。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。例如,如果测试对象正在为生成一份报表而处理一组数据库记录,那么容量测试就会使用一个大型的测试数据库,检验该软件是否正常运行并生成了正确的报表。做这种测试通常通过书写存储过程向数据库某个表中插入一定数量的记录,计算相关页面的调用时间。

      比如,在电子商务系统中,通过insert customer 往user表中插入10 000数据,看其是否可以正常显示顾客信息列表页面,如果要求达到最多可以处理100 000个客户,但是顾客信息列表页面不能够在规定的时间内显示出来,就需要调整程序中的SQL查询语句;如果在规定的时间内显示出来,可以将用户数分别提高到20 000 , 50 000, 100 000进行测试。

      5.4 基准测试

      基准测试与已知现有的系统进行比较,主要检验是否与类似的产品具有竞争性的一种测试。

      如果你要开发一套财务系统软件并且你已经获得用友财务系统的性能等数据,你可以测试你这套系统,看看哪些地方比用友财务系统好,哪些地方差?以便改进自己的系统,也可为产品广告提供数据。

      5.5 竞争测试

      软件竞争使用各种资源(数据纪录,内存等),看他与其他相关系统对资源的争夺能力。比如:一台机器上即安装您的财务系统,又安装用友财务系统。当CPU占有率下降后,看看是否能够强过用友财务系统,而是自己的系统能够正常运行。

      6. 安全性和访问控制测试

      安全性和访问控制测试侧重于安全性的两个关键方面:

      1) 应用程序级别的安全性,包括对数据或业务功能的访问

      2) 系统级别的安全性,包括对系统的登录或远程访问。

      6.1 应用程序级别的安全性

      可确保:在预期的安全性情况下,主角只能访问特定的功能或用例,或者只能访问有限的数据。例如,可能会允许所有人输入数据,创建新账户,但只有管理员才能删除这些数据或账户。如果具有数据级别的安全性,测试就可确保“用户类型一”能够看到所有客户消息(包括财务数据),而“用户二”只能看见同一客户的统计数据。

      比如B/S系统,不通过登入页面,直接输入URL,看其是否能够进入系统?

      6.2 系统级别的安全性

      可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网关来访问。

      比如输入管理员账户,检查其密码是否容易猜取,或者可以从数据库中获得?

      7. 故障转移和恢复测试

      故障转移和恢复测试指当主机软硬件发生灾难时候,备份机器是否能够正常启动,使系统是否可以正常运行,这对于电信,银行等领域的软件是十分重要的。

      故障转移和恢复测试可确保测试对象能成功完成故障转移,并能从导致意外数据损失或数据完整性破坏的各种硬件、软件或网络故障中恢复。

      故障转移测试可确保:对于必须持续运行的系统,一旦发生故障,备用系统就将不失时机地“顶替”发生故障的系统,以避免丢失任何数据或事务。

      恢复测试是一种对抗性的测试过程。在这种测试中,将把应用程序或系统置于极端的条件下(或者是模拟的极端条件下),以产生故障(例如设备输入/输出(I/O) 故障或无效的数据库指针和关健字)。然后调用恢复进程并监测和检查应用程序和系统,核实应用程序或系统和数据已得到了正确的恢复。一定要注意定时备份,比如电信系统,突然主机程序发生死机,备份机器是否能够启动,使系统能够正常运行,从而不影响用户打电话?

      8. 配置测试

      又叫兼容性测试。配置测试核实测试对象在不同的软件和硬件配置中的运行情况。在大多数生产环境中,客户机工作站、网络连接和数据库服务器的具体硬件规格会有所不同。客户机工作站可能会安装不同的软件例如,应用程序、驱动程序等而且在任何时候,都可能运行许多不同的软件组合,从而占用不同的资源。(如浏览器版本,操作系统版本等)

      下面列出主要配置测试

      8.1 浏览器兼容性

      1) 测试软件在不同产商的浏览器下是否能够正确显示与运行;

      2) 比如测试IE,Natscape浏览器下是否可以运行这套软件?

      8.2 操作系统兼容性

      1) 测试软件在不同操作系统下是否能够正确显示与运行;

      2) 比如测试WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以运行这套软件?

      8.3 硬件兼容性

      1) 测试与硬件密切相关的软件产品与其他硬件产品的兼容性,比如该软件是少在并口设备中的,测试同时使用其他并口设备,系统是否可以正确使用.

      2) 比如在INTER,舒龙CPU芯片下系统是否能够正常运行?

      3) 这样的测试必须建立测试实验室,在各种环境下进行测试。

      9. 安装测试

      安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下: 例如,进行首次安装、升级、完整的或自定义的安装_都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。这通常是指运行大量为功能测试制定的测试。

      安装测试包括测试安装代码以及安装手册。安装手册提供如何进行安装,安装代码提供安装一些程序能够运行的基础数据。

      10. 多语种测试

      又称本地化测试,是指为各个地方开发产品的测试,如英文版,中文版等等,包括程序是否能够正常运行,界面是否符合当地习俗,快捷键是否正常起作用等等,特别测试在A语言环境下运行B语言软件(比如在英文win98下试图运行中文版的程序),出现现象是否正常。

      本地化测试还要考虑:

      1) 当语言从A翻译到B,字符长度变化是否影响页面效果。比如中文软件中有个按键叫“看广告”,翻译到英文版本中为“View advertisement”可能影响页面的美观程度

      2) 要考虑同一单词在各个国家的不同意思,比如football在英文中为足球,而美国人使用中可能理解为美式橄榄球。

      3) 要考虑各个国家的民族习惯,比如龙个美国中被理解邪恶的象征,但翻译到中国,中国人认为为吉祥的象征。

      11. 文字测试

      文字测试测试软件中是否拼写正确,是否易懂,不存在二义性,没有语法错误;文字与内容是否有出入等等,包括图片文字。

      比如:“比如,请输入正确的证件号码!”何谓正确的证件号码,证件可以为身份证,驾驶证,也可为军官证,如果改为“请输入正确的身份证号码!”用户就比较容易理解了。

      12. 分辨率测试

      测试在不同分辨率下,界面的美观程度,分为800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字体下测试。一个好的软件要有一个极佳的分辨率,而在其他分辨率下也都能可以运行。

      13. 发布测试

      主要在产品发布前对一些附带产品,比如说明书,广告稿等进行测试

      13.1 说明书测试

      主要为语言检查,功能检查,图片检查

      语言检查:检查说明书语言是否正确,用词是否易于理解;

      功能检查:功能是否描述完全,或者描述了并没有的功能等;

      图片检查::检查图片是否正确

      13.2 宣传材料测试

      主要测试产品中的附带的宣传材料中的语言,描述功能,图片

      13.3 帮助文件测试

      帮助文件是否正确,易懂,是否人性化。最好能够提供检索功能。

      13.4 广告用语

      产品出公司前的广告材料文字,功能,图片,人性化的检查

      14 文档审核测试

      文档审核测试目前越来越引起人们的重视,软件质量不是检查出来的,而是融进软件开发中来。前置软件测试发越来越受到重视。请看一个资料:

      文档审核测试主要包括需求文档测试,设计文档测试,为前置软件测试测试中的一部分。

      14.1 需求文档测试

      主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;

      14.2 设计文档测试

      测试设计是否符合全部需求以及设计是否合理。

      总结

      据美国软件质量安全中心2000年对美国一百家知名的软件厂商统计,得出这样一个结论:软件缺陷在开发前期发现比在开发后期发现资金,人力上节约90%;软件缺陷在推向市场前发现比在推出后发现资金,人力上节约90%。所以说软件的缺陷应该尽早发现。不是所有的软件都要进行任何类型的软件测试的,可以根据产品的具体情况进行组装测试不同的类型。

    参考文献

      《Rational统一过程模型》

      《软件测试》

  • 网络语言大扫盲

    2008-06-14 09:25:35



    简单的不说了,说些复杂的(痛苦整理中)
      874:鄙视,猫扑的符号之一,一孩拿扫把猛扇一男
      XHW:小黑屋,猫扑的处理办法之一,封ID
      BH:彪悍
      tjjtds,踢鸡鸡踢到死,也可以说是弹鸡鸡弹到死,猫扑大熊老大的原创。这个语出应该有史可以考证的
      loli:是小女孩
      正太:是小男孩;
      SM:有几种解释,一个是性虐待(sexy maltreat),一个是贴吧和天涯名人舒穆禄雪梅的简称,一开始是玉米吧的大姐,由于率先挑起玉米和凉粉之争,名气大振
      HD:厚道,一般说LZ8HD,就是楼主不厚道的意思
      BT=变态
      HC=花痴
      GJM=抄袭或复制,郭敬明的简称,由于那个梦里花落知多少的抄袭事件,被鄙视的不行,于是GJM也成了抄袭或复制的代称
      CJ=纯洁,也来源于郭敬明,小四的“我习惯纯洁地45度仰望”被一再引用,CJ开始流行
      MS:貌似
      马赛克:来源于天涯名人环佩叮当,她写文章很有意思,当写道不CJ的东西,不好写出来的时候,就用马赛克三个字代替,大家知道什么意思了吧,举例:……于是“马赛克”,……
      FB:腐败,意指吃饭
      酵母:教母的意思,来源于天涯,天涯八卦版好多教的,菊花教的郭敬明,冷艳教的陈红(唱歌的那个)等等

    论坛日常用语:
      1、BBS:①Bulletin Board System的缩写,指电子公告板系统,国内统称论坛。②波霸,Big-Breasted Sister的缩写。
      2、斑竹:版主,也可写作板猪。由于拼音输入造成的美妙谐音。副版主叫“板斧”。
      3、马甲:注册会员又注册了其他的名字,这些名字统称为马甲,与马甲相对的是主ID。 例句:青眉建议斑竹进行版务管理时,不可以用马甲发言。
      4、菜鸟:原指电脑水平比较低的人,后来广泛运用于现实生活中,指在某领域不太拿手的人。与之相对的就是老鸟。
      5、大虾:“大侠”的通假,指网龄比较长的资深网虫,或者某一方面(如电脑技术,或者文章水平)特别高超的人,一般人缘声誉较好才会得到如此称呼。
      6、灌水:原指在论坛发表的没什么阅读价值的帖子,现在习惯上会把绝大多数发帖、回帖统称为“灌水”,不含贬义。
      7、纯净水:无任何实质内容的灌水,也说水蒸气。
      8、水手:喜欢灌水的人。级别高的也称水桶、水鬼、水仙。指女性灌水狂人时,还有个特定称呼:水母。
      9、潜水:天天在论坛里呆着,但是不发帖,只看帖子、而且注意论坛日常事务的人。
      10、打铁:写帖子,一般指有点儿重量的帖子。
      11、拍砖:对某人某帖发表与其他人不同看法和理解的帖子。 例句:侠友们拍砖请注意口气和态度,否则很容易转化为人参公鸡。
      12、刷屏:打开一个论坛,所有的主题帖都是同一个ID发的。
      13、扫楼:也叫刷墙,打开一个论坛,所有主题帖的最后一个回复都是同一个ID的。
      14、楼主:发主题帖的人。
      15、盖楼:回同一个主题帖,一般粉丝比较喜欢盖楼。
      16、楼上的:比你先一步回复同一个主题帖的人,与之相对的是“楼下的”。
      17、几楼的:除楼主外,所有回复帖子的人,依次可称为“2楼的”、“3楼的”……
      18、沙发:SF,第一个回帖的人。后来,坐不到沙发的人,声称自己坐了“床”或楼主的“大腿”~
      19、椅子:第二个回帖的人。
      20、板凳:第三个回帖的人。
      21、地板:连板凳都没得坐的人。
      22、顶:一般论坛里的帖子一旦有人回复,就到主题列表的最上面去了。这个回复的动作叫做“顶”,与“顶”相对的是“沉”。
      23、走召弓虽:超强,通常用于回帖时表示对主题帖的膜拜。
      24、汗:表示惭愧、无可奈何之意。衍生词有:暴汗、大汗、汗死、瀑布汗、暴雨梨花汗等。
      25、倒:晕倒,表示对某帖某人或某现实很惊异。
      26、寒:对某帖某人或某现象感到浑身发冷。
      27、抓狂:形容自己受不了某人某帖的刺激而行为失常,处于暴走状态中。
      28、踩一脚:也称踢一脚、留个爪子印等,都是跟帖之意。
      29、路过:不想认真回帖,但又想拿回帖的分数或经验值。与之相对的字眼还有:顶、默、灌水、无语、飘过、路过等。 例句:在侠客社区,凡回帖只回路过、顶、默、灌水、无语、飘过、路过等字眼的行为,都会被视为故意灌水。
      30、闪:离开。
      31、匿鸟:隐身了。“匿”作“藏匿”讲;“了”是多音字,在句尾本该读“LE”,有人喜欢误读“LIAO”,遂谐音为“鸟”。
      32、找抽帖:楼主发的帖子内容特别找抽,让绝大多数人都不待见,也称找砖帖。
      33、火星帖:很久以前已经被无数人看过转过的旧帖,转火星帖的人被称为火星人。通常回帖会这样说:楼主还是快回火星吧,地球是很危险滴。(来自周星星《少林足球》)
      34、恐龙:长得不漂亮的女性网民,含贬义。与之相对的是“青蛙”,形容相貌抱歉的男性网民。
      35、犬科:喜欢追逐论坛里的女生的那种类型,尤其喜欢死缠烂打。
      36、狼族:热爱美色,不过比犬科作风正派一点,不会纠缠。
      37、……的说:动词后置的一种用法,来自日文语法。 例句:青眉要去吃饭的说。
      38、……ing:动词进行时的一种用法,来自英文语法。 例句:侠友们如此支持《武侠版》和侠客社区,青眉感动ing。
      39、残念:可惜之意,引申有“碎碎念”等。
      40、×××××:儿童不宜的内容。
      41、王道:相当于“权威、真理”之意。
      42、黑旺财:旺财是《唐伯虎点秋香》里的一条狗,狗者,犬也。黑犬,就是“默”。此典出自晋江。
      43、小白:①白烂的昵称,指专在网上无事生非的人。②“小白痴”的缩写。
      44、小黑:黑名单。
      45、浸小黑:ID被登记进黑名单。
      46、小强:《唐伯虎点秋香》中的那只蟑螂,泛指生命力特别顽强的人。
      47、粉丝:FANS的音译,超迷某人或某物的一类人,也称扇子、蕃薯,简称“粉”或“迷”。
      48、包子:形容某人笨,或者长相欠佳。
      49、蛋白质:笨蛋+白痴+神经质。
      50、白骨精:白领+骨干+精英。
      51、腊鸭:垃圾(来自《麦唛》系列)。“挂腊鸭”在粤语俗语中指吊颈自杀。
      52、Kuso:日语“粪”的发音。起先是教游戏玩家如何把“烂Game认真玩”的意思,后来经台湾传入大陆,渐渐演化成“恶搞”之意。
      53、维客:喜欢使用WIKI这种超文本技术的网络爱好者。
      54、博客:一种网上共享空间,让人以日记的方式在网络上展现自己的形式。博客让两个女人飞速走红:木子美和芙蓉姐姐。
      55、黑客:又称骇客,指在电脑领域有特殊才能或技巧的人。这类人运用自己的才能或技巧,要么是专门检测系统漏洞,要么有可能做有违道德或法律的事。
      56、红客:具有民族主义倾向的中国网络技术爱好者,与黑客相对。
      57、朋客:起源于“朋克”。电脑朋客现在越来越多的被等同于电脑罪犯了。
      58、闪客:使用Flash软件做动画的人,我们看到的很多电子贺卡和网站MTV都是闪客的杰作。
      59、极客:也称奇客,Geek,指有较高超电脑能力的人。
      60、驴友:泛指爱好旅游,经常一起结伴出游的人。 例句:阿肥去年才和松风古琴他们一起去过新疆,现在又要征集驴友去湖南啦。

    中文缩写指南:
      1、BT:①Bit Torrent的缩写,是一种P2P(点对点)共享软件,中文译名“比特流”或“变态下载”。②“变态”的缩写。
      2、ZT:①“转帖”的缩写。②“猪头”的缩写,引申有ZT3,猪头三;ZT4,猪头四。 例句:青眉郑重告诉侠客社区的侠友们,ZT一定要注明。
      3、PP:①“片片”的缩写,片片指代照片。②“屁屁”的缩写,屁屁指代臀部。
      4、GG:哥哥的缩写,指代男性,有时候女生用来指代自己的男友。与之相对的是MM,妹妹或者美眉的缩写,指代女性,有时候男生用来指代自己的女友。
      5、NB:牛×的缩写,北京方言里用来表示叹为观止之意。
      6、JJ:①姐姐的缩写。②鸡鸡的缩写。
      7、DD:①弟弟的缩写,偶尔有引申义。②东东的缩写,指代东西。
      8、GF:Girl Friend,女友。与之相对的是BF,Boy Friend,男友。
      9、PLMM:漂亮美眉的缩写。
      10、PPMM:PLMM的升级版,漂漂美眉。
      11、RPWT:人品问题的缩写,来自猫扑论坛。一般来说,只要某上遇上了不可解之事,统统可归结为其有RPWT。
      12、人品帖:测试你是否有RPWT的帖子,帖子题目很劲爆,只要你被骗进去,就说明你有RPWT。 例句:这张名为《朴树的裸照》的帖子是个人品帖,其实里面真的是一棵朴树的照片啊,树当然是裸的,哪里有穿衣服的树?青眉居然被这个人品帖骗进去了,果真有RPWT.
      13、PF:佩服的缩写。
      14、SL:色狼的缩写。
      15、KH:葵花,代指练《葵花宝典》的高手。
      16、KHBD:葵花宝典。
      17、PXJF:辟邪剑法,源于KHBD,KH专用的剑法。
      18、BS:鄙视的缩写,也可写作B4。 例句:你要是ZT不注明,青眉会BS你,全论坛的人都会B4你的。
      19、PMP:拍马屁。
      20、PMPMP:拼命拍马屁。
      21、MPJ:“马屁精”的缩写。
      22、BC:“白痴”的缩写。也说是“白菜”的缩写,在网上,如果人家说你很白菜,那么就是形容你BC。
      23、ODBC:“哦,大白痴”的缩写。
      24、XB:小白的缩写。
      25、YY:意淫的缩写,出自《红楼梦》第六回,精神上行淫。在网络上其意得到进一步推广,凡信心极度膨胀的小说,统称为YY小说。
      26、ZE:“贼恶”的缩写,即真恶心,东北地区的方言发音。
      27、SE:“少恶”即“少恶心”的缩写。 28、XHW:小黑屋的缩写,来自猫扑,在猫扑,违反规则是要被关小黑屋的。
      29、FB:腐败的缩写,现在通常指出去吃喝一顿好的。
      30、MD:妈的,粗话,慎用。
      31、TMD: ,粗口,慎用。
      32、TNND:他奶奶的,粗口,慎用。
      33、JR:贱人,脏话,特别慎用。
      34、SJB:神经病,脏话,慎用。
      35、SB:脏话,对别人的蔑称,禁用。
      36、LR:烂人,禁用。
      37、LJ:垃圾,禁用。
      38、RY:人妖,慎用。
      39、JS:“奸商”的缩写。
      40、BXCM:冰雪聪明。
      41、HJ:汉奸。
      42、FQ:愤青。
      43、BD:笨蛋。
      44、JJWW:叽叽歪歪。
      45、Tjjtds:弹鸡鸡弹到死,来自猫扑论坛。
      46、CJ:纯洁。
      47、HC:花痴。
      48、BH:剽悍。出自新东方罗胖子的名言:剽悍的人生不需要解释。
      49、GJM:某当红青春作家,曾涉嫌抄袭。GJM后来被当作抄袭的简称,意义接近于“ZT”。出自天涯社区。
      50、三毛抄四:该当红青春作家写过一本书,和三毛作品同名,由此衍生而来的新成语。意指盲信某种理论、某个人物而完全不管真相,本末倒置、颠倒黑白的一种狂热精神状态。出自龙空。
      51、145:猫扑论坛某名女,代表该论坛参加过雅典奥运。她曾做过一套网上广泛流传的测试智商的题目,得分为145,遂有名言:比我聪明的都没有我漂亮,比我漂亮的都没有我聪明。天涯社区遂演绎出一句名言:比我CJ的都没我BT,比我BT的都没我CJ。
      52、FRJJ:芙蓉姐姐,一个女人,一种网络现象。从2005年4月起直到现在,她上了几乎所有网站的头条、新浪腾迅等各大网站及大小报纸争相报导、连中央电台都开始讨论她的现象。芙蓉姐姐的走红和持续走红,证明部分媒体和人已到了一个极端恶意的境界。
    英文缩写指南:
      1、DIY:Do It Yourself的缩写,自己动手做的意思。 例句:清欢太坏了,青眉电脑坏了找他修,他让青眉DIY。
      2、SOHO:Small Office Home Officer的简称,意思是“在家办公”。 例句:《游侠秀秀》的作者小非是SOHO一族啊。
      3、BUG:原意是“臭虫”,后来把跟电脑有关的故障都称之为“BUG”。 例句:每回侠客社区出现BUG,青眉都急得跳脚。
      4、I服了U:我服了你……周星星片子里的经典台词。 例句:你居然能让清欢不对你说“不”,I服了U!
      5、伊妹儿:Email的音译,电子邮件的意思。也可简称为“妹儿”。 例句:青眉从来不用伊妹儿,给她写信是没用的啦。
      6、CU:See You的缩写带音译,再见。 例句:CU,今天就到这里吧。
      7、IC:I See的缩写带音译,我知道了。 例句:IC,你是个神经病。(《大话西游》里的经典台词)
      8、Q:Cute 的音译,可爱。 例句:傲月寒长得好Q,像个芭比娃娃。
      9、FT:分特,Faint的缩写,昏倒、晕厥之意。
      10、SP:support,支持。
      11、败:BUY的音译,买的意思。
      12、SIGH:叹息,有无可奈何之意。
      13、LOL:Laugh Out Loud,大笑。
      14、KFC:Kill fu*king customers。
      15、PK:player kill。
      16、BTW:By the way,顺便说一句。
      17、BRB:Be right back,马上回来。
      18、TTYL:Talk to you later,回头再谈。
      19、BBL:Be back later,过会儿就回。
      20、kick your ass:打你屁屁。
      21、PPL:people,人们。
      22、PLZ:please,请,也有缩写成PLS。
      23、RUOK:Are you OK?
      24、IOWAN2BWU:I only want to be with you。
      25、M$ULKeCraZ:Miss you like crazy。
      26、CUL8R:see you later。
      27、IMHO:In my humble opinion。

    四、音译术语指南:
      1、3166:沙哟娜拉,日语,再见。
      2、886:拜拜喽,再见。
      3、3Q:Thank You,谢谢。
      4、7456:气死我了。
      5、9494:就是就是。
      6、818:八卦一下,出自天涯社区。
      7、616:遛一遛。通常回帖时贴教猫教花等图片时,通称“遛一遛”。
      8、8:不。
      9、54:“无视”的谐音,即漠视一个人,对其表达最大的不屑。
      10、4242:是啊是啊。
      11、稀饭:喜欢。
      12、木有:没有。“木”不知道是来源于哪里的发音。同样用法的还有“米有”。
      13、粉:很。来自闽南方言。
      14、表:“不要”速读连音,据说来自上海人的发音。
      15、白烂:来自闽南语“白卵”,意指一个人既笨又啰唆,还很麻烦,含贬义。
      16、素:台湾普通话“是”的读音。与之对应的有“8素”。
      17、酱紫:“这样子”速读连音,也作“绛紫”。
      18、酷:也说“裤”、“库”,Cool的音译。
      19、偶:台湾普通话“我”的读音。
      20、虾米:啥,什么之意,来自闽南语发音。
      21、口耐:也说可耐,可爱之意。
      22、滴:的,地。
      23、介个:这个。
      24、奔四:笨死的谐音。
      25、果酱:过奖。
      26、马甲决:马家爵。
      27、二硫碘化钾:KISS。
      28、咔嚓:某种练《葵花宝典》前必做的手术。
      29、口年:可怜。
      30、人参公鸡:“人身攻击”的通假。
      31、泥:你。
      32、好康:好看。来自闽南方言。
      33、筒子:同志。
      34、厚厚、吼吼、咔咔、kaka、嘻嘻、xixi、hiahia等:表示笑声,通常当作语气助词用。

    动漫术语浅析:
      1、TV版:指在电视上放的动画版本。
      2、OVA:Original Video Anime(原创影象动画),和TV相对,不在电视上放映的版本。
      3、剧场版:动画的电影版本。
      4、OST:Original Sound Track(原创音乐专集),专收录与某动画有关的音乐。
      5、OP:片头曲/主题曲。
      6、ED:片尾曲。
      7、CAST:声优,即配音演员,日本动漫的配音演员是非常重要的哦。
      8、STAFF:参与制作改编动画的全体成员,连场务道具都会算进去的。
      9、OTAKU:日语,原意为“御宅”,御宅族是指疯狂热烈动漫,沉浸在幻想世界中,欠缺正常社交生活经验的次文化族群。
      10、幼齿:也称“素人”,年纪小,不怎么懂事的意思。
      11、达人:很强的人。
      12、SF:SCIENCE FICTION,科幻机械类的作品。
      13、FF: FINAL FANTASY,最终幻想。
      14、M0:MACROSS ZERO,超时空要塞零。
      15、欧巴:30岁以上的女性。
      16、兄贵:全身肌肉的强壮男子。
      17、姐贵:全身肌肉的大姐姐。
      18、御姐:比自己年长的女性。
      19、恶趣味:怪癖、与众不同的特殊喜好。
      20、流星:指略带一点儿情色意味或稍有些露点成份的CG图。
      21、口胡:港式动漫用语,也可写作“口古月”,相当于“靠”之类的语气助词。
      22、口桀:港漫用语,常用来指坏人的笑声,特别是奸笑。
      23、轰杀:港漫用语,用来指去杀某人的动作。
      24、废柴:港漫用语,指废物、没用的人。
      25、破天:港漫用语,即“打破天”,不爽时可使用。
      26、逆天:港漫用语,指逆着天道而行,愤怒时可使用。
      27、未够班:港漫用语,意指不够格。
      28、收声:港漫用语,指闭嘴。
    耽美术语浅析:
      1、耽美:出自日语,原意是指唯美主义,后经台湾演绎,变成BL的代称了,专指女作家写/画给女读者看的小说或漫画。其实在日本,JUNE才是BL的代称。
      2、BL:BOY’S LOVE,男同性恋。谐音玻璃,也称同志。
      3、GL:GIRL’S LOVE,女同性恋。 4、蕾丝:lesbine,女同性恋,简称女同,也称同好,拉拉。
      5、同人女:超级喜欢BL文化的女性,在日语中被称为“腐女子”。
      6、耽美狼:超喜欢耽美文学的女性,比同人女程度更进一步。
      7、LOLI:罗莉,幼女的意思。出自《LOLITA》中的洛丽塔,本意指12岁以下的小女孩,泛指天真可爱到白目的小女生。类似的幼男则被称为“正太”,出自《铁人28号》中的金田正太郎,最开始的正太是以穿西装短裤造型出现的哦。
      8、LOLI控:对罗莉有强烈偏好的变态叔叔,嘿嘿~
      9、18禁:未满18岁不能观看。
      10、H:来自日文“变态(HENTAI)”罗马拼音的第一个字母,通常指18禁的东东,与make love同义。
      11、激H:H度非常高,描述相当激烈火爆。
      12、清水文:没有H情节的文章。
      13、SM:Sadism & Masochism,虐待狂与被虐狂,多指性方面。可进一步引申为:Slave and Master,主子与奴才。指两人从事H行为时,有明显的主奴之别,在不危及人身安全的情况下,奴不得违抗主的任何命令。
      14、鬼畜:来自日语,原意指像魔鬼畜生一样残酷无情。指攻残忍虐待受的身体或精神。
      15、紧缚:H时将受的身体用绳子捆绑起来,使其不能挣扎。
      16、攻:BL的双方,充当主动的那一方,即男同志中通称的一号。与“攻”相对的,就是“受”了,受是零号。
      17、年下攻:攻的年纪比受小。
      18、年上攻:攻的年纪比受大。
      19、女王受:受的性格像女王一样高傲,可以把攻吃得死死的。
      20、下克上:地位较低的是攻,地位较高的是受。
      21、立场倒换:攻受相互转换身份。
      22、总受:不管跟谁配对,都是充当受。
      23、总攻:不管跟谁配对,都是充当攻。
      24、强气攻:个性很强悍的攻。
      25、强气受:个性很强悍的受。
      26、健气受:个性比较活泼、健康、开朗类型的受。
      27、天然受:个性比较少根筋的受。
      28、诱受:主动诱惑攻和自己H的受。
      29、YAOI:整部小说以H为主,没什么情节。
      30、女王:女性主子被称为女王,性格一般比较高傲、残酷。女王的通常形象总是穿紧身衣、高跟鞋,手执皮鞭的。后引申为强势的女性。
      31、调教:顾名思义。在有H情节的小说中,调教不仅是从生理上,更从心理上,以摧残对方的自尊,使其完全臣服为目的。此类小说通常会被称为“调教系”。
      32、圣水:指代小便。与之对应的是“黄金”,指代大便。黄金圣水是调教系小说中必不可少的道具。超恶~
      33、同人:二次创作,将名家名作中的情节或人物衍生出自己的故事。同人创作不限于BL,一般性向的也可以。
      34、女体化:把原著中的男性角色改成女孩子进行同人创作。
      35、同人志:由作者自己花钱出版的书刊。由出版社所出的书刊叫“商业志”
    简短但经典的回复:
      1、楼下的木有小鸡鸡。(来自猫扑,先回帖的人对后回帖的一种调侃)
      2、实乃人间惨剧,竟无语凝噎。(来自天涯,对无语的帖子都可如此回复)
      3、做人要厚道。(《手机》经典台词)
      4、出来混,迟早要还的。(《无间道》经典台词)
      5、这无涯的一场生啊。(时未寒《碎空刀》经典台词)
      6、人生真是寂寞如雪啊。
      7、灌,是一种美德。
      8、什么什么,才是王道。(举例:恶搞才是王道。)
      9、YY是我思考的方式,BT是我追求的境界。(来自猫扑)
      10、虎躯一震,三分走人。(来自天涯,天涯回一个帖三分。“虎躯一震”常见于黄易作品)
      11、CJ的45度角仰望天空。(来自天涯)
  • 从测试用例看测试的问题及变化(转)

    2008-06-14 09:20:15

     

    对于一个测试人员来说测试用例的设计编写是一项必须掌握的能力。但有效的设计和熟练的编写却是一个十分复杂的技术,它需要你对整个软件不管从业务还是从功能上都有一个明晰的把握。

    一、问题:
    许多测试类书籍中都有大幅的篇章介绍用例的设计方法,如等价类划分,边界值,错误推断,因果图等。但实际应用中这些理论却不能给我们很明确的行为指导,尤其是业务复杂,关联模块紧密,输入标准和输出结果间路径众多时,完全的遵循这些方法只能让我们在心理上得到一种满足,而无法有效的提高测试效率。有时我们只有依靠以前项目的用例编写经验(或习惯),希望能在这一个项目中更加规范,但多数情况下我们规范的只是“书写的规范”,在用例设计上以前存在的问题现在依旧。

    当好不容易用例基本完成,我们却发现面对随之而来的众多地区特性和新增需求,测试用例突然处于一种十分尴尬的境地:

    l       从此几乎很少被执行

    l       已经与程序的实现发生了冲突(界面变动,功能变动)

    l       执行用例发现的bug很少

    l       根本没有时间为新的功能需求增补用例

    l       有时间补充,但用例结构越来越乱,

    l       特性的用例与通性用例之间联系不明确(以新增需求为主线列出所有涉及到的更改,但特性与通行之间的数据或业务联系在用例中逐渐淡化)

    l       知道怎样执行这个用例,但它要说明什么呢?(多数用例给我们的感觉是只见树木,不见森林,只对某一功能,无法串起)

    通过上面的一系列问题可以看到,似乎测试用例给我们带来的问题远多于益处,也正是因为在实际过程中遇到的问题积累,导致我们有很充分的理由忽视或拒绝用例的应用。

    但没有用例或简略用例的编写我们又会舒服很多么?不言自明,谁也不想倒退发展吧。

    二、原因:
    事实上我们在测试用例编写和设计上遇到的一系列问题只是一种表面的呈现,究其原因我认为有如下几点:

    1、没有适合的规范
    “适合的规范”或称“本地化的规范”。这是我们在测试过程中遇到的第一个问题,通常也是很容易习惯且淡忘的。我们拥有相当多的流程文档、书本上的定义,但它适合我们当前的项目么?

    每一个测试工程师在进入这个职业的初期都会了解一些测试上的概念和术语,进入公司或项目组后也会进一步学习相应的文档,例如怎样规范编写,怎样定义bug级别,软件实现的主要业务等。但当测试经理开始给我们分配某一模块的用例编写时,又有多少人知道该怎样去写,怎样写算是好?

    在测试论坛中常能看到介绍用例编写方法的帖子,而迷茫于怎样应用到实践的回复也不为少数。为何我们无法在公司和项目组内找到明确且适合的规范?于是我们只得选择从书本或之前的用例中复制,不管是结构还是方式都依赖于以往·的经验,我并不是说这样就是错误的,但不能总结成文的经验无法给予测试更多帮助。

    我们有太多经验,但却没有形成适合的规范。

    2、功能与业务的分离
    我们知道怎样列举一个输入框的用例,但却很少考虑说明这个输入框是用来做什么的,如果仔细分析不难发现,用例中这种功能与业务的分离越来越普遍也越来越明显。

    边界值、等价类划分、因果图,这些用例方法是一种高度提纯的方法,本身就很偏向于功能及代码,所以怎样编写业务的用例我们就从理论上失去了参考。

    复杂的业务会贯穿于整个软件,涉及众多功能点,里面组合的分支更不可胜数。测试用例务求简洁、明确,这一点也与业务“格格不入”。功能用例依赖程序界面,业务描述依赖需求文档。于是我们更偏向于根据已实现的界面编写功能用例,列举出众多的边界值、等价类。流程的操作只有凭借经验和理解,这时测试出的bug是最多的,但我们却无法使这个bug对应到一个用例中(点击一个按钮报出的错误有时原因并不在这个按钮或按钮所在的窗体)。正因为我们没有很好的积累业务上的用例,才使得我们感到执行用例时发现的bug不多。

    用例结构的划分一定程度上也造成了功能和业务的分离,依照界面模块建立文件夹,并在其中新建不同用例,这使得用例从结构上就很难联通起来。

    3、测试未能跟上变化
    变化!想象一下,当我们越来越多的听到开发人员在那里高呼“拥抱变化”“敏捷开发”的时候,测试又有什么举措呢?当地区特性,软件版本越来越多的时候,测试是否在积极响应呢?变化是我们面临的最大挑战,我认为测试未能跟上变化是造成测试过程中遇到种种问题和矛盾的主要原因。

    对需求和程序的变化测试人员的感受是非常深的,测试总是跟在需求和开发后面跑,使得所有风险都压在自己身上。不断压缩的时间和资源使我们只能放弃那些“不必要”的工作:尽快投入测试,尽快发现bug,而非从整体把握软件的质量情况,统筹策略。

    疲于应对的直接影响就是程序质量无法准确度量,进度无法控制,风险无法预估。用例与程序脱节,新增用例混乱和缺少。长此以往我们只得放弃修改、增补用例,甚至放弃之前积累的所有成果。用例变为程序变更的记录摘要,没有测试数据的保留,测试步骤和重点无法体现,新加功能与原来的程序逐渐“脱离”,可能还会出现相互违背的情况,但这我们却无法很快发现。

    永远是变化决定我们的下一步工作,这也是混乱的开始。

    三、可能的解决办法:
    在这里我希望以探讨的方式提出一些可能的解决办法,因为上面的问题也许在成熟的公司和项目组内很少遇到,而遇到问题的也需根据不同的情况单独考虑。不用拘泥形式,最适合的就是最好的。

    1、测试驱动开发,用例指导结果,数据记录变化
    “测试驱动开发”(TDD)是一个比较新的概念,在网上可以看到很多介绍文章,它主要讨论如何让开发的代码更奏效(Work)更洁净(Clean),“测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码”。可以看到,TDD是建立在“代码”级别的驱动,但目前我们需要探讨的问题是怎样在黑盒测试中做到“测试驱动开发”。

    首先我们需要纠正一个态度,很多人认为黑盒测试的技术含量不高,可思考可拓展的内容不多,主要的工作就是用鼠标在那里瞎点,于是很多“高级”的技术方法都试图与黑盒测试划清界限。但测试人员发现的bug有80%以上都是黑盒测试发现的,手工操作软件仍是目前检验软件质量最有效的一种方法。

    如何在黑盒测试中做到测试驱动开发?我认为可以从用例级别做起,以业务用例指导过程和结果。

    开发人员通常比较关注技术,对于业务上的理解容易忽视并出现偏差,而需求文档又不会很明确的指出应该实现怎样的结果,这使得从业务到功能出现一个“阅读上的障碍”,如果最后程序错误了还需返工,这样耗费的人力物力就非常大了。使用业务用例驱动开发,就是一个比较好的方法,同样这也需要运用测试中的各种方法,列举出业务流程里数据的等价类和边界值。

    业务用例的构造要先于程序实现,与需求和开发人员沟通一致,并以此作为一个基准,保证程序实现不会错,还能对整个软件的进度和质量有一个很好的估计和度量。业务用例可以不关注程序的界面,但一定要有数据的支持。这就是测试主导变化的另一点“数据记录变化”。

    我们不仅要应对变化,还要记录变化,使测试用例成为对程序持续性的监控,数据可以作为最基本、最简单的支持。当一个业务很复杂时可以拆分成段(业务段与程序中以窗体或页面的划分是不一样的),使用典型的用例方法列出实际输入和预期结果。我们希望数据能做到通用和共享,最理想的情况就是建立一个“数据库”,每个业务用例都从“数据库”中取得输入数据和预期结果,这个数据只是针对业务入口和出口的,当程序内部设计变更时,保留的数据不会因此而作废。举一个例子,例如我的程序要从某种文件中读取数据并计算结果,一段时间后程序内部字段增加了,如果是以保存的文件附件方式提供数据,则现在程序很可能就打不开这个文件了。使用“数据库”指导测试人员可以在变化的程序里直接针对业务输入,而不关心程序内部结构。

    再进一步的话“数据库”就开始涉及到程序内部的接口了,这需要开发人员的配合。

    2、为用例标明时间(版本)和优先级
    为测试用例标明时间或版本可以起到一种基准的作用,标明项目进度过程中的每一个阶段,使用例直接和需求基线、软件版本对应。同样这需要规范流程,也是对变更的一种确认和控制。或者可以为用例增加一个状态,指明这个用例目前是否与程序冲突,当程序变更时改变用例的状态,并更新用例版本。

    为测试用例标明优先级可以指出软件的测试重点、用例编写的重点,减少用例回归的时间,增加重点用例执行的次数,帮助项目组新人尽快了解需求,在自动化测试的初期也可以参考这个优先级录制脚本。

    3、功能用例与业务用例分开组织
    将功能用例与业务用例分开组织,按照不同关注点列举执行路径。业务用例应在开发前或同期编写,帮助测试人员和开发人员明确业务,了解正确流程和错误流程。功能用例更依赖于程序界面的描述,但功能用例并不等于使用说明。对某些模块的等价类、边界值测试会发现很多严重的bug,也许与业务无关,但用户往往很容易这样操作(例如登录名,你是否考虑到很长的名字,或者用户的键盘有问题,总是敲入n多空格在里面,这与业务无关,但程序将会怎样处理?)。

    4、审核用例,结对编写
    测试组长或经理对用例进行审核可以做到用例的补充和校对,但一般情况下是很难做到的,我们可以采用另一种方法,就是结对编写测试用例(前提是你有两个以上的测试人员),内部审核。

    测试用例不是一个人编写一个人执行,它需要其他测试人员都能读懂且明白目标所指。结对编写可以尽量减少个人的“偏好习惯”,同时也能拓展思维,加强测试重点的确认,小组内部达到统一。一定程度上结对编写也可以减少组长或经理对用例的管理,提高组员的参与积极性。

    四、发展
    上面的这些解决方法只是一种建议,具体怎样实施到项目中还需根据情况而定。可以看到测试的发展方向是很多很广的,传统的黑盒测试并不是毫无新意,测试工作怎样适合我们而发展,将给予我们更多的思考。

  • 十大负面测试用例

    2008-06-13 15:17:37

    负面测试(Negative testing)是相对于正面测试(Positive testing)而言的。它们也是测试设计时的两个非常重要的划分。简单点说,正面测试就是测试系统是否完成了它应该完成的工作;而负面测试就是测试系统是否不执行它不应该完成的操作。形象一点,正面测试就象一个毕恭毕敬的小学生,老师叫我做什么,我就做什么;而负面测试就象一个调皮捣蛋的孩子,你叫我这样做,我偏不这样做,而且和你对着干。开发人员也是最讨厌修改此类bug的。
          正面测试主要根据需求,功能说明书,设计文档等相关参考文档来执行测试,而负面测试则主要根据错误猜测,逆向思维来测试系统,一定程序上的的依赖测试人员的经验积累。
          执行负面测试时,不单单要测试系统是否处理了用户的异常操作,还要检查系统对于这些异常操作是否给予了正确的错误提示。它是系统对用户进行继续正确操作的指引。
    简言之负面测试的三部曲就是:
    1. 检查程序中的屏幕或页面是否给出了清晰且充分的提示或约束;
    2. 测试系统是否处理了用户的异常操作;
    3. 检查系统的错误提示是否清晰且充分。
     
    以下是Steve Miller的《Top 10 Negative Test Cases》,概括性的提到了一些做负面测试时经常需要注意的测试。
    负面测试用例被设计于用软件未意欲被使用的方式测试软件,它也应该是测试工作的一部分。以下就是在设计测试工作量时你应该考虑的10大负面测试用例。

    1、植入的单引号。大多数基于SQL的数据库系统在用户存储包含一个单引号的信息时会出现问题,例如John's car。每一个可以接受文字数字型数据条目的屏幕都要试试输入包含一个或多个单引号的文本。
    【补充】其实不只是单引号,基本上测试人员应该测试所有的特殊字符和空/空格(单纯的空格和文本前后的空格),单引号,逗号,/,<,>(对于web的应用程序)都是很容易引发错误的。在开发早期测试组就可以建议开发组写一个通用的函数来处理这些特殊字符,然后在处理用户的输入时套用这个函数就可以避免此类错误了。
     
    2、必需输入的数据条目。功能说明书上应该清楚的指出屏幕上必须输入数据条目的字段。测试屏幕上每一个被说明为必须输入的字段以保证它强制要求你在字段中输入数据。
    【补充】对于强制输入的字段,在屏幕上最好有些标识以说明其为必须输入的字段。一般在字段前或后用红色的*号表示。测试时必须要检查有标识的字段是否和功能说明书或其他参考文档一致,错误信息提示是否正确,强制输入的字段是否真的必须输入。
     
    3、字段类型测试。功能说明书上应该清楚的指出要求特定数据输入要求(日期字段,数字字段,电话号码,邮编等等)的字段。测试屏幕上每一个被指出有特定类型的字段以保证你输入了基于字段类型的符合正确格式的数据(数字型字段应该不允许字符或特殊字符,日期型的字段应该允许输入一个正确的日期等等)
    【补充】其实这里还有一个字段格式和字段内容的测试。有些字段对输入的格式有要求,这些字段的格式一般在屏幕上也有相应的提示。所以在测试时需要测试提示的格式是否合理(和功能说明书或其他参考文档相一致)以及系统是否正确识别输入的格式。有些字段对字段的内容有限制,如常见的用户名,不能包含特殊字符,首字不能为数字等要求。所以在测试时需要测试提示的格式是否合理(和功能说明书或其他参考文档相一致)还有不符合内容要求的数据输入时系统是否正确的处理。
     
    4、字段长度测试。功能说明书上应该清楚的指出可以在字段中输入的字符数(例如,first name必须是50个或更少的字符)。写测试用例以保证你只可以输入特定的字符数。防止用户输入比允许范围更多的字符比因用户已输入过多的字符而给出的错误信息更加的文雅些。
    【补充】一般对于限制长度的字段,现在开发大多采用限制输入的方法(设置字段的长度)来处理。所以测试时需要测试限制的长度是否合理(和功能说明书或其他参考文档相一致),对于没有限制长度的字段,要测试无穷输入时是否出错,有问题报bug时建议开发人员根据需要限制长度。
     
    5、数字型的边界测试。对于数字型的字段,测试上下边界是非常重要的。例如,如果你正在计算某个账户的利息时,你永远不会输入一个负的利息数给应该赢取利息的账户。因此,你应该尝试用负数测试。同样,如果功能说明书上要求字段在某一个特定的范围(如从10~50),你就应该尝试输入9或51,它应该给出一个得体的信息表示失败。
     
    6、数字的约束测试。大多数数据库系统和编程语言允许数字条目被识别为整数或长整数。通常,整数的范围是从-32,767~32,767,长整数的范围从-2,147,483,648~2,147,483,647。对于那些没有特定边界限制的数字数据条目,用这些限制测试以确保不会出现数字的溢出错误。
    【补充】小数型的数字字段同样也需要格外的测试。一般对于未指出数字类型的字段,尝试输入负整数,负小数,0,正整数,正小数进行测试。不管是哪种数据库系统,对于数字一般都有多种数字类型。所以测试人员一定要测试的全面。
     
    7、日期边界测试。对于日期型的字段,测试上下边界是很重要的。例如,如果你正在检查一个出生日期的字段,很大可能出生日期不能早于150年前。同样,出生日期应该不是将来的某一天。
    【补充】一般来说,每种数据库系统的日期都有个范围,如SQL Server最小日期是1753年1月1日,所以如果是输入型的日期字段同样也应该测试早于1753的日期。对于输入的日期范围,“起始日期”要小于“结束日期”。
     
    8、日期的有效性。对于日期字段,确保不允许无效的日期是很重要的(04/31/2007是一个无效的日期)。测试用例也应该检查闰年(每个第4年和第400年是一个闰年)。
     
    9、web会话测试。很多的web应用程序依赖浏览器的会话来追踪已登录的用户,应用程序的设置等等。应用程序的大多数屏幕不被设计为没有首次登录就可以被运行。应用程序应该确保在打开应用程序的某一页面之前会话里有一个有效的登录。
     
    10、性能的改变。当发布产品的最新版本时,应该有一套运行于识别屏幕(列出信息的屏幕,add/update/delete数据的屏幕等等)速度的性能测试。测试包里应该包括比较先前版本和现有版本性能统计值的测试用例。这个可以帮助识别那些可以证明是随着对现有版本的代码变更而引起的潜在的性能问题。
    【补充】从第一条到第八条是我们在测试字段时常常需要做的测试,一般的测试人员都不陌生。第九条在测试web应用程序中会作为检查应用程序的安全性而做的一项测试。而第十条估计很多公司都不会将它考虑到测试的范畴中,一般最多也就是在测试用例中添加校验某一个操作是否在系统允许的响应时间里,很少去做这样的比较,除了一些有针对性的性能测试。
  • 数据库设计经验

    2008-06-13 15:07:48

    一个成功的管理系统,是由:[50% 的业务 + 50% 的软件] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的老师也比不过经验的教诲。所以我归纳历年来所走的弯路及体会,并在网上找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的 60 个最佳技巧,并把这些技巧编写成了本文,为了方便索引其内容划分为 5 个部分:

    第 1 部分 - 设计数据库之前
    这一部分罗列了 12 个基本技巧,包括命名规范和明确业务需求等。
    第 2 部分 - 设计数据库表
    总共 24 个指南性技巧,涵盖表内字段设计以及应该避免的常见问题等。
    第 3 部分 - 选择键
    怎么选择键呢?这里有 10 个技巧专门涉及系统生成的主键的正确用法,还有何 时以及如何索引字段以获得最佳性能等。
    第 4 部分 - 保证数据完整性
    讨论如何保持数据库的清晰和健壮,如何把有害数据降低到最小程度。
    第 5 部分 - 各种小技巧
    不包括在以上 4 个部分中的其他技巧,五花八门,有了它们希望你的数据库开发工作会更轻松一些。
    第 1 部分 - 设计数据库之前
    考察现有环境
    在设计一个新数据库时,你不但应该仔细研究业务需求而且还要考察现有的系统。大多数数据库项目都不是从头开始建立的;通常,机构内总会存在用来满足特定需求的现有系统(可能没有实现自动计算)。显然,现有系统并不完美,否则你就不必再建立新系统了。但是对旧系统的研究可以让你发现一些可能会忽略的细微问题。一般来说,考察现有系统对你绝对有好处。
    定义标准的对象命名规范
    一定要定义数据库对象的命名规范。对数据库表来说,从项目一开始就要确定表名是采用复数还是单数形式。此外还要给表的别名定义简单规则(比方说,如果表名是一个单词,别名就取单词的前 4 个字母;如果表名是两个单词,就各取两个单词的前两个字母组成 4 个字母长的别名;如果表的名字由 3 个单词组成,你不妨从头两个单词中各取一个然后从最后一个单词中再取出两个字母,结果还是组成 4 字母长的别名,其余依次类推)对工作用表来说,表名可以加上前缀 WORK_ 后面附上采用该表的应用程序的名字。表内的列[字段]要针对键采用一整套设计规则。比如,如果键是数字类型,你可以用 _N 作为后缀;如果是字符类型则可以采用 _C 后缀。对列[字段]名应该采用标准的前缀和后缀。再如,假如你的表里有好多“money”字段,你不妨给每个列[字段]增加一个 _M 后缀。还有,日期列[字段]最好以 D_ 作为名字打头。

    检查表名、报表名和查询名之间的命名规范。你可能会很快就被这些不同的数据库要素的名称搞糊涂了。假如你坚持统一地命名这些数据库的不同组成部分,至少你应该在这些对象名字的开头用 Table、Query 或者 Report 等前缀加以区别。

    如果采用了 Microsoft Access,你可以用 qry、rpt、tbl 和 mod 等符号来标识对象(比如 tbl_Employees)。我在和 SQL Server 打交道的时候还用过 tbl 来索引表,但我用 sp_company (现在用 sp_feft_)标识存储过程,因为在有的时候如果我发现了更好的处理办法往往会保存好几个拷贝。我在实现 SQL Server 2000 时用 udf_ (或者类似的标记)标识我编写的函数。
    工欲善其事, 必先利其器
    采用理想的数据库设计工具,比如:SyBase 公司的 PowerDesign,她支持 PB、VB、Delphe 等语言,通过 ODBC 可以连接市面上流行的 30 多个数据库,包括 dBase、FoxPro、VFP、SQL Server 等,今后有机会我将着重介绍 PowerDesign 的使用。
    获取数据模式资源手册
    正在寻求示例模式的人可以阅读《数据模式资源手册》一书,该书由 Len Silverston、W. H. Inmon 和 Kent Graziano 编写,是一本值得拥有的最佳数据建模图书。该书包括的章节涵盖多种数据领域,比如人员、机构和工作效能等。其他的你还可以参考:[1]萨师煊 王珊著 数据库系统概论(第二版)高等教育出版社 1991、[2][美] Steven M.Bobrowski 著 Oracle 7 与客户/服务器计算技术从入门到精通 刘建元等译 电子工业出版社,1996、[3]周中元 信息系统建模方法(下) 电子与信息化 1999年第3期,1999
    畅想未来,但不可忘了过去的教训
    我发现询问用户如何看待未来需求变化非常有用。这样做可以达到两个目的:首先,你可以清楚地了解应用设计在哪个地方应该更具灵活性以及如何避免性能瓶颈;其次,你知道发生事先没有确定的需求变更时用户将和你一样感到吃惊。

    一定要记住过去的经验教训!我们开发人员还应该通过分享自己的体会和经验互相帮助。即使用户认为他们再也不需要什么支持了,我们也应该对他们进行这方面的教育,我们都曾经面临过这样的时刻“当初要是这么做了该多好..”。
    在物理实践之前进行逻辑设计
    在深入物理设计之前要先进行逻辑设计。随着大量的 CASE 工具不断涌现出来,你的设计也可以达到相当高的逻辑水准,你通常可以从整体上更好地了解数据库设计所需要的方方面面。
    了解你的业务
    在你百分百地确定系统从客户角度满足其需求之前不要在你的 ER(实体关系)模式中加入哪怕一个数据表(怎么,你还没有模式?那请你参看技巧 9)。了解你的企业业务可以在以后的开发阶段节约大量的时间。一旦你明确了业务需求,你就可以自己做出许多决策了。

    一旦你认为你已经明确了业务内容,你最好同客户进行一次系统的交流。采用客户的术语并且向他们解释你所想到的和你所听到的。同时还应该用可能、将会和必须等词汇表达出系统的关系基数。这样你就可以让你的客户纠正你自己的理解然后做好下一步的 ER 设计。
    创建数据字典和 ER 图表
    一定要花点时间创建 ER 图表和数据字典。其中至少应该包含每个字段的数据类型和在每个表内的主外键。创建 ER 图表和数据字典确实有点费时但对其他开发人员要了解整个设计却是完全必要的。越早创建越能有助于避免今后面临的可能混乱,从而可以让任何了解数据库的人都明确如何从数据库中获得数据。

    有一份诸如 ER 图表等最新文档其重要性如何强调都不过分,这对表明表之间关系很有用,而数据字典则说明了每个字段的用途以及任何可能存在的别名。对 SQL 表达式的文档化来说这是完全必要的。
    创建模式
    一张图表胜过千言万语:开发人员不仅要阅读和实现它,而且还要用它来帮助自己和用户对话。模式有助于提高协作效能,这样在先期的数据库设计中几乎不可能出现大的问题。模式不必弄的很复杂;甚至可以简单到手写在一张纸上就可以了。只是要保证其上的逻辑关系今后能产生效益。
    从输入输出下手
    在定义数据库表和字段需求(输入)时,首先应检查现有的或者已经设计出的报表、查询和视图(输出)以决定为了支持这些输出哪些是必要的表和字段。举个简单的例子:假如客户需要一个报表按照邮政编码排序、分段和求和,你要保证其中包括了单独的邮政编码字段而不要把邮政编码糅进地址字段里。
    报表技巧
    要了解用户通常是如何报告数据的:批处理还是在线提交报表?时间间隔是每天、每周、每月、每个季度还是每年?如果需要的话还可以考虑创建总结表。系统生成的主键在报表中很难管理。用户在具有系统生成主键的表内用副键进行检索往往会返回许多重复数据。这样的检索性能比较低而且容易引起混乱。
    理解客户需求
    看起来这应该是显而易见的事,但需求就是来自客户(这里要从内部和外部客户的角度考虑)。不要依赖用户写下来的需求,真正的需求在客户的脑袋里。你要让客户解释其需求,而且随着开发的继续,还要经常询问客户保证其需求仍然在开发的目的之中。一个不变的真理是:“只有我看见了我才知道我想要的是什么”必然会导致大量的返工,因为数据库没有达到客户从来没有写下来的需求标准。而更糟的是你对他们需求的解释只属于你自己,而且可能是完全错误的。
    第 2 部分 - 设计表和字段
    检查各种变化
    我在设计数据库的时候会考虑到哪些数据字段将来可能会发生变更。比方说,姓氏就是如此(注意是西方人的姓氏,比如女性结婚后从夫姓等)。所以,在建立系统存储客户信息时,我倾向于在单独的一个数据表里存储姓氏字段,而且还附加起始日和终止日等字段,这样就可以跟踪这一数据条目的变化。
    采用有意义的字段名
    有一回我参加开发过一个项目,其中有从其他程序员那里继承的程序,那个程序员喜欢用屏幕上显示数据指示用语命名字段,这也不赖,但不幸的是,她还喜欢用一些奇怪的命名法,其命名采用了匈牙利命名和控制序号的组合形式,比如 cbo1、txt2、txt2_b 等等。
    除非你在使用只面向你的缩写字段名的系统,否则请尽可能地把字段描述的清楚些。当然,也别做过头了,比如 Customer_Shipping_Address_Street_Line_1,虽然很富有说明性,但没人愿意键入这么长的名字,具体尺度就在你的把握中。
    采用前缀命名
    如果多个表里有好多同一类型的字段(比如 FirstName),你不妨用特定表的前缀(比如 CusLastName)来帮助你标识字段。

    时效性数据应包括“最近更新日期/时间”字段。时间标记对查找数据问题的原因、按日期重新处理/重载数据和清除旧数据特别有用。
    标准化和数据驱动
    数据的标准化不仅方便了自己而且也方便了其他人。比方说,假如你的用户界面要访问外部数据源(文件、XML 文档、其他数据库等),你不妨把相应的连接和路径信息存储在用户界面支持表里。还有,如果用户界面执行工作流之类的任务(发送邮件、打印信笺、修改记录状态等),那么产生工作流的数据也可以存放在数据库里。预先安排总需要付出努力,但如果这些过程采用数据驱动而非硬编码的方式,那么策略变更和维护都会方便得多。事实上,如果过程是数据驱动的,你就可以把相当大的责任推给用户,由用户来维护自己的工作流过程。
    标准化不能过头
    对那些不熟悉标准化一词(normalization)的人而言,标准化可以保证表内的字段都是最基础的要素,而这一措施有助于消除数据库中的数据冗余。标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能、扩展性和数据完整性方面达到了最好平衡。简单来说,3NF 规定:
    * 表内的每一个值都只能被表达一次。
    * 表内的每一行都应该被唯一的标识(有唯一键)。
    * 表内不应该存储依赖于其他键的非键信息。
    遵守 3NF 标准的数据库具有以下特点:有一组表专门存放通过键连接起来的关联数据。比方说,某个存放客户及其有关定单的 3NF 数据库就可能有两个表:Customer 和 Order。Order 表不包含定单关联客户的任何信息,但表内会存放一个键值,该键指向 Customer 表里包含该客户信息的那一行。
    更高层次的标准化也有,但更标准是否就一定更好呢?答案是不一定。事实上,对某些项目来说,甚至就连 3NF 都可能给数据库引入太高的复杂性。

    为了效率的缘故,对表不进行标准化有时也是必要的,这样的例子很多。曾经有个开发餐饮分析软件的活就是用非标准化表把查询时间从平均 40 秒降低到了两秒左右。虽然我不得不这么做,但我绝不把数据表的非标准化当作当然的设计理念。而具体的操作不过是一种派生。所以如果表出了问题重新产生非标准化的表是完全可能的。
    Microsoft Visual FoxPro 报表技巧
    如果你正在使用 Microsoft Visual FoxPro,你可以用对用户友好的字段名来代替编号的名称:比如用 Customer Name 代替 txtCNaM。这样,当你用向导程序 [Wizards,台湾人称为‘精灵’] 创建表单和报表时,其名字会让那些不是程序员的人更容易阅读。
    不活跃或者不采用的指示符
    增加一个字段表示所在记录是否在业务中不再活跃挺有用的。不管是客户、员工还是其他什么人,这样做都能有助于再运行查询的时候过滤活跃或者不活跃状态。同时还消除了新用户在采用数据时所面临的一些问题,比如,某些记录可能不再为他们所用,再删除的时候可以起到一定的防范作用。
    使用角色实体定义属于某类别的列[字段]
    在需要对属于特定类别或者具有特定角色的事物做定义时,可以用角色实体来创建特定的时间关联关系,从而可以实现自我文档化。
    这里的含义不是让 PERSON 实体带有 Title 字段,而是说,为什么不用 PERSON 实体和 PERSON_TYPE 实体来描述人员呢?比方说,当 John Smith, Engineer 提升为 John Smith, Director 乃至最后爬到 John Smith, CIO 的高位,而所有你要做的不过是改变两个表 PERSON 和 PERSON_TYPE 之间关系的键值,同时增加一个日期/时间字段来知道变化是何时发生的。这样,你的 PERSON_TYPE 表就包含了所有 PERSON 的可能类型,比如 Associate、Engineer、Director、CIO 或者 CEO 等。
    还有个替代办法就是改变 PERSON 记录来反映新头衔的变化,不过这样一来在时间上无法跟踪个人所处位置的具体时间。
    采用常用实体命名机构数据
    组织数据的最简单办法就是采用常用名字,比如:PERSON、ORGANIZATION、ADDRESS 和 PHONE 等等。当你把这些常用的一般名字组合起来或者创建特定的相应副实体时,你就得到了自己用的特殊版本。开始的时候采用一般术语的主要原因在于所有的具体用户都能对抽象事物具体化。
    有了这些抽象表示,你就可以在第 2 级标识中采用自己的特殊名称,比如,PERSON 可能是 Employee、Spouse、Patient、Client、Customer、Vendor 或者 Teacher 等。同样的,ORGANIZATION 也可能是 MyCompany、MyDepartment、Competitor、Hospital、Warehouse、Government 等。最后 ADDRESS 可以具体为 Site、Location、Home、Work、Client、Vendor、Corporate 和 FieldOffice 等。
    采用一般抽象术语来标识“事物”的类别可以让你在关联数据以满足业务要求方面获得巨大的灵活性,同时这样做还可以显著降低数据存储所需的冗余量。
    用户来自世界各地
    在设计用到网络或者具有其他国际特性的数据库时,一定要记住大多数国家都有不同的字段格式,比如邮政编码等,有些国家,比如新西兰就没有邮政编码一说。
    数据重复需要采用分立的数据表
    如果你发现自己在重复输入数据,请创建新表和新的关系。
    每个表中都应该添加的 3 个有用的字段
    * dRecordCreationDate,在 VB 下默认是 Now(),而在 SQL Server 下默认为 GETDATE()
    * sRecordCreator,在 SQL Server 下默认为 NOT NULL DEFAULT USER
    * nRecordVersion,记录的版本标记;有助于准确说明记录中出现 null 数据或者丢失数据的原因
    对地址和电话采用多个字段
    描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和 Address_Line3 可以提供更大的灵活性。还有,电话号码和邮件地址最好拥有自己的数据表,其间具有自身的类型和标记类别。

    过分标准化可要小心,这样做可能会导致性能上出现问题。虽然地址和电话表分离通常可以达到最佳状态,但是如果需要经常访问这类信息,或许在其父表中存放“首选”信息(比如 Customer 等)更为妥当些。非标准化和加速访问之间的妥协是有一定意义的。
    使用多个名称字段
    我觉得很吃惊,许多人在数据库里就给 name 留一个字段。我觉得只有刚入门的开发人员才会这么做,但实际上网上这种做法非常普遍。我建议应该把姓氏和名字当作两个字段来处理,然后在查询的时候再把他们组合起来。

    我最常用的是在同一表中创建一个计算列[字段],通过它可以自动地连接标准化后的字段,这样数据变动的时候它也跟着变。不过,这样做在采用建模软件时得很机灵才行。总之,采用连接字段的方式可以有效的隔离用户应用和开发人员界面。
    提防大小写混用的对象名和特殊字符
    过去最令我恼火的事情之一就是数据库里有大小写混用的对象名,比如 CustomerData。这一问题从 Access 到 Oracle 数据库都存在。我不喜欢采用这种大小写混用的对象命名方法,结果还不得不手工修改名字。想想看,这种数据库/应用程序能混到采用更强大数据库的那一天吗?采用全部大写而且包含下划符的名字具有更好的可读性(CUSTOMER_DATA),绝对不要在对象名的字符之间留空格。
    小心保留词
    要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突,比如,最近我编写的一个 ODBC 连接程序里有个表,其中就用了 DESC 作为说明字段名。后果可想而知!DESC 是 DESCENDING 缩写后的保留词。表里的一个 SELECT * 语句倒是能用,但我得到的却是一大堆毫无用处的信息。
    保持字段名和类型的一致性
    在命名字段并为其指定数据类型的时候一定要保证一致性。假如字段在某个表中叫做“agreement_number”,你就别在另一个表里把名字改成“ref1”。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。记住,你干完自己的活了,其他人还要用你的数据库呢。
    仔细选择数字类型
    在 SQL 中使用 smallint 和 tinyint 类型要特别小心,比如,假如你想看看月销售总额,你的总额字段类型是 smallint,那么,如果总额超过了 $32,767 你就不能进行计算操作了。
    删除标记
    在表中包含一个“删除标记”字段,这样就可以把行标记为删除。在关系数据库里不要单独删除某一行;最好采用清除数据程序而且要仔细维护索引整体性。
    避免使用触发器
    触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器,你最好集中对它文档化。
    包含版本机制
    建议你在数据库中引入版本控制机制来确定使用中的数据库的版本。无论如何你都要实现这一要求。时间一长,用户的需求总是会改变的。最终可能会要求修改数据库结构。虽然你可以通过检查新字段或者索引来确定数据库结构的版本,但我发现把版本信息直接存放到数据库中不更为方便吗?。
    给文本字段留足余量
    ID 类型的文本字段,比如客户 ID 或定单号等等都应该设置得比一般想象更大,因为时间不长你多半就会因为要添加额外的字符而难堪不已。比方说,假设你的客户 ID 为 10 位数长。那你应该把数据库表字段的长度设为 12 或者 13 个字符长。这算浪费空间吗?是有一点,但也没你想象的那么多:一个字段加长 3 个字符在有 1 百万条记录,再加上一点索引的情况下才不过让整个数据库多占据 3MB 的空间。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。身份证的号码从 15 位变成 18 位就是最好和最惨痛的例子。
    列[字段]命名技巧
    我们发现,假如你给每个表的列[字段]名都采用统一的前缀,那么在编写 SQL 表达式的时候会得到大大的简化。这样做也确实有缺点,比如破坏了自动表连接工具的作用,后者把公共列[字段]名同某些数据库联系起来,不过就连这些工具有时不也连接错误嘛。举个简单的例子,假设有两个表:
    Customer 和 Order。Customer 表的前缀是 cu_,所以该表内的子段名如下:cu_name_id、cu_surname、cu_initials 和cu_address 等。Order 表的前缀是 or_,所以子段名是:
    or_order_id、or_cust_name_id、or_quantity 和 or_descrīption 等。
    这样从数据库中选出全部数据的 SQL 语句可以写成如下所示:
    Select * From Customer, Order Where cu_surname = "MYNAME" ;
    and cu_name_id = or_cust_name_id and or_quantity = 1
    在没有这些前缀的情况下则写成这个样子(用别名来区分):
    Select * From Customer, Order Where Customer.surname = "MYNAME" ;
    and Customer.name_id = Order.cust_name_id and Order.quantity = 1
    第 1 个 SQL 语句没少键入多少字符。但如果查询涉及到 5 个表乃至更多的列[字段]你就知道这个技巧多有用了。
    第 3 部分 - 选择键和索引
    数据采掘要预先计划
    我所在的某一客户部门一度要处理 8 万多份联系方式,同时填写每个客户的必要数据(这绝对不是小活)。我从中还要确定出一组客户作为市场目标。当我从最开始设计表和字段的时候,我试图不在主索引里增加太多的字段以便加快数据库的运行速度。然后我意识到特定的组查询和信息采掘既不准确速度也不快。结果只好在主索引中重建而且合并了数据字段。我发现有一个指示计划相当关键——当我想创建系统类型查找时为什么要采用号码作为主索引字段呢?我可以用传真号码进行检索,但是它几乎就象系统类型一样对我来说并不重要。采用后者作为主字段,数据库更新后重新索引和检索就快多了。

    可操作数据仓库(ODS)和数据仓库(DW)这两种环境下的数据索引是有差别的。在 DW 环境下,你要考虑销售部门是如何组织销售活动的。他们并不是数据库管理员,但是他们确定表内的键信息。这里设计人员或者数据库工作人员应该分析数据库结构从而确定出性能和正确输出之间的最佳条件。
    使用系统生成的主键
    这类同技巧 1,但我觉得有必要在这里重复提醒大家。假如你总是在设计数据库的时候采用系统生成的键作为主键,那么你实际控制了数据库的索引完整性。这样,数据库和非人工机制就有效地控制了对存储数据中每一行的访问。
    采用系统生成键作为主键还有一个优点:当你拥有一致的键结构时,找到逻辑缺陷很容易。
    分解字段用于索引
    为了分离命名字段和包含字段以支持用户定义的报表,请考虑分解其他字段(甚至主键)为其组成要素以便用户可以对其进行索引。索引将加快 SQL 和报表生成器脚本的执行速度。比方说,我通常在必须使用 SQL LIKE 表达式的情况下创建报表,因为 case number 字段无法分解为 year、serial number、case type 和 defendant code 等要素。性能也会变坏。假如年度和类型字段可以分解为索引字段那么这些报表运行起来就会快多了。
    键设计 4 原则
    * 为关联字段创建外键。
    * 所有的键都必须唯一。
    * 避免使用复合键。
    * 外键总是关联唯一的键字段。
    别忘了索引
    索引是从数据库中获取数据的最高效方式之一。95% 的数据库性能问题都可以采用索引技术得到解决。作为一条规则,我通常对逻辑主键使用唯一的成组索引,对系统键(作为存储过程)采用唯一的非成组索引,对任何外键列[字段]采用非成组索引。不过,索引就象是盐,太多了菜就咸了。你得考虑数据库的空间有多大,表如何进行访问,还有这些访问是否主要用作读写。

    大多数数据库都索引自动创建的主键字段,但是可别忘了索引外键,它们也是经常使用的键,比如运行查询显示主表和所有关联表的某条记录就用得上。还有,不要索引 memo/note 字段,不要索引大型字段(有很多字符),这样作会让索引占用太多的存储空间。
    不要索引常用的小型表
    不要为小型数据表设置任何键,假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。
    不要把社会保障号码(SSN)或身份证号码(ID)选作键
    永远都不要使用 SSN 或 ID 作为数据库的键。除了隐私原因以外,须知政府越来越趋向于不准许把 SSN 或 ID 用作除收入相关以外的其他目的,SSN 或 ID 需要手工输入。永远不要使用手工输入的键作为主键,因为一旦你输入错误,你唯一能做的就是删除整个记录然后从头开始。

    我在破解他人的程序时候,我看到很多人把 SSN 或 ID 还曾被用做系列号,当然尽管这么做是非法的。而且人们也都知道这是非法的,但他们已经习惯了。后来,随着盗取身份犯罪案件的增加,我现在的同行正痛苦地从一大摊子数据中把 SSN 或 ID 删除。
    不要用用户的键
    在确定采用什么字段作为表的键的时候,可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。这样做会迫使你采取以下两个措施:
    * 在创建记录之后对用户编辑字段的行为施加限制。假如你这么做了,你可能会发现你的应用程序在商务需求突然发生变化,而用户需要编辑那些不可编辑的字段时缺乏足够的灵活性。当用户在输入数据之后直到保存记录才发现系统出了问题他们该怎么想?删除重建?假如记录不可重建是否让用户走开?
    * 提出一些检测和纠正键冲突的方法。通常,费点精力也就搞定了,但是从性能上来看这样做的代价就比较大了。还有,键的纠正可能会迫使你突破你的数据和商业/用户界面层之间的隔离。
    所以还是重提一句老话:你的设计要适应用户而不是让用户来适应你的设计。

    不让主键具有可更新性的原因是在关系模式下,主键实现了不同表之间的关联。比如,Customer 表有一个主键 CustomerID,而客户的定单则存放在另一个表里。Order 表的主键可能是 OrderNo 或者 OrderNo、CustomerID 和日期的组合。不管你选择哪种键设置,你都需要在 Order 表中存放 CustomerID 来保证你可以给下定单的用户找到其定单记录。
    假如你在 Customer 表里修改了 CustomerID,那么你必须找出 Order 表中的所有相关记录对其进行修改。否则,有些定单就会不属于任何客户——数据库的完整性就算完蛋了。
    如果索引完整性规则施加到表一级,那么在不编写大量代码和附加删除记录的情况下几乎不可能改变某一条记录的键和数据库内所有关联的记录。而这一过程往往错误丛生所以应该尽量避免。
    可选键(候选键)有时可做主键
    记住,查询数据的不是机器而是人。
    假如你有可选键,你可能进一步把它用做主键。那样的话,你就拥有了建立强大索引的能力。这样可以阻止使用数据库的人不得不连接数据库从而恰当的过滤数据。在严格控制域表的数据库上,这种负载是比较醒目的。如果可选键真正有用,那就是达到了主键的水准。
    我的看法是,假如你有可选键,比如国家表内的 state_code,你不要在现有不能变动的唯一键上创建后续的键。你要做的无非是创建毫无价值的数据。如你因为过度使用表的后续键[别名]建立这种表的关联,操作负载真得需要考虑一下了。
    别忘了外键
    大多数数据库索引自动创建的主键字段。但别忘了索引外键字段,它们在你想查询主表中的记录及其关联记录时每次都会用到。还有,不要索引 memo/notes 字段而且不要索引大型文本字段(许多字符),这样做会让你的索引占据大量的数据库空间。
    第 4 部分 - 保证数据的完整性
    用约束而非商务规则强制数据完整性
    如果你按照商务规则来处理需求,那么你应当检查商务层次/用户界面:如果商务规则以后发生变化,那么只需要进行更新即可。假如需求源于维护数据完整性的需要,那么在数据库层面上需要施加限制条件。如果你在数据层确实采用了约束,你要保证有办法把更新不能通过约束检查的原因采用用户理解的语言通知用户界面。除非你的字段命名很冗长,否则字段名本身还不够。

    只要有可能,请采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性;它不能保证表之间(外键)的完整性所以不能强加于其他完整性规则之上。
    分布式数据系统
    对分布式系统而言,在你决定是否在各个站点复制所有数据还是把数据保存在一个地方之前应该估计一下未来 5 年或者 10 年的数据量。当你把数据传送到其他站点的时候,最好在数据库字段中设置一些标记。在目的站点收到你的数据之后更新你的标记。为了进行这种数据传输,请写下你自己的批处理或者调度程序以特定时间间隔运行而不要让用户在每天的工作后传输数据。本地拷贝你的维护数据,比如计算常数和利息率等,设置版本号保证数据在每个站点都完全一致。
    强制指示完整性(参照完整性?)
    没有好办法能在有害数据进入数据库之后消除它,所以你应该在它进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。
    关系
    如果两个实体之间存在多对一关系,而且还有可能转化为多对多关系,那么你最好一开始就设置成多对多关系。从现有的多对一关系转变为多对多关系比一开始就是多对多关系要难得多。
    采用视图
    为了在你的数据库和你的应用程序代码之间提供另一层抽象,你可以为你的应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。
    给数据保有和恢复制定计划
    考虑数据保有策略并包含在设计过程中,预先设计你的数据恢复过程。采用可以发布给用户/开发人员的数据字典实现方便的数据识别同时保证对数据源文档化。编写在线更新来“更新查询”供以后万一数据丢失可以重新处理更新。
    用存储过程让系统做重活
    解决了许多麻烦来产生一个具有高度完整性的数据库解决方案之后,我决定封装一些关联表的功能组,提供一整套常规的存储过程来访问各组以便加快速度和简化客户程序代码的开发。数据库不只是一个存放数据的地方,它也是简化编码之地。
    使用查找
    控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找:国家代码、状态代码等。
    第 5 部分 - 各种小技巧
    文档、文档、文档
    对所有的快捷方式、命名规范、限制和函数都要编制文档。

    采用给表、列[字段]、触发器等加注释的数据库工具。是的,这有点费事,但从长远来看,这样做对开发、支持和跟踪修改非常有用。

    取决于你使用的数据库系统,可能有一些软件会给你一些供你很快上手的文档。你可能希望先开始在说,然后获得越来越多的细节。或者你可能希望周期性的预排,在输入新数据同时随着你的进展对每一部分细节化。不管你选择哪种方式,总要对你的数据库文档化,或者在数据库自身的内部或者单独建立文档。这样,当你过了一年多时间后再回过头来做第 2 个版本,你犯错的机会将大大减少。
    使用常用英语(或者其他任何语言)而不要使用编码
    为什么我们经常采用编码(比如 9935A 可能是‘青岛啤酒’的供应代码,4XF788-Q 可能是帐目编码)?理由很多。但是用户通常都用英语进行思考而不是编码。工作 5 年的会计或许知道 4XF788-Q 是什么东西,但新来的可就不一定了。在创建下拉菜单、列表、报表时最好按照英语名排序。假如你需要编码,那你可以在编码旁附上用户知道的英语。
    保存常用信息
    让一个表专门存放一般数据库信息非常有用。我常在这个表里存放数据库当前版本、最近检查/修复(对 FoxPro)、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库,当客户抱怨他们的数据库没有达到希望的要求而与你联系时,这样做对非客户机/服务器环境特别有用。
    测试、测试、反复测试
    建立或者修订数据库之后,必须用用户新输入的数据测试数据字段。最重要的是,让用户进行测试并且同用户一道保证你选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。
    检查设计
    在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说,针对每一种最终表达数据的原型应用,保证你检查了数据模型并且查看如何取出数据。
    Microsoft Visual FoxPro 设计技巧
    对复杂的 Microsoft Visual FoxPro 数据库应用程序而言,可以把所有的主表放在一个数据库容器文件里,然后增加其他数据库表文件和装载同原有数据库有关的特殊文件。根据需要用这些文件连接到主文件中的主表。比如数据输入、数据索引、统计分析、向管理层或者政府部门提供报表以及各类只读查询等。这一措施简化了用户和组权限的分配,而且有利于应用程序函数(存储过程)的分组和划分,从而在程序必须修改的时候易于管理。

  • 软件缺陷管理

    2008-06-13 15:00:53

    认识软件缺陷,首先要了解软件缺陷的概念,其次是了解软件缺陷的详细特征,最后就是它的属性了,再高一个层次就是学习利用管理软件缺陷的工具了。
    1、首先介绍软件缺陷的概念
    软件缺陷是指系统或系统部件中那些导致系统或部件不能实现其功能的缺陷。
    2、软件缺陷的详细特征
    a、单一准确
    b、可以再现(要求软件缺陷具有精确的步骤)
    c、完整统一
    d、短小简练
    e、特定条件
    f、补充完整
    g、不做评价
    3、软件缺陷的属性
    软件缺陷的属性包括缺陷标识、缺陷类型、缺陷严重程度、缺陷产生可能性、缺陷优先级、缺陷状态、缺陷起源、缺陷来源、缺陷原因。
    下面详细介绍一下以上这些属性:
    a、缺陷标识:是标记某个缺陷的唯一标识,可以用数字序号表示;
    b、缺陷类型:功能、用户界面、文档、软件包、性能、系统"模块接口
         功能:影响了各种系统功能、逻辑的缺陷;
         用户界面:影响了用户界面、人机交互特性,包括屏幕格式、用户输入灵活性、结果输入格式等方面的缺陷;
         文档:影响发布和维护,包括注释、用户手册、设计文档;
         软件包:由于软件配置库、变更管理或版本控制引起的错误;
         性能:不满足系统可测量的属性值,如执行时间、事务处理速率等;
         系统"模块接口:与其他组件、模块或设备驱动程序、调用参数、控制块或参数列表等不匹配、冲突。
    c、缺陷严重程度:致命(Fatal)、严重(Ceritical)、一般(Major)、较小(Minor)
        致命:系统任何一个主要功能完全丧失,用户数据受到破坏,系统崩溃、悬挂、死机或者危机人身安全;
        严重:系统的主要功能部分丧失,数据不能保存,系统的次要功能完全丧失,系统所提供的功能或服务受到明显的影响;
        一般:系统的次要功能没有完全实现,但不影响用户的正常使用。例如:提示信息不太准确或用户界面差、操作时间长等一些问题;
        较小:使操作者不方便或遇到麻烦,但它不影响功能过的操作和执行,如个别不影响产品理解的错别字、文字排列不整齐等一些小问题
    d、缺陷产生可能性:总是、通常、有时、很少
         总是:总是产生这个软件缺陷,其产生的频率是100;
         通常:按照测试用例,通常情况下会产生这个软件缺陷,其产生的频率大概是80—90;
         有时:按照测试用例,有时候产生这个软件缺陷,其产生的频率大概是30—50;
         很少:按照测试用例,很少产生这个软件缺陷,其产生的频率大概是1—5.
    e、缺陷的优先级:立即解决、高优先级、正常排队、低优先级
         立即解决:缺陷导致系统几乎不能使用或者测试不能继续,需立即修复;
         高优先级:缺陷严重,影响测试,需要优先考虑;
         正常排队:缺陷需要正常排队等待修复;
         低优先级:缺陷可以再开发人员有时间的时候被纠正。
    f、缺陷状态:激活或打开、已修正或修复、关闭或非激活、重新打开、推迟、保留、不能重现、需要更多信息
        激活或打开:问题还没有解决,存在源代码中,确认”提交的缺陷”,等待处理,如新报的缺陷;
        已修正或修复:已被开发人员检查、修复过的缺陷,通过单元测试,认为已经解决但还没有被测试人员验证;
        关闭或非激活:测试人员验证后,确认缺陷不存在之后的状态;
        重新打开:测试人员验证后,确认缺陷不存在之后的状态;
        推迟:这个软件缺陷可以在下一个版本中解决;
        保留:由于技术原因或第三者软件的缺陷,开发人员不能修复的缺陷;
        不能重现:开发不能再现这个软件缺陷,需要测试人员检查缺陷再现的步骤;
         需要更多信息:开发能再现这个软件缺陷,但开发人员需要一些信息,例如缺陷的日志文件、图片等。
    g、软件缺陷的起源:需求、构架、设计、编码、测试、用户
         在团建生命周期中软件缺陷占的比例:需求和构架设计阶段占54、设计阶段占25、编码阶段占15、其他占6.
    h、软件缺陷的来源:需求说明书、设计文档、系统集成接口、数据流(库)、程序代码
        需求说明书:需求说明书的错误或不清楚引起的问题;
        设计文档:设计文档描述不准确。和需求说明书不一致的问题;
        系统集成接口:系统个模块参数不匹配、开发组之间缺乏协调引起的缺陷;
        数据流(库):由于数据字典、数据库中的错误引起的缺陷;
        程序代码:纯粹在编码中的问题所引起的缺陷。
    i、缺陷根源:测试策略,过程、工具和方法,团队"人,缺乏组织和通讯,硬件,软件,工作环境
       测试策略:错误的测试范围,误解测试目标,超越测试能力等;
       过程、工具和方法:无效的需求收集过程,果实的风险管理过程,不使用的项目管理方法,没有估算规程,无效的变更控制过程等;
       团队"人:项目团队职责交叉,缺乏培训。没有经验的项目团队,缺乏士气和动机不纯等;
       缺乏组织和通讯:缺乏用户参与,职责不明确、管理失败等;
       硬件:硬件配置不对、缺乏、或处理器缺陷导致算术精度丢失,内存溢出等;
       软件:软件设置不对、缺乏,或操作系统错误导致无法释放资源,工具软件的错误,编译器的错误,千年虫问题等;
       工作环境:组织机构调整,预算改变,工作环境恶劣,如噪音过大。
    4、学会利用管理缺陷的工具
    例如TD、bugfree、bugzille等
  • 企业管理软件平台架构内幕揭秘

    2008-06-12 11:17:22

    企业管理软件,由于进入门坎低,各行各业各层次企业都需要,做面向企业应用比做面向个人应用要赚钱多,好销售,所以中国内地有相当大部分的程序员在从事着企业管理软件的开发。

    尤其是接项目的软件公司,这类公司往往在中国当前软件行业占很多。3-4个或5-6个程序员,老板拉来什么项目就做什么项目,进销存、费用报销、销售管理、客服维修工单、请假考勤管理等等为大部分单子内容。

    有朋友留言:就10来万的单子,就1-2个程序员,从调研到设计到开发到测试到打包到实施安装到培训到推动上线到支持,全活儿。哪来的精力再去开发平台。再说了,都是10来万的单子,开发平台就大才小用了,什么设计模式,什么OO,什么界面和代码分离,什么代码重构,都扯淡,往界面拖控件,用ADO连数据库,OK。费那精神干嘛,把钱快速赚到才是真理。

    其实,你发现没,你做的管理软件(叫它MIS也行,你爱戴高帽就叫它ERP)有一些东西都挺相似。我有个专门给小企业做网站的哥们,5天一个网站。他手里面从免费邮箱服务器、BBS论坛、流量统计软件、网站新闻内容管理系统全从网上找好源代码,各种图标图片素材库,机器上装好Dreamweaver、PhotoShop、Flash。小企业老板来了,他把过去做的案例往出一拿,你挑吧。然后七凑八凑几天完工。

    这是不是平台呢?

    我们为什么需要平台?我们需要什么样的平台?平台应该包括哪些东西?一个完备的平台是怎样的?

    带着这些问题,我们一一揭秘。

    拿我哥们刚才的例子剖析。我个人认为那就是一个平台。我们为什么需要平台?就是为了不每次都重新发明轮子,为了能快速的完成代码工作(可以多赚点钱或者可以多打会游戏或者瞌睡或者可以多时间去泡MM)。

    快速完成,是平台的第一目标。但是快速三下五除二干完了,去客户那里一跑,BUG百出,倒霉,还得熬夜修改,长期出差回不了家。修改代码,痛苦,还不如推倒重新正式写代码。

    看来,平台的第二个目标必须是稳定。

    既能快速开发,又能稳定,这是个好平台了吧。

    不,客户个性化需求来了,发现真难改。按照普通简单流程处理(增/删/改/查 列表/明细),确实平台能给很大帮助,但是客户一个性化,平台就不灵了,个性化代码怎么都插不进去手。平台自成一套圈子,外围异常代码根本插不进去(这是现在很多号称平台的产品都共有的最大弊病)。

    好不容易遇到个好个性化定制的平台,平台性能不佳,老挂机,客户的电话吼的真想把电话线拔掉,甚至幻想全公司电话和互联网和自己的手机都坏了。

    终于搞定以上的所有问题,给客户安装上,培训好,推动上线,终于可以闪人了。回到自己的床上,真舒服呀。

    没想到恶梦才刚刚开始。客户的电话来了:我发现报表不对呀,数对不上去,你看哪里出问题了?

    O,My God。我刚回来,你就...。 我又不能飞过去。好吧,好吧,你有QQ或PcAnyWhere吗,我们来连一下,我给查一下数据库。什么?服务器不容许上网?那我怎么办?

    看来需要一个排错、可跟踪、可输出详细日志、可过滤日志的东西,就像SQLSERVER的查询跟踪器一样。

    嗯,好不容易把问题搞定,修改完代码,需要给客户升级。

    什么,你们家没有网管,都是兼职的,根本不会SQLSERVER,脚本怎么执行,怎么备份,不知道?

    算我倒霉,电话我告诉你一步步操作。(长途电话费N多,老板冲你发火,你低头不语,心里念到这个猪头)

    什么?升级了也不好用?那你肯定没按我说的操作来。

    什么?有的机器好用,有的机器不好用?你肯定没有把所有客户端都升级了。

    哦,看来需要一个自动升级的模块。

    挖咔咔,软件卖的好好哦。咿呀咿呀咿。可是,可是...。居然有家伙盗版使用我们的软件,看来我不加密不行了。

    加密,加KEY,加并发用户数,加正版判别,加使用期过期。

    嗯,终于天下太平了,抱得美人归。

    从以上来看,我们似乎并不是为了平台而平台,为了市场宣传和销售便利而做平台噱头。我们确实在多如牛毛的小项目的水深火热战火纷飞中,我们渴望有这些东西将我们快速解脱。如果我们是开发中大型系统的,我们的产品需要延续生命周期8-10年,需要部署给成千上万的客户,客户需要管理几亿的关键数据,有几千个客户并发,我们更需要平台。

    所以,不管做小项目的,或者做大项目的,我们都需要平台。

    那我们需要什么样的平台。其实上述的场景中已经把平台的关键特性都说了一遍,现在我总结一下:

    1可以帮助开发人员快速开发

    2稳定

    3可以个性化定制

    4可以跟踪日志排错

    5可以自动升级

    6软件版权保护

    为了做到这些,国内软件精英不知有多少人前赴后继的的投入研究(甚至做OA的,做工作流的,也号称做平台)。让我们历数历数,看看各自的特点和优缺点,以对照一下我们需要的特性,他们的平台具备不?

    大连雅奇,95年我就知道它了。当时好像是Foxbase版本的。可以生成菜单、界面代码。其他的我现在忘了。不过去年CSDN还报道了一次大连雅奇

    1报表打印,支持二维、交叉、套打、单据格式、多栏头、导出HTML、PDF、EXCEL、DBF肯定是必须的。计算公式有没有?变量有没有?代码调用API有没有?嵌入图表有没有?小分组合计行不行?最底最右的总合计有没有?支持不支持主从?支持不支持链接钻取?

    2图表 当然支持折线、直方、饼图。不知道EXCEL所能支持的图表,它是否都能支持,而且像EXCEL一样好看。漏斗图有没有,里程图有没有?做领导报表(可以起名为管理驾驶舱或商业智能门户)时非常需要。

    3控件 可分组、可过滤、可定制查询、可定制列视图、可多排序、可导出、可预览、可小计的Grid控件有没有?可以权限管制行列数据,定制列视图的参照录入控件有没有?日历控件有没有?财务凭证控件有没有?

    4企业内部即时通讯模块、邮件收发模块、预警提醒模块有没有呢?

    其实,这是在企业应用中极为常见的一些公共功能。有一部份朋友给我QQ留言,他说平台架构就是:中间件+Hibernate(ORM框架)+structs(MVC框架)+spring(AOP框架)+JSF控件(UI框架)+Log4j(日志框架)+JUnit(测试框架)+Ant(Build框架)+JasperReports(报表框架)+JFreeChart(图表框架)+osWorkFlow(工作流框架)。

    我说对,这是平台架构,但不是企业管理软件的平台架构。企业管理软件的平台架构需要更上一层,能方便开发人员快速稳定的开发和修改。

    大连雅奇能一直存活到如今,从各方面看虽已跟不上未来,但目前很多小软件公司和小企业还在进行着初步的信息化,所以还是有很多的市场空间的。(我看到华军软件里有人发布的所谓强大平台,一下载一看,原来是一个数据库维护软件,让人尴尬,但是还有大量的个人或2人工作室在不断奋斗制造着这类软件,我已经看到了很多雷同的软件了,也有市场?可能)。

    讲完最老的大连雅奇,在企业管理软件平台界,最有名的就数思维加速(现在改名起步)。起步从1999年开始起步,技术一直跟的很紧,做的也非常深入,我个人认为,起步是做企业管理软件平台最优秀的一个。

    1 起步加入了工作流,非常适应时代

    2加入了集团企业多组织结构,非常适应时代

    3起步有数据库建模工具,有版本管理工具,有部署工具,报表、图表自不用说。居然还有甘特图和日历,还有即时通讯工具

    4起步拥有自己研发的代码开发IDE。这是国内没有的。老宋为了解决常规平台自我封闭无法定制的诟病下了很大的气力,让简单开发和个性定制融合。

    5能支持JAVA中间件,也能支持COM+,能WEB,也能C/S。这也是国内没有的。

    IDE,既是起步的杀手功能,也是起步的软肋(想起一句古龙的话:敌人的优点也就是他的缺点)。IDE这个东西,世界有三巨头:Eclipse、visual studio、Borland。大家都是干软件的,大部分都是选择这三类IDE,对这三类IDE很是习惯。但是现在要舍弃三巨头,用了起步的平台,就需要用起步的IDE,而且IDE还没有三巨头做的好(要想做好,谈何容易。君不见Eclipse有IBM巨资推动,visual  studio更是微软的一个重要产品线,投入大量人力。如果起步也要做,那岂不是平台、IDE、工作流都要并进?要知道,这三块中的每一块,都是需要单独一个公司,而且是相当实力的公司才能做好)。

    于是,上海普元学乖了。IDE,我们就用Eclipse。

    当然,还是老三套:控件+工作流+报表。

    普元的平台框架有组织结构管理(不知道是否支持区域管理组织和集团管理组织?)、部署工具、权限管理(这个非常重要,不知道能不能管理到业务实体的每一个操作和数据行列可访问性?)、业务字典管理(这个没必要单提出来吧?运行参数的配置才是最重要的)。不过普元具备了日志、异常、定制任务。更难能可贵的是,普元还提出了Cache机制(这个在企业管理软件领域中其实挺难。它不像咱们的通常论坛网站,如天涯,也并发量大需要Cache,但是天涯也仅仅是看,而企业管理软件主要是频繁读写和业务计算处理,这怎么Cache,我也需要学习学习,过去一直主要依赖数据库设计和代码写法和功能设计来保证性能)。

    普元做JAVA,金富瑞就做.NET。

    三大件继续拿上来:控件+工作流+报表。

    但很可贵的是,金富瑞提出了虚拟组织这一说法。这个确实老遇到。还有就是权限管理,从菜单到数据到列到行到按钮,控制的挺细,不过细就是多,多就会漏洞多,看来金富瑞需要深刻去思考一下数据库架构的设计。

    这些都是专注做平台的。

    但是,那些主要做管理软件的公司,也有自己的平台。甚至自己的平台还卖。如浪潮楼上(不过山东人的朴实与粗糙,尽在软件中)。

    自己用的平台,东软也有,但没有对外宣传,也不卖。偷偷自己用,做了N多医保、税务局之类的项目。(我曾经剖析的时候,发掘设计的思想和金蝶K3的平台特别相似)

    用友、金蝶这两大企业管理软件公司当然也有自己的平台。用友有U8平台和NC平台,金蝶有K3和EAS平台。不过,明显的是,金蝶的平台架构思路比用友高一级。从业务实体自省到权限控制到日志到二次开发,金蝶颇有套路,思路清晰抽象高度。而用友的平台,似乎还看业务是业务,看菜单是菜单。

    讲了这么多,几乎主流的平台厂商我都数了个遍,当然从事各细分行业管理软件的公司也都有自己的平台,只不过那类平台和本行业业务又结合的特别紧密,开发自己行业软件特别快速稳定易用,但不具有普遍意义。

    我把我在上一篇文章中写的企业管理软件平台架构内容再贴到最后,以使大家好总览:

    1登陆用户口令验证、license许可验证、盗版验证、过期失效验证、版本差异验证

    2主控台 用户功能树 管理主控台

    3表单设计器、业务实体设计器、工作流设计器、报表设计器、功能菜单设计器、多语言设计器、多皮肤设计器、查询过滤定制器

    4UI框架:Grid/Toob bar/Tree/TabSheet/Menubar/参照录入组件/Edit/Button/Combo之类

    5单实体输入框架、主从List/Detail输入框架

    6运行配置参数设置、单号计数器、业务预警设置

    7异常框架、业务实体权限框架、业务实体存储引擎、业务实体查询引擎

    8报表:套打、单据报表、普通二维查询统计报表、交叉报表、图表

    9工作流引擎、消息引擎、自动任务引擎

    10企业组织结构设计工具、权限分配工具、数据导入导出工具、数据备份恢复工具、升级更新工具、错误诊断跟踪工具、性能监测工具、日志查看工具

    11OFFICE集成、BO集成、通信集成、邮件集成、短信集成、IM集成、搜索集成、电子商务集成、企业门户集成等等一切外围集成

Open Toolbar