发布新日志

  • 软件测试面试题

    jiang8640 发布于 2010-01-05 09:48:36

    01. 为什么要在一个团队中开展软件测试工作?
      因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。

    02. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
      我曾经做过web测试,后台测试,客户端软件,其中包括功能测试,性能测试,用户体验测试。最擅长的是功能测试

    03. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同04. 的测试类型的区别与联系(如功能测试、性能测试……)
      测试类型有:功能测试,性能测试,界面测试。
      功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
      性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
      界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
      区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试

    04.您认为做好测试用例设计工作的关键是什么?
    白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
    黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题


    05.     请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。

      黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
      白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。

      软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
      1、是否有不正确或遗漏的功能?
      2、在接口上,输入是否能正确的接受?能否输出正确的结果?
      3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
      4、性能上是否能够满足要求?
      5、是否有初始化或终止性错误?

      软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
      1、对程序模块的所有独立的执行路径至少测试一遍。
      2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
      3、在循环的边界和运行的界限内执行循环体。
      4、测试内部数据结构的有效性,等等。

      单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

      单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。

      集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。

      系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)

      系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。

      验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。

    06. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
      软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
    测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)

    07. 您认为做好测试计划工作的关键是什么?
      1. 明确测试的目标,增强测试计划的实用性
      编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
      2.坚持“5W”规则,明确内容与过程
      “5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
      3.采用评审和更新机制,保证测试计划满足实际需求
    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
      4. 分别创建测试计划与测试详细规格、测试用例
      应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

    08. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
      1.等价类划分
      划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

      2.边界值分析法
      边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

    3.错误推测法
      基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.

    4.因果图方法
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.

    09. 请以您以往的实际工作为例,10. 详细的描述一次测试用例设计的完整的过程。
      就说最近的这次网站功能的测试吧
      首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后,想好测试策略(测试计划简单点就OK了),考虑到测试环境,测试用例,测试时间等问题。
      第二步:设计测试用例,测试策略是:把网站部分的功能点测试完,然后在进行系统测试(另外个模块呢有另一个测试人员负责,可以进行联调测试),网站模块的测试基本是功能测试和界面测试(用户并发的可能性很小,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录,如果表中某一数据记录中新加进来的(还没有被处理的,有个标志位),网站启动后会立刻去刷那张表,得到多条数据,然后在进行处理。处理过程中,会经历3个步骤,网站才算完成了它的任务。有3个步骤呢,就可以分别对  这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据,用户的输入等),得出了差不多50个用例。界面测试,也就是用户看的到的地方,包括发送的邮件和用户填写资料的页面展示。
      第三步:搭建测试环境(为什么这个时候考虑测试环境呢?因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了),因为网站本身的环境搭建和其他的系统有点不同,它需要的测试环境比较麻烦,需要web服务器(Apache,tomcat),不过这次需求呢,网站部分只用到了tomcat,所以只要有tomcat即可
      第四步:执行测试

    11. 您以往是否曾经从事过性能测试工作?如果有,12. 请尽可能的详细描述您以往的性能测试工作的完整过程。
      是的,曾经做过网站方面的性能测试,虽然做的时间并不久(2个月吧),当时呢,是有位网站性能测试经验非常丰富的前辈带着我一起做。
    性能测试类型包括负载测试,强度测试,容量测试等
      负载测试:负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
      强度测试: 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况
      容量测试:确定系统可处理同时在线的最大用户数  
      在网站流量逐渐加大的情况下,开始考虑做性能测试了,首先要写好性能测试计划,根据运营数据得出流量最大的页面(如果是第一次的话,一般是首页,下载页,个人帐户页流量最大,而且以某种百分比),

      Web服务器指标指标:
      * Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;
      * Successful Rounds:成功的请求;
      * Failed Rounds :失败的请求;
      * Successful Hits :成功的点击次数;
      * Failed Hits :失败的点击次数;
      * Hits Per Second :每秒点击次数;
      * Successful Hits Per Second :每秒成功的点击次数;
      * Failed Hits Per Second :每秒失败的点击次数;
      * Attempted Connections :尝试链接数;  

    13. 您在从事性能测试工作时,14. 是否使用过一些测试工具?如果有,15. 请试述该工具的工作原理,16. 并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。

    17. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?

    18. 在您以往的工作中,19. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

    20. 您以往所从事的软件测试工作中,21. 是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,22. 请结合该工具描述软件缺陷(Bug)跟踪管理的流程。

    23. 您认为在测试人员同24. 开发人员的沟通过程中,25. 如何提高沟通的效率和改善沟通的效果?维持测试人员同26. 开发团队中其他成员良好的人际关系的关键是什么?

    27. 在您以往的测试工作中,28. 最让您感到不29. 满意或者不30. 堪回首的事情是什么?您是如何来对待这些事情的?

    31. 在即将完成这次笔试前,32. 您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面)

    33.        你对测试最大的兴趣在哪里?为什么?
      最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
      刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
      不到一年半的测试工作中,当时的感动和热情没有减退一点(即使环境问题以及自身经验,技术的不足,做测试的你一定也能理解)。
      我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
      第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。

    34. 你的测试职业发展是什么?
      测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。

    35. 你自认为测试的优势在哪里?
      优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本技能我有信心在工作中得以发挥。

    36. 你以前工作时的测试流程是什么?
      公司对测试流程没有规定如何做,但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结,吸取同行的方法)后的流程吧。需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)。

    37. 当开发人员说不38. 是BUG时,39. 你如何应付?
      开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。

    23.你为什么想离开目前的职务?
      因为公司运作情况并不理想,公司需要调整部门体系,公司考虑到缩减部门人员,所以大批量的裁员(有6,7个),这是我的第一份工作,对公司也有较深的感情,因为在这里我找到了职业理想(就是测试),所以公司需要精简人员,我自愿退出。虽然很舍不得,但我将会有新的发挥能力的舞台。

    24:你对我们公司了解有多少?

    25:你找工作时,最重要的考虑因素为何?
      工作的性质和内容是否能让我发挥所长,并不断成长。

    26:为什么我们应该录取你?
      您可以由我过去的工作表现所呈现的客观数据,明显地看出我全力以赴的工作态度。

    27:请谈谈你个人的最大特色。
      我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。

    28.白箱测试和黑箱测试是什么?什么是回归测试?

    29。单元测试、集成测试、系统测试的侧重点是什么?

    30。设计用例的方法、依据有那些?

    31。一个测试工程师应具备那些素质和技能?

    32.集成测试通常都有那些策略?

    33.你用过的测试工具的主要功能、性能及其他?

    34.一个缺陷测试报告的组成

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

    36.软件测试项目从什么时候开始,?为什么?

    37.需求测试注意事项有哪些?

    38.简述一下缺陷的生命周期

    39.测试分析测试用例注意(事项)?
      你在你所在的公司是怎么开展测试工作的?是如何组织的?
      你认为理想的测试流程是什么样子?
      你是怎样工作的?
      软件测试活动的生命周期是什么?
      请画出软件测试活动的流程图?
      针对缺陷采取怎样管理措施?
      什么是测试评估?测试评估的范围是什么?
      如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么?
      测试结束的标准是什么?
      软件验收测试除了alpha,beta测试以外,还有哪一种?
      做测试多久了?
      以前做过哪些项目?
      你们以前测试的流程是怎样的?
      <答:测试计划-测试用例设计-测试执行-测试分析报告>
      用过哪些测试工具?
      为什么选择测试这行?
      <答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更难>
      为什么值得他们公司雇用?
      如果我雇用你,你能给部门带来什么贡献?
      如何从工作中看出你是个自动自觉的人
      你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
      通常你对于别人批评你会有什么样的反应
      如果明知这样做不对,你还会依主管的指过去做吗
      如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
      你觉得什么样的人最难相处
      为什么值得他们公司雇用?
        帮助公司提高软件质量和测试部门的技术水平
      如果我雇用你,你能给部门带来什么贡献?
        分享我的测试经验和测试技能,提高测试部门技术水平
      如何从工作中看出你是个自动自觉的人
               自动自觉范围太广
            1. 工作成果
            2. 工作质量 
      你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
        在有足够的资源和合理的工作量的情况下,完全可以按时完成,并能比一般人做的更好
      通常你对于别人批评你会有什么样的反应
        有错即改,无措勉之

      如果明知这样做不对,你还会依主管的指过去做吗
        在公司内部下级是否有申诉渠道?

      如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
        为什么抱怨?是怎么样的问题?
        如果是客服问题,提交客服部门解决
        如果是质量问题,分析原因,下一版本改进
      你觉得什么样的人最难相处
        自以为是的人

      什么叫单元测试?
        请就软件测试人员应该具备什么样的基本素质说说你的看法。

      请就如何在开发中进行软件质量控制说说你的看法
       简述软件测试的意义,以及软件测试的分类

    1、功能测试,性能测试,界面测试,安全测试(可以简单点,比如只涉及到COOKIES里的内容),压力测试(商业性质的网站) 等等,B/S软件也要根据其具体功能采用不同的测试策略。
    2、态度、责任心、自信、敏锐的观察力、良好的发散思维
    3、先设计后开发模式,加强单元测试,加强代码走查,有一套完整的白盒测试方法。关键是加强开发人员的质量意识,增进程序员向工程师水平发展。
    4、意义嘛,就自己想吧。软件测试的分类,这个很多人都按各种方法去分。无明确答案给你。

    对测试的理解——基本的测试知识,对测试是否认可? 75。
          3、谈一谈过去自己的工作——了解经历、提供进一步提问的素材,表达能力  
    测试技能
    测试设计的方法并举例说明——测试技术的使用
    测试工具——熟悉程度,能否与当前工作匹配?
    如何做计划?如何跟踪计划?——日常工作能力
    如果开发人员提供的版本不满足测试的条件,如何做?——与开发人员协作的能力
    熟悉unix系统、oracle数据库吗?——是否具备系统知识
    做过开发吗?写过哪些代码?——开发技能
    阅读英语文章,给出理解说明?——部分英语能力
    文档的意义——是否善于思考?(最简单的概念,不同层次的理解)
    假如进入我们公司,对我们哪些方面会有帮助?——讲讲自己的特长
    随便找一件物品,让其测试——测试的实际操作能力
    软件测试的方法有?
    软件测试的过程?
    有一个新的软件,假如你是测试工程师,该如何做?

    软件测试分哪两种方法?分别适合什么情况?
    2。一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。
    3。软件测试的类型有那些?分别比较这些不同的测试类型的区别与联系。
    4。测试用例通常包括那些内容?着重阐述编制测试用例的具体做法
    5。在分别测试winform的C/S结构与测试WEB结构的软件是,应该采取什么样的方法分别测试?他们存在什么样的区别与联系?
    6。在测试winform的C/S结构软件时,发现这个软件的运行速度很慢,您会认为是什么原因?您会采取哪些方法去检查这个原因?
    7。描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程
    你在五年内的个人目标和职业目标分别是什么?
      分析这个问题是用来了解你的计划能力的,通过这个问题,面试人同时还可以知道你的目标是否符合企业对你的安排。
      错误回答我想在将来的某个时候考虑这个问题。如今企业的领导者更换频繁,我认为做太多的个人计划是荒谬可笑的,不是吗?
      评论这种回答属于令人反感的一类。首先,当有人想了解你的目标时,"将来的某个时候"这种通俗说法并不奏效。其次,认为企业很脆弱,领导者更换频繁,这种说法毫无疑问会令人反感,而且也是不合理的。最后,认为做计划可笑,看不起这个问题,而且反问面试人,这些都注定了这样的求职者最终会失败。
      正确回答从现在起的五年之内,我希望能够在一个很好的职位上待几年,而且最好有一次晋升,然后就期待着下一步。不管是向上提升,还是在企业内横向调动,对我个人来说,我希望找到一家企业——一家愿意做相互投入的企业——待上一段时间。
      评论这个问题没有回答得过分具体(那样可能会产生漏洞),而且它表明你有雄心,并且思考过在企业中的成长方式。通过表达横向调动和向上提升的愿望,表明你是一个有灵活性的人。
     问题23 你怎样做出自己的职业选择?
      分析 面试人提出这个问题是为了了解求职者的动机,看看他(她)应聘这份工作是否有什么历史渊源,是否有职业规划,是不是仅仅在漫无目的地申请很多工作。
      错误回答 我一直都想在企业界工作。自孩提时代起,我就梦想自己至少也要成为大企业的副总裁。
      评论 除了难以令人相信之外,这种回答还存在一个问题:它表明求职者会对副总裁以下的职位不感兴趣。
      正确回答 在上大学四年级前的那个夏天,我决定集中精力在某一领域谋求发展。尽管我是学商业的,但是我不知道自己最终会从事哪一行业的工作。我花了一定的时间考虑自己的目标,想清楚了自己擅长做的事情以及想从工作中得到的东西,最后我得出了一个坚定的结论,那就是这个行业是最适合我的。
      评论 这种回答表明,求职者认真地做过一些计划,缩小了自己的关注点,而且也认准了前进的方向。这种回答还表明,求职者理解个人职业规划的重要性,并且有能力做出认真的个人决策。
    1. 你都用什么测试方法
    2.怎么编写案例
    3.怎么才能够全面的测试到每一个点
    1. 你都用什么测试方法
    针对不同的产品或者系统或者模块,有不同的测试方法。总体而言有白盒测试和黑盒测试。
    2.怎么编写案例
    案例的编写与测试阶段的定义有很大的关系。系统测试和unit测试的案例可能不同。总体而言测试案例根据系统的需求而定。
    3.怎么才能够全面的测试到每一个点
    测试的全面性主要需要在设计测试计划的时候考虑,从测试策略,产品需求等等多个角度考虑从而定义全部的测试点。
    1、谈谈软件测试技术,以及如何提高
    2、谈谈软件测试职业发展,以及个人的打算
    3、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈
    有可能清晰的思路比确切的答案更重要
    在这里,主要说下笔试和面试的问题,希望大家共同参考。
           1,一般公司里实际的软件测试流程是什么样的?你们公司又是怎样的?
           2,软件工程师要具有那些素质?
           3,你会哪些测试工具?怎么操作?
           4,你能不能说下你的3到5年的职业计划(规划)
           5,你觉得你来应聘有那些优势?
    其余的还好说,但就第4个问题,我感到不好说哦!希望大家给个意见
    第一关:首先要自我介绍,自己的性格怎么样,目前的工作经历积累了一些什么经验取得了些什么值得一说的成果。然后要说说对软件测试怎么看?还有对于软件测试有什么自己的想法。为什么会想到要做这行(因为我的简历上的工作经历没有关于测试方面的)。哦,还有期望薪资。
    第二关:认为软件测试人员所要具备的基本素质,如果遇到问题会怎样处理,如果得不到研发人员的配合(就是研发说这个不是问题)你又会怎么处理?然后就是一些基本概念,比如软件测试的流程有哪些?如果我上任了,首先会怎么开始自己的工作计划。
    (前两关通过了后面这个就好过多了)
    第三关:像我介绍了一下公司的情况,告诉我主要针对什么内容的测试,会不会使用数据库。告诉我大概要做哪些内容,详细的可以上岗以后慢慢熟悉。
    大概就这么多了,这对没有经过这一关的不知道有没有帮助,仅供参考吧
    我觉得就像李波说的,关键是要给对方留下好印象:)

    面试官最后会问你有什么问题要问吗。作为应聘者的你一般不要说没问题问,这会给面试官留下你不太重视这份工作的坏印象。所以如果你想得到这份工作的话应该抓住这最后的表现自己的机会:
    你可以问:
    1.           贵公司近期和远期的发展目标是什么?
    2.           贵公司的主要竞争对手有哪些?
    3.           贵公司有多少开发人员有多少测试人员?
    4.           贵公司又进一步扩充测试人员的计划吗?
    5.           如果我有幸能进入贵公司的话,我有怎么样的发展?
    6.           测试人员的沟通能力很重要,贵公司有规范的沟通渠道吗?
    7.           请介绍一下贵公司的福利情况。
    8.           请问我什么时候能知道结果?

  • 思考,如何突破测试的职业瓶颈

    allenzgw 发布于 2010-02-03 10:31:22

      其实,工作这么久了,但是一直感觉,有个约束套在自己的身上,当自己是个小Test Engineer的时候,想的是如何做Test Lead,当梦想成真了,想的就是Manager了,再之后,在管理岗位上换来换去,其实,对manager的需求,已经不那么在乎,更在乎的是钱了,希望工资越高越好。然后当工资基本还算满意的时候,发现,再想突破自己,越来越难了。

       怎么突破呢,仔细想很久,后来看了写人力资源的文章才略有所悟。他们将职业瓶颈细分了:“一是职位的上升瓶颈,这是我们最常见的理解;二是薪资的上升瓶颈;三是能力和素质的提高瓶颈。”然后发现,其实,这是个瓶颈三角形,你需要完全平衡的突破三角形三个边的长度,才能增大这个三角行的面积。如果仅仅是某一条边或者两条边的突破,就会有风险的存在,很不稳健,换个环境很可能就导致你的下滑。

       因为基本情况下,职位和薪水是基本上由别人由公司或者有整个社会环境调控的,这方面,我们不太好直接的改变,而“能力”这条边,却可以自己主管能动的改变。所以最好的方式是通过提升自己的能力,突破能力瓶颈,再来突破另外两个瓶颈。 具体怎么突破能力瓶颈呢?能力我觉得包括两方面:1、知识本身(理论上的知识) 2、实践而产生的经验和技巧(这个是建立在理论知识之上的,这也是为什么好多公司招聘要求有几年某方面经验的原因)。所以,我们的提升也是从这两方面,首先,自学理论,比如学习Oracle, Linux,比如去考OCA, RHCE认证。比如QTP, LR,自动化测试的能力等等。再之后,再去找能够锻炼这方面能力的机会,本公司没有,就换公司呗。为了未来打基础么。因为已经有了理论基础,很多公司还是会考虑接受的。

    其实,说到换工作,这个过程还是有痛苦的,因为,大部分人不勇于舍弃现在已有的,追寻自己想要的。因为舍弃,是痛苦的,因为曾经强烈的拥有着。

    回过头来在想一想,其实,我们陷入这个瓶颈之中的人也是可悲的,因为,我们追求的不是幸福本身,而是幸福的外显,是money, 是position, 是capability,是fame,是别人眼中的幸福,而不是自我的enjoy,不是对技术的热爱,不是生命本身带给我们带来的感动。

  • 小布老师LR系列培训视频-测试工具概述兼LoadRunner介绍

    sixsigmay 发布于 2008-11-19 16:34:55

     

    第一讲:http://www.boobooke.com/v/bbk1046

    内容:

    1   性能测试重要意义

    2   典型的企业信息系统

    A.客户端 B.网络 C.应用服务器(中间件) D.数据库服务器

    3   性能测试的原理---客户端和服务器端的通讯包、协议

    4   性能测试工具解决的问题

         提供压力产生的手段

    能够对被测试的后台系统进行监控

    能够对产生的压力数据进行分析,帮助测试人员容易的找出被测系统的瓶颈

    5   产生压力

         压力产生的手段是通过多进程/多线程(Multiple processes/threads)的方式实现

         每个请求,以测试脚本的形式出现

    6   性能工具体系结构

         脚本产生器VuGen  压力机Load generator    控制机Control   分析机Analysis

    7)      性能测试步骤

    录制/编写测试脚本

    初步施压,调试测试脚本

    进行压力测试,搜集测试结果数据

    分析测试结果数据,找出系统的瓶颈和问题

    调整系统,重复第34步骤

     

    第二讲:http://www.boobooke.com/v/bbk1047

    内容:

    1   录制测试脚本的方法

         a.sniffer的方法:利用以太网的广播特性

         b.proxy的方法   Charles录制器

    2   录制的脚本的特点

         一连串请求的通讯命令:发->->->---

         没有分支判断

         往往需要做关联和其它处理(检查点---

     

    第三讲:http://www.boobooke.com/v/bbk1048

    内容:

    1   为什么关联很重要  correlation

         动态数据 脚本需要修改   recorded dynamic data must be correlated using parameters

    2   关联的例子

    3   需要关联的数据的特征

         数据是从客户端发往服务器端时出错

         这些数据是由服务器产生的,事先发给客户端的

    4   常见的需要关联的情景

         登录操作    超文本传输协议-HTTP

         先查后修改,先查后删除

         并发控制:防止两个用户同时修改或者删除同一条记录

    5   如何判断一个交易执行成功?

         可以在不同的层次上判断是否成功?

    l          TCP层:建立了TCP连接,而且有数据通讯发生

    l          HTTP层:发出的HTTP请求,返回代码是200/300系列

    l          应用层:插入交易把记录正确的插入到数据库中的表里面。修改交易正确的修改了数据库里面的记录。删除交易正确的删除了记录

    以应用层的判断为主

    6   监控后台系统

         目前成熟的软件都有管理接口,这些接口是性能测试工具监控的主要途径。

         常见的管理接口:SNMP, JMX, WEB

         监控分为: 有代理的无代理两种类型

         可以编写一个测试脚本,到后台取得被监控的信息

    7   LoadRunner的组成部分

         脚本生成器VuGen: virtual user generator

         压力控制器Controller, license主要在这里控制

         结果分析软件analysis

         压力机load generator

    8   其它性能测试工具

    9   性能测试工具目前的特点

    10)国内性能测试存在的问题

    11)性能测试需要注意的问题

    在性能测试之前,需要详细了解被测系统的技术特点,进行技术验证工作(POC: Proof of concepts

    通讯数据加密是性能测试面临的很大的问题

    性能测试过程中,开发人员一定要全程参与,随时和测试人员一起解决技术底层和细节问题

     

    第四讲:http://www.boobooke.com/v/bbk1055

    内容:

    1)      简单使用

     

  • 与测试相关的网站(转载)

    fsyj000 发布于 2007-10-07 15:00:43

    http://bdonline.sqe.com/   一个关于网站测试方面的网页,对这方面感兴趣的人可以参考
    ^Rl&n,GW^\R117006http://citeseer.nj.nec.com/   一个丰富的电子书库,内容很多,而且提供著作的相关文档参考和下载,是作者非常推荐的一个资料参考网站
    u[yd?+w9{E117006http://groups.yahoo.com/group/LoadRunner   性能测试工具LoadRunner的一个论坛 51Testing软件测试网3jH IB#p3O
    http://groups.yahoo.com/grorp/testing-paperannou-nce/messages   提供网站上当前发布的软件测试资料列表 51Testing软件测试网-YA:S3U!A2n
    http://satc.gsfc.nasa.gov/homepage.html   软件保证中心是美国国家航天局(NASA)投资设立的一个软件可靠性和安全性研究中心,研究包括了度量、工具、风险等各个方面 51Testing软件测试网Fgw$l fh9o
    http://seg.iit.nrc.ca/English/index.html   加拿大的一个研究软件工程质量方面的组织,可以提供研究论文的下载
    8K2r;Kd0Z;k_$`117006http://sepo.nosc.mil   内容来自美国SAN DIEGO的软件工程机构(Sofrware Engineering Process Office)主页,包括软件工程知识方面的资料
    'R#w_} gp/M117006http://www.asq.org/   是世界上最大的一个质量团体组织之一,有着比较丰富的论文资源,不过是收费的
    e4w3^}T*V/IA1aD W#i117006http://www.automatED-testing.com/ 一个自动化软件测试和自然语言处理研究页面,属于个人网页,上面有些资源可供下载 51Testing软件测试网 on0h2qb+l c~4@u
    http://www.benchmarkresources.com/ 提供有关标杆方面的资料,也有一些其它软件测试方面的资料 51Testing软件测试网 mVR IUz _dy&s
    http://www.betasoft.com/ 包含一些流行测试工具的介绍、下载和讨论,还提供测试方面的资料
    Ht%JH&z"I2^117006http://www.brunel.ac.uk/~csstmmh2/vast/home.html VASTT研究组织,主要从事通过切片技术测试技术和转换技术来验证和分析系统,对这方面技术感兴趣的人是可以在这里参考一些研究的项目及相关的一些主题信息
    Er9a$I q&S117006http://www.cc.gatech.edu/aristotle/ Aristole研究组织,研究软件系统分析、测试和维护等方面的技术,在测试方面的研究包括了回归测试、测试套最小化、面向对象软件测试等内容,该网站有丰富的论文资源可供下载 51Testing软件测试网J2r:| @'F Q
    http://www.computer.org/ IEEE是世界上最悠久,也是在最大的计算机社会团体,它的电子图书馆拥有众多计算机方面的论文资料,是研究计算机方面的一个重要资源参考来源 51Testing软件测试网 k-Y Jjy2o
    http://www.cs.colostate.edu/testing/ 可靠性研究网站,有一些可靠性方面的论文资料
    5S b(pE DuB G7OC117006http://www.cs.york.ac.uk/testsig/ 约克大学的测试专业兴趣研究组网页,有比较丰富的资料下载,内容涵盖了测试的多个方面,包括测试自动化、测试数据生成、面向对象软件测试、验证确认过程等 51Testing软件测试网`)}%l~Wc
    http://www.csr.ncl.ac.uk/index.html 学校里面的一个软件可靠性研究中心,提供有关软件可靠性研究方面的一些信息和资料,对这方面感兴趣的人可以参考 51Testing软件测试网"s l5@D4Z{lr
    http://www.dcs.shef.ac.uk/research/groups/vt/ 学校里的一个验证和测试研究机构,有一些相关项目和论文可供参考
    ,M8?1\b$U0j%a117006http://www.esi.es/en/main/ ESI(欧洲软件组织),提供包括CMM评估方面的各种服务 51Testing软件测试网$?Ux.Tt5g|
    http://www.europeindia.org/cd02/index.htm 一个可靠性研究网站,有可靠性方面的一些资料提供参考
    C`t0ZRXDo^y117006http://www.fortest.org.uk/ 一个测试研究网站,研究包括了静态测试技术(如模型检查、理论证明)和动态测试(如测试自动化、特定缺陷的检查、测试有效性分析等)
    7u8f*Q^#EuE117006http://www.grove.co.uk/ 一个有关软件测试和咨询机构的网站,有一些测试方面的课程和资料供下载 51Testing软件测试网&vz:S&mU
    http://www.hq.nasa.gov/office/codeq/relpract/prcls-23.htm NASA可靠性设计实践资料
    d2d7S3by l PC%b)A.p117006http://www.io.com/~wazmo/ Bret Pettichord的主页,他的一个热点测试页面连接非常有价值,从中可以获得相当大的测试资料,很有价值
    (Qh:A+?&Z&v([n117006http://www.iso.ch/iso/en/ISOOnline.frontpage 国际标准化组织,提供包括ISO标准系统方面的各类参考资料
    ;F0zfr)a_ v117006http://www.isse.gmu.edu/faculty/ofut/classes/ 821-ootest/papers.html 提供面向对象和基于构架的测试方面著作下载,对这方面感兴趣的读者可以参考该网站,肯定有价值 51Testing软件测试网F;?&y'q5o5G+um0w Im
    http://www.ivv.nasa.gov/ NASA设立的独立验证和确认机构,该机构提出了软件开发的全面验证和确认,在此可以获得这方面的研究资料 51Testing软件测试网`k e@A;CU7Q
    http://www.kaner.com/ 著名的测试专家Cem Kanner的主页,里面有许多关于测试的专题文章,相信对大家都有用。Cem Kanner关于测试的最著名的书要算Testing Software,这本书已成为一个测试人员的标准参考书 51Testing软件测试网-[u/Ma}O5lz
    http://www.library.cmu.edu/Re-search/Engineer- ingAndSciences/CS+ECE/index.html 卡耐基梅陇大学网上图书馆,在这里你可以获得有关计算机方面各类论文资料,内容极其庞大,是研究软件测试不可获取的资料来源之一
    Gp/Lr P117006http://www.loadtester.com/ 一个性能测试方面的网站,提供有关性能测试、性能监控等方面的资源,包括论文、论坛以及一些相关链接
    Uk(\ y7HF+Md+R117006http://www.mareinig.ch/mt/index.html 关于软件工程和应用开发领域的各种免费的实践知识、时事信息和资料文件下载,包括了测试方面的内容
    D1}sgn(Dn1M5V117006http://www.mtsu.ceu/-storm/ 软件测试在线资源,包括提供目前有哪些人在研究测试,测试工具列表连接,测试会议,测试新闻和讨论,软件测试文学(包括各种测试杂志,测试报告),各种测试研究组织等内容 51Testing软件测试网$F4d\ F1C.o"S-U
    http://www.psqtcomference.com/ 实用软件质量技术和实用软件测试技术国际学术会议宣传网站,每年都会举行两次
    R5ouyOq117006http://www.qacity.com/front.htm 测试工程师资源网站,包含各种测试技术及相关资料下载 51Testing软件测试网%p(]ic!W,Un
    http://www.qaforums.com/ 关于软件质量保证方面的一个论坛,需要注册
    &O.{*V*X8`117006http://www.qaiusa.com/ QAI是一个提供质量保证方面咨询的国际著名机构,提供各种质量和测试方面证书认证 51Testing软件测试网4T[f4T6L \ hH
    http://www.qualitytree.com/ 一个测试咨询提供商,有一些测试可供下载,有几篇关于缺陷管理方面的文章值得参考
    Rx/I'}:y c gQ117006http://www.rational.com/ IBM Rational的官方网站,可以在这里寻找测试方面的工具信息。IBM Rational提供测试方面一系列的工具,比较全面 51Testing软件测试网U$^5I(w/b/u I-I#W@
    http://rexblackconsulting.com/Pages/publicat-ions.htm Rex Black的个人主页,有一些测试和测试管理方面的资料可供下载 51Testing软件测试网T,vw/T }e/?N
    http://www.riceconsulting.com/ 一个测试咨询提供商,有一些测试资料可供下载,但不多
    +d2P2eU0XB w#c:F117006http://www.satisfice.com/ 包含James Bach关于软件测试和过程方面的很多论文,尤其在启发式测试策略方面值得参考 51Testing软件测试网8_#J*LGyn
    http://www.satisfice.com/seminars.shtml 一个黑盒软件测试方面的研讨会,主要由测试专家Cem Kanar和James Bach组织,有一些值得下载的资料 51Testing软件测试网nq1`-cL7{
    http://www.sdmagazine.com/ 软件开发杂志,经常会有一些关于测试方面好的论文资料,同时还包括了项目和过程改进方面的课题,并且定期会有一些关于质量和测试方面的问题讨论 51Testing软件测试网&O6yLlw.`l
    http://www.sei.cmu.edu/ 著名的软件工程组织,承担美国国防部众多软件工程研究项目,在这里你可以获俄各类关于工程质量和测试方面的资料。该网站提供强有力的搜索功能,可以快速检索到你想要的论文资料,并且可以免费下载
    z(q+` h1|f6E/h]1qN,w5^117006http://www.soft.com/Institute/HotList/ 提供了网上软件质量热点连接,包括:专业团体组织连接、教育机构连接、商业咨询公司连接、质量相关技术会议连接、各类测试技术专题连接等 51Testing软件测试网&a4W*Yb:@Y3`
    http://www.soft.com/News/QTN-Online/ 质量技术时事,提供有关测试质量方面的一些时事介绍信息,对于关心测试和质量发展的人士来说是很有价值的 51Testing软件测试网N4I7e Lp(^3c0|7f9Y0L$~
    http://www.softwaredioxide.com/ 包括软件工程(CMM,CMMI,项目管理)软件测试等方面的资源 51Testing软件测试网tI:]ht/}4D O e
    http://www.softwareqatest.com/ 软件质量/测试资源中心。该中心提供了常见的有关测试方面的FAQ资料,各质量/测试网站介绍,各质量/测试工具介绍,各质量/策划书籍介绍以及与测试相关的工作网站介绍
    -u:lm-KA c\P'y117006http://www.softwaretestinginstitute.com 一个软件测试机构,提供软件质量/测试方面的调查分析,测试计划模板,测试WWW的技术,如何获得测试证书的指导,测试方面书籍介绍,并且提供了一个测试论坛 51Testing软件测试网3LA+]0n3cYD:w}c
    http://www.sqatester.com/index.htm 一个包含各种测试和质量保证方面的技术网站,提供咨询和培训服务,并有一些测试人员社团组织,特色内容是缺陷处理方面的技术 51Testing软件测试网,i/_:G6QsJ_
    http://www.sqe.com/ 一个软件质量工程服务性网站,组织软件测试自动化、STAR-EASE、STARWEST等方面的测试学术会议,并提供一些相关信息资料和课程服务
    1y&bd/|o5B`117006http://www.stickyminds.com/ 提供关于软件测试和质量保证方面的当前发展信息资料,论文等资源
    Z^.f H%?:O5A117006http://www.stqemagazine.com/ 软件策划和质量工程杂志,经常有一些好的论文供下载,不过数量较少,更多地需要通过订购获得,内容还是很有价值的
    "` T gcL!xi117006http://www.tantara.ab.ca/ 软件质量方面的一个咨询网站,有过程改进方面的一些资料提供 51Testing软件测试网9t/I2`B%|+@+ru{
    http://www.tcse.org/ IEEE的一个软件工程技术委员会,提供技术论文下载,并有一个功能强大的分类下载搜索功能,可以搜索到测试类型、测试管理、测试分析等各方面资料
    Zaet(xY5o117006http://www.testing.com/ 测试技术专家Brain Marick的主页,包含了Marick 研究的一些资料和论文,该网页提供了测试模式方面的资料,值得研究。总之,如果对测试实践感兴趣,该网站一定不能错过 51Testing软件测试网DZ EY S RT3N2z S
    http://www.testingcenter.com/ 有一些测试方面的课程体系,有一些价值
    _*h?%W6G$y2BXu117006http://www.testingconferences.com/asiastar/home 著名的AsiaStar测试国际学术会议官方网站,感兴趣的人一定不能错过
    8~E0\:w w;I+N \!Y117006http://www.testingstuff.com/ Kerry Zallar的个人主页,提供一些有关培训、工具、会议、论文方面的参考信息 51Testing软件测试网w\ED'? ?8T#{At
    http://www-sqi.cit.gu.edu.au/ 软件质量机构,有一些技术资料可以供下载,包括软件产品质量模型、再工程、软件质量改进等 51Testing软件测试网9F;c!D3d8yx:}*i
  • 几种常用的软件测试工具

    fsyj000 发布于 2008-01-05 21:38:30

    几种常用的软件测试工具

    1:QACenter
    下载地址:http://www.compuware/products/qacenter

    2:WinRunner  使功能测试得以自动化
    下载地址:http://www.mercuryinteractive.com/products/winrunner

    3:LoadRunner  是一种预测系统行为和性能的负载测试工具。它可以通过模拟成千上万个用户和实施实时检测来确认和查找问题。
    下载地址:http://www.mercuryinteractive.com/products/loadrunner

    4:GUI接口自动化测试工具
    @1  Visual Test  适用于Microsoft Windows 接口的Win32程序 。 是一个录制和播放的自动化测试
    @2  QA Wizard  适用于Web浏览器测试 。 是一个录制和播放的自动化测试

    5:BoundsChecker  是用于Visual C++开发环境所开发的程序代码的自动捕捉错误及调试工具。它最重要的功能是协助程序开发人员快速找出与内存及资源有关的错误,并且指出是哪一行程序代码所导致的。

    6:CodeReview  针对Visual Basic开发环境所开发的程序代码分析工具,用于程序未执行前所做的程序代码检查。这套工具可以检测Visual Basic程序代码内可能出现错误的环节,一旦问题被捕捉出来,CodeReview会将出错的内容及导致出错的原因一一呈现给开发人员。

    7:SmartCheck  针对Visual Basic所开发的分析工具,用于程序现阶段的执行。

    8:JCheck  用来分析Java执行过程与事件的工具,它可实时监控程序执行的状态。JCheck的最大特点是能将Java语言的执行过程以图形化的方式表现出来。

    9:TrueTime  是分析程序执行性能的工具,它能够自动锁定延暖程序实行速度的程序代码,并产生分析报表。支持Visual C++ , Visual Basic及Java程序语言

    10:TrueCoverage  可降低没有被完整执行过的风险

    11:FailSafe  可提高Visual Basic程序的稳定性及日后维

  • 软件测试笔试汇总!(收集资料)

    超越自我 发布于 2008-10-22 10:42:45

    应聘时向主考官提出的10个漂亮问题

    面试结束前,大多数的主考官都会丢问题给求职者,最常见的就是:你有没有什么问题或疑问,想要提出来的?无论求职者是否有提出问题,其实,这个问题背后的真正含意,通常是主考官用来测试你对这份工作有多大的企图心、决心和热情。

          因此,如果你害怕发问不妥当,或是不知道该从何问起,甚至回答没有问题时,都很可能会让主考官认为,你想要这份工作的企图心、决心还不够强。

           相反的,求职者应该更积极、主动的利用面试最后一关的机会,适时的提出问题,这不但有助于主考官对你的印象能够加深,而且你也能趁此机会进一步了解这家公司的背景、企业文化是否适合你。

           最重要的是,如果能够在面试时,提出漂亮的问题,录取的机率将会大大提高。所以,无论如何,前往面试前,先谨记10个可以反问主考官的问题,以便到时候可以提出。

      1.贵公司对这项职务的工作内容和期望目标为和?有没有什么部分是我可以努力的地方?

      2.贵公司是否有正式或非正式教育训练?

      3.贵公司的升迁管道如何?

      4.贵公司的多角化经营,而且在海内外都设有分公司,将来是否有外派、轮调的机会?

      5.贵公司能超越同业的最大利基点为何?

      6.在项目的执行分工上,是否有资深的人员能够带领新进者,并让新进者有发挥的机会?

      7.贵公司强调的团队合作中,
    其它的成员素质和特性如何?

      8.贵公司是否鼓励在职进修?对于在职进修的补助办法如何?

      9.贵公司在人事上的规定和作法如何?

      10.能否为我介绍一下工作环境,或者是否有机会能参观一下贵公司?

         至于薪水待遇、年假天数、年终奖金、福利措施等问题,有些公司的主考官在面试时,会直接向求职者提出。如果对方没有提及,对社会新鲜人来说,在找第一份工作时,比较不适合提出,除非你有对方不得不录取你的条件。

          另外,也有人在结束前,谦虚的请教主考官:您认为我今天的表现如何?录取的机率有多大?通常,这个问题也会让对方认为,你对这份工作抱有很大的决心和企图心,而你也可以试着从对方的回答中,约略猜测出自己成功的机率有多大,并且作为下一次面试时表现的参考!

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

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


    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、测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?

    软件测试面试题整理:

    面试题目:
    01. 为什么要在一个团队中开展软件测试工作?
    因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。
    02. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
    我曾经做过web测试,后台测试,客户端软件,其中包括功能测试,性能测试,用户体验测试。最擅长的是功能测试
    03. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同04. 的测试类型的区别与联系(如功能测试、性能测试……)
    测试类型有:功能测试,性能测试,界面测试。
    功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
    性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
    界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
    区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试
    05.  请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
    黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
    白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
      软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
    1、是否有不正确或遗漏的功能?
    2、在接口上,输入是否能正确的接受?能否输出正确的结果?
    3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
    4、性能上是否能够满足要求?
    5、是否有初始化或终止性错误?
      软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
    1、对程序模块的所有独立的执行路径至少测试一遍。
    2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
    3、在循环的边界和运行的界限内执行循环体。
    4、测试内部数据结构的有效性,等等。
    单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
          单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
    集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
    系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
           系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
    验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能和性能如同用户所合理期待的那样。
    06. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
    软件测试计划是指导测试过程的纲领性文件,包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
    测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)
    07. 您认为做好测试计划工作的关键是什么?
    1. 明确测试的目标,增强测试计划的实用性
    编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
    2.坚持“5W”规则,明确内容与过程
    “5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
    3.采用评审和更新机制,保证测试计划满足实际需求
    测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
    4. 分别创建测试计划与测试详细规格、测试用例
    应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。
    08. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    1.等价类划分
    划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
    2.边界值分析法
      边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
    3.错误推测法
      基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.
    4.因果图方法
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.
    08.您认为做好测试用例设计工作的关键是什么?
    白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
    黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题
    09. 请以您以往的实际工作为例,10. 详细的描述一次测试用例设计的完整的过程。
    就说最近的这次网站功能的测试吧
    首先:得到相关文档(需求文档和设计文档),理解需求和设计设计思想后,想好测试策略(测试计划简单点就OK了),考虑到测试环境,测试用例,测试时间等问题。
    第二步:设计测试用例,测试策略是:把网站部分的功能点测试完,然后在进行系统测试(另外个模块呢有另一个测试人员负责,可以进行联调测试),网站模块的测试基本是功能测试和界面测试(用户并发的可能性很小,所以不考虑):这次的网站的输入数据呢是使用数据库中的某张表记录,如果表中某一数据记录中新加进来的(还没有被处理的,有个标志位),网站启动后会立刻去刷那张表,得到多条数据,然后在进行处理。处理过程中,会经历3个步骤,网站才算完成了它的任务。有3个步骤呢,就可以分别对这3个步骤进行测试用例的设计,尽量覆盖到各种输入情况(包括数据库中的数据,用户的输入等),得出了差不多50个用例。界面测试,也就是用户看的到的地方,包括发送的邮件和用户填写资料的页面展示。
    第三步:搭建测试环境(为什么这个时候考虑测试环境呢?因为我对网站环境已经很熟了,只有有机器能空于下来做该功能测试就可以做了),因为网站本身的环境搭建和其他的系统有点不同,它需要的测试环境比较麻烦,需要web服务器(Apache,tomcat),不过这次需求呢,网站部分只用到了tomcat,所以只要有tomcat即可
    第四步:执行测试
    11. 您以往是否曾经从事过性能测试工作?如果有,12. 请尽可能的详细描述您以往的性能测试工作的完整过程。
    是的,曾经做过网站方面的性能测试,虽然做的时间并不久(2个月吧),当时呢,是有位网站性能测试经验非常丰富的前辈带着我一起做。
    性能测试类型包括负载测试,强度测试,容量测试等
          负载测试:负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。
          强度测试: 强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。
          容量测试:确定系统可处理同时在线的最大用户数  
    在网站流量逐渐加大的情况下,开始考虑做性能测试了,首先要写好性能测试计划,根据运营数据得出流量最大的页面(如果是第一次的话,一般是首页,下载页,个人帐户页流量最大,而且以某种百分比),
    Web服务器指标指标:
    * Avg Rps: 平均每秒钟响应次数=总请求时间 / 秒数;
    * Successful Rounds:成功的请求;
    * Failed Rounds :失败的请求;
    * Successful Hits :成功的点击次数;
    * Failed Hits :失败的点击次数;
    * Hits Per Second :每秒点击次数;
    * Successful Hits Per Second :每秒成功的点击次数;
    * Failed Hits Per Second :每秒失败的点击次数;
    * Attempted Connections :尝试链接数;

    13. 您在从事性能测试工作时,14. 是否使用过一些测试工具?如果有,15. 请试述该工具的工作原理,16. 并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
    17. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
    18. 在您以往的工作中,19. 一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    20. 您以往所从事的软件测试工作中,21. 是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,22. 请结合该工具描述软件缺陷(Bug)跟踪管理的流程。
    23. 您认为在测试人员同24. 开发人员的沟通过程中,25. 如何提高沟通的效率和改善沟通的效果?维持测试人员同26. 开发团队中其他成员良好的人际关系的关键是什么?
    27. 在您以往的测试工作中,28. 最让您感到不29. 满意或者不30. 堪回首的事情是什么?您是如何来对待这些事情的?
    31. 在即将完成这次笔试前,32. 您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面)
    33.     你对测试最大的兴趣在哪里?为什么?
    最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。
    刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。
    不到一年半的测试工作中,当时的感动和热情没有减退一点(即使环境问题以及自身经验,技术的不足,做测试的你一定也能理解)。
    我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。
    第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。
    34. 你的测试职业发展是什么?
    测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。
    35. 你自认为测试的优势在哪里?
    优势在于我对测试坚定不移的信心和热情,虽然经验还不够,但测试需要的基本技能我有信心在工作中得以发挥。
    36. 你以前工作时的测试流程是什么?
    公司对测试流程没有规定如何做,但每个测试人员都有自己的一套测试流程。我说下我1年来不断改正(自己总结,吸取同行的方法)后的流程吧。需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定(出一份确定的需求文档)->开发设计文档(开发人员在开始写代码前就能输出设计文档)->想好测试策略,写出测试用例->发给开发人员和测试经理看看(非正式的评审用例)->接到测试版本->执行测试用例(中间可能会补充用例)->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改(可以在测试过程中快速的修改)->回归测试(可能又会发现新问题,再按流程开始跑)。
    37. 当开发人员说不38. 是BUG时,39. 你如何应付?
    开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。
    23.你为什么想离开目前的职务?
    因为公司运作情况并不理想,公司需要调整部门体系,公司考虑到缩减部门人员,所以大批量的裁员(有6,7个),这是我的第一份工作,对公司也有较深的感情,因为在这里我找到了职业理想(就是测试),所以公司需要精简人员,我自愿退出。虽然很舍不得,但我将会有新的发挥能力的舞台。
      24:你对我们公司了解有多少?

      25:你找工作时,最重要的考虑因素为何?
    工作的性质和内容是否能让我发挥所长,并不断成长。
    26:为什么我们应该录取你?
    您可以由我过去的工作表现所呈现的客观数据,明显地看出我全力以赴的工作态度。
      27:请谈谈你个人的最大特色。
    我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。
    28.白箱测试和黑箱测试是什么?什么是回归测试?
        29。单元测试、集成测试、系统测试的侧重点是什么?
        30。设计用例的方法、依据有那些?
        31。一个测试工程师应具备那些素质和技能?
        32.集成测试通常都有那些策略?
        33.你用过的测试工具的主要功能、性能及其他?
        34.一个缺陷测试报告的组成
        35.基于WEB信息管理系统测试时应考虑的因素有哪些?
    36.软件测试项目从什么时候开始,?为什么?
         37.需求测试注意事项有哪些?
         38.简述一下缺陷的生命周期
         39.测试分析测试用例注意(事项)?
    你在你所在的公司是怎么开展测试工作的?是如何组织的?
    你认为理想的测试流程是什么样子?
    你是怎样工作的?
    软件测试活动的生命周期是什么?
    请画出软件测试活动的流程图?
    针对缺陷采取怎样管理措施?
    什么是测试评估?测试评估的范围是什么?
    如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么?
    测试结束的标准是什么?
    软件验收测试除了alpha,beta测试以外,还有哪一种?
    做测试多久了?
    以前做过哪些项目?
    你们以前测试的流程是怎样的?
    <答:测试计划-测试用例设计-测试执行-测试分析报告>
    用过哪些测试工具?
    为什么选择测试这行?
    <答:它是一个新兴的行业,有发展潜力,而且很锻炼人,需要掌握更多的技能,比做开发要更难>
    为什么值得他们公司雇用?
    如果我雇用你,你能给部门带来什么贡献?
    如何从工作中看出你是个自动自觉的人
    你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
    通常你对于别人批评你会有什么样的反应
    如果明知这样做不对,你还会依主管的指过去做吗
    如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
    你觉得什么样的人最难相处
    为什么值得他们公司雇用?
          帮助公司提高软件质量和测试部门的技术水平
    如果我雇用你,你能给部门带来什么贡献?
          分享我的测试经验和测试技能,提高测试部门技术水平
    如何从工作中看出你是个自动自觉的人
         自动自觉范围太广
          1. 工作成果
          2. 工作质量 
    你的工作通常能在时限内完成吗.(我想问一下就是她问这个问题的动机是什么)
          在有足够的资源和合理的工作量的情况下,完全可以按时完成,并能比一般人做的更好
    通常你对于别人批评你会有什么样的反应
      有错即改,无措勉之
    如果明知这样做不对,你还会依主管的指过去做吗
         在公司内部下级是否有申诉渠道?
    如果你接到一个客户抱怨的电话,你确知无法解决他的问题,你会怎么处理
        为什么抱怨?是怎么样的问题?
         如果是客服问题,提交客服部门解决
        如果是质量问题,分析原因,下一版本改进
    你觉得什么样的人最难相处
         自以为是的人
    什么叫单元测试?
    请就软件测试人员应该具备什么样的基本素质说说你的看法。
    请就如何在开发中进行软件质量控制说说你的看法
     简述软件测试的意义,以及软件测试的分类

    1、功能测试,性能测试,界面测试,安全测试(可以简单点,比如只涉及到COOKIES里的内容),压力测试(商业性质的网站) 等等,B/S软件也要根据其具体功能采用不同的测试策略。
    2、态度、责任心、自信、敏锐的观察力、良好的发散思维
    3、先设计后开发模式,加强单元测试,加强代码走查,有一套完整的白盒测试方法。关键是加强开发人员的质量意识,增进程序员向工程师水平发展。
    4、意义嘛,就自己想吧。软件测试的分类,这个很多人都按各种方法去分。无明确答案给你。

    对测试的理解——基本的测试知识,对测试是否认可? 75。
       3、谈一谈过去自己的工作——了解经历、提供进一步提问的素材,表达能力  
    测试技能
    测试设计的方法并举例说明——测试技术的使用
    测试工具——熟悉程度,能否与当前工作匹配?
    如何做计划?如何跟踪计划?——日常工作能力
    如果开发人员提供的版本不满足测试的条件,如何做?——与开发人员协作的能力
    熟悉unix系统、oracle数据库吗?——是否具备系统知识
    做过开发吗?写过哪些代码?——开发技能
    阅读英语文章,给出理解说明?——部分英语能力
    文档的意义——是否善于思考?(最简单的概念,不同层次的理解)
    假如进入我们公司,对我们哪些方面会有帮助?——讲讲自己的特长
    随便找一件物品,让其测试——测试的实际操作能力
    软件测试的方法有?
    软件测试的过程?
    有一个新的软件,假如你是测试工程师,该如何做?
    软件测试分哪两种方法?分别适合什么情况?
    2。一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。
    3。软件测试的类型有那些?分别比较这些不同的测试类型的区别与联系。
    4。测试用例通常包括那些内容?着重阐述编制测试用例的具体做法
    5。在分别测试winform的C/S结构与测试WEB结构的软件是,应该采取什么样的方法分别测试?他们存在什么样的区别与联系?
    6。在测试winform的C/S结构软件时,发现这个软件的运行速度很慢,您会认为是什么原因?您会采取哪些方法去检查这个原因?
    7。描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程
    你在五年内的个人目标和职业目标分别是什么?
      分析这个问题是用来了解你的计划能力的,通过这个问题,面试人同时还可以知道你的目标是否符合企业对你的安排。
      错误回答我想在将来的某个时候考虑这个问题。如今企业的领导者更换频繁,我认为做太多的个人计划是荒谬可笑的,不是吗?
      评论这种回答属于令人反感的一类。首先,当有人想了解你的目标时,"将来的某个时候"这种通俗说法并不奏效。其次,认为企业很脆弱,领导者更换频繁,这种说法毫无疑问会令人反感,而且也是不合理的。最后,认为做计划可笑,看不起这个问题,而且反问面试人,这些都注定了这样的求职者最终会失败。
      正确回答从现在起的五年之内,我希望能够在一个很好的职位上待几年,而且最好有一次晋升,然后就期待着下一步。不管是向上提升,还是在企业内横向调动,对我个人来说,我希望找到一家企业——一家愿意做相互投入的企业——待上一段时间。
      评论这个问题没有回答得过分具体(那样可能会产生漏洞),而且它表明你有雄心,并且思考过在企业中的成长方式。通过表达横向调动和向上提升的愿望,表明你是一个有灵活性的人。
     问题23 你怎样做出自己的职业选择?
      分析 面试人提出这个问题是为了了解求职者的动机,看看他(她)应聘这份工作是否有什么历史渊源,是否有职业规划,是不是仅仅在漫无目的地申请很多工作。
      错误回答 我一直都想在企业界工作。自孩提时代起,我就梦想自己至少也要成为大企业的副总裁。
      评论 除了难以令人相信之外,这种回答还存在一个问题:它表明求职者会对副总裁以下的职位不感兴趣。
      正确回答 在上大学四年级前的那个夏天,我决定集中精力在某一领域谋求发展。尽管我是学商业的,但是我不知道自己最终会从事哪一行业的工作。我花了一定的时间考虑自己的目标,想清楚了自己擅长做的事情以及想从工作中得到的东西,最后我得出了一个坚定的结论,那就是这个行业是最适合我的。
      评论 这种回答表明,求职者认真地做过一些计划,缩小了自己的关注点,而且也认准了前进的方向。这种回答还表明,求职者理解个人职业规划的重要性,并且有能力做出认真的个人决策。
    1. 你都用什么测试方法
    2.怎么编写案例
    3.怎么才能够全面的测试到每一个点
    1. 你都用什么测试方法
    针对不同的产品或者系统或者模块,有不同的测试方法。总体而言有白盒测试和黑盒测试。
    2.怎么编写案例
    案例的编写与测试阶段的定义有很大的关系。系统测试和unit测试的案例可能不同。总体而言测试案例根据系统的需求而定。
    3.怎么才能够全面的测试到每一个点
    测试的全面性主要需要在设计测试计划的时候考虑,从测试策略,产品需求等等多个角度考虑从而定义全部的测试点。
    1、谈谈软件测试技术,以及如何提高
    2、谈谈软件测试职业发展,以及个人的打算
    3、谈谈软件测试在企业的地位,也可以结合软件生命周期来谈
    有可能清晰的思路比确切的答案更重要
    在这里,主要说下笔试和面试的问题,希望大家共同参考。
        1,一般公司里实际的软件测试流程是什么样的?你们公司又是怎样的?
        2,软件工程师要具有那些素质?
        3,你会哪些测试工具?怎么操作?
        4,你能不能说下你的3到5年的职业计划(规划)
        5,你觉得你来应聘有那些优势?
    其余的还好说,但就第4个问题,我感到不好说哦!希望大家给个意见
    第一关:首先要自我介绍,自己的性格怎么样,目前的工作经历积累了一些什么经验取得了些什么值得一说的成果。然后要说说对软件测试怎么看?还有对于软件测试有什么自己的想法。为什么会想到要做这行(因为我的简历上的工作经历没有关于测试方面的)。哦,还有期望薪资。
    第二关:认为软件测试人员所要具备的基本素质,如果遇到问题会怎样处理,如果得不到研发人员的配合(就是研发说这个不是问题)你又会怎么处理?然后就是一些基本概念,比如软件测试的流程有哪些?如果我上任了,首先会怎么开始自己的工作计划。
    (前两关通过了后面这个就好过多了)
    第三关:像我介绍了一下公司的情况,告诉我主要针对什么内容的测试,会不会使用数据库。告诉我大概要做哪些内容,详细的可以上岗以后慢慢熟悉。
    大概就这么多了,这对没有经过这一关的不知道有没有帮助,仅供参考吧
    我觉得就像李波说的,关键是要给对方留下好印象:)

    面试官最后会问你有什么问题要问吗。作为应聘者的你一般不要说没问题问,这会给面试官留下你不太重视这份工作的坏印象。所以如果你想得到这份工作的话应该抓住这最后的表现自己的机会:
    你可以问:
    1.        贵公司近期和远期的发展目标是什么?
    2.        贵公司的主要竞争对手有哪些?
    3.        贵公司有多少开发人员有多少测试人员?
    4.        贵公司又进一步扩充测试人员的计划吗?
    5.        如果我有幸能进入贵公司的话,我有怎么样的发展?
    6.        测试人员的沟通能力很重要,贵公司有规范的沟通渠道吗?
    7.        请介绍一下贵公司的福利情况。
    8.        请问我什么时候能知道结果?


     

     

  • [转]追求代码质量: 使用 Selenium 和 TestNG 进行编程式测试

    swanlin128 发布于 2007-11-13 15:59:28

    追求代码质量: 使用 Selenium 和 TestNG 进行编程式测试

    轻松实现用户验收测试自动化

    Andrew Glover (aglover@stelligent.com), 总裁, Stelligent Incorporated

    2007 年 4 月 30 日

    Selenium 是一种测试框架,它使您可在 Web 应用程序上轻松地运行用户验收测试(user acceptance test)。本月,Andrew Glover 将向您展示如何以编程的方式运行 Selenium 测试,并使用 TestNG 作为测试驱动程序。在将 TestNG 灵活的测试特性(包括参数化 fixture)添加到 Selenium 固有的工具包后,您需要做的就是借助 DbUnit 和 Cargo 的帮助编写完全自动化、逻辑可重复的验收测试。

    Selenium 是一种 Web 测试框架,它搭建了验证 Web 应用程序的新途径。与大多数尝试模拟 HTTP 请求的 Web 测试工具不同,Selenium 执行 Web 测试时,就仿佛它本身就是浏览器。当运行自动的 Selenium 测试时,该框架将启动一个浏览器,并通过测试中描述的步骤实际驱动浏览器,用户将使用这种方式与应用程序交互。

    由于开发人员和非开发人员都能够使用 Selenium 轻松地编写测试,使得它从众多测试框架应用程序中脱颖而出。在 Selenium 中,可以通过编程的方式编写测试,或者使用 Fit 样式的表,并且编写了测试后,可以使测试完全自动化。使用一个 Ant 构件(比方说)运行完整的 Selenium 套件非常简单,并且还可以在持续集成(Continuous Integration,CI)环境中运行 Selenium 测试。

    这个月,我将介绍 Selenium,并逐一查看使它成为优秀 Web 测试框架的一些特性 —— 尤其是在结合使用 TestNG、DbUnit 和 Cargo 这样的软件时。

    验收测试
    由于 Selenium 能够很好地模拟用户的行为,它常常用于进行验收测试,即在完成的系统上运行一整套测试。验收测试通常需要运行整个应用程序,以使测试发挥作用。如果您要测试一个 Web 应用程序,则需要访问应用程序数据库,以及一台 Web 服务器,一个容器和运行应用程序所需的任何配置元素。

    使用 Selenium 进行编程式测试

    在 Selenium 中,您可以使用自己喜爱的语言或者 Fit 样式的表通过编程来编写测试。从测试的角度来说,不管使用什么语言,测试过程和结果都不会有显著的差别。在此,我希望研究 Selenium 的编程方法,因为在结合使用 TestNG 时,它提供了一些有趣的可行方法能性。

    使用具有类似 TestNG 这样的框架的 Selenium 进行编程式测试具有这样一个优点,它允许您创建智能 fixture,而使用 Fit 样式的表则很难做到这一点。TestNG 尤其适合与 Selenium 结合使用,因为它使您能够完成其他框架无法做到的测试,例如使用依赖项进行测试,重新运行失败了的测试,以及使用单独文件中定义的参数进行参数化测试。所有这些特性结合在一起,当然能够使它在众多 Web 应用程序测试框架中脱颖而出,但是,正如您将看到的,在完全自动化的验收测试中使用这些特性令它更加出众。

    配置第一个测试

    Selenium 架构实际上由两个逻辑实体组成:您编写的代码以及能够简化与测试中的应用程序的交互的 Selenium 服务器。要成功地执行测试,必须要启动并运行 Selenium 服务器实例以及要测试的应用程序。(当然,测试结果取决于您编写的应用程序是否优秀!)

    幸运的是,Selenium 服务器是一种轻量级程序,可以在实际的测试范围内通过编程启动和停止它。Selenium 服务器(使用 Selenium 对象嵌入)的启动和停止由一个 fixture 来执行。

    要通过编程的方式启动 Selenium 服务器,必须创建一个新的 Selenium 对象,并告诉它要使用哪一种兼容的浏览器 —— 我在下面的示例中使用的是 Firefox。您还必须提供运行服务器实例的位置(通常是 localhost,但不是必须的),以及被测试的应用程序使用的基 URL。

    在清单 1 中,我配置了一个本地 Selenium 实例,使用它在本地安装的 Web 应用程序上驱动 Firefox(http://localhost:8080/gt15/)。正如您从参数中推断的一样,Selenium 是作为被测试的应用程序的代理,并相应地促进测试。


    清单 1. 配置 SeleniumServer
                    
    Selenium driver = 
      new DefaultSelenium("localhost", SeleniumServer.getDefaultPort(), 
       "*firefox", "http://localhost:8080/gt15/");
    
    driver.start();
    //go to web pages and do stuff...
    driver.stop();
    

    创建了 Selenium 实例后,您可以 启动并在运行时 停止它。这意味着您可以通过编程与 Selenium 服务器交互,并通过一个测试程序使它驱动浏览器。

    驱动应用程序

    通过编程与 Web 页面进行交互是一种使用本地 id 的应用。(一些读者可能对这种源自 本系列二月份关于 TestNG-Abbot 的文章 的概念比较熟悉)。与页面元素进行交互的第一步就是查找该元素,通常可以使用 HTML 元素 ID 进行查找。Selenium 还允许您使用 XPath、正则表达式,甚至是 Javascrīpt 来查找特定的元素(如果您希望这样做)。

    清单 2 所示的 HTML 是使用 Groovlet 的简单 Web 应用程序的一部分。这段代码定义了包含输入和提交按钮的表单。如果希望 Selenium 与该表单交互,我必须为输入按钮提供 ID 以及相应的值。我还需要为提交按钮提供一个 ID,这样 Selenium 才能 “单击” 它。单击按钮后,表单将被提交给 Groovlet —— 本例中为 FindWidget.groovy


    清单 2. 简单的 HTML 表单
                    
    <form method=post action="./FindWidget.groovy">
     <table border="0" style="border-style: dotted">
      <tr>
       <td  class="heading">Widget:</td>
       <td class="value"><input type="text" name="widget"></td>
      </tr>
      <tr>
       <td></td>
       <td class="value"><input type="submit" value="Find Descrīption" name="submit"></td>
      </tr>
     </table>
    </form>
    

    现在就可以通过使用 ID widget(输入值)和 submit(单击按钮)与该 HTML 表单进行编程式交互,如清单 3 所示:


    清单 3. 驱动简单的 Web 页面

    driver.type("widget", "pg98-01"); driver.click("submit");driver.waitForPageToLoad("10000"); //assert some return value...


    Selenium 中用于和 Web 页面元素进行交互的 API 非常的直观。对于输入字段,我可以使用 type() 方法将值与 ID 关联起来。如果需要的话,可以通过编程 click 按钮。在清单 3 中,我将 click 设置为 10 秒的等待时间 —— 足够表单提交请求完成处理。当 FindWidget.groovy 中的代码运行其内容并返回响应后,我可以使用该响应来查找特定页面元素,并验证所有内容是否正常工作。


    Selenium 和 TestNG

    TestNG 以其灵活性和参数化 fixture 成为定义 Selenium 的驱动验收测试的首选。TestNG 能够定义测试依赖项并返回失败的测试,以及其易用性,使得 Selenium-TestNG 成为吸引人的组合。

    让我们首先从一个能够允许用户创建、查找、更新或删除小部件的 Web 应用程序开始。创建一个小部件需要三个属性:名称、类型和定义。图 1 显示了创建小部件的表单:


    图 1. 创建小部件的 Web 表单
    创建小部件的 Web 表单

    请注意:表单元素的类型是具有三个不同选项的下拉列表,如图 2 所示:


    图 2. 包含下拉列表的 Web 表单
    包含下拉列表的 Web 表单

    单击 Create Widget 将促使 Groovlet 处理这一请求。如果所有内容正确的话(即名字和定义不为空,并且数据库中不存在该实例),Groovlet 将创建一个新的小部件实例并类似图 3 所示的状态页面:


    图 3. 返回的 Web 页面显示状态
    返回的 Web 页面显示状态

    结合使用 Selenium 和 TestNG 验证简单的 Create Widget 用例是一种可管理的应用:

    1. 配置并启动 Selenium 服务器的实例。
    2. 与 Create Widget Web 表单交互并提交它。
    3. 检验结果页面是否包含具有小部件名称的成功信息。
    4. 停止 Selenium 服务器实例。

    请注意:用例中的每一步都是通过 Selenium 完成的 —— 所以说,TestNG 仅仅帮助进行查找。现在,我们来实践一下。

    Create Widget 测试用例

    我希望对 Selenium 服务器进行灵活的配置,所以我将编写一个参数化 fixture(TestNG-Selenium 样式),一般可以使用它来为不同浏览器、不同位置甚至混合的 Web 应用程序地址(类似 localhost 和产品)创建 Selenium 服务器。清单 4 定义了我所配置的灵活的 Selenium 服务器 fixture:


    清单 4. 灵活的 Selenium fixture

                    
     @Parameters({"selen-svr-addr","brwsr-path","aut-addr"})
     @BeforeClass
     private void init(String selenSrvrAddr, String bpath, 
       String appPath) throws Exception {
      driver = new DefaultSelenium(selenSrvrAddr, 
        SeleniumServer.getDefaultPort(), bpath, appPath);
      driver.start();
     }
     //....
     @AfterClass
     private void stop() throws Exception {
      driver.stop();
     }
    

    必须将参数名与 TestNG 的 testng.xml 文件中的值链接起来;因此,我定义了如清单 5 所示的三个参数。(默认情况下为 Firefox 定义了 brwsr-path 参数,但是我可以同样轻松地定义一组新的使用 Internet Explorer 的测试。)


    清单 5. TestNG testng.xml 文件中的参数值

                    
     <parameter name="selen-svr-addr" value="localhost"/> 
     <parameter name="aut-addr" value="http://localhost:8080/gt15/"/> 
     <parameter name="brwsr-path" value="*firefox"/>
    

    接下来,我将定义清单 6 所示的测试用例,它也包含一个参数,用于进行测试的应用程序的基 URL。该测试将促使浏览器在 Web 应用程序内打开特定页面,并操作 图 1 所示的表单。


    清单 6. 一个良好的测试用例

                    
     @Parameters({"aut-addr"})
     @Test
     public void verifyCreate(String appPath) throws Exception {
      driver.open(appPath + "/CreateWidget.html");
      driver.type("widget", "book-01");
      driver.select("type", "book");
      driver.type("definition", "book widget type book");
      driver.click("submit");
    
      driver.waitForPageToLoad("10000");  
      assertEquals(driver.getText("success"), 
        "The widget book-01 was successfully created.", 
        "test didn't return expected message");
     }
    

    通过调用 driver.click("submit") 提交表单后,Selenium 将等待响应的加载,然后我将断言成功的创建信息。(注意:响应 Web 页面具有一个 ID 为 success 的元素。)

    结果产生一个灵活的文本类,它将检验两种场景:一种是良好的场景,而另一种是没有提供定义的边界用例,如清单 7 所示:


    清单 7. 使用 TestNG 进行全部的处理

                    
    public class CreateWidgetUATest {
     private Selenium driver;
    
     @Parameters({"selen-svr-addr","brwsr-path","aut-addr"})
     @BeforeClass
     private void init(String selenSrvrAddr, String bpath, 
       String appPath) throws Exception {
      driver = new DefaultSelenium(selenSrvrAddr, 
        SeleniumServer.getDefaultPort(), bpath, appPath);
      driver.start();
     }
    
     @Parameters({"aut-addr"})
     @Test
     public void verifyCreate(String appPath) throws Exception {
      driver.open(appPath + "/CreateWidget.html");
      driver.type("widget", "book-01");
      driver.select("type", "book");
      driver.type("definition", "book widget type book");
      driver.click("submit");
    
      driver.waitForPageToLoad("10000");  
      assertEquals(driver.getText("success"), 
        "The widget book-01 was successfully created.", 
        "test didn't return expected message");
     }
    
     @Parameters({"aut-addr"})
     @Test
     public void verifyCreationError(String appPath) throws Exception {
      driver.open(appPath + "/CreateWidget.html");
      driver.type("widget", "book-02");
      driver.select("type", "book");
      //definition explicitly set to blank
      driver.type("definition", "");
      driver.click("submit");
    
      driver.waitForPageToLoad("10000");  
      assertEquals(driver.getText("failure"), 
        "There was an error in creating the widget.", 
        "test didn't return expected message");
     }
    
     @AfterClass
     private void stop() throws Exception {
      driver.stop();
     }
    }
    

    目前为止,我已经定义了两种足够灵活的 Selenium 测试,可以对多个浏览器进行测试,并且还可以对多个位置进行测试,这对初学者非常有利。尽管如此,我还想获得更高级点的应用,我开始考虑测试中的逻辑是否可重复使用。比如,如果对一行运行两次 CreateWidgetUATest 测试类会怎样?如何确保我的 Web 应用程序运行的是本地机器(或其他机器)上最新版本的代码?

    可重复的验收测试

    在执行 Selenium 测试时,必须运行 Selenium 服务器以及要检验的 Web 应用程序。言外之意,还必须运行应用程序中所有相关的架构依赖关系 —— 对于大多数 Java™ Web 应用程序来说,即 Servlet 容器和相关的数据库。

    正如在我的另一篇文章 repeatable system tests 中解释的一样,DbUnit 和 Cargo 是两种我最喜欢的技术,可以在依赖数据库的 Web 应用程序中实现逻辑重复。DbUnit 管理数据库中的数据,而 Cargo 使容器管理以通用的方式实现自动化。下面几节将向您展示如何结合使用 Selenium 和 TestNG 从而确保实现逻辑重复的验收测试。

    DbUnit 再次登场

    您可能回想起,DbUnit 通过有效地管理测试场景中的数据简化了使用数据库的工作。通过使用 DbUnit,可以在测试前将一组已知的数据加载到数据库中,这意味着您可以依赖这些在测试过程中呈现的数据。此外,在完成测试后,还可以从数据库中删除测试结果产生的数据。DbUnit 作为一种方便的 fixture(JUnit 或 TestNG)简化了所有这些工作,它能够读取包含测试数据的种子文件,逻辑插入、删除数据,或更新数据到相应的数据库表中。

    由于这里使用了 TestNG 驱动 Selenium,我将创建一个 DbUnit fixture,它将在测试 级别上运行。TestNG 支持在五种粒度级别上运行 fixture。最低的两种级别,方法和类是最常见的 —— 用于每个测试方法的 fixture 或者用于整个类的 fixture。之后,TestNG 为一个测试集合(定义在 TestNG 配置文件中并由 test 元素指定)定义了一个 fixture,为一 测试(定义在 TestNG 的 Test 注释中)定义了一个 fixture。

    测试细节

    创建一个 DbUnit fixture 并在测试级别上运行,这意味着运行任何测试之前,测试类的集合将共享相同的逻辑,为数据库正确地播种。在本文的示例中,在运行每个逻辑测试集合前,我希望数据库具有一组干净的数据。使用 DbUnit 的 CLEAN_INSERT 命令确保在先前运行的测试中创建的行被删除掉 —— 因此,我可以重新运行测试,该测试可以不断创建数据并且不用考虑数据库约束。

    此外,我希望 fixture 能够依赖参数化数据,这使我在运行某个测试之前,能够灵活地切换种子文件,甚至是特定数据库的位置。将 TestNG 与参数相关联起来再简单不过了:我所需做的仅仅是使用 Parameters 注释装饰 fixtrue,声明方法签名中相应的参数,并提供 TestNG 配置文件中的值。

    清单 8 定义了一个简单的 DbUnit fixture,它使用所需的种子文件播种数据库。请注意:该 fixture 被定义为包含五个 参数。(这可能非常多,但是在 fixture 中包含参数不是很好吗?)


    清单 8. 测试集合的 DbUnit fixture

                    
    public class DatabaseFixture {
    
     @Parameters({"seed-path","db-driver","db-url","db-user","db-psswrd"})
     @BeforeTest
     public void seedDatabase(String seedpath, String driver, 
       String url, String user, String pssword) throws Exception {
    
      IDatabaseConnection conn = this.getConnection(driver, url, user, pssword);
      IDataSet data = this.getDataSet(seedpath);
    
      try {
       DatabaseOperation.CLEAN_INSERT.execute(conn, data);
      }finally {
       conn.close();
      }
     }
    
     private IDataSet getDataSet(String path) throws IOException, DataSetException {
      return new FlatXmlDataSet(new File(path));
     }
    
     private IDatabaseConnection getConnection(String driver, 
       String url, String user, String pssword ) throws ClassNotFoundException,
        SQLException {
      Class.forName(driver);
      Connection jdbcConnection = 
        DriverManager.getConnection(url, user, pssword);
      return new DatabaseConnection(jdbcConnection);
     }
    }
    

    要将实际的值与清单 8 中的参数相关联,我必须在 TestNG 的 testng.xml 文件中定义它们,如清单 9 所示:


    清单 9. TestNG 的 testng.xml 文件中定义的特定于 DbUnit 的参数

                    
     <parameter name="seed-path" value="test/conf/gt15-seed.xml"/> 
     <parameter name="db-driver" value="org.hsqldb.jdbcDriver"/>
     <parameter name="db-url" value="jdbc:hsqldb:hsql://127.0.0.1"/>
     <parameter name="db-user" value="sa"/>
     <parameter name="db-psswrd" value=""/>
    

    通用参数值

    现在我已经定义了一个灵活的 fixture,它将处理数据库状态和相应测试。现在可以准备使用 TestNG 将所有内容连接起来。通常,第一步是了解希望实现的内容。在本例中,我想完成以下任务:

    • 我希望在运行任何逻辑测试集合前,DbUnit fixture 能够完成自己任务。
    • 我希望将相同的测试集合运行两次:一次用于 Firefox,一次用于 Internet Explorer。

    TestNG 的 parameter 元素的作用域是局部的,这对我来说是件好事。这样,我可以很容易地在 TestNG 配置文件中定义通用参数值,并且当需要时在 TestNG 的 test 组元素中重写它们。

    比如,要运行两组测试,简单创建两个 test 元素。我可以通过 TestNG 的 package 元素将我的 fixture 和相关测试包括进来,package 元素能够使包结构中所有测试(或 fixture)的查找变得简单。接着,我可以在两个定义了的 test 组中将 Firefox 和 Internet Explorer 的 brwsr-path 参数关联起来。所有这些都显示在了 testng.xml 文件中,如清单 10 所示:


    清单 10. 使 DbUnit 运行的灵活的 testng.xml 文件

                    
    <suite name="User Acceptance Tests" verbose="1" >
     
     <!-- required for DbUnit fixture   -->
     <parameter name="seed-path" value="test/conf/gt15-seed.xml"/> 
     <parameter name="db-driver" value="org.hsqldb.jdbcDriver"/>
     <parameter name="db-url" value="jdbc:hsqldb:hsql://127.0.0.1"/>
     <parameter name="db-user" value="sa"/>
     <parameter name="db-psswrd" value=""/>
     
     <!-- required for Selenium fixture -->
     <parameter name="selen-svr-addr" value="localhost"/> 
     <parameter name="aut-addr" value="http://localhost:8080/gt15/"/>  
    
     <test name="GT15 CRUDs- Firefox" > 
     
      <parameter name="brwsr-path" value="*firefox"/>
    
      <packages>
       <package name="test.com.acme.gt15.Web.selenium" />
       <package name="test.com.acme.gt15.Web.selenium.fixtures" />
      </packages>
     </test>
    
     <test name="GT15 CRUDs- IE" > 
      
      <parameter name="brwsr-path" value="*iexplore"/>
    
      <packages>
       <package name="test.com.acme.gt15.Web.selenium" />
       <package name="test.com.acme.gt15.Web.selenium.fixtures" />
      </packages> 
     </test>
    </suite>
    

    我很高兴地宣布,我已经完成了创建一套可重复验收测试所需的所有事情。剩下的工具就是处理 Web 应用程序容器本身。幸运地是,我可以使用 Cargo 来完成。

     

    Cargo 执行加载

    Cargo 是一个创新的以通用方式自动化容器管理的开源项目,比如,用于将 WAR 文件部署到 JBoss 的相同 API 还可以启动和停止 Tomcat。Cargo 还可以自动下载并安装容器 —— Cargo API 的用途很广泛,从 Java 代码到 Ant 任务,甚至是 Maven。

    诸如 Cargo 这样的工具将处理编写逻辑重复测试用例所面对的一个大的挑战,它避免一种潜在的假设,即运行 的容器具有最新最好的应用程序代码。此外,还可以构造一个利用 Cargo 的能力自动完成以下任务的编译过程(例如在 Ant 内):

    1. 下载所需的容器。
    2. 安装该容器。
    3. 启动容器。
    4. 将选择的 WAR 或 EAR 文件部署到容器上。

    稍后,您还可以使 Cargo 停止所选的容器。(并且,不需要对下载和安装容器发出警告,或者,如果本地机器中已经存在了正确的版本,Cargo 将跳过步骤 1 和 2。)

    我希望使用 Cargo 来确保启动并运行最新和最好的 Web 应用程序。并且,我不需要考虑在哪里部署 WAR 文件,或者必须确保正在使用的是最新的 WAR 文件。我真正想达到的目的是使用户验收测试实现无事件 —— 我仅需要发出一个 命令,然后坐下来等待结果。甚至可以更好,在一个 CI 环境中,我不用等待;当测试完成后我将获得一个通知!

    测试容器管理

    要在 Ant 内设置 Cargo,我需要定义一个任务,它将下载特定版本的 Tomcat 并将其安装到本地机器上的临时目录。接下来,将最新版本的代码部署到 Tomcat 上,如清单 11 所示:


    清单 11. 设置 Cargo 的任务

                    
    <target name="ua-test" depends="compile-tests,war">
    
     <taskdef resource="cargo.tasks">
      <classpath>
      <pathelement location="${libdir}/${cargo-jar}" />
      <pathelement location="${libdir}/${cargo-ant-jar}" />
      </classpath>
     </taskdef>
     
     <cargo containerId="tomcat5x" action="start" wait="false" id="${tomcat-refid}">
      <zipurlinstaller installurl="${tomcat-installer-url}" />
      <configuration type="standalone" home="${tomcatdir}">
       <property name="cargo.remote.username" value="admin" />
       <property name="cargo.remote.password" value="" />
       <deployable type="war" file="${wardir}/${warfile}" />
      </configuration>
     </cargo>
    
     <antcall target="_start-selenium" />
    
     <cargo containerId="tomcat5x" action="stop" refid="${tomcat-refid}" />
    </target>
    

    清单 11 中的 target 使用 antcall 调用另一个 target。实际上,清单 11 中最后的 cargo 任务封装了 _start-selenium target,并且确保运行测试后停止 Tomcat。

    在清单 12 中定义的 _start-selenium target 中,我需要启动(并稍后停止)Selenium 服务器。在此过程中,我的测试还将连接到其 Selenium fixture 中的服务器实例。请注意:该 target 是如何引用另一个 target ——


    清单 12. 启动和停止 Selenium 服务器

                    
    <target name="_start-selenium">
     <java jar="${libdir}/${selenium-srvr-jar}" fork="true" spawn="true" />
     <antcall target="_run-ua-tests" />
     <get dest="${testreportdir}/results.txt" 
            src="${selenium-srvr-loc}/selenium-server/driver/?cmd=shutDown" />
    </target>
    

    最后,该组中最后的 target 将通过 TestNG 实际运行我的编程式 Selenium 测试。注意,我是如何通过使用清单 13 中的 _run-ua-tests target 的 xmlfileset 元素,使 TestNG 使用我的 testng.xml 文件。


    清单 13. 运行 TestNG testng.xml 文件中的测试

    <target name="_run-ua-tests">
     <taskdef classpathref="build.classpath" resource="testngtasks" />
     <testng ōutputDir="${testreportdir}" 
             classpath="${testclassesdir};${classesdir}" haltonfailure="true">
      <xmlfileset dir="./test/conf" includes="testng.xml" />
      <classpath>
       <path refid="build.classpath" />
      </classpath>
     </testng>
    </target>
    




    结束语

    正如您看到的一样,Selenium 极大地简化了用户验收测试,尤其当使用 TestNG 驱动的时候。

    虽然编程式测试并不适用于所有人(非开发人员可能更喜欢 Selenium 的 Fit 样式的表),

    它确实让您了解到了 TestNG 非凡的灵活性。编程式测试还允许您使用 DbUnit 和 Cargo

    构建自己的测试框架,从而确保测试的逻辑可重复性。

    开源 Web 测试框架的发展绝不会停止,这对于追求代码质量的完美主义者是个好消息。

    Selenium 是驱动浏览器的开源 Web 测试框架中新出现的工具之一,它能够使用户验收测试自动化 ——

    因此,它非常优秀。结合使用 Selenium 和 TestNG,正如我在本文中演示的一样,您将获得一个

    非常好的测试驱动,并从依赖性测试以及参数测试中获得巨大的优势。尝试使用 Selenium 和

    TestNG 吧,您的用户将为此感谢您。

    参考资料

    学习


    获得产品和技术

    • 下载 Selenium:直接在 IE 或 Firefox 上运行用户验收测试。

    • 下载 TestNG:一种灵活的测试框架,可用于驱动 Selenium 测试。

    • 下载 Cargo:使 Web 应用程序的可重复测试更加简单。

    • 下载 DbUnit:在运行测试时,将数据库置于已知的状态。


    讨论



    关于作者

    Andrew Glover 是 Stelligent Incorporated 的总裁,这家公司用有效的开发人员测试策略和能够让团队在早期经常地监控代码质量的持续集成技术,帮助企业解决软件质量问题。请查阅 Andy 的 blog,查看他已出版作品的列表。


     

  • 个人技能发展方向

    sihanjishu 发布于 2008-08-21 19:19:27

    记得以前有一个同事曾经说过,人不能精通所有的技能。
    她说的所有是指自动化测试,性能测试,和手工测试。在她看来,这些东西是没有时间和机会去深入研究的。
    但是自己一直没有被这句话打倒,一直在努力学习。后来发现,要想同时掌握多项技能。真的是很难。
    即使自己肯努力,也没有时间和项目让自己去锻炼这些,很多的技能一直停留在表面的技术上。
    所以,自己精简了自己的学习方向,争取让自己的技能能够先精通,再广泛。

    重新去解释,是因为看到别人收藏了这个文章,所以,为了怕别人误解,我从新解释一下。
    需要重点努力的方向。

    开发能力

    1、c++
    c++无疑是最强大的语言,提供的指针概念让c++具有很大的作用,c++风格也影响了很多的后来语言,包括java和c#,了解c编程,同时也有机会深入系统的底层,对计算机的很多理解会有更深层次的理解。
    早期,一直用来写一些木马,病毒,和系统工具。以高效著称。
    c#和java封装了太多的东西,让人没有机会去接触系统底层的东西,也同时 限制了人的知识面。

    2、c#
    高效的开发语言,优秀的语法风格和整体架构。接近完美的一种语言。用来开发常用的客户端工具,比较快速。
    c#也是微软的重点推广项目,学习他也可以跟上微软的节奏。对于以后从事微软系的工作是非常有帮助的。

    3、python

    python新兴的解释型的语言,具备了很多优秀的结构和语言,因为是解释型的。所以,开发起来方便修改,其他人写的程序都是公开代码的,所以,方便自己的学习。同时python具有非常广泛的类库或者模块,扩展性极强。很多的东西可以复用。
    python具有跨平台的作用,对于快速的开发其他平台的工具,或者进行操作是非常有帮助的。
    我是看重了他的简约和强大的类库。
    写一些小型的工具,爬虫,发送请求,批量操作,数据嗅探,等应用,非常简单。

    4、汇编

    之所以,保留这个,是因为要理解系统底层,这个是少不了的。
    汇编在操纵底层方面是最强的,具有其他语言没有的一些特性。
    在软件破解,反向分析,病毒免杀方面有用,自己以前喜欢黑客,所以,这个技能也不舍得丢。
    项目中用到的很少。

    web技能
    1、javascrīpt & vbscrīpt & ajax
    javascrīpt将是以后主流的web客户端开发语言,很多的逻辑和操纵都依赖javascrīpt,测试必备技能。
    vbscrīpt和javascrīpt一样的功能,因为qtp是扩展的vbscrīpt语言,所以,这个东西也是需要熟悉的。
    ajax很简单,以后的用处也很大,所以,这个也非常重要。对于测试程序,操纵web页面是非常有帮助的。

    2、asp.net & soap
    web服务端的开发技能总要具有一项吧,asp已经落伍了,jsp,php,asp.net将是非常流行的。
    asp已经掌握了,没有必要学习了。asp的重要性也大大降低,所以,就放弃了。
    因为自己以前从事微软的方向,所以,asp.net是应该掌握的。况且它也可以快速开发一些应用,也是非常好的一门技能。对于熟悉web服务端技术,是有一定帮助的。
    soap是以后web的一个方向,发展很快,以后的项目,可能会遇到。

    3、css &html & xml & xpath
    html就不说了,css也是需要掌握的,况且css除了定义样式外,还具有js执行功能。所以,是需要掌握的。
    xpath也是一个方向,现在不会,感觉有必要掌握。

    4、jsp
    脱离了微软系,java将是老大,jsp是服务器端非常重要的开发工具,测试项目也肯定会有的。以后的重要性可能会上升。

    os平台

    1、windows
    2、red hat linux
    测试肯定是需要跨平台的,尤其是测试weblogic等中间件服务器。或者其他的linux的服务器架构。
    很多的应用也是架构在linux,unix上的。

    3、ubuntu
    自己玩,发展最快的linux桌面产品。对于熟悉linux,是个不错的入门。

    web应用服务器
    1、iis
    2、apache&tomcat
    3、weblogic&websphere

    数据库服务器
    1、ms sql server & t-sql
    2、oracle

    现在的应用都是离不开数据库的,sql是必须熟悉的。

    测试工具
    1、QTP
    2、Loadrunner
    3、微软的maui,mita和其他自动化测试技术。
    4、TD & QC
    5、selenium

    常用的工具,有商业的,也有开源的,只是为全面掌握测试的具体技术。


    network技术

    1、数据嗅探(tcp,udp,http,soap,snmp)
    2、网络分析
    2、数据包分析、数据包修改

    测试和hack都是有帮助的技能。


    办公处理

    1、word & excel & access 高级应用,会定义格式,定义函数

    office办公,这些是少不了的。日常使用。


    沟通和管理
    1、沟通能力
    2、组织能力
    3、管理能力

    决定个人发展生涯的三项软技能,描述很短,但是内容很多,没有实用的教材,靠自己的领悟能力。
    要想人生突破,这个是必须跨越的。

    外语能力

    1、英语,要达到与外国人顺畅沟通的程度。专注此一样。


    hack能力

    1、注入
    2、跨站

    基本的安全测试是需要的。平时hack也是非常有用的技能。hack将作为自己的一个业务能力。对于以后打击网络犯罪,帮助朋友解决安全问题是非常有用的。

  • Apache 性能调优(编撰)

    pcl2004_27 发布于 2008-12-02 13:59:22

      Apache音译为阿帕奇,是北美印第安人的一个部落,叫阿帕奇族,在美国的西南部。相传阿帕奇是一个武士,他英勇善战,且战无不胜,被印第安人奉为勇敢和胜利的代表,因此后人便用他的名字为印第安部落命名,而阿帕奇族在印第安史上也以强悍著称。Apache是世界使用排名第一的Web服务器。它可以运行在几乎所有广泛使用的计算机平台上。

      在进行web性能容量规划的时候首先利用Apahce首先计算内存消耗:

      apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2

      apache_max_process = apache_max_process_with_good_perfermance * 1.5

      为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。

      例子1:

      一个apache + mod_php的服务器:一个apache进程一般需要4M内存

      因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500

      apache_max_process = 500 * 1.5 = 750

      所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。

      例子2:

      一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存

      在一个2G内存的机器上:

      apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000

      apache_max_process = 2000 * 1.5 = 3000

      Apache所在的机器与操作系统环境是对性能影响最大因素,很明显,一以368的PC与一台P4或双处理器的机器不会有同样的性能。不过,如果不涉及硬件的改变,我们可以做的最大的事是首先看一下Apache是否运行在一台专用的服务器上,如果与其它应用共用一台服务器肯定会影响服务器的性能。

      在大多数情况下,告别是对静态网站而言,内存数量是一个影响性能的关键因素,因为它决定了Apache可以缓存多少内容。它缓存的内容越多,在硬盘上读取内容的机会就越少,而存取硬盘上的特定文件是一件很费时的操作。如果你的网站主要是一些静态内容,你最好使用mod_cache选项,如果你的内存足够大,可以使用mod_mem_cache选项。

      第一个选项将信息缓存在磁盘上,当它与mod_include选项一起使用时会有很好的效果,这个选项在建立一个页面时在缓存中保存它的最终版本。使用mod_mem_cache将缓存内容保存在一个可以被所有Apache进程共享的内存堆中。

      使用更快的磁盘或进一步使用RAID可以提高Apache对磁盘文件的访问速度。注意,如果你做了下面的所有这些优化,一个硬件的(而非软件)升级方案是更好的选择。最后一个谈到的关于硬件的问题是CPU能力,这对动态内容网站的影响很大,动态内容越多要求越高。

      以下是影响Apache的性能配置参数:

      Timeout  300

      指定站点响应的时间秒数。若超过这段时间仍未收到或送出数据,就断开连接。意思是该参数指定Apache在接收请求或发送所请求内容之前的最长等待时间(秒),若超过该时间Apache则放弃处理该请求,并释放连接。该参数默认值为120,推荐设置为60,对于访问量较大的网站可以设置为30。

      KeepAlive On|Off

      启用此项,表示允许保持持久连接,让每次连接能提出多个请求。避免每请求一个文件就跟服务器建立一次连接。也就是控制Apache是否允许在一个连接中有多个请求,默认打开。但对于大多数论坛类型站点来说,通常设置为off以关闭该支持。

      MaxKeepAliveRequests 100

      每次连接可提出请求的数量,设置为0表示数量不限,默认值为100。.

      KeepAliveTimeout 15

      连续两个请求之间的时间如果超过15秒还未到达,则视为连接中断。这种做法可以最大限度地利用有限的资源,这也是Apache性能如此优越的原因之一。

      MinSpareServers 5

      MaxSpareServers 20

      Apache在运行时会根据负载的轻重自动调整空闲子进程的数目。

      提供浏览服务的httpd进程的数目需要随连接数目的多少而变化,因此需要随时保持几个闲置的httpd进程等候新的连接请求。若闲置的进程数少于5个(默认值),则表示闲置进程太少,需要将其增加到5个;

      若多于20个(默认值)则表示闲置进程太多,需将其减少到20个。

      MaxClients 150

      同时接入的数目太多时会降低系统访问性能,设置此参数可限制同时连接的最大数值,默认值为150,它设定的就是Apache可以同时处理的请求,这是对Apache性能影响最大的参数

      MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一时间内最多允许有多少客户端能够与其连接,如果超过MaxClients个连接,客户端将会得到一个“服务器繁忙”的错误页面。我们看到默认情况下MaxClients设置为15,这对一些中型站点和大型站点显然是远远不够的!也许您需要同时允许512个客户端连接才能满足应用需求,好吧,那么就让我们把MaxClients修改为512,保存httpd.conf并退出,重启Apache,很遗憾,在重启过程当中您看到了一些错误提示,Apache重启失败。错误提示中告诉您 MaxClients最大只能设定为256,相信您一定很失望。不过不要沮丧,Apache作为世界一流的Web Server一定不会如此单薄的!在默认情况下,MaxClients的确只能设定为不超过256的整数,但是,如果您有需要完全可以随意定制,此时就需要使用ServerLimit参数来配合使用,简单的说ServerLimit就像是水桶,而MaxClients就像是水,您可以通过更换更大的水桶(将ServerLimit设定为一个较大值)来容纳更多的水(MaxClients),但要注意,MaxClients的设定数值是不能大于 ServerLimit的设定数值的!下面让我们了解一下MaxRequestPerChild参数,该参数指定一个连接进程中可以有多少个线程同时工作。也许这样解释过于专业,那么您只要想想“网络蚂蚁”、“网际快车FlashGet”中的“多点同时下载”即可,该参数实际上就是限制最多可以用几个“点”。默认设置为0,即为:不限制。但需要注意,如果将该值设置的过小会引起访问问题,如果没有特殊需要或者访问量压力并非很大可以保持默认值,如果访问量很大则推荐设置为2048

      优化建议:

      # 升级 Apache 到最新版本,新版本往往包含性能提升和安全更新。

      # 在 httpd.conf 中设置 "HostNameLookups off" 能避免针对每个访问者的 DNS 域名的反向查询。

      # 对于繁忙的网站,在 httpd.conf 中设置 "MaxClients 230" 或者更高。这项设置让更多的 httpd 进程同时响应请求,并避免了处理器排队的情况发生。

      # 采用另外一台服务器处理图片文件。

      # 缺保您的 Web 页面和 CGI 页面采用了浏览器缓冲技术。具体的文章可以参考本站:采用 mod_gzip 加速 Zope 和 Apache

      # 保持您的 Apache 苗条,编译那些仅仅需要的模块,在编译之前,修改 src/Configuration 文件,在那些不需要的模块之前用 # 号注释掉。

      # 如果不需要流量日志,那么把 httpd.conf 中的 TransferLog 指向到 /dev/null/

      # 除非你确定使用 .htaccess 文件来控制一些目录的权限,否则设置 "AllowOverride None" ,这样就免去 Apache 在每个目录搜索 .htaccess 文件的劳役之苦。

      # 不要让不需要的后台进程运行。

      # 千万不要把页面或者日志文件写到网络磁盘上,例如 NFS。

      # 不要让 Apache (httpd) 运行于 inetd 模式。

      # 不要让 X Windows 运行在你的 Web 服务器上,用 Ctrl-Alt-Backspace 关闭 X 。

      # 避免使用 SSI tag。

      # 在 CGI 脚本中:

      * 文件 I/O:打开的文件数目越少越好。

      * Shell 命令:采用全路径来调用 shell 命令。

      * 如果你的网站主要以 CGI 来驱动,那么请使用 mod_perl。

      * 在你的 Web 页面目录中,不要让文件数超过 1000 个,文件越多花费在定位上的时间也越多。

      # 在 Web 服务器上的图片越少越好,保证每个图片都经由图片压缩器运行。

      # 对你的网站做压力测试,建议采用 Apache 自带的 ab 命令来测试。

      # 为了最好的性能,最好把网线拔掉,这样你的 Web 服务器就十分安全,而且负载马上降为 0,


  • Java开源框架集[转载]

    fish_yy 发布于 2008-07-24 17:00:37

    Java开源框架集

    原文:http://blog.myspace.cn/1305035574/archive/2008/04/03/400694243.aspx

     
    Spring Framework 【Java开源 J2EE框架】
    Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。 Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务--如果你需要--还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。【SpringIDE:Eclipse平台下一个辅助开发插件】.

    WebWork 【Java开源 Web框架】
    WebWork是由OpenSymphony组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,现在的WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了Xwork1和WebWork2两个项目。 Xwork简洁、灵活功能强大,它是一个标准的Command模式实现,并且完全从web层脱离出来。 Xwork提供了很多核心功能:前端拦截机(interceptor),运行时表单属性验证,类型转换,强大的表达式语言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。 WebWork2建立在Xwork之上,处理HTTP的响应和请求。WebWork2使用ServletDispatcher将HTTP请求的变成Action(业务层Action类), session(会话)application(应用程序)范围的映射,request请求参数映射。WebWork2支持多视图表示,视图部分可以使用JSP, Velocity, FreeMarker, JasperReports,XML等。在WebWork2.2中添加了对AJAX的支持,这支持是构建在DWR与Dojo这两个框架的基础之上.【EclipseWork:用于WebWork辅助开发的一个Eclipse插件】

    Struts 【Java开源 Web框架】
    Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速,在过去的一年中颇受关注。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。【StrutsIDE:用于Struts辅助开发的一个Eclipse插件】

    Hibernate 【Java开源 持久层框架】
    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Eclipse平台下的Hibernate辅助开发工具:【Hibernate Synchronizer】【MiddlegenIDE】

    Quartz 【Java开源 日程安排(Job Schedulers)】
    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的日程序表。Jobs可以做成标准的Java组件或 EJBs。Quartz的最新版本为Quartz 1.5.0。

    Velocity 【Java开源 模板引擎】
    Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。 当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。 Velocity的能力远不止web站点开发这个领域,例如,它可以从模板(template)产生SQL和PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。Velocity也可以为Turbine web开发架构提供模板服务(template service)。Velocity+Turbine提供一个模板服务的方式允许一个web应用以一个真正的MVC模型进行开发。 【VeloEclipse :Velocity在Eclipse平台下的一个辅助开发插件】

    IBATIS 【Java开源 持久层框架】
    使用ibatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象, 这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。相对Hibernate等 “全自动”ORM机制而言,ibatis 以SQL开发的工作量和数据库移植性上的让步,为系统 设计提供了更大的自由空间。作为“全自动”ORM 实现的一种有益补充,ibatis 的出现显 得别具意义。

    Compiere ERP 【Java开源 ERP与客户关系管理】
    这一高价值的商业应用程序,易于安装、易于实施、易于使用。只需要短短几个小时,您就可以使用申购-采购-发票-付款、报价-订单-发票-收款、产品与定价、资产管理、客户关系、供应商关系、员工关系、经营业绩分析等强大功能了!功能未减,实施时间缩减到 4 小时。最重要的是:这一高价值的商业应用程序是免费的!可以自行安装和实施这套系统(如果您略懂 Oracle 和 Java 技术)。
    中文站点:http://www.compiere-china.com/

    Roller Weblogger 【Java开源 博客(Blog)】
    这个weblogging 设计得比较精巧,源代码是很好的学习资料。它支持weblogging应有的特性如:评论功能,所见即所得HTML编辑,TrackBack,提供页面模板,RSS syndication,blogroll管理和提供一个XML-RPC 接口。

    displytag 【Java开源 Jsp标签库】
    与Struts结合使用最出名的一个tag主要是显示表格数据很漂亮、完善。

    JFreeChart 【Java开源 报表制作】
    JFreeChart它主要是用来制作各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。

    Eclipse 【Java开源 开发工具】
    Eclipse平台是IBM向开发源码社区捐赠的开发框架,它之所以出名并不是因为IBM宣称投入开发的资金总数 —4千万美元,而是因为如此巨大的投入所带来的成果:一个成熟的、精心设计的以及可扩展的体系结构。

    Liferay 【Java开源 门户系统】
    代表了完整的J2EE应用,使用了Web、EJB以及JMS等技术,特别是其前台界面部分使用Struts 框架技术,基于XML的portlet配置文件可以自由地动态扩展,使用了Web Services来支持一些远程信息的获取,使用 Apahce Lucene实现全文检索功能。
    主要特点:
    1、提供单一登陆接口,多认证模式(LDAP或SQL);
    2、管理员能通过用户界面轻松管理用户,组,角色;
    3、用户能可以根据需要定制个性化的portal layout;
    4、能够在主流的J2EE应用服务器上运行,如JBoss+Jetty/Tomcat,JOnAS;
    5、支持主流的数据库,如PostgreSQL,MySQL;
    6、使用了第三放的开源项目,如Hibernate, Lucene, Struts;
    7、支持包括中文在内的多种语言;
    8、采用最先进的技术 Java, EJB, JMS, SOAP, XML;

    JetSpeed 【Java开源 门户系统】
    Jetspeed是一个开放源代码的企业信息门户(EIP)的实现, 使用的技术是Java和XML. 用户可以使用浏览器, 支持WAP协议的手机或者其它的设备访问Jetspeed架设的信息门户获取信息. Jetspeed扮演着信息集中器的角色, 它能够把信息集中起来并且很容易地提供给用户.
    Jetspeed具有如下的特征:

    * 即将成为标准化的Java Portlet API
    * 基于模板的布局, 包括JSP和Velocity
    * 通过开放的内容同步技术支持远程XML内容交换
    * 定制默认的主页
    * 使用数据库进行用户认证
    * 内存缓存技术, 加快页面的响应
    * 通过Rich Site Summary技术, 支持同步内容
    * 和Cocoon, WebMacro, Velocity集成.
    * Wireless Markup Language (WML) 支持
    * 使用XML格式的配置文件注册portlet.
    * 完整的Web Application Archive (WAR) 支持
    * Web应用程序开发的基础设施
    * 可以在本地缓存远程内容
    * 与Avantgo同步
    * 可移植到所有支持JDK1.2和Servlet 2.2的平台
    * 与Turbine模块和服务集成
    * 可以根据用户, 安装媒体类型和语言的不同设定, 产生不同的个性化服务
    * 持续化服务使得所由的portlet能够容易的存储每个用户的状态, 页面和portlet
    * 使用皮肤技术使得用户可以选择portlet的颜色和显示属性
    * 自定义功能是的管理员可以选择portlet以及定义个人页面的布局
    * 在数据库中存储PSML
    * 通过Jetspeed的安全portlets管理用户, 组,角色和权限
    * 基于角色对访问portlet进行控制


    JOnAS 【Java开源 EJB服务器】
    JOnAS是一个开放源代码的J2EE实现,在ObjectWeb协会中开发。整合了Tomcat或Jetty成为它的Web容器,以确保符合Servlet 2.3和JSP 1.2规范。JOnAS服务器依赖或实现以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail 。

    Turbine 【Java开源 Web框架】
    Turbine是基于Servlet的框架包,也是开放源代码Jakarta项目。目前还没有关于Turbine的大量文档。它类似于Struts,但是有一些主要区别。突出的一点就是它并没有与JSP耦合。Turbine的特点是它提供了大量可重用的组件。此框架包中包含了大量组件,但是这些组件是离散的。它似乎应该给出更多的组件库,但是由于它缺少文档,所以很难掌握完整的体系结构。

    Tapestry 【Java开源 Web框架】
    Tapestry是一个开源的基于servlet的应用程序框架,它使用组件对象模型来创建动态的,交互的web应用。一个组件就是任意一个带有jwcid属性的html标记。其中jwc的意思是Java Web Component。Tapestry使得java代码与html完全分离,利用这个框架开发大型应用变得轻而易举。并且开发的应用很容易维护和升级。Tapestry支持本地化,其错误报告也很详细。Tapestry主要利用javabean和xml技术进行开发。【Spindle:Tapestry辅助开发Eclipse插件】.

    Lucene 【Java开源 搜索引擎】
    Apache Lucene是一个开放源程序的搜寻器引擎,利用它可以轻易地为Java软件加入全文搜寻功能。Lucene的最主要工作是替文件的每一个字作索引,索引让搜寻的效率比传统的逐字比较大大提高,Lucen提供一组解读,过滤,分析文件,编排和使用索引的API,它的强大之处除了高效和简单外,是最重要的是使使用者可以随时应自已需要自订其功能。

    iText 【Java开源 PDF类库】
    iText是一个能够快速产生PDF文件的java类库。iText的java类对于那些要产生包含文本,表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。使用iText与PDF能够使你正确的控制Servlet的输出。

    Beanshell 【Java开源 脚本语言】
    Beanshell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。BeanShell执行标准Java语句和表达式,另外包括一些脚本命令和语法。它将脚本化对象看作简单闭包方法(simple method closure)来支持,就如同在Perl和JavaScript中的一样。 它具有以下的一些特点:使用Java反射API以提供Java语句和表达式的实时解释执行;可以透明地访问任何Java对象和API;可以在命令行模式、控制台模式、小程序模式和远程线程服务器模式等四种模式下面运行;与在应用程序中一样,可以在小程序中(Applet)正常运行(无需编译器或者类装载器);非常精简的解释器jar文件大小为175k

    OpenCms 【Java开源 内容管理系统(CMS)】
    OpenCms是一个J2EE的产品,它是用Java写成的。它和Tomcat捆绑在一起。但是也能够使用ATG Dynamo、WebLogic和WebSphere。OpenCms支持多种RDBMS来保存内容,包括Oracle、SQL Server、Sybase和mySQL。新版本提供了一个新的模板引擎,JSP支持,一种新的连接管理系统,提高了稳定性。

    JUnit 【Java开源 Java测试工具】
    JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

    opencrx 【Java开源 ERP与客户关系管理】
    opencrx很容易与你现存的系统集成 (ERP, IVR, CTI, ...)是你对你以前投资的最大保护而且openCRX支持大多数通用技术,例如 RMI, CORBA, JMS, SOAP, 以及 JCA; openCRX也包括了支持典型插件的智能前台,例如文档管理,库存跟踪, 设备管理,等. openCRX 可以运行于任意J2EE兼容的应用服务器 (e.g. JBoss, BEA WebLogic or IBM WebSphere) 和主流数据库 (e.g. MaxDB, Firebird, PostgreSQL, MS SQL, Oracle, or IBM DB2). 容易定制 基于 XML 的定制:径直的,迅速的以及可行的(包括多语言特性) 容易扩展写下你自己的工作流,或者发展可扩展的—得益于openCRX的基于组件的体系和像 J2EE,MDA 等的开放标准,这是一个很简单的任务。(摘自http://www.opencrx.com.cn/crx/)

    BlueJ 【Java开源 开发工具】
    BlueJ是一个专门为入门级教学设计的JavaTM 开发环境。它是由澳大利亚墨尔本Monash大学BlueJ小组设计并开发的。

    XWiki 【Java开源 Wiki引擎】
    XWiki是一个强大的Java开源的Wiki引擎。它支持一些受欢迎的特性如:
    * 内容管理(浏览/编辑/预览/保存),
    * 支持附件,
    * 版本控制,
    * 全文本搜索,
    * 权限管理
    * 使用Hibernate进行数据存储,
    * RSS输出与显示外部的RSS feeds,
    * 多语言支持,
    * 提供XML/RPC的API,
    * WYSIWYG HTML编辑器,
    * 导出为PDF
    * Groovy脚本支持等等....。

    EJBCA 【Java开源 网络服务器】
    EJBCA是一个全功能的CA系统软件,它基于J2EE技术,并提供了一个强大的、高性能并基于组件的CA。EJBCA兼具灵活性和平台独立性,能够独立使用,也能和任何J2EE应用程序集成。

    Laszlo 【Java开源 XML用户界面工具包】
    利用OpenLaszlo免费平台可以快速地,简单地开发漂亮Web 应用程序。这些Web应用程序可以运行在当前任何流行的浏览器与桌面操作系统。它只需要一个XML文件。【IDE4Laszlo:Eclipse下的辅助开发工具】

    JXTA 【Java开源 其它开源项目】
    Sun微系统公司公开了旨在建立P2P(Peer to Peer)通用技术基础的JXTA计划。JXTA技术是网络编程和计算的平台,用以解决现代分布计算尤其是点对点(P2P)计算中出现的问题。
    JXTA将建立核心的网络计算技术,提供支持在任何平台、任何地方以及任何时间实现P2P计算的一整套简单、小巧和灵活的机制。JXTA首先将归纳目前P2P的功能特别,而后建立核心的技术来表达目前的P2P计算的局限性。其重点是创建基本的机制,而具体的策略选择权则交给应用的开发者。JXTA将充分利用XML、Java等开放技术,使得UNIX操作系统更强大和灵活,比如利用管道(Pipes)传输Shell命令实现复杂的计算任务。JXTA支持P2P应用的基本功能来建立一个P2P系统,还将努力证实这些可以成为建立更高层功能的基础构造模块。JXTA架构可以分为三个层面:JXTA核心层、JXTA业务层和JXTA应用层。

    最近更新


    --------------------------------------------------------------------------------

    EcSplorer 【Java开源 Eclipse插件】
    EcSplorer(Eclipse Simplified Explorer)是一个类似于 Windows Explorer的Eclipse插件,它可以帮助你在不退出Eclipse的环境下浏览本地文件系统。

    Echo2 【Java开源 AJAX开发】
    Echo2是Echo Web框架的下一代版本。一个可以用于开发基于Web胖客户端应用程序的框架。 这2.0版还是沿用Echo的核心思想但Echo2通过它新的AJAX表现层引擎提供生动的用户界面而且还提高了整体性能和实用性.


    OpenEdit 【Java开源 内容管理系统(CMS)】
    OpenEdit包括三大模块Web内容管理,电子商务,博客。Web内容管理包括在线编辑,动态布局,拼写检查(英文), 用户管理,文件管理,版本控制和通告工具。电子商务模块包括在线产品目录管理,购物车,电子付款,产品展示与产品高级搜索(利用Nutch/Lucene的web爬行与搜索功能进行高级搜索所以不需要用数据库的功能). Blog模块包括在线管理,评论,注册和RSS/Atom引擎。 OpenEdit运用到的开源组件有:Velocity,Dom4j,Spring,Lucene。

    Role Playing Tools 【Java开源 Java游戏】
    这是一个为传统角色扮演游戏提供相关工具的开源项目。当前包括的工具有:MapTool:这是一个可在C/S架构上为多个玩家提供地图与地图数据共享的图形工具。DiceTool:这是一个能够在角色扮演游戏中推测死亡表达式的工具,它还可通过JavaScripts扩展各种计算。TokenTool:方便创建MapTool标记(tokens).


    OpenToro 【Java开源 内容管理系统(CMS)】
    OpenToro是一个可以让我们以灵活和自动的方式来开发web数据库应用程序的工具.利用OpenToro可以省掉在开发一个Web数据库应用程序时编写JSP与SQL代码这样辛苦乏味的工作.利用它就可以很容易地列出数据库中的表格与其它内容并生成可以新增,修改,删除的数据.OpenToro兼容所有支持SQL-92标准语法的数据库如:MySQL,Oracle,Access,与SQL-Server.

    HtmlSave 【Java开源 Eclipse插件】
    这是一个可以把Eclipse编辑器中Java源代码或其它语言的源代码存为HTMl格式的插件。

    eZing Builder 【Java开源 Eclipse插件】
    eZing Builder是一个可以帮助你在很短的时间内开发一个J2EE或MIS应用程序的插件。它类似于PowerBuilder与Visual Web Developer ,但是它使用XQuery来访问XML-DB。

    SNMP4J 【Java开源 网络客户端】
    SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应。SNMP4J是纯面向对象设计与SNMP++(用C++实现SNMPv1/v2c/v3)相类似。

    Sequoia ERP 【Java开源 ERP与客户关系管理】
    Sequoia ERP是一个真正的企业级开源ERP解决方案。它提供的模块包括:电子商务应用(e-commerce), POS系统(point of sales),知识管理,存货与仓库管理,客户服务( customer service)等.Sequoia ERP采用Java开发可部署在Linux/Unix 与Windows平台上,并支持当前主流数据库如:MySQL, PostgreSQL,Oracle,Microsoft SQL Server等关系型数据库.


    jenia4faces 【Java开源 其它开源项目】
    jenia4faces是一个HTML JSF组件包.这个包主要由以下组件组成:Chart- 动态Chart生成。DataTools-DataTable扩展工具。 Dynamic- dhtml text effects。Popup-在html生成弹出式菜单。 Template-简单模板管理器。

    Tagit 【Java开源 Web测试】
    Tagit是模拟对象(Mock Objects)测试模式的一个实现。它可用于在脱离容器的情况下对自定义JSP标签进行单元测试。

    AJAX-JSF Framework 【Java开源 AJAX开发】
    这是一个利用AJAX技术并基于JSF来开发轻量级客户端的框架.它设计成可在现有的JSF组件上进行开发并最大限度的满足标准JSF Web流程.

    Ditchnet JSP Tabs Taglib 【Java开源 Jsp标签库】
    这是一个可用来开发多页选项板(Tabbed Pane)的简单标签。以下是一个Demo:



    Foo is cool!









    SWATO 【Java开源 AJAX开发】
    SWATO (Shift Web Application TO...)是一组可复用并且结合得很好的Java/JavaScript包.它通过AJAX来轻松转变你web应用程序的交互方式.它带的一些组件包括可以自动补全的文本框架,动态级联下拉列表,动态表单等.

    Simple Web Framework 【Java开源 Web框架】
    Simple Web Framework (SWF)是一个基于事件的web框架.它很适合于那些想要开发胖客户端Web应用程序但又不想转向JSF的Struts开发人员。SWF跟Struts一样也是构建在Jakarta commons基础之上,但使用一个不同的request processor。SWF事件模型支持基于XmlHttpRequest的事件提交。

    Taconite 【Java开源 AJAX开发】
    Taconite是一个基于J2EE的框架,可以利用这个框架来简化Ajax开发。Taconite包含一个客户端JavaScript包与一组能自动处理Ajax请求并生成动态内容的自定义JSP标签。

    Sequoia 【Java开源 JDBC驱动器】
    Sequoia是一个能够为任何数据库提供群集,负载平衡和容错服务的中间件。Sequoia是C-JDBC项目的扩展。

    RIFE/Crud 【Java开源 Web框架】
    RIFE/Crud是RIFE Web框架的一个扩展模块,它可以用给定的POJOs自动生成CRUD web应用程序。它没有生成任何文件所有的事件都是在运行期进行.利用RIFE提供的 site-structure可以把它与你应用程序的数据流与逻辑流相结合.

    Tacos 【Java开源 AJAX开发】
    Tacos类包项目为Tapestry Web框架提供一些高性能的组件,同时也为在页面或自己组件中使用的ajax框架(它当前支持的框架主要是dojo但也支持Prototype,script.aculo.us ,Rico)提供服务端Java支持。

    JSON-RPC-Java 【Java开源 AJAX开发】
    JSON-RPC-Java是一个用Java来实现动态JSON-RPC的框架. 利用它内置的一个轻级量JSON-RPC JavaScripIt客户端,可以让你透明地在JavaScript中调用Java代码。JSON-RPC-Java可运行在Servlet容器中如Tomcat也可以运行在JBoss与其它J2EE应用服务器中因此可以在一个基于JavaScript与DHTML的Web应用程序中利用它来直接调用普通Java方法与EJB方法。JSON:JavaScript Object Notation

    Jofti 【Java开源 其它开源项目】
    Jofti可对在缓存层中(支持EHCache,JBossCache和OSCache)的对象或在支持Map接口的存储结构中的对象进行索引与搜索。这个框架还为对象在索引中的增删改提供透明的功能同样也为搜索提供易于使用的查询功能。

    Yan 【Java开源 IOC容器】
    Yan是一个非侵入式的对象反转控制容器(IOC容器)。它通过宣告式的方式把简单的组件组合起来从而构建出任意复杂的组件。这些简单的组件同样也有可能是由其它更简单的组件组合而成。Yan的特点包括开放式的结构,灵活的组件组合,宣告式API和插件式的生命周期管理。Yan对依赖注入的方法没有约束,它可以对商业对象的Public构造方法进行注入,也可以对java bean getter/setter,有规则的java method,任意变量及它们的任意组合进行注入。

    Continuum 【Java开源 系统构建】
    Continuum可用于Java项目构建的持续集成,使用简单。它内置支持Maven 2,Maven 1, Ant和Shell Scripts.

    Winstone 【Java开源 Web服务器】
    Winstone是一个Servlet容器,它的目的是提供Servlet功能但没有完全采用J2EE规范.如果有时你要想的只是一个简单的Servlet容器,Winstone是一个最好的解决方案.它支持servlet2.4与JSP2.0规范.

    Eclipse 3.1.1 translations 【Java开源 Eclipse插件】
    Eclipse 3.1.1和其它Eclipse工具( Visual Editor (VE) , UML2,GEF,EMF / XSD ,WTP等)发布各种语言支持包。其中包括支持中文的NLpack1包。
    详细可查看以下网址:
    http://eclipse.org/org/press-release/20051012nlscb.html.

    下载地址:
    Windows 98/ME/2000/XP
    NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip
    NLpack1-eclipse-SDK-3.1.1a-win32.zip

    Linux (x86/GTK 2)
    NLpack1_FeatureOverlay-eclipse-SDK-3.1.1.zip
    NLpack1-eclipse-SDK-3.1.1a-gtk.zip

    Tonic Look & Feel 【Java开源 Swing外观】
    这是Swing金属(Metal)外观的免费实现方案.


    Commons-IO 【Java开源 Apache其它开源】
    Commons IO是Jakarta Commons项目的一个子项目。用来帮助进行IO功能开发.它包含三个主要的领域:Utility classes-提供一些静态方法来完成公共任务.Filters-提供文件过滤器的各种实现.Streams-提供实用的Stream,reader与writer实现.

    Datastream Pro 【Java开源 SQL客户端】
    Datastream Pro是一个数据库"浏览器"和数据操作工具.它易于使用,可靠,稳定,操作直观。Datastream Pro支持所有兼容JDBC的数据库(已经在Oracle,MySQL,postgreSQL和HSQLDb上测试成功).利用它可以浏览与编辑数据库中的数据,可在一个友好的界面中运行与编辑SQL脚本,可使用查询编辑器来编辑SQL查询,可同时连接到多个数据库和易于使用的连接向导等。


    Viento 【Java开源 模板引擎】
    Viento是一个用Java开发的模板语言。它在语句构成上很多情形下有点类于Velocity 。

    JBoss Microcontainer 【Java开源 IOC容器】
    JBoss Microcontainer是一个轻量级IOC容器,它的思想类似于Spring,Pico Container与Plexus。JBoss Microcontainer可被用在任何应用程序中而不需要JBoss应用服务器。 它是JBoss Seam和JBoss Embeddable EJB 3.0项目的基础支柱。这里有一篇英文简介文章。

    RadRails 【Java开源 Eclipse插件】
    RadRails是一个Ruby on Rails框架的IDE。Eclipse更新站点为http://www.radrails.org/update。


    opencsv 【Java开源 其它开源项目】
    opencsv一个简单的CSV解析Java包。

    Bugzilla 【Java开源 Bug追踪系统】
    Bugzilla是一个Bug追踪系统设计用来帮助你管理软件开发。

    WebMacro 【Java开源 模板引擎】
    WebMacro是一种Java开源的模板语言。对于表现web页面,它比JSP,PHP,与ASP效率更高。WebMacro是一些大网站后台的页面生成技术。

    ECP 【Java开源 Eclipse插件】
    Eclipse CORBA Plugin (ECP)提供一个可针对CORBA IDL文件语法进行着色的编辑器。

    RDT 【Java开源 Eclipse插件】
    RDT是一个用于Ruby开发的Eclipse插件.它提供的功能包括:语法高亮显示,快速语法分析,图形大纲,单元测试,内容提示,源码格式和一个正则表达式插件等。


    Commons-Email 【Java开源 Apache其它开源】
    Commons-Email的目的是提供一组用于发送Email的API,它基于Java Mail API基础之上并进行了简化。它提供的主要Java类有:SimpleEmail:这个类用于发送简单的文本类型email。MultiPartEmail:这个类允许发送文本消息并附带附件。HtmlEmail:用于发送Html格式的附件并支持内含图片。EmailAttachment:这是一个简单的容器类用于简化附件的处理。

    UISpec4J 【Java开源 Java测试工具】
    UISpec4J是专门用于Swing应用程序单元测试的一个开源组件,它构建在JUnit测试套件的基础之上.UISpec4J让Java GUI测试变得很简单.它的特殊之处在于它的APIs设计成尽可能地隐藏Swing的复杂性,因此易于测试脚本的读与写.以下这它的简单例子:
    public void testContacts() {
    Table contacts = getMainWindow().getTable();
    contacts.assertContentEquals(new Object[][]{
    {"John", "12", Boolean.FALSE},
    {"Sylvia", "43", Boolean.TRUE},
    {"Bill", "31", Boolean.FALSE}
    });
    }


    e-Gen Developer 【Java开源 开发工具】
    e-Gen Developer是一个快速应用程序开发(RAD)环境。利用它能够进行Web应用程序的高产开发。e-Gen Developer完全采用Java开发并基于JSF2.8与Struts框架。e-Gen的主要目的是克服IT管理所面对的一些相关挑战如:提高开发效率,减少维护成本与减少训练团队成员所需要的时间。

    JavaGroups 【Java开源 网络服务器】
    JavaGroups是一个群组通讯工具包。它基于IP组播(multicast),但利用可靠性与群组从属关系对它进行扩展。

    UIState 【Java开源 其它开源项目】
    UIState是一个非侵入式的用户界面状态(state)管理器用于Java Swing胖客户端应用程序中.UIState允许应用程序恢复它们的GUI状态当应用程序在使用或在多个应用程序之间进行对话时.比如:假如你的应用程序使用JInternalFrame来显示MDI界面的时候,UIState将会为你管理frame的位置和大小.

    XINS 【Java开源 其它开源项目】
    XINS是一项规范技术用于定义,创建和调用远程APIs。当API规范在XML文档中定义好之后,XINS将会把它们转换成包括客户端与服务端的HTML文档与Java代码.XINS将与复杂的SOAP技术竞争,因为它被设计得具有简单性,可扩缩性与可测试性。简要地说就是:SOA+Java+XML+ 代码生成-复杂性 => XINS。


    Fujaba Tool Suite 【Java开源 UML建模】
    Fujaba Tool Suite结合UML类图与UML行为视图来提供一个强大,易于使用,而且是整齐均称的系统设计与规范语言. 而且Fujaba Tool Suite还支持从整个系统设计生成Java源代码从完美地实现了一个可执行的模型.同样也支持相反操作,因此源代码可以被解析并被表现在UML中.


    EJOE 【Java开源 网络服务器】
    EJOE是一个轻量级C/S(client/server)组件用于发送与接收Java对象通过使用外挂式的序列化(serializing)机制.EJOE提供三种功能:1.一个多线程,高性能的网络IO服务器和一个相应的客户端组件。2.序列化所有通过客户端发送的输入对象和由你商业逻辑提供的返回对象。3.提供一个简单,清晰,唯一的接口来把一个对象请求代理集成到你的应用程序中。

    JWP 【Java开源 其它开源项目】
    Java Web Parts为所有Web应用程序开发者提供了一些可以重复使用和几乎相互独立的Java组件。你可以把这个项目想象成类似于Jakarta Commons项目。JWP包括以下这些组件:AjaxTags一个标签库可以为一个页面轻松地添加AJAX 功能而几乎不用改变现存的JSP代码。DependencyFilter:这个一个简单易用并且是基于declarative(声明)模式的灵活IoC组件。此外它还包括一些过滤器(比如: CompressionFilter,SessionLimiterFilter,
    RequestRecorderFilter,AppAvailabilityFilter,
    ParameterMungerFilter等),各种用来处理Request, Response与Session的工具类与其它其它一些标签库。

    Jencks 【Java开源 其它开源项目】
    Jencks是一个轻量级的JCA容器。它可以轻松部署到Spring中以提供消息驱动的POJOs.此外Jencks通过使用类似于JMS,JAX-RPC,JBI与JCA CCI的API来提供对inbound与outbound消息的支持,同时还提供一个基于XA的JDBC连接池机制。

    Celtix 【Java开源 企业应用集成(EAI)】
    Celtix提供了一个运行期Java企业服务总线和一组可扩展的API.通过使用一个基于标准的,面向服务的体系来简化商业与技术组件的构建,集成和灵活重复使用。


    Seam 【Java开源 J2EE框架】
    Seam是一个Java EE 5框架。它通过把JSF与EJB3.0组件合并在一起,从而为开发基于Web的企业应用程序提供一个最新的模式。Seam可以让你把EJB组件直接绑定到JSF页面。Seam还可帮助你把jBPM流程定义直接地集成到你的应用程序中。

    Saxon 【Java开源 其它开源项目】
    Saxon是一个开源的XSLT与XQuery处理器.

    AjaxAnywhere 【Java开源 AJAX开发】
    AjaxAnywhere被设计成能够把任何一套现存的JSP组件转换成AJAX感知组件而不需要复杂的JavaScript编码.它利用标签把Web页面简单地划分成几个区域,然后使用AjaxAnywhere来刷新那些需要被更新地区域.


    Tapestry Palette 【Java开源 Eclipse插件】
    Tapestry Palette构建在Spindle插件的基础上.这个插件为Tapestry开发者提供了以下功能:以tree-view的方式来显示在一个项目中所用到的组件.可从tree-view拖放组件到一个页面中.可从远程以拖放的方式下载和安装组件并可直接使用.它还提供一个用于编辑组件参数的property sheet等这里有一个展示该插件功能的Flash.

    EasyEclipse 【Java开源 开发工具】
    EasyEclipse这是一个把EclipseIDE与一些关键的开源插件分类打包在一起.以使得Eclipse更易于下载,安装,使用.以下是它目前提供的分类组合.
    相应的包
    版本 日期 下 载
    EasyEclipse Core EasyEclipse 0.8.1 based on Eclipse 3.1M6 - preview 2005/6/23 下 载
    Extensions-Application Servers JBoss IDE & XDoclets support for EasyEclipse 0.8.0 - version 1.4.1 2005/6/13 下 载
    Extensions-Building/Deploying FatJar Jar exporter for EasyEclipse 0.8.0 - version 0.0.18 2005/6/6 下 载
    Extensions-Core Libraries Eclipse Tools (EMF, XSD, SDO, GEF, JEM) for EasyEclipse 0.8.0 2005/6/13 下 载
    Extensions-Databases Hibernate Tools for EasyEclipse 0.8.0 - version 3.0 Alpha1 2005/6/13 下 载
    Extensions-Editing Eclipse Colorer Editor for EasyEclipse 0.8.0 & 0.9.0 - version 0.7.1 2005/8/8 下 载
    Extensions-GUI Builders Eclipse Visual Editor for EasyEclipse 0.8.0 - version 1.0.0M4 2005/6/13 下 载
    Extensions-Language:AspectJ Eclipse AspectJ for EasyEclipse 0.8.0 - version 1.2.0 2005/6/13 下 载
    Extensions-Language:C/C++ Eclipse C/C++ Development Tool for EasyEclipse 0.8.0 - version 3.0.0M6 2005/6/13 下 载
    Extensions-MVC Web Frameworks Strutsbox for EasyEclipse 0.8.0 - version 1.0b 2005/6/13 下 载
    Extensions-Plug-in Development Eclipse Plug-in Development Environment for EasyEclipse 0.8.0 - version 3.1M6 2005/6/13 下 载
    Extensions-Utilities Regex-Regex Tester for EasyEclipse 0.8.0 - version 1.0.0 2005/6/13 下 载
    Extensions-Version Control Subclipse with JavaSVN for EasyEclipse 0.8.0 - versions 0.9.30 2005/6/13 下 载
    Extensions-Web Development Eclipse Web Tools for EasyEclipse 0.8.0 - version 1.0.0M4 2005/6/13 下载


    JBossProfiler 【Java开源 剖析工具(Profiler)】
    JBossProfiler是一个利用JVMPI系统基于log的剖析器。它使用一个C开发的代理从JVM捕获事件并把它们记录到磁盘中。一个运行在JBoss或其它机器上的Web应用程序可被用来分析这些日记。

    Yoix 【Java开源 脚本语言】
    由AT&T实验室研究的Yoix脚本语言是一个多用途的(general-purpose)编程语言.它使用C与Java开发人员所熟悉的的语法和函数.它不是一个面向对象语言,但利用超过150种对象类型来提供对大多数标准Java classe的访问.由于Yoix的解释器(interpreter)完全使用纯Java技术进行构建,因此也能够利用Yoix开发具有跨平台,网络与线程能力的应用程序,还可用于开发GUI应用程序.Yoix语言特性包括指针,寻址,声明,全局与局部变量.

    SwiXAT 【Java开源 XML用户界面工具包】
    SwiXAT是一个基于Swing的XUL框架用于快速和简化GUI Java应用程序开发.它实现了一个真正的MVC框架,其中利用XML来定义表现层(SwiXml作为XUL引擎),而BeanShell脚本语言用做控制器,并利用JXPath作为view与model之间的绑定机制.


    ICM 【Java开源 内容管理系统(CMS)】
    ICM(Instant Content Management )是一个开源的Web内容管理系统. 最终用户可以编辑自己的主页以所见即所得的方式.而web设计者有更高级的管理选项并可使用各种标准模板语言来组合一个站点.

    Connla 【Java开源 PDF类库】
    Connla是一个Java包用于创建可导成TXT,CSV,HTML,XHTML,XML,PDF和XLS等格式的数据集。


    Webcockpit 【Java开源 其它开源项目】
    Webcockpit是一个web应用程序生成器。它能够生成包含图形(使用JFreeChart 和Cewolf)与HTML表格的完整JSP Web应用程序。图表与表格的内容来自SQL查询。Webcockpit从一个XML配置文件生成JSP页面。

    Jen 【Java开源 字节码操作】
    Jen为字节码操作与生成提供一组高级API.利用它可以对Java classe进行重命名,把一个数据成员(Field)改成Public访问权限和新增一个构建函数等操作。Jen基于ASM2.1并完全支持Java5注释(annotations)与范型(Generics)。此外它还提供一组额外的工具类用于在运行期生成新的classes。

    JyDT 【Java开源 Eclipse插件】
    Jython开发工具。

    CDT 【Java开源 Eclipse插件】
    C/C++在Eclipse平台下的开发工具.它提供的功能包括:C/C++编辑器(一些基本的功能:语法高亮显示,代码编辑等),C/C++调试器,C/C++ Launcher,剖析器,内容提示,Makefile生成器等。

    EclipseWork 【Java开源 Eclipse插件】
    EclipseWork是一个用于开发WebWork的一个插件.它有很多向导用于创建WebWork Action和利用Hibernate与Prevayler来为应用程序添加增删改查(CRUD)功能.EclipseWork还能生成JSP,Velocity和Freemarker代码.EclipseWork还是一个可扩展的插件你可以编写自己的Eclipse向导而不需要了解Eclipse插件API,你所要做地只是编辑XML和用于生成代码的Velocity模板.EclipseWork将会解析XML并打开这个自定义的向导.在它主页上还提供许多Flash教程。

    FacesIDE 【Java开源 Eclipse插件】
    FacesIDE是一个用于开发JSF的Eclispe插件.它可以可视化编辑faces-config.xml文件并且提供代码编辑与校验,预览JSF的JSP文件.FacesIDE包含MyFaces来作为JSF的实现.这个插件类似于StrutsIDE.


    JDOInstruments 【Java开源 数据库】
    JDOInstruments是一个用Java开发的嵌入式面向对象数据库.它还实现了Sun的JDO规范用于Java对象的透明持久化.它可运行在windows2000, windows2003 64bits,和Linux(Fedora Core2)平台上.


    EPIC 【Java开源 Eclipse插件】
    EPIC是一个开源的Perl开发工具.支持语法高亮显示,快速语法检查,内容帮助,perldoc支持,源码格式,模板支持和一个Perl调试器.


    GeoAPI 【Java开源 其它开源项目】
    GeoAPI为OpenGIS规范提供一组Java接口。

    FINA 【Java开源 其它开源项目】
    FINA是一个三层J2EE应用程序用于从一些金融机构(如银行,投资公司等)接收数据,然后把数据存储到DB (Oracle/MSSQL/DB2)数据库中并生成相应的报表. FINA是一个完全可定制的和综合的强大报表设计器.

    XSM 【Java开源 内容管理系统(CMS)】
    XSM(eXtensible Site Manager)下一代的web网站管理系统。它能够让用户轻松地在线管理它们的网站,并同时在服务器上维护一个静态的网站。

    QOLdap 【Java开源 Eclipse插件】
    QOLdap是一个Eclipse平台下LDAP目录浏览器.

    JDots 【Java开源 其它开源项目】
    JDots(Java Dynamic Object Tree System)是一个很小的Java包,它能够让Java开发者构建一棵Java对象树,这些对象之间还可互相通信.一个对象可以发送一个方法调用到它的父节点或子节点对象.参数只能是可包含任何数据格式的TagLists类型.

    MiddlegenIDE 【Java开源 Eclipse插件】
    MiddlegenIDE是一个Middlegen在Eclipse下的插件,它可生成映射文件,JavaBean源码,配置文件和导入相关的jar.而你所要做的只是配置好数据库连接信息和选择要生成映射文件与Java类的数据库表.MiddlegenIDE当前版本只支持生成Hibernate映射文件与JavaBean源码.

    Stripes 【Java开源 Web框架】
    Stripes是一个视图框架用于利用最新的Java技术来构建Web应用程序.它具有以下特点:不需要对每一page/action进行映射配置(ActionBeans将自动被发现,它利用注释进行配置),强大的绑定引擎用于构建复杂并脱离请求参数(request parameter)的web对象,易于使用并可本地化的验证与类型转换系统.可重复使用ActionBean作为视图帮助类.支持一个form对应多个事件.透明的文件上传能力.支持持续开发(比如在构思你的ActionBean之前可以先构建与测试JSP)等.

    Flow4J 【Java开源 工作流(Workflow)】
    Flow4J是一个可在Eclipse平台下以拖放的方式进行工作流建模的插件.一个工作流程可包含许多流程步骤(在该项目中叫作flowlet),然后这些步骤可接连在一起组合成复杂的流程.所有流程将包含以下两种类型的flowlet:Control Flowlets如开始,判断与跳转Flowlets这些将在Eclipse中配置.另一种类型是Task Flowlets:它是一个包含特定任务的Java类,包含的功能可以是任何事件的如EJB调用或JNI调用,这些任务还可用一些脚本语言如Jython,Groovy,JavaScript等来进行开发.当在Eclipse中设计完这些流程之后,所有流程的Java源代码将自动创建.


    Crispy 【Java开源 Web服务】
    利用Crispy提供的一个统一接口,你可以调用RMI,WebService,REST,XML-RPC,EJB,Burlap,Hessian等其它服务.你不需要知道这些服务是怎样工作的,要调用的服务类型可在properties文件中定义.远程调用就像简单Java对象调用一样,你可以把Crispy集成到一个SOA(Service Oriented Architecture)或RCP(Rich Client Platform)中.

    XRadar 【Java开源 项目管理】
    这是一个软件开发状况(包括版本,时间,测试,效率,程序代码等等)分析工具. 它会将其绘制成图表来分析,并可以以时间轴输出HTML/SVG报表.

    XMoon 【Java开源 Web框架】
    XMoon扩展自Jakarta Struts框架用于开发处理基于XML或一些脚本语言(如: BeanShell, JRuby, JudoScript, Jython,Rhino)的Web应用程序.它还提供一个用于展示该框架宠物店Demo.


    Voice Tools project 【Java开源 Eclipse插件】
    它为JSP/J2EE领域中的Voice Application提供一组基于Eclipse的开发工具.

    Red-Piranha 【Java开源 搜索引擎】
    Red-Piranha是一个开源搜索系统,它能够真正"学习"你所要查找的是什么.Red-Piranha可作为你桌面系统(Windows,Linux与Mac)的个人搜索引擎,或企业内部网搜索引擎,或为你的网站提供搜索功能,或作为一个P2P搜索引擎,或与wiki结合作为一个知识/文档管理解决方案,或搜索你要的RSS聚合信息,或搜索你公司的系统(包括SAP,Oracle或其它任何Database/Data source),或用于管理PDF,Word和其它文档,或作为一个提供搜索信息的WebService或为你的应用程序(Web,Swing,SWT,Flash,Mozilla-XUL,PHP, Perl或c#/.Net)提供搜索后台等等.

    Logisim 【Java开源 其它开源项目】
    Logisim是一个教学工具用于设计和模拟数字逻辑电路.


    xalan 【Java开源 XML解析】
    xalan-java是一套xslt处理器,用来将XML文件转换为HTML,TEXT和XML等其他类型文件格式。支持XSLT1.0和XPATH 1.0版。开发人员可以通过命令行方式或在JAVA APPLET和SERVLET中使用,并可以作为自己开发的应用程序的类库使用。xalan-java实现的是transformation API for XML(TRaX)接口,此接口为jaxp1.2标准中的一部分。

    Java SNMP Package 【Java开源 网络客户端】
    这是一个实现了SNMP协议的Java包.它提供对基本的SNMP客户端与在SNMP版本1和2中定义的代理操作的支持.这个包提供了一种机制用于取得与设置SNMP对象标识(OID:object identifier)值通过一个简单的通信接口并可用于描述SNMP结构等.

    Cobertura 【Java开源 Eclipse插件】
    Cobertura是一个基于jcoverage的免费Java工具,它能够显示哪一部分代码被你的测试所覆盖,并可生成HTML或XML报告.

    Jeceira 【Java开源 内容管理系统(CMS)】
    Jeceira是一个实现了JSR 170规范的内容管理系统.

    JBWIKI 【Java开源 Wiki引擎】
    一个JBoss实验室项目用于创建符合JSR 168规范的Wiki.它已被用于增强JBoss Portal项目。

    Woodstox 【Java开源 XML解析】
    Woodstox是一个快速开源且符合StAX(STreaming Api for Xml processing)规范的XML处理器(做为一个处理器意味着它可以处理输入(相当于解析)与输出(相当于写入,序列化))。

    Jiplet Container 【Java开源 网络服务器】
    Jiplet是Java SIP Servlet的简写,Jiplet Container是一个开源的服务端SIP应用程序容器.Java开发者可以利用Jiplet API来开SIP应用程序并把程序部署到Jiplet容器中.SIP (Session Initiation Protocol)被广范用于通过互联网提供电话服务.这个容器为开发,部署和运行SIP应用程序提供了一个类似于Java Servlet的开发与运行环境.它的许多特性都非常类似于Java Servlet容器包括支持servlet映射(servlet mapping),范围变量(scoped variables),上下文处理(context handling)等. 另外还有一个用于测试SIP应用程序的开源项目SipUnit

    Tudu Lists 【Java开源 项目管理】
    Tudu Lists是一个日程(todo list)管理J2EE应用程序.它基于JDK5.0,Spring,Hibernate,和DWR AJAX框架.Tudu Lists同样也是一个简单但实效的项目管理工具.


    jCookie 【Java开源 其它开源项目】
    jCookie是一个免费,开源的Java包用于Java客户端cookie处理.客户端HTTP状态管理(或cookie处理)对于那些需要与Web应用程序如email或在线银行服务进行交互的Java应用程序是非常重要的.

    MrPostman 【Java开源 Email客户端】
    MrPostman是一个email网关,它使你能够直接从自己喜欢的Email客户端(如: Outlook Express,Thunderbird等)访问Yahoo Mail,Hotmail,gmail(Google mail)和其它webmail服务.它被设计成可扩展,因此可以很容易地添加更多的web mail服务.MrPostman还支持RSS新闻简读.

    Deep Network Analyzer (DNA) 【Java开源 网络服务器】
    Deep Network Analyzer(DNA)是一个灵活的,可扩展的深度网络分析器(服务器软件)与框架,它可收集和分析网络数据包,网络对话(sessions)与应用层协议(HTTP,DNS,P2P,VoIP等),被动地隔离企业级网络.DNA主要设计用于Internet安全,入侵探测,网络管理,协议与网络分析,信息搜集,网络监测应用程序


    [新闻]TOM在线与Joost正式组建合资公司

    Link URL: http://www.cnblogs.com/tester2test/archive/2008/05/27/1208725.html
  • QTP实例-测试报告代码

    zte_boy 发布于 2008-09-17 15:10:20

    自动化测试实际是将测试人员手工进行的工作脚本化,这就需要在测试脚本运行完成后,展示一个明了的测试报告,供相关人员查看测试结果,判断系统的正确性,以下代码实现的是一个EXCEL格式的测试报告,以Function为单位记录脚本的执行情况,若完成则显示Complete,在Comment中显示验证点检查结果情况,以此来判断系统运行的正确行;若由于一些突发的异常情况导致脚本未执行完成,则显示Fail,在Comment中显示Err.Descrīption信息

    当然,要达到以上效果,要求在业务脚本的检查点按照指定的格式书写,我的做法是设置一个全局变量记录所有检查点信息,然后传入给日志函数

    以下是代码,希望对有需要的朋友有所帮助:)

    Function ExcelReport(ReportExcelFile,sStatus,sDetails)
      '定义变量
      Dim fso
      Dim oExcel
      Dim ExcelFile
      Dim TestcaseName
      Dim objWorkBook
      Dim objSheet
    '  Dim Environment("Row"), Environment("TCRow"), NewTC
      
      Set fso = CreateObject("scrīpting.FileSystemObject")
      Set ōExcel = CreateObject("Excel.Application")
    '   oExcel.Visible = True
      
      '设置Excel报告样式
      If  Not fso.FileExists(ReportExcelFile) Then
       oExcel.Workbooks.Add
       
       '获取工作簿的第一个Sheet页
       Set ōbjSheet = oExcel.Sheets.Item(1)
       oExcel.Sheets.Item(1).Select
       
       With objSheet
        '更改sheet名
        .Name = "Test_Summary"
        
        '设置列宽
        .Columns("A:A").ColumnWidth = 5
        .Columns("B:B").ColumnWidth = 35
        .Columns("C:C").ColumnWidth = 10
        .Columns("D:D").ColumnWidth = 60
        .Columns("A:D").HorizontalAlignment = -4131
        .Columns("A:D").WrapText = True
        
        '设置显示区域的字体类型和大小
        .Range("A:D").Font.Name = "Arial"
        .Range("A:D").Font.Size = 10
        
        '设置文件头格式
        .Range("B1").Value = "Test Result"
        .Range("B1:C1").Merge 
         
        '设置文件头格式字体和颜色
        .Range("B1:C1").Interior.ColorIndex = 53
        .Range("B1:C1").Font.ColorIndex = 19
        .Range("B1:C1").Font.Bold = True
        
        '设置执行的日期和时间
        .Range("B3").Value = "Test Data:"
        .Range("B4").Value = "Test Start Time:"
        .Range("B5").Value = "Test End Time:"
        .Range("B6").Value = "Test Duration: "   
        .Range("C3").Value = Date
        .Range("C4").Value = Time
        .Range("C5").Value = Time
        .Range("C6").Value = "=R[-1]C-R[-2]C"
        .Range("C6").NumberFormat = "[h]:mm:ss;@"
        
        '设置日期和时间cell的边界
        .Range("C3:C8").HorizontalAlignment = 4 '右边对齐
    '     .Range("C3:C8").Font.Bold = True
    '     .Range("C3:C8").Font.ColorIndex = 7
        .Range("B3:C8").Borders(1).LineStyle = 1
        .Range("B3:C8").Borders(2).LineStyle = 1
        .Range("B3:C8").Borders(3).LineStyle = 1
        .Range("B3:C8").Borders(4).LineStyle = 1
        
        '设置日期和时间Cell的样式
        .Range("B3:C8").Interior.ColorIndex = 40
        .Range("B3:C8").Font.ColorIndex = 12
        .Range("C3:C8").Font.ColorIndex = 7
        .Range("B3:A8").Font.Bold = True
        
        .Range("B7").Value = "No Of Function:"
        .Range("C7").Value = "0"

        .Range("B8").Value = "Test Machine"
        .Range("C8").Value = GetIP()
        .Range("B10").Value = "TestCase"
        .Range("C10").Value = "Finish"
        .Range("D10").Value = "Comment"
        
        '为Result Summery设置格式
        .Range("B10:D10").Interior.ColorIndex = 53
        .Range("B10:D10").Font.ColorIndex = 19
        .Range("B10:D10").Font.Bold = True
      
        '为Result Summery设置边界
        .Range("B10:D10").Borders(1).LineStyle = 1
        .Range("B10:D10").Borders(2).LineStyle = 1
        .Range("B10:D10").Borders(3).LineStyle = 1
        .Range("B10:D10").Borders(4).LineStyle = 1
        .Range("B10:D10").HorizontalAlignment = 3
        .Range("C11:C1000").HorizontalAlignment = 3
     
        .Columns("B:D").Select
    '     .Columns("B:D").Autofit
        .Range("B11").Select  
       End With
       oExcel.ActiveWindow.FreezePanes = True
       oExcel.ActiveWorkbook.SaveAs ReportExcelFile
       oExcel.Quit
       
       Set ōbjSheet = Nothing
      End If
      
      TestcaseName = Environment("TCase")
    '   MsgBox TestcaseName
      Set ōbjWorkBook = oExcel.Workbooks.Open(ReportExcelFile)
      Set ōbjSheet = oExcel.Sheets("Test_Summary")
      
      With objSheet
       '设置行数和是否NewTc标识
       Environment("Row") = .Range("C7").Value + 11
       'NewTC = False
       
       If TestcaseName <> objSheet.Cells(Environment("Row")-1,2).value Then
        .Cells(Environment("Row"),2).value = TestcaseName
        .Cells(Environment("Row"), 3).Value = sStatus
        .Cells(Environment("Row"), 4).value = sDetails
        
        Select Case sStatus
         Case "Fail"
          .Range("C" & Environment("Row")).Font.ColorIndex = 3
         Case "Complete"
          .Range("C" & Environment("Row")).Font.ColorIndex = 50
        End Select
        
        'NewTC = True
        .Range("C7").Value = .Range("C7").Value + 1
        '设置边界
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(1).LineStyle = 1
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(2).LineStyle = 1
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(3).LineStyle = 1
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Borders(4).LineStyle = 1
        '设置字体和颜色?
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Interior.ColorIndex = 19
        .Range("B" & Environment("Row")).Font.ColorIndex = 53
        .Range("D" & Environment("Row")).Font.ColorIndex = 41
        .Range("B" & Environment("Row") & ":D" & Environment("Row")).Font.Bold = True
       End If
       
       If (Not NewTC) And (sStatus = "Fail") Then
        .Cells(Environment("Row"), 3).Value = "Fail"
        .Range("C" & Environment("Row")).Font.ColorIndex = 3
       End If
       
       '更新结束时间
       .Range("C5").Value = Time
       
       .Columns("B:D").Select
    '    .Columns("B:D").Autofit
      End With
      oExcel.ActiveWindow.FreezePanes = True
      
      '保存结果
      objWorkBook.Save
      oExcel.Quit
      
      Set ōbjSheet = Nothing
      Set ōbjWorkBook = Nothing
      Set ōExcel = Nothing
      Set fso = Nothing
    End Function

    运行结果如图显示:


    本文为zte_boy原创,转载请注明出处:http://www.51testing.com/?161787

  • 添加,查询,修改,删除测试方法及常见bug说明1

    小刀 发布于 2007-09-02 14:44:27Digest 1

    关于数据的查询,添加,修改,删除操作,测试工作当中经常会出现,如何高效的执行这几个功能模块的测试是每一个测试人员需要考虑的问题,也许不同的测试员有不同的测试方法,以下为我个人总结的关于查询,添加,修改,删除操作的测试方法。

    测试过程以序号标识!

    1.      添加

    (1) 添加按钮可用,测试点击添加按钮,能够进入相应的添加页面。

    可能存在的bug

    ü          点击“添加”按钮,程序无反应,无法进行添加操作。

    ü          点击“添加”按钮,程序跳转到其他页面

         (2) 进入添加页面,验证输入字段和需求描述一致

                   可能存在的bug

    ü          输入字段出现错别字

    ü          输入字段丢失或者多于,程序丢失需求规约的输入字段或者程序出现需求没有规约的输入字段

    ü          输入字段输入方式和需求描述不一致,比如,需求规约为下拉列表,程序为文本框

         (3) 所有输入字段输入合法数据,点击保存按钮,系统应该有保存成功提示信息,在数据库中有新保存的数据,通过查询页面,也可以查询到添加的数据。

                   可能存在的bug

    ü          程序把合法数据当作非法数据处理

    ü          点击保存,没有保存是否成功提示信息

    ü          数据库中没有新添加的数据记录

    ü          数据库中有添加的数据,但是通过程序查询操作,无法查询到新添加的数据记录

         (4) 重新进入添加页面,所有字段输入有效数据,然后从第一个字段开始,依次验证每个输入字段如下内容。之所以是从第一个输入字段开始依次验证每个输入字段,是因为这样可以保证不遗漏任意一个字段,同时也可以节省测试时间,每次只需改变两个输入字段的输入内容,不用每一次都要将每个输入字段都输入。

    l          非法数据,根据测试用例中的设计的非法测试数据,验证对每个非法测试数据程序都能控制

    可能存在的bug

    ü          程序对非法数据没有控制,输入非法数据可以通过验证

    ü          程序对非法数据的提示信息错误(包括是否缺少,准确性,可理解性,一致性)

    l          编辑数据,根据测试用例中的设计的编辑测试数据,验证对每个编辑测试数据程序都能控制

    可能存在的bug

    ü          程序不能处理编辑数据,比如粘贴一个数据,程序认为数据没有输入

    ü        程序对编辑数据处理错误,比如,按back键删除部分数据,程序依旧保存全部数据

    ü          程序对编辑数据的提示信息错误(包括是否缺少,准确性,可理解性,一致性)

    l          空数据,如果需求规定输入字段不能为空,验证程序对非空数据有明显标识或说明,对非空输入字段输入空数据有控制

    可能存在的bug

    ü          程序对非空输入字段无明显标识或说明

    ü          程序对非空输入字段无限制,非空输入字段输入空数据,程序可以通过验证

    ü          程序对空数据的提示信息错误(包括是否缺少,准确性,可理解性,一致性)

    l          重复数据,如果需求规定输入字段不能输入重复数据,验证程序对重复数据有控制

    可能存在的bug

    ü          程序对重复数据无控制,可以输入重复数据,并有可能引发程序崩溃

    ü          程序对重复数据的提示信息错误(包括是否缺少,准确性,可理解性,一致性)

    2.      查询

    (1) 进入查询页面,验证输入字段和需求描述一致

            可能存在的bug

    ü          查询条件输入,查询结果输出字段出现错别字

    ü          查询条件输入,查询结果输出字段丢失或者多于,程序丢失需求规约的查询条件输入,查询结果输出字段或者程序出现需求没有规约的查询条件输入,查询结果输出字段。

    ü          查询条件输入输入方式和需求描述不一致,比如,需求规约为下拉列表,程序为文本框,查询结果输出方式和需求规约的不一致

    (2)     查询功能验证,通过查询全部数据,根据单条查询条件查询,组合查询,模糊查询,错误的查询,验证程序查询功能正确。

    l          查询全部数据记录,除非特殊要求,系统应该有查询全部数据记录的查询方式,验证通过查询全部查询的结果和数据库中全部的数据记录相同

    可能存在的bug

    ü          无法通过程序设计的查询条件查询到全部的数据记录

    ü          点击查询按钮后查询不到任何的数据

    ü          通过查询功能查询到的数据记录个数和通过数据库查询的数据记录个数不符合

    l          根据单条查询条件查询,根据每个查询条件,可以查询到符合查询条件的数据记录

    可能存在的bug

    ü          点击查询按钮后查询不到任何的数据

    ü          查询结果返回数据和查询条件不符合

    ü          通过查询功能查询到的数据记录个数和通过数据库查询的数据记录个数不符合

    l          组合查询,组合不同的查询条件,查询数据记录

    可能存在的bug

    ü          点击查询按钮后查询不到任何的数据

    ü          查询结果返回数据和查询条件不符合

    ü          通过查询功能查询到的数据记录个数和通过数据库查询的数据记录个数不符合

    l          模糊查询,有些查询条件,程序提供了模糊匹配的功能,验证模糊查询正确

    可能存在的bug

    ü          点击查询按钮后查询不到任何的数据

    ü          程序没有实现模糊匹配的查询功能

    l          错误的查询条件,输入错误的查询条件,验证系统是否能够正确处理

    可能存在的bug

    ü          点击查询按钮后程序无任何反应

    ü          程序刷新页面,不返回查询结果,但是无任何明确的说明信息

    (3) 对查询条件的输入进行验证,验证方式同添加操作验证方式相同,但是要注意以下几个方面。

    l          需求对所有查询条件输入都有明确限制条件。根据需求规约的限制,验证程序对所有输入限制都做了相应处理。

    可能存在的bug(验证相关bug和添加验证类似,在这里不做说明):

    ü          对同一字段,添加限制和查询限制不一致,添加可以输入的数据,查询不可以输入,无法查询到添加的数据记录

    l          需求对部分输入条件没有限制,应该和开发人员协调,获得没有限制字段的限制条件,如果最终对输入条件无限制,则应该对特殊字符进行验证。

    可能存在的bug

    ü          对有限制条件的同一字段,添加限制和查询限制不一致,添加可以输入的数据,查询不可以输入,无法查询到添加的数据记录

    ü          输入特殊字符,点击查询按钮,程序报错

    ü          输入特殊字符,点击查询按钮,查询页面显示乱码

    ü          输入特殊字符“_”,程序返回所有查询记录

    l          需求对所有输入条件没有限制,应该和开发人员协调,获得没有限制字段的限制条件,如果最终对输入条件无限制,则应该对特殊字符进行验证。

    可能存在的bug(同上)

  • 《软件测试》读书总结

    小刀 发布于 2007-08-30 19:42:00

    利用两周时间,阅读了Ron Patton著的《软件测试》,这是一本讲解软件测试的入门书籍,本书借助Windows95/98windowsNT/2000附带的计算器、记事本和写字板等常用的小应用程序介绍了软件测试的通用方法。本书内容,包括了软件测试的基础知识,软件测试的基本和高级的技术,自动化测试,外国语言测试,计划和编制测试目标,报告发现的问题,评估测试目标和产品进度,以及测试和质量认证的区别。可以说涵盖了测试的各个方面,虽然对每部分内容都是很少的篇幅,但是,本书却用浅显易懂的概念定义,简单实用的例子,将软件测试看似深奥的知识体系清晰明了的讲解出来,就算是对软件测试一点概念也没有的人,读过此书以后,也会对软件测试是什么,软件测试需要哪些技能,软件测试有哪些方法,软件测试流程,软件测试相关的文档等知识体系有一个系统的,感性的认识。

    读过此书,使自己更清晰的认识到软件测试的理论体系,而在阅读的过程中,通过思考,能更透彻的理解软件测试知识,或者说,能够形成自己的一些理解,思考过后,还能知道自己需要延伸阅读的内容,这就是阅读此书的收获。这样说,似乎有点简单,分层次详细叙述如下。

        本书讲解的软件测试的知识都比较简单,很容易理解,但是,却涵盖了整个软件相关的知识体系,而且,本书对软件相关的概念定义清晰明白,而且比较权威,通过阅读本书,自己以前不能够理解的,或者理解偏差的关于软件测试的概念,都有了完整的认知,关于这个方面可以简单的举一个例子。

    此书关于软件缺陷的定义认为,符合下边5个规则的才能叫做软件缺陷。

    1.软件未达到产品说明书标明的功能。

    2.软件出现了产品说明书指明不会出现的错误。

    3.软件功能超出产品说明书指明范围。

    4.软件未达到产品说明书虽未指出但应达到的目标。

    5.软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。

         关于软件测试,很多书籍都是从软件质量的角度去阐述的,认为,软件如果正确实现了它所要求的功能,并且用户对该软件是满意的,那么该软件就是满足质量要求的,然后根据这个延伸来定义软件缺陷的。但在,在这里,关于软件缺陷的定义,却能够详细的将每一种情况都考虑到,无论怎么定义软件质量,只要软件当中出现了以上规则中的任意一条,则可以认为该软件是有缺陷的,如此,测试人员对软件缺陷就会有一个清晰的认知,而不会因为对软件缺陷的定义不同而出现不是缺陷的缺陷,或者遗留缺陷。

         本书解决了自己认知模糊,或者说,认知不清晰的关于软件测试的知识,主要有如下内容。

    1.     软件测试原则

    以前对软件测试原则没有概念,但是,通过阅读该书,知道了软件测试的一些原则。

    1. 完全测试是不可能的。因为:A.输入量太大;B.输出结果太多;C.软件实现途径太多;D.软件说明书没有客观标准。从不同角度看,软件缺陷标准不同。

    2. 软件测试是有风险行为。

    3. 测试无法显示潜伏的软件缺陷。

    4. 找到的软件缺陷越多,就说明软件缺陷越多。

    5. 用一种药,害虫都有抵抗力,程序也如此,如在螺旋开发模式中,每一个轮回都会对软件进行测试,几回合后,该发现的都发现了,找不到什么错误了。这要求我们必须不断编写不同的新测试程序,对程序的不同部分进行测试,以找到更多的缺陷。

    6. 并非所有的软件缺陷都能修复:A.没有足够的时间;B.不算真正的缺陷;C.修复风险太大;D.不值得修复

    7. 难以说清的软件缺陷

    8. 产品说明书不断变化:软件测试员必须想到产品说明书可能改变。

    9. 测试员做的工作不受欢迎,因为工作就是挑错!所以我们要懂得怎么和开发的相处:A.早点找出缺陷;B.控制情绪;C.多交流,不要总是报告坏消息。

    10. 软件测试是一项讲究条理的技术专业。

    在以上关于软件测试的原则当中,有些内容,我是知道的,比如不能完全测试,测试员做的工作不受欢迎等,但是,对这些原则的认识却不是在软件测试实质这个内容体系当中认知的,而是在阅读与软件测试相关文章的时候,孤立的认识的,这样孤立的认识,对软件测试并没有什么实质的内容,因为,就算不是从事软件测试的人,也大概知道这些内容。在本书中,作者以单独的一章详细的介绍了软件测试的实质,说明了测试的原则,可以说是对软件测试员的一个提纲性的指导,明确了软件测试人员在测试的时候需要注意的内容,也使得软件测试人员知道了软件测试中哪些能测,哪些不能测,哪些重点测,哪些不用测,这是很多关于软件测试的书中无法企及的。

    2.     数据测试

    本书在关于黑盒测试方法的讲解中,并没有单独去讲解每一种测试方法,而是将这些测试方法结合到以前讲解,因为在实际的测试当中,也不是孤立的去使用一种测试方法,而是多种测试方法结合使用。

    本书以软件测试中的数据测试为讲解对象,讲解了数据测试中,关于边界值如何确定的很多方法,其中的很多细节都是我通过该书,才了解的,叙述如下。

    测试边界线  次边界条件  2的乘方  ASCLL   默认、空白、空值、零值和无

             非法、错误、不正确的和垃圾数据

             这些关于边界值划分的细节当中,2的乘方  ASCLL,这两个内容在阅读书之前完全没有概念,但是通过此书的讲解,可以明白的理解,虽然这两个方法涉及到了程序相关的内容,但是,作为一个黑盒测试方法细节,能够开拓测试用例的设计方式。

    3.     检查代码

    检查代码是白盒测试的一个方法,自己虽然知道该方法,但是,检查代码的时候具体检查什么?作者给出来详细的列表,如下:

    1.数据引用错误数据引用错误是指使用未经正确地初始化的变量、常量、数组、字符串或记录。

    2.数据声明错误

    数据声明错误是指不正确地声明或使用变量和常量。

    3.计算错误

    计算错误是指基本的数学逻辑问题。

    4.比较错误

    小于、大于、等于、不等于、真、假、比较和判断错误很可能是边界条件问题。

    5.控制流程错误

    控制流程错误是指编程语言中循环等控制结构未按预期方式工作,通常由计算或者比较错误直接或间接造成。

    6.子程序参数错误

    子程序参数错误的来源是软件子程序不正确地传递数据。

    7.输入/输出错误

    输入/输出错误包括文件读取、接受键盘或鼠标输入以及向输出设备写入错误等。

    8.其他错误

    这里仅仅列出了标题,作者对每个清单都有详细的描述,结合这个清单,测试员可以很明白的知道,在代码审查的时候该做什么。

    4.     外国语言测试

    关于外国语言测试,在以前的阅读当中并没有接触到,自己的理解单单就是翻译的问题,但是在本文中,作者不但给出了外国语言测试中,关于翻译应该测试的问题,还给出了本地化问题,配置和兼容问题的介绍,使得自己对外国语言测试有了了解,而且,可以在当前的工作当中,有意识的向这个方面考虑

    5.     易用性测试

    对于易用性测试每个人都有自己的理解,不能说是谁对谁错,作者却从细节问题上去描述,以清单的方式对关于易用性测试涉及到的内容进行描述,使得看过此书的人知道如何测试易用性,进行易用性测试要找什么,虽然很简单,但是,如果没有作者的描述,测试员对易用性的测试可能就完全按照自己想的去进行,错误和遗漏就在所难免了。

    6.     文档测试

        包括文档测试的类型,文档测试的要点,文档测试的实质

    7.     网站测试

           包括网站测试的方法,网站的配置和兼容性测试,网站的易用性测试

    以上内容都是自己通过本书学习到的新知识,本书描述的其他知识,自己在以前的学习当中都有过了解和掌握,但是,在学习过程中,本书的学习缺十分的轻松,并不需要如何去思考,如何去理解,只要你看了作者的描述,那么你就可以理解作者所写的内容了。总结一下,作者能够如此简单明了的讲述知识体系,主要有以下几个独特的方法。

    1.     提问

    每章开始都有关于本章内容的重点介绍,重点内容介绍中很多并不是叙述而是提问,通过提问,引导读者思考,通过提问,读者就知道本章要解决哪些问题,而且,这样的提问方式,也是读者想要问的问题,作者把读者问的问题列出来,然后,在正文中,又以回答问题的方式回答,这样的一问一答式,却能使读者很好的理解文章。

    2.     清单

    软件测试的每个主题会细分为多个小主题,而每个小主题可能又会包含多个方面,而作者在讲解的时候,层层描述,结合前面讲解的提问方式,将各个主题所包含的所有内容都一一讲解,最重要的是,作者以清单的方式列出测试的每个方面,比如,关于网站易用性测试,作者将网站易用性测试涉及的各个方面以清单的方式列出,而阅读此书,就会发现几乎每一章都有这样的清单,通过清单,读者很容易知道对于这个主题,该做什么,不该做什么,重点做什么,一目了然。

         作者写书以这样的方式去写,那么在测试的时候我们也可以按照这样的方式去测,应该要测什么,测试的时候用什么方法,这些方法有什么优缺点,使用这些方法的时候有什么限制等等,然后给出这些问题的答案,通过这样的一问一答式,关于测试的各个方面都能够详细的考虑,然后,对每个测试的方面,都给出需要测试的清单,如此测试就是一个有条理的工作,就不会遗漏什么或者浪费什么。

         这只是我根据本书而对测试做的一些思考,在实际的时候,当然还是需要按照测试的流程来进行,其实,如果按照以上的方式来,也就是按照测试流程进行了。

    当然,如果我需要写一些工作心得,写一些工作经验相关的文章,我也会借鉴作者的写作方式,将所描述的内容条理化,简单化。让读者愿意读,容易理解。

    就实际来说,本书讲解的内容,对于没有从事过测试工作的人来说,是十分实用的,读过本书后,可以知道软件测试的概念,知道怎么去进行测试,知道测试的时候应该测试哪些内容,知道测试完以后还有哪些工作要去做。这本书相当于是一本指导书,指导你如何快速的进入软件测试这个工作当中,并能够完成测试工作。

    但是,本书讲解的内容也有缺陷,通过本书的学习,你可以开始实际的测试工作了,这个测试工作是别人告诉你测试哪个软件,你可以利用本书讲解的内容去测试,如果没有人告诉你测试哪个软件,也就是说,如果没有具体的工作内容,也许你就不知道应该怎么去做了,我认为这就是本书的一个缺陷。

    本书没有讲解风险评估的内容,而对于测试计划和测试用例讲解并没有明确告诉读者怎么去做,或许这不是本书的内容,因为这些都属于资深测试人员或者测试组长了解的内容。本书作为一个入门书,就是指导新手进入测试,完成测试,如果从这个方面来书,本书是成功的。

    读过本书,知道了应该知道的内容,清晰了已经模糊的内容,了解了还需要加强的内容。做个总结,梳理一下,以后的工作当中就会有更明确的方向。

  • Testlink1.7R3完整安装方法1

    小刀 发布于 2007-09-05 18:19:40

     

    说明:

    1 修改内容用红色标记。

    2 次文档参考部分网络资源,但是无法确认原作者,没有在此处说明,请作者原谅

    3 此文档是在windows下安装配置

    1. 安装Apache 2.2.3

      运行安装文件,注意仿照下面的例子填写网站信息:

      域名:3322.org

      网站名:tonyhook.3322.org

      管理员信箱:tonyhook@3322.org

      选择自定义安装,安装完成后,访问http://127.0.0.1/

      出现“It works!”的默认主页。

     注意:安装完毕后,访问http://127.0.0.1/,可能不会出现“It works!”的默认主页,主要原因是没有将Apache 2.2.3启动,重新启动Apache 2.2.3,就可以了。

     

    2. 安装MySQL 5.0.27

      运行安装文件,选择完全安装,跳过创建MySQL.com帐户,最后选择立刻配置MySQL服务器。

      配置过程:

    1)选择标准配置,下一步;

    2)安装为Windows服务,服务名称MySQL,下一步

    3)更改管理员密码(例如设为12345678),下一步

    4)执行配置

     3. 安装PHP 5.2.0

      运行安装文件,无需改变默认安装位置(C:\Program Files\PHP),选择添加Apache 2.2.x服务器模块。

      选择Apache配置文件位置:C:\Program Files\Apache Software Foundation\Apache2.2\conf\

      一定添加扩展中的MySQL扩展!

      允许安装程序配置Apache。然后配置PHP

    1)编辑C:\Program Files\PHP\php.ini文件

    2)查找如下两行:

            upload_tmp_dir="C:\DOCUME~1\Administrator\LOCALS~1\Temp\php\session"
            session.save_path="C:\DOCUME~1\Administrator\LOCALS~1\Temp\php\upload"

          更改为:

            upload_tmp_dir="C:\Windows\TEMP"

            session.save_path="C:\Windows\TEMP"

     

            ;extension=php_mysql.dll

          去掉前面的分号,更改为:

            extension=php_mysql.dll

    3)编辑文件test.php,共3行,存放在C:\Program Files\Apache Software Foundation\Apache2.2\htdocs,内容如下:

    <?php

    phpinfo();

    ?>

    4)重新启动Apache,访问http://127.0.0.1/test.php,可以查看PHP的安装情况

     注意:Apache一定要重新启动,不然只显示步骤3配置的文件test.php的内容。

    4. 安装TestLink 1.7R3

    1)将TestLink解压缩到C:\Program Files\Apache Software Foundation\Apache2.2\htdocs,重新命名为testlink

    3)访问http://127.0.0.1/testlink/install/index.php

    4)点击New Installation

    5)数据库管理员填写rootroot的密码(先前的设定为12345678),数据库用户名填写tl,密码填写123456

    6)点击安装按钮,然后同意许可协议,继续

    7)安装完成,点击最后一行的(Please Click Me!)

    8)使用admin登录,密码:admin

    9)在菜单栏中的Personal中更改admin的密码,更改成功后在右上角点击注销

    10)删除C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\testlink\install目录

    11)访问http://127.0.0.1/testlink/index.php即可使用出现TestLink登陆界面,此时登陆界面为英文,如果需要修改为中文则按以下步骤操作

    打开testlinkcfg文件夹下的config.inc.php文件

    查找$g_default_language = 'en_GB';

    修改为

    $g_default_language = 'zh_CN';

    则可以解决登陆界面汉化的问题

    注意:如果在步骤8之前出现错误提示信息,则需要重新启动电脑。

     

  • [转]什么是shell

    Joan2005 发布于 2007-04-30 09:07:12

        操作系统与外部最主要的接口就叫做shell。shell是操作系统最外面的一层。shell管理你与操作系统之间的交互:等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的输出结果。
      shell提供了你与操作系统之间通讯的方式。这种通讯可以以交互方式(从键盘输入,并且可以立即得到响应),或者以shell scrīpt(非交互)方式执行。shell scrīpt是放在文件中的一串shell和操作系统命令,它们可以被重复使用。本质上,shell scrīpt是命令行命令简单的组合到一个文件里面。
      Shell基本上是一个命令解释器,类似于DOS下的command.com。它接收用户命令(如ls等),然后调用相应的应用程序。较为通用的shell有标准的Bourne shell (sh)和C shell (csh)。

    交互式shell和非交互式shell
    交互式模式就是shell等待你的输入,并且执行你提交的命令。这种模式被称作交互式是因为shell与用户进行交互。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、签退。当你签退后,shell也终止了。
    shell也可以运行在另外一种模式:非交互式模式。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾,shell也就终止了。

    shell的类型
    在UNIX中主要有两大类shell
    Bourne shell (包括 sh, ksh, and bash)
    Bourne shell ( sh)
    Korn shell ( ksh)
    Bourne Again shell ( bash)
    POSIX shell ( sh)
    C shell (包括 csh and tcsh)
    C shell ( csh)
    TENEX/TOPS C shell ( tcsh)

    Bourne Shell
    最初的UNIX shell是由Stephen R. Bourne于20世纪70年代中期在新泽西的AT&T贝尔实验室编写的,这就是Bourne shell。Bourne shell 是一个交换式的命令解释器和命令编程语言。Bourne shell 可以运行为login shell或者login shell的子shell(subshell)。只有login命令可以调用Bourne shell作为一个login shell。此时,shell先读取/etc/profile文件和$HOME/.profile文件。/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用户定制环境。最后,shell会等待读取你的输入。

    C Shell
    Bill Joy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了C shell。它主要是为了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。它新增了命令历史、别名、文件名替换、作业控制等功能。

    Korn Shell
    有很长一段时间,只有两类shell供人们选择,Bourne shell用来编程,C shell用来交互。为了改变这种状况,AT&T的bell实验室David Korn开发了Korn shell。ksh结合了所有的C shell的交互式特性,并融入了Bourne shell的语法。因此,Korn shell广受用户的欢迎。它还新增了数学计算,进程协作(coprocess)、行内编辑(inline editing)等功能。Korn Shell 是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一级跨越多种平台。

    Bourne Again Shell (bash)
    bash是GNU计划的一部分,用来替代Bourne shell。它用于基于GNU的系统如Linux.大多数的Linux(Red Hat, Slackware, Caldera)都以bash作为缺省的shell,并且运行sh时,其实调用的是bash。

    POSIX Shell
    POSIX shell 是Korn shell的一个变种. 当前提供POSIX shell的最大卖主是Hewlett-Packard。在HP-UX 11.0 , POSIX shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

    各主要操作系统下缺省的shell:
    AIX 下是Korn Shell.
    Solaris和FreeBSD缺省的是Bourne shell.
    HP-UX缺省的是POSIX shell.
    Linux是Bourne Again shell.

    【TIP】
    #!/usr/bin/sh的用途
    shell scrīpt的第一行一般都是#!/usr/bin/sh或#!/usr/bin/ksh等,它的用途就是指出本脚本是用的哪种shell写的,执行时系统应该用哪种shell来解释执行它。

    附:LINUX系统的shell原理

      Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。

      shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。   shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。

      有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。

      shell首先检查命令是否是内部命令,若不是再检查是否是一个应用程序(这里的应用程序可以是Linux本身的实用程序,如ls和rm,也可以是购买的商业程序,如xv,或者是自由软件,如emacs)。然后shell在搜索路径里寻找这些应用程序(搜索路径就是一个能找到可执行程序的目录列表)。如果键入的命令不是一个内部命令并且在路径里没有找到这个可执行文件,将会显示一条错误信息。如果能够成功找到命令,该内部命令或应用程序将被分解为系统调用并传给Linux内核。

      shell的另一个重要特性是它自身就是一个解释型的程序设计语言,shell程序设计语言支持绝大多数在高级语言中能见到的程序元素,如函数、变量、数组和程序控制结构。shell编程语言简单易学,任何在提示符中能键入的命令都能放到一个可执行的shell程序中。

      当普通用户成功登录,系统将执行一个称为shell的程序。正是shell进程提供了命令行提示符。作为默认值(TurboLinux系统默认的shell是BASH),对普通用户用“$”作提示符,对超级用户(root)用“#”作提示符。

      一旦出现了shell提示符,就可以键入命令名称及命令所需要的参数。shell将执行这些命令。如果一条命令花费了很长的时间来运行,或者在屏幕上产生了大量的输出,可以从键盘上按ctrl+c发出中断信号来中断它(在正常结束之前,中止它的执行)。

      当用户准备结束登录对话进程时,可以键入logout命令、exit命令或文件结束符(EOF)(按ctrl+d实现),结束登录。

      我们来实习一下shell是如何工作的。

      $ make work

      make:***No rule to make target ‘work’. Stop.

      $

      注释:make是系统中一个命令的名字,后面跟着命令参数。在接收到这个命令后,shell便执行它。本例中,由于输入的命令参数不正确,系统返回信息后停止该命令的执行。

      在例子中,shell会寻找名为make的程序,并以work为参数执行它。make是一个经常被用来编译大程序的程序,它以参数作为目标来进行编译。在“make work”中,make编译的目标是work。因为make找不到以work为名字的目标,它便给出错误信息表示运行失败,用户又回到系统提示符下。

      另外,用户键入有关命令行后,如果shell找不到以其中的命令名为名字的程序,就会给出错误信息。例如,如果用户键入:

      $ myprog

      bash:myprog:command not found

      $

      可以看到,用户得到了一个没有找到该命令的错误信息。用户敲错命令后,系统一般会给出这样的错误信息.
Open Toolbar