发布新日志

  • CMMI概述

    2008-01-13 09:31:01

    一.CMMI概述

       CMMI是Capacity Maturity Model Integrated的简称,即集成的软件能力成熟度模型,CMM是CMMI的早期版本,它主要用于软件工程,而CMMI是一种综合性模型,它是工程实施和管理方法,它在软件与系统集成以外的如科研、工程等领域都得到了广泛的应用。

       CMMI是一个由理论和经验部分组成的模型。它有连续式和阶段式两种表述方式,其中连续式主要用于衡量一个企业的项目能力,而阶段式主要用来衡量一个企业的成熟度。在连续式表述下,企业在接受评估时可以选择自己希望评估的项目来进行评估,所以评估通过率相对比较大,但它反映的那个相对比较窄,因为它仅仅反映该企业的该项目或类似项目达到了对应的等级。而用阶段式来进行评估时,需由评估师自己来挑选内部的任何项目或其中的某一部分来进行评估。

         阶段式的CMMI有5个等级,如下:

         第一级(初始级):在该等级下,项目的目标虽然得以实现,但它的实现带有很多的偶然性和风险性,该级对人员的依赖性比较大,性能依赖个人的能力,且随个人固有的性能、知识和动机的不同而变化。

         第二级(受管理级):在该等级下,意味着组织要确保策划、文档化、执行、监督和控制项目级的过程,并且需要为过程建立明确的目标,并能实现成本、进度和质量目标等。在这种情况下,组织已经营造了一个稳定的、受控的开发环境,项目已经在受控制的状态下运行。该级包括如下7个过程域:需求管理(RM)、项目策划(PP)、项目监督与控制(PMC)、供方协定管理(SAM)、测量与分析(MA)、过程和产品质量保证(PPQA)和配置管理(CM)。

         第三级(已定义级):在等级三下,项目执行过程是通过裁剪组织的标准过程集合和组织过程财富产生的“已定义过程”,并具备与该过程相适应的运行环境。该级报刊如下11个过程域:需求开发(RD)、技术解决(TS)、产品集成(PI)、验证(Ver)、确认(Val)、组织过程聚焦(OPF)、组织过程定义(OPD)、组织培训(OT)、集成项目管理(IPM)、风险管理(RSKM)和决策分析和决定。

         第四级(定量管理级):在等级四下,组织建立了产品质量、服务质量以及过程性能的定量目标,运用统计技术和定量目标作为判断过程管理成功的标准。在过程的生存周期里,对产品质量、服务质量和过程性能做到统计意义上的了解和管理。该级包括如下两个过程域:组织过程性能和定量项目管理。

         第五级(持续优化级):该等级的突出特征是过程性能的持续改进。组织建立起整个组织的定量过程的定量过程改进目标,并且把它们作为过程改进的判断标准;这些目标将适时修改,以反映不断变化的本组织的业务目标。实际实施的过程和组织的标准过程集合都是改进活动的对象。该级包括如下两个过程域:组织革新和部署和原因分析和决定。

    二.CMMI给我们带来了什么好处?

       概括来说,CMMI给我们带来了如下好处:改进进度和预算的可预测性、改进开发周期、提高生产率、改进质量(质量缺陷)、增加客户的满意度、提高员工的士气、增加投资回报和低质量成本。

        对于不同的人来说,CMMI给他们带来的好处各有不同,例如,对于企业的老板来说,CMMI不仅提高了企业整体的管理水平,而且为企业引进了科学高效的管理观念、创造了更好的利益。而对于项目经理来说,对CMMI技术的学习掌握能够提高自身的项目管理能力,因此能够更好的提高项目质量,低成本、按期限的完成既定的任务。等等。

        CMMI的实施包括如下几个步骤:差距分析、过程定义、过程部署和实施、预先评估和正式评估五步。它的实施能够提高我国企业的管理水平,使我国的企业在管理上能够尽快地引入国际上的先进技术。调整了我国企业的管理体制,使其从无序变成有序、主观变成客观、人治变为体制。CMMI应用将产生的直接效果是提高了工程项目的质量、降低了工程的成本,保证了工程的周期、提高我国企业的在国内与国际市场上的竞争能力。

        来越多的大型企业业开始要求其工程承包商具有一定的CMMI级别。级别高的企业在赢得项目的竞标中具有一定的优势。 因此,如果没有CMMI的等级评估,企业就会失去很多商机。另一方面,企业通过CMMI评估也是为了提升企业内部的管理水平,降低企业的工程成本,得到更加丰厚的回报,对企业来说受益不少。

        就拿笔者所在公司来说,从CMMI实施中进行差距分析来说,测量与分析、风险管理、组织培训等地方明显做得不够。因为没有测量与分析的数据的采集,导致过程中的很多地方无法进行估量。因为对风险管理得不够,使得风险散播到项目过程中的各个地方,无法从某处获得对风险的集中管理。因为上级的组织培训的不重视,导致很多技能不能被相关人员较快较好的掌握。除此以外,还存在很多的问题,CMMI的实施给公司项目管理者带来了福音。

    三.对CMMI的思考

       笔者在学习CMMI的过程中,也产生过一些疑问,进行过一些思考,具体如下:

    1. 实施CMMI最好采用什么方式来驱动?

       CMMI只是告诉我们需要做什么,但具体如何做,以及采用什么工具、方法和技术等去做,这些答案需要我们自己去找。

       实施CMMI最好采用什么方式来驱动呢?

        答案是以实际需求来驱动,真正遵循IDEAL(I-初始;D-诊断;E-建立;A-执行;L-学习)组织过程改进模型。

       我们不应该过分的追求采用什么方法或工具来做好某件事情,例如设计图我们并不一定需要采用专门的Rose的工具来做;对需求等的跟踪并不一定要采用专门的需求跟踪工具来做,很多时候Excel就能够达到很好的跟踪效果。在以实际需求来驱动的过程中,可以灵活的采用适合的方法或工具,不应该太过拘泥。

    2. CMMI与ISO9000存在哪些区别?

        取得ISO 9000认证不意味着完全满足CMMI的某等级要求。取得CMMI第二级或第三级也不能笼统地认为可以满足ISO 9000的要求。

    3. CMMI过时了吗?

        迭代开发技术、软件产业最佳实践、和经济动机推动组织采用基于结果的方法:开发业务案例、构想和原型方案;细化后纳入基线结构、可用发布,最后定为现场版本的发布。虽然CMMI保留了基于活动的方法,它的确集成了软件产业内很多现代的最好的实践,因此它很大程度上淡化了和瀑布思想的联系。

        分析CMMI和迭代开发之间有什么联系,方法之一就是看每个模型的KPA是否为这种开发方法激发了合理的软件管理原理。CMMI和迭代思想联系得很紧密,所以说CMMI并没有过时。

    4.CMMI与敏捷开发的关系?

        最近几年来,CMMI已经成为一项主流开发技术。很多成功的企业都在使用这个技术。

        那么CMMI与敏捷之间存在怎么样的关系呢?分析如下:

        使用敏捷式方法要求IT和业务方面的参与者紧密沟通,更快的交付业务需求从而更快的获取效益。降低改变的成本、提高系统的灵活性,以及降低投资的风险。敏捷式开发能在质量上有很大的提高。大概在60年代的时候,软件开发是没有计划性的,基本是写出来,谁也不知道什么时候能交付,但也就是在那个时候,软件工程学的概念在美国召开的一次会议上头一次被提出来,传统工程学通常是把项目分成三步或者四步,先把需求确立起来,进行设计构建。应用到软件里是开始先由分析人员对需求进行分析,然后设计,架构师把整体的东西设计出来,再确定下来交给编程的团队,编程的团队按照需求规约,把东西给做出来,所有的这些东西都是由不同的人在不同的时间完成的。

        这种模式的优点是:开发计划性非常强,因为你知道什么人在什么时候做什么事情。但也存在一些缺点,这些缺点主要由软件开发和传统的建筑工程学的不同引起。客户需求的不断变化,特别是商业 软件,跟随市场的变化,客户需求也在不断变化。客户本身在脑子里并不是很清楚自身需要什么,在它看到了产品后,在使用的过程中,他对自己想要的东西才有了一些更加确定的想法,知道了怎样的东西才是自己所需要的。但在这个阶段的需求变化使得项目步履维艰、使得成本大幅度增加。所以工程学里一个核心的概念,变化是最可怕的一件事情,从设计角度也好、分析的角度也好,不管怎么,不要变化,这样就使成本增加。

        敏捷式开发最核心的东西是它不排斥变化,对变化采取的是适应性的态度。敏捷式的开发针对一小部分进行设计测试,对每一个循环时间非常短,软件从小到大,从很小的一点到不断的增加扩大,而且增长的过程中是对软件不断修改的过程。

        敏捷开发还有一个很大的特点就是它是以人为本,而不是以方法为本的。我们的软件开发是脑力劳动,而不是简单的工作。如果你设计出一套方法来,不管什么方法,让每个人去适应的方法,最后开发效应反而不如你组建一个具有进取心的团队,这个团队通常情况下是先选择一种方法,细节也一样,在开发过程中,不断对方法反思,直到达到这个团队的最高开发效应为止。

        如果说,要真正赶上最新一轮的创新浪潮有几个重要的标志,一个是要赶上最新的CMMI的转向敏捷开发,从体系架构角度讲,除了一些先进的架构理念,还有一些架构模式等等,还有开源代码的应用,不仅仅是操作系统,包括数据库、应用服务器、各种开发工具等有很多的开源工具。

  • 软件测试及Bug管理经验谈

    2008-01-05 18:37:23

    软件测试及Bug管理经验谈

     

    1、 写在前面的话

     

    本人从事软件工作多年,对如何作测试、如何管理Bug上有一些体会和想法;正好看到网上关于这方面的讨论较多,不妨简单地写出来。本文就测试工作的组织及工具的选用介绍一下主要的思路,供大家参考。

     

    2、如何作好软件测试

     

    1)清晰的质量概念

    常言道没有规矩不成方圆,产品交到您手上,各方面质量标准您要心中有数。安装卸装、功能性能、用户界面、出错与恢复......等等,您可列出大纲式的CheckList,不一定很详细但一定要全。

    不同的开发队伍,规范化水平不同,他们不一定能提交完善的规格书、品质书,如果您自己也没有这个概念,测试中就容易疏漏很多东西。比如,界面上的Button大小、用词、字体、颜色等有规范吗?页面响应时间呢?总之,您要让人家明白,您对这些方面是有要求的。

    2)善作计划

    按照CheckList,要测试的东西真的是很多,但人力、时间等资源是有限的,您需要考虑重要性、优先级等因素,作一个测试计划。确定测试内容是重要的,确定哪些不测或暂缓测试、同样也是重要的。针对需要测的内容,安排测试环境、人员、时间等,这些大的方面要与上司、相关人员讨论清楚,获得他们的支持。接下来再细化大的Check点,形成详细的测试方案。

    3)明确进入退出标准

    需要明确进行测试所必须具备的条件,如:测试环境、送测产品的媒介形式、文档等。如果达不到基本要求可明确地提出来,暂时退出直到问题得到解决,否则很浪费大家时间的。如:环境不具备、根本就安装不上、有大量严重错误等。

    4)对测试人员的要求

    逻辑思维要强,说到底,测试就是一种逻辑覆盖,要用尽量少的测试实例覆盖尽量多的逻辑,这就是效率。细心很重要,在每一个测试点,您需要静下来好好想想,还有哪些可能的情况?细心一定会给您带来高产量的Bug的。

    5)关于自动测试工具

    任何工具都是在人的安排下发挥作用,您自己如何测永远是第一位的。一般说来,自动测试工具只能在压力、容量等某些性能领域发挥作用,其他绝大部分需要的是勤奋和智慧。

    6)不断积累、持续改善

    您无论多么出色还是会漏掉Bug,您需要有一个方法能够不断地、持续地改善。分析总结原因、不断完善测试计划、测试方法等,并用文档整理出来,您的基础就会越垫越厚,工作越来越有效。

    7)明确自己的责任

    作为测试人员,您的任务就是找出缺陷、及时清晰的汇报给相关人员,让管理者清楚产品的质量状况。有时,您测出的问题他们决定不改,或者您认为没达到Release标准他们决定Release,这是可能的。影响一个决定的因素是多方面的,有经费、市场、策略、质量等,虽然测试通常是产品开发的最后一关,但我还没有见过测试人员决定一切的。

     

    3Bug管理的作用层次

     

    软件开发的重点已经从技术转到管理与质量控制上了,如何按时做出符合质量的产品是我们最大的挑战,测试工作在开发过程中占据相当大的份额,Bug管理的作用可想而知。其作用基本上分以下几个层次。

    1)备忘与沟通

    备忘是一个Bug管理系统最朴素、最基本的作用,好记性不如烂笔头,道理就这么简单。您什么时候测出了Bug、怎么测的、当时环境怎样,开发人员解决了没有、什么时候解决的、如何解决的,需要及时记录下来;问题一多,您靠记忆是记不住的。没有遗漏地记下所有问题点并确保适当地处理掉,是Bug管理的基本要求。

    Bug的产生、变更需及时通知相关人员,他们也应能随时查询不同状况的Bug 数据,良好的沟通才能保证有效的协作。

    2)监控

    作为项目管理者,您需要及时全面了解目前的项目状况,有些Bug是影响全局的严重错误,需要立即做出处理、决策;有些Bug需要决定改还是不改,或是放入以后版本、分配给其他人等等。所以项目管理者应该能够监控Bug状况。

    3)定量分析

    Bug数据作定量的统计分析是更进一步的需求,如:bug数量随时间变化的趋势图、从测试者、责任人、缺陷级别、缺陷原因等不同角度统计缺陷数量等等。

    4)环境集成

    更高一级的需求是与需求、测试方案、SourceCode、自动测试工具等关联起来。

     

    4Bug管理工具的选用

     

    与选用任何一件商品一样,与您的需求、产品价格、服务等有关。

    1)需求

    大部分开发机构对Bug工具的要求并不高,能记录问题点、能及时传达给相关人员,并监督他们都作了适当的处理,基本上就可以了。很多网友说某某系统怎么弄得这么复杂、这么贵,自己花一个星期就能做个可用的东西,说的就是这个意思。早期,市场上没有合适的Bug管理系统,我使用Excel作,说实在的也不错。当然啦,时代在进步,Bug管理系统可更好地实现这些需求。

    稍微高一点的要求,可做定量的统计分析,挖掘信息潜在价值。

    更高一级的需求,就是景上添花啦,可以与需求、测试方案、SourceCode、自动测试工具等环境集成。但事物总是两面性的,要真正发挥这些作用需要有完善的需求规格、测试方案,需要仔细规划自动化工具所产生数据的过滤、运用。一句话,对自身的规范化要求较高,否则这些功能听起来不错,实际利用不起来。

    2)服务与价格

    从价格上说,有3类缺陷管理工具可供选用。

    一是纯免费的,如BugzillaMantis等。但免费的东西用户友好性差、安装难,您需要懂linuxperlmySQLapache之类的东西;而且没服务,出一点问题您就上Internet淘技术文章去吧,如何安装、使用这些免费软件简直是一门学问了。

    二是价格较低的国产软件,基本满足备忘沟通和监控的需要。如华创BMS,做得比较灵活,字段、权限、email通知、数据字典等都可以定制,适应性较强,统计报表的定制性也较强,可以做一定的定量分析。一般开发单位使用这类系统基本够用。

    三是价格中等或较高,如微创的BMSMITestDirectorIBM RationalClearQuest等。可以做一定的环境集成,如TD,可以把RequirementTestplanBug关联起来,微创BMS可以与MS ProjectSourceSafe关联。价格稍高,几万到几十万之间,关键是这些高级功能您真的能利用上。

     

    总的说来,适合您的、就是好的,微软内部的Bug管理界面也非常朴素,看上去有点像windows 95那个时代的小工具。另外服务是很重要的,问题解决不了耽误自己的时间不说,可别影响测试工作。

  • BUG流程相关建议

    2008-01-05 18:35:46

    BUG流程相关建议

    关于BUG流程相信大家都已经很熟悉了,并且用起来也得心应手,在此不再赘述。以下对BUG有一些小小的建议,主要针对我们日常工作中没有注意到的地方说的,建议虽小,但要重视噢。

    一、           对于研发经理:

    1.       当一个BUG被你审核通过,在派给开发人员时,你应该将BUG的状态改为“打开”。

    2.       审核BUG时你有最高权限,可以审核BUG的所有信息是否正确,所以最好重新审核一下我们提交的BUG严重程度,你有权修改哦。还有类型也可以修改的。

    二、           对于软件工程师:

    1.       请开发人员修正后,注明修改后达到的功能效果以及可能影响到哪些其他的功能模块,还有拒绝或延期的理由。同时最好写上解决的方式或非正常解决问题的原因,对于我们来说这些积累是一笔很大的财富。

    2.       如果你正陷入让测试人员使用bug管理库的苦恼中,你只要不用其他方法接受bug报告。如果你的测试人员习惯将bug报告用邮件的形式发给你,你只需用一个简短的消息回复他们:“请将它们输入到bug库中,因为我无法追踪邮件。”

    三、           对于测试人员:

    1.       请测试人员提交新错误时,尽量用最简洁的语言最清晰的描述出BUG的出处、操作步骤、现象、(建议),并尽量截图。

    2.       尽量减少重现的步骤以达到用最少的步骤来重现问题;这对编程人员来说是很有帮助发现问题根源的。

    3.         当你的bug报告以“not repro(不可重现)”打回给你时,先检查一个步骤是否有遗漏或清晰,再去找编程人员。编程人员通常是在无法用bug报告中的步骤重现bug时才选择这个选项。

    4.       不要使用完全的大写形式,那样会让人感觉象控诉。不要使用感叹号或其他表现个人感情色彩的词语或符号。

    5.       不要使用含糊的词语(例如,好像,似乎)来描述发现的现象。

    6.       在提交BUG的标题第一行写上错误的总结是非常关键的。这要求测试人员编写的报告要能够吸引读者,引起他们的注意,并使和管理层的沟通清晰。

    7.       再次强调,在bug report的初稿完成后,测试人员应该反复阅读它,集中剔除那些没有关系的步骤或词语。隐含的或模糊的说明和那些由于对没有任何关系的细节或者那些在重现错误过程中不需要的步骤而消磨报告欢迎程度的无穷唠叨都不是bug report的目标。

    8.         测试人员在精简空话的同时或其之后随即应该再仔细检查报告是否有会产生误解的地方。测试人员应该尽量避免使用模糊的,会产生歧义的和主观的词语。目标是使用能够表述事实,清楚的,不会产生争执的词语。

    四、           大家都要注意的地方:

    当你发现一个BUG,或者正在修改BUG时,请考虑如下问题:

    1.同一软件中的相似功能是否有相同的问题?

    2.其他的浏览器是否有相同的问题?

    3.其他的软硬件配置是否有相同的问题?

    4.其他的区域(locales)是否有相同的问题?

    5.不同的安排设置是否有相同的问题?

    6.以前的版本否有相同的问题?

     

  • 面试最常见的问题

    2007-12-13 10:19:04

    1、请介绍一下你和你的家庭。

        2、你有什么优缺点?

        3、你有什么特长和爱好?

        4、你对自己的学习成绩是否满意?

        5、你如何评价你的大学生活?

        6、你担任过何种社会工作,组织参加过何种社会实践和社会活动?

        7、你懂何种外语?熟练程度如何?

        8、你为什么要应聘这个职位?

        9、你对本行业、本单位、本职位有何了解?

        10、你认为你适合做什么样的工作?

        11、你找工作考虑的重要因素是什么?

        12、如果单位的安排与你的愿望不一致,你是否愿意服从安排?

        13、如果工作安排与你的专业不对口,你如何考虑?

        14、你是否有出国或考研究生的打算?

        15、如果本单位和另外一个单位同时聘用你,你将如何选择?

  • 人事部面试问题

    2007-12-07 20:43:36

    1. 你谈谈你自己吧!

    2. 你有什么问题要问吗?(公司的情况、提供的待遇、发展的机会)

    3. 你的期望待遇是什么?(希望公司提供的福利)

    4. 为什么想离开目前的工作?

    5. 你觉得自己最大的长处是什么在?(包括性格、专业、综合能力)

    6. 你觉得自己最大的弱点(缺点)是什么?(性格、专业、爱好)

    7. 你多快可以开始来上班?

    8. 目前的工作上,你觉得比较困难的部份在哪里?

    9. 为什么你值得我们雇用呢?

    10. 你的工作中最令你喜欢的部份是什么?

    11. 对于目前的工作,你觉得最不喜欢的是什么?

    12. 你找工作的时候最在乎的是什么?请谈一下你理想中的工作。

    13. 请介绍你的家庭。,

    14. 请谈谈在工作时,最让你感到沮丧的是什么?

    15. 你最近找工作时曾面谈过哪些工作?应征什么职位?结果是什么?

    16. 请你用英文介绍目前服务的公司。

    17. 如果我雇用你,你觉得可以为部门带来哪些贡献。

    18. 你觉得自己具备什么样的资格来应征这份工作?

    19. 谈谈你最近阅读的一本书籍和杂志。

    20. 你觉得你的主管(领导)会给你什么样的评语。

    21. 你如何规划未来,你认为5年后你能达到什么样的成就。

    22. 你觉得要获得职业上的成功,需要具备什么样的物质和能力?

    23. 谈谈你觉得自己表现不甚满意的一次工作经历?

    24. 由你的履历来看,在你过去的5年内更换工作颇为频繁,我如何知道我们录用你,你不会很快的离职?

    25. 你曾经因为某一次工作经验而影响日后的工作态度吗?

    26. 你最近是否参加了课程培训,谈谈课程培训的内容!是公司资助还是自费参加?

    27. 对于工作表现不尽理想的人员,你会以什么激励方式来提升其工作效率?

    28. 你曾听说过我们公司吗?你对公司的第一形像是什么?

    29. 你如何克服工作的低潮期?

    30. 你与同事之间的相处曾有不愉快的经历吗、

    31. 谈谈你对加班的看法?

    32. 请描述目前主管所具备的哪些物质是你觉得值得学习的?

    33. 你对于我们公司了解多少?

    34. 你目前已经离职了吗?

    35. 如果这份工作常要出差、出国,平均每个月两次,每次五天,你可以接受吗?

    36. 你开始投入找工作的时间有多少了?

    37. 你自认为有哪些方面可以再加强?

    38. 如何从工作中看出你是个自觉自动的人?

    39. 在你过去的销售中曾经遇到过什么样的难题,如何克服它?

    40. 你通常从事什么样的休闲活动?

    41. 你对这份“行销助理”(或者其它职务)的工作有什么样的展望?

    42. 你如何让部署有杰出的工作表现?

    43. 对于变化你如何应对?

    44. 你为何挑选这三位人士作为你的推荐人?

    45. 请描述你目前或之前的主管最不让人满意的地方。

    46. 你认为这个产业在未来五年来的趋势如何?

    47. 你的主管认为你在哪方面有需要改进的地方?

    48. 你的工作通常能在时限内完成吗?

    49. 你对于社团活动的看法如何?

    50. 你觉得“秘书”(或其他职务)的工作内容究竟是什么?

    51. 你为什么选择念(历史)系?

    52. 你在同一家公司呆了这么长的时间,难道不觉得若要再去重新再去适应新的企业文化,可能会产生严重的水土不服现象吗?你的适应力如何?

    53. 对于明知实施后会引起反弹的政策,你仍能生花妙贯彻到底吗?

    54. 你认为“成功”的定义是什么?

    55. 如何兼顾事业与家庭?

    56. 如果时光能倒流,你会选择不一样的大学生活吗?

    57. 你觉得他人的肯定对你很重要吗?以(员工关系)这样性质的工作而言,通常是吃力不讨好的,你如何让自己保持冲劲呢?

    58. 你认为什么是自己最需要改进的?

    59. 你觉得学生时代所接受的各项培训足以令你胜任这份工作吗?

    60. 如果你有机会重新选择,你会选择不一样的工作从领域吗?

    61. 你曾经有解雇员工的经验吗?

    62. 请谈谈工作中比较会令你感到无力的部分。

    63. 你觉得自己还有哪些方面的特长是没有写在履历表上的?

    64. 你比较喜欢团队合作的工作方式,还是独立作业?

    65. 在你之前的工作经验中,哪一向是值得继续沿用到目前的?

    66. 你觉得你在时间安排运用方面的能力如何中?

    67. 通常对于别人的批评,你会有什么样的反应?

    68. 如果明知“这样做不对”,你还是会依主管的指示去做吗?

    69. 你知道这份工作需要浓淡常常加班吗?你觉得你能配合吗?

    70. 什么样的管理风格是你所欣赏的?

    71. 你如何做出决策?

    72. 当你进入一家新的公司或新的产业,你会经由何种方式获得相关知识?

    73. 身为一名业务人员,当你被客户拒绝时,你会如何处理?

    74. 你对于主管的学历,能力都低于你有什么样的看法?

    75. 你还有继续念研究生的计劃吗?

    76. 请叙述你个人的管理风格?

    77. 谈谈最近一次因为工作而情绪失控的情形?

    78. 你对于“创业”有什么样的看法?

    79. 你的主管最常建议你哪方面的能力有待加强?

    80. 你会希望做你老板的工作吗?为什么?

    81. 你与同仁之间相处发生问题时,你会怎么做、

    82. 可否描述一下你自己的个性。

    83. 你的工作内容中包括列算、审核费用、以及监督部门支出的流向等方面吗?谈谈你在这方面的经验。

    84. 如果我们的竞争对手也有意录用你,你的态度如何中?

    85. 你对于女性主管共事的看法如何?

    86. 你为什么会考虑接受一份各方面条件都比目前差的工作?

    87. 你会考虑接受低于目前的待遇吗?

    88. 你可以接受职务外调的安排吗?

    89. 如果客户在银行柜台大声抱怨,你如何处理?

    90. 如果你接到一通客户的抱怨电话,你确实无法立即解决他的问题时,你会如何处理?

    91. 你有继续进修的计划吗?通常下班后的时间,你都做些什么?

    92. 如果你进入本公司,对于这项职务以及这个部门,你打算做什么样的改变?

    93. 你在XXX公司时,曾经有机会在制度或组织层面进行调整改变吗?

    94. 你觉得什么样的人最难相处?

    95. 请叙述你一天的工作情形?

    96. 你在学校时曾参与哪些课外活动?

    97. 求学时,曾经利用课余打工吗?

    98. 你在学校时,曾担任系上或社团干部吗?是什么样的职务?

    99. 我注意到你曾担任校园刊物的编辑,你的主要工作是什么?

    100. 你曾经与晋升的机会失之交臂吗?
  • 简述集成测试的过程

    2007-12-05 22:31:05

    简述集成测试的过程
     
    软件测试的目的?测试的目的是想以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正种错误和缺陷提高软件质量,回避软件发布后由于潜在的软件缺陷和错误造成的隐患带来的商业风险。Beta 测试:在客户场地,由客户进行的对产品预发布版本的测试。软件验收测试合格通过准则:1软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。2所有测试项没有残余的一级二级三级的错误。3立项审批表、需求分析文档、设计文档和编码实现一致。4验收测试工件齐全(测试计划,测试用例,测试日志,测试通知单,测试分析报告) 软件验收测试包括正式验收测试、alpha测试、beta测试三种测试。 系统测试的策略:功能测试,性能测试,外部接口测试,界面测试,强度测试,冗余测试,可靠性测试,恢复测试等 设计系统测试计划需要参考的项目文档有软件测试计划、软件需求工件、和迭代计划。 利用因果图导出测试用例需要经过的一般步骤
    1.分析程序规格说明的描述中,哪些是原因,哪些是结果。
    2.分析程序规格说明的描述中语义的内容,并将其表示成连接各个原因与各个结果的因果图
    3.在因果图上使用若干个特殊的符号标明特定的约束条件
    4.把因果图转换成判定表
    5.把判定表中每一列表示的情况写成测试用例 阶段评审与同行评审的区别同行评审目的:发现小规模工作产品的错误,只要是找错误;
    阶段评审目的:评审模块阶段作品的正确性可行性及完整性
    同行评审人数:3-7人人员必须经过同行评审会议的培训,由SQA指导
    阶段评审人数:5人左右评审人必须是专家具有系统评审资格
    同行评审内容:内容小一般文档 <   40页, 代码 < 500行
    阶段评审内容: 内容多,主要看重点
    同行评审时间:一小部分工作产品完成
    阶段评审时间: 通常是设置在关键路径的时间点上!   什么是软件测试?使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试就是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。软件测试是为了发现错误而执行程序的过程。 简述集成测试的过程根据IEEE标准 集成测试划分为4个阶段:计划阶段,设计阶段,实现阶段,执行阶段(实施阶段)
    计划阶段
    1)时间安排        概要设计完成评审后大约一个星期
    2)输入            需求规格说明书 概要设计文档   产品开发计划路标
    3)入口条件        概要设计文档已经通过评审
    4)活动步骤       1.定被测试对象和测试范围 2.评估集成测试被测试对象的数量及难度,即工作量 3.确定角色分工和作任务4.标识出测试各阶段的时间,任务,约束等条件5.考虑一定的风险分析及应急计划6.考虑和准备集成测试需要的测试工具,测试仪器,环境等资源7.考虑外部技术支援的力度和深度,以及相关培训安排8.定义测试完成标准
    5)输出            集成测试计划
    6)出口条件        集成测试计划通过概要设计阶段基线评审
    设计阶段
    1)时间安排 详细设计阶段开始
    2)输入   需求规格说明书   概要设计   集成测试计划
    3)入口条件   概要设计基线通过评审
    4)活动步骤   1.被测对象结构分析 2.集成测试模块分析3.集成测试接口分析4.集成测试策略分析
        5.集成测试工具分析6.集成测试环境分析7.集成测试工作量估计和安排。
    5)输出   集成测试设计(方案)
    6.出口条件   集成测试设计通过详细设计基线评审。
    实现阶段
    1)时间安排 在编码阶段开始后进行
    2)输入 需求规格说明书   概要设计   集成测试计划 集成测试设计
    3)入口条件 详细设计阶段
    4)活动步骤   集成测试用例设计 集成测试程设计 集成测试代码设计(如果需要)   集成测试脚本(如果需要)   集成测试工具(如果需要)
    5)输出   集成测试用例 集成测试规程 集成测试代码 集成测试脚本 集成测试工具
    6)出口条件   测试用例和测试规程通过编码阶段基线评审
    执行阶段
    1)时间安排 单元测试已经完成后就可以开始执行集成测试了
    2)输入      需求规格说明书 概要设计   集成测试计划   集成高度设计   集成测试例 集成测试规程   集成测试代码(如果有)   集成测试脚本 集成测试工具 详细设计   代码   单元测试报告  
    3)入口条件 单元测试阶段已经通过基线化评审
    4)活动步 骤 执行集成测试用例 回归集成测试用例   撰写集成测试报告  
    5)输出   集成测试报告
    6)出口条件   集成测试报告通过集成测试阶段基线评审   文档测试?文档审核测试目前越来越引起人们的重视,软件质量不是检查出来的,而是融进软件开发中来。文档审核测试主要包括需求文档测试,设计文档测试,为前置软件测试测试中的一部分。
    需求文档测试:主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;
    设计文档测试 :测试设计是否符合全部需求以及设计是否合理。 白盒测试有哪几种方法?白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,主要用于软件验证。“白盒”法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。“白盒”法是穷举路径测试。
  • TD使用手册

    2007-12-01 14:41:12


    TestDirector Basics

     
    1、概述(Introduction)
    欢迎您使用TestDirector,它是Mercury Interactive公司推出的基于WEB的测试管理工具,无论是通过Internet还是通过Intranet你都可以以基于Web的方式来访问TestDirector。
    应用程序测试是非常复杂的,它需要开发和执行数以千计的测试用例。通常情况下,测试需要多样式的硬件平台、多重的配置(计算机,操作系统,浏览器)和多种的应用程序版本。管理整个测试过程中的各个部分是非常耗时和困难的。
    TestDirector能够让你系统地控制整个测试过程,并创建整个测试工作流的框架和基础,使整个测试管理过程变得更为简单和有组织。
    TestDirector能够帮助你维护一个测试工程数据库,并且能够覆盖你的应用程序功能性的各个方面。在你的工程中的每一个测试点都对应着一个指定的测试需求。To meet the various goals of a project, you organize the tests in your project into unique groups. TestDirector还为你提供了直观和有效的方式来计划和执行测试集、收集测试结果并分析数据。
    TestDirector还专门提供了一个完善的缺陷跟踪系统,它能够让你跟踪缺陷从产生到最终解决的全过程。TestDirector通过与你的邮件系统相关联,缺陷跟踪的相关信息就可以被整个应用开发组,QA , 客户支持,负责信息系统的人员所共享。
    TestDirector提供了与Mercury Interactive公司的测试工具(WinRunner, LoadRunner, QuickTest Professional, Astra QuickTest, QuickTest Professional for MySAP.com Windows Client, Astra LoadTest, XRunner, Visual API and Visual API-XP)、第三方或者自主开发的测试工具、需求和配置管理工具、建模工具的整合功能。TestDirector能够与这些测试工具很好的无缝链接,为你提供的全套解决方案选择来进行全部自动化的应用测试。
    TestDirector会指导你进行需求定义、测试计划、测试执行和缺陷跟踪,即整个测试过程的各个阶段。通过整合所有的任务到应用程序测试中来确保你的客户收到更高质量的产品。

    1.1测试管理过程(The Test Management Process)
    TestDirector的测试管理包括如下四个阶段:
              
    需求定义(Specify Requirements):
    分析应用程序并确定测试需求。
    测试计划(Plan Tests):
      基于测试需求,建立测试计划。
    测试执行(Execute Tests):
      创建测试集(Test Set)并执行测试。
    缺陷跟踪(Track Defects):
      报告程序中产生的缺陷并跟踪缺陷修复的全过程。

      贯穿测试的每一个阶段,你能够通过产生详细的报告和图标对数据进行分析。

    1.2需求定义(Specify Requirements)
     分析应用程序并确定测试需求。

     
    定义测试范围(Define Testing Scope):
    检查应用程序文档,并确定测试范围--测试目的、目标和策略。
    创建需求(Create Requirements):
      创建需求树(Requirements Tree),并确定它涵盖所有的测试需求。
    描述需求(Detail Requirements):
      为"需求树"中的每一个需求主题建立了一个详细的目录,并描述每一个需求,给它分配一个优先级,如有必要的话还可以加上附件。
    分析需求(Analyze Requirements):
      产生报告和图表来帮助你分析测试需求,并检查需求以确保它们在你的测试范围内。

    1.3测试计划(Planning Tests)
      基于已定义的测试需求,创建相应的测试计划。
     
    定义测试策略(Define Testing Strategy):
    检查应用程序、系统环境和测试资源,并确认测试目标。
    定义测试主题(Define Test Subject):
      将应用程序基于模块和功能进行划分,并对应到各个测试单元或主题,构建测试计划树(Test Plan Tree)。
    定义测试(Define Tests):
      定义每个模块的测试类型,并为每一个测试添加基本的说明。
    创建需求覆盖(Create Requirements Coverage):
      将每一个测试与测试需求进行连接。
    设计测试步骤(Design Test Steps):
      对于每一个测试,先决定其要进行的测试类型(手动测试和自动测试),若准备进行手动测试,需要为其在测试计划树上添加相应的测试步骤(Test Steps)。测试步骤描述测试的详细操作、检查点和每个测试的预期结果。
    自动测试(Automate Tests):
      对于要进行自动测试的部分,应该利用MI、自己或第三方的测试工具来创建测试脚本。
    分析测试计划(Analyze Test Plan):
      产生报告和图表来帮助你分析测试计划数据,并检查所有测试以确保它们满足你的测试目标。

    1.4测试执行(Running Tests)
      创建测试集(Test Set)并执行测试。
     
    创建测试集(Create Test Sets):
    在你的工程中定义不同的测试组来达到各种不同的测试目标,他们可能包括,举个例子,在一个应用程序中测试一个新的应用版本或是一个特殊的功能。并确定每个测试集都包括了哪些测试。
    确定进度表(Schedule Runs):
      为测试执行制定时间表,并为测试员分配任务。
    运行测试(Run Tests):
      自动或手动执行每一个测试集。
    分析测试结果(Analyze Test Results):
      查看测试结果并确保应用程序缺陷已经被发现。生成的报告和图表可以帮助你分析这些结果。

    1.5缺陷跟踪(Tracking Defects)
     报告程序中产生的缺陷并跟踪缺陷修复的全过程。
            
    添加缺陷(Add Defects):
    报告程序测试中发现的新的缺陷。在测试过程中的任何阶段,质量保证人员、开发者、项目经理和最终用户都能添加缺陷。
    检查新缺陷(Review New Defects):
      检查新的缺陷,并确定哪些缺陷应该被修复。
    修复打开的缺陷(Repair Open Defects):
      修复那些你决定要修复的缺陷。
    测试新构建(Test New Build):
      测试应用程序的新构建,重复上面的过程,直到缺陷被修复。
    分析缺陷数据(Analyze Defect Data):
      产生报告和图表来帮助你分析缺陷修复过程,并帮助你决定什么时候发布该产品。

    1.6 Working with Project Database
    当你创建一个TestDirector工程后,你需要存储和管理TestDirector自身产生和连接的数据库。每一个工程都支持通过数据库来存储工程信息。
    TestDirector是一个知识库,它存储着需求、测试、测试集、测试个案(Test Run)、工程文档和定制信息。为了应用程序测试工程能够正常工作,TestDirector需要持续不断地访问这些数据。
    可以使用下面的数据库应用软件来存储和管理TestDirector信息:
      Microsoft Access
      Sybase (TestDirector Enterprise Edition only)
      Microsoft SQL (TestDirector Enterprise Edition only)
      Oracle (TestDirector Enterprise Edition only
    关于创建和管理TestDirector的更多信息,请参考《TestDirector管理员手册》(《TestDirector Administrator's Guide》)

    1.7用户权限(User Privileges)
    TestDirector允许你管理用户访问工程的权限,它会创建一个有权用户的列表和为一个组或者是一个用户分配一个口令。你可以控制每个用户能够对项目进行怎样的添加和修改。在TestDirector中用户所拥有的权利是由该用户所在的用户组决定的。TestDirector允许你为工程中指定的目录创建包含特权和许可机制的规则,一些有用的信息可能在TestDirector的用户组中被用到。
    关于TestDirector中的用户组、口令分配和权限的更详细的信息,请参考《TestDirector管理员手册》(《TestDirector Administrator's Guide》)

    1.8导出Word文档(Exporting Documents from Microsoft Word)
    你能够直接从测试需求树和测试计划树中导出Microsoft Word格式的测试文档和需求。若需要使用Microsoft Word文档导出功能,必须首先下载和安装Microsoft Word插件。
    下载Microsoft Word插件:
    1. 在TestDirector的Window选项中,点击Add-ins Page链接,TestDirector的Add-ins页被打开。
    2. 点击More TestDirector Add-ins链接,更多的TestDirector Add-ins页被打开。
    3. 在Microsoft Add-ins内,点击Microsoft Word链接,Microsoft Word的Add-ins页被打开。
    4. 点击Microsoft Word Add-in Readme链接,依据指示运行Microsoft Add-in。
    5. 点击Download Add-in 连接开始安装Microsoft Word Add-in。
    关于TestDirector Add-ins页的更进一步信息,请参考《TestDirector安装手册》(《TestDirector Installation Guide》。

    1.9到处Excel文档(Exporting Documents from Microsoft Excel)
    你能够直接从TestDirector工程中导出Microsoft Excel格式的测试文档、需求或缺陷报告。若需要使用Microsoft Excel文档导出功能,必须首先下载和安装Microsoft Excel插件。
    下载Microsoft Excel插件:
    6. 在TestDirector的Window选项中,点击Add-ins Page链接,TestDirector的Add-ins页被打开。
    7. 点击More TestDirector Add-ins链接,更多的TestDirector Add-ins页被打开。
    8. 在Microsoft Add-ins内,点击Microsoft Excel链接,Microsoft Excel的Add-ins页被打开。
    9. 点击Microsoft Excel Add-in Readme链接,依据指示运行Microsoft Add-in。
    10. 点击Download Add-in 连接开始安装Microsoft Excel Add-in。
    关于TestDirector Add-ins页的更进一步信息,请参考《TestDirector安装手册》(《TestDirector Installation Guide》)


    1、开始(Getting Started)
    本章对TestDirector的使用进行粗略介绍,并解释它是如何开始工作的。包括如下几个部分内容:
      启动TestDirector(Starting TestDirector)
      TestDirector窗口(The TestDirector Window)
      TestDirector工具条(The TestDirector Toolbar)
      修改密码(Changing Passwords)
      修改用户属性(Changing User Properties)
      清除历史记录(Clearing History)

    1.1启动TestDirector(Starting TestDirector)
    你可以通过你的工作站上WEB浏览器启动TestDirector。
    启动TestDirector:
    1. 打开Web浏览器并输入TestDirector所在的URL(http://[Server name]/[virtual Directory name]/default.htm),TestDirector的首页将被打开。
    若不知道正确的路径,请与系统管理员联系。
     
    注意:如果你不能启动你的TestDirector,请接洽你的公司的系统管理员来确定TestDirector已经被安装到了公司的Web服务器上。关于更多的信息,请参考《TestDirector安装手册》(《TestDirector Installation Guide》)
    2. 点击TestDirector链接。
    在你第一次运行TestDirector时候,软件将会被下载到你的计算机上,随后TestDirector会自动进行版本检查,若发现存在新的版本,它将会帮你下载新的版本。一旦TestDirector进行完版本检查和更新(假如需要的话),TestDirector的登陆页面将被显示。
     
    注意:关于运行TestDirector时,下载组件到你的计算机的更多信息,请参考《TestDirector安装手册》(《TestDirector Installation Guide》)。

    3. 在域列表中选择你想进入的域。
    你能够选择名为DEFAULT的默认域。若不知道具体应该选择哪个域,请与管理员联系。
    注意:DEFAULT域在TestDirector的标准版中才有效。
    4. 在工程列表中选择一个工程。假如工程列表是空的,请查阅TestDirector的知识库(http://support.mercuryinteractive.com)并搜索关键字"empty project list"。
    若TestDirector的示例工程已经被安装在TestDirector的服务端,你则可以选择名为TestDirector_Demo的工程(确信你在Domain列表中已经选择了DEFAULT域)。
    此工程会为你介绍TestDirector,包括需求、测试、测试集、Test Runs以及缺陷。关于更多的信息,请参考《TestDirector指南》(《TestDirector Tutorial》)
    5. 在User ID框中,选择或输入你的用户名称。若不清楚你的用户名,请与系统管理员联系。
    注意:User ID列表信息是与客户端本身所在的机器有关的,故你在(某台机器上)第一次登陆TestDirector时,应该输入你的用户名。
    6. 在Password框中,输入管理员指派给你的密码。(若是第一次以Admin的身份登陆,你不需要输入密码,此时密码为空)
    若需要对密码进行修改,请查看第19页的"修改密码"。
    7. 点击 按钮。TestDirector会打开在你上一次运行TestDirector任务时所用过的那些模块(需求、测试计划、测试实验室和缺陷)。
    对于定制模块名称,请查看《TestDirector安装手册》(《TestDirector Installation Guide》)。
    8. 对于退出和返回到TestDirector登陆窗口,请点击在右上角的 按钮。

    1.2 TestDirector窗口(The TestDirector Window)
    当你打开一个工程时,TestDirector的主窗口会打开你上次工作时使用过的模块。在标题栏,TestDirector会显示工程名称和你的用户名。
     
    TestDirector包含如下几个模块:
    需求(Requirements) 定义测试需求。
    包括定义你正在测试的内容、定义需求的主题和条目并分析这些需求。
    测试计划(Test Plan) 开发一个测试计划。
    包括定义测试目标和策略、将测试计划分为不同的类别、对测试进行定义和开发、定义哪些需要自动化测试、将测试与需求进行连接和分析测试计划。
    测试实验室(Test Lab) 运行测试并分析测试结果。
    缺陷(Defects) 增加新缺陷、确定缺陷修复属性、修复打开的缺陷和分析缺陷数据。
    技巧:你可以在两个模块间利用快捷键进行切换。用Ctrl+Shift+1来访问需求模块,用Ctrl+Shift+2来访问测试计划模块,如此类推。

    所有的TestDirector模块都包括如下内容:
    TestDirector工具栏(TestDirector Toolbar) 位于TestDirector工程名的紧上面。
    假如此工具栏不可见,请点击Show Toolbar按钮。关于TestDirector工具栏的更多信息,请查看第18页的"TestDirector工具栏"。
    菜单栏(Menu Bar) 位于TestDirector工程名的紧下面。
    菜单名称随你选择的模块名称不同而改变。
    模块工具栏(Module Toolbar) 位于菜单栏下面。
    包括当前所使用TestDirector模块中经常使用到的命令。
     工具按钮(Tools Button) 位于窗口的右上角。
    能够让你改变用户密码和另外的一些用户属性、change the language direction for a user in a project from left to right or right to left、清楚历史数据、查看每一个TestDirector客户端组件的版本信息或打开文档引擎。
    关于文档引擎的更进一步信息,请查看第28章"产生工程文档"(Generating Project Documents)。
    关于定制工具菜单请查看《TestDirector安装手册》(《TestDirector Installation Guide》)。
     帮助按钮(Help Button) 位于窗口的右上角。
    能够通过它访问TestDirector的在线资源。关于定制帮助菜单,请查看《TestDirector安装手册》(《TestDirector Installation Guide》)。

    1.3 TestDirector工具栏(The TestDirector Toolbar)
    公用的TestDirector工具栏对所有的TestDirector模块都是适用的。包含如下的一些按钮:
    导航按钮   返回(Back) 返回到先前TestDirector所在的位置。
       前进(Forward) 假如你已经使用了返回的导航按钮,你可以使用前进按钮返回回来。
       首页(Home) 登出并且进入TestDirector登陆窗口。
    拼写按钮   拼写检查(Check Spelling ) 为所选中的单词或文本框作拼写检查。
    假如不存在错误,一个确认的消息将被弹出。假如错误被发现,将会弹出对话框显示相应的提示信息。
       拼写选项(Spelling Options) 打开拼写选项对话框,并能够让你对TestDirector的拼写检查执行方式进行配置。
       辞典(Thesaurus) 打开辞典对话框,并显示所选中单词的同义、近义或反义词。你能够替换掉所选择的词或查找新的词。
    缺陷按钮   增加缺陷(Add Defect) 打开增加缺陷对话框,并能够让你增加一个新的缺陷。
    关于更进一步的信息,请查看第25章"增加和跟踪缺陷"(Adding and Tracking Defects)。
    帮助按钮   帮助按钮(Help Button) 打开在线帮助并为当前的内容显示帮助主题。

    1.4修改密码(Changing Passwords)
      你能够改变访问TestDirector工程的密码。
    注意:管理员能够改变并覆盖用户密码。对于更多信息,请查看《TestDirector管理员手册》(《TestDirector Administrator's Guide》)。

    修改密码:
    1. 在窗口右上角,点击Tools按钮并选择Change Password菜单项。或者在工程定制窗口点击Change Password链接。修改用户密码的对话框将被弹出。
                
    2. 在Old Password框中输入你的旧密码。
    3. 在New Password框中输入你的新密码。
    4. 在Retype New Password框中重新输入你的新密码。
    5. 点击OK,关闭修改密码对话框。

    1.5修改用户属性(Changing User Properties)
     你能够修改你的用户属性信息,包括全名、Email地址、电话号码和描述信息。注意,Email地址信息是非常重要的,因为能够直接通过你的邮箱,让你接收到缺陷、需求和测试集的信息。
    注意:管理员能够改变并覆盖用户属性信息。对于更多信息,请查看《TestDirector管理员手册》(《TestDirector Administrator's Guide》)。

    修改用户属性:
    1. 在窗口右上角,点击Tools按钮并选择Change User Properties菜单项。或者在工程定制窗口点击Change User Properties链接。用户属性对话框将被弹出。
             
    2. 编辑如下的用户属性:Full Name、Email、Phone、Descrīption。
    3. 点击OK按钮,保存你的修改。

    1.6 清除历史记录(Clearing History)
    在自定义TestDirector工程时,你可以要求TestDirector来保存系统中的日志信息,以及在需求、测试和缺陷实体中的用户字段。产生的历史记录数据会被显示在需求、测试计划和缺陷模块的历史记录属性页上面。对于更多关于为TestDirector域设置历史记录的信息,请查看《TestDirector管理员手册》(《TestDirector Administrator's Guide》)。
    一旦你不想存储历史数据,TestDirector允许你将这些历史数据从TestDirector工程中删除。举个例子,假如你已经成功地运行了你创建的测试集,你可能想从TestDirector工程中清除这些历史记录。
    你能够清除所有的历史记录,或指定实体或域的历史记录。另外,你能够让TestDirector仅删除直到某一天(包括这一天)的历史记录。TestDirector所清除的历史记录显示在各自模块的History属性页下。
    注意:默认状态下,只要具有管理员权限的用户才能够清除历史记录。用户权限是能够被定制的。对于关于权限的更多信息,请查看《TestDirector管理员手册》(《TestDirector Administrator's Guide》)。

    清除历史记录:
    1. 在窗口右上角,点击Tools按钮并选择Clear History菜单项。清除历史记录对话框将被弹出。
     
    2. 在Entity框中,选择你准备删除历史记录所属的实体。若你准备删除需求、测试和缺陷实体的历史记录,请选择All。
    3. 在Field框中,选择你准备删除的历史记录所在的字段,若想删除历史记录的所有字段,请选择All。
    4. 在Until Date框中,选择一个日期。TestDirector所删除直到所选择日期的历史记录(包括所选择日期当天)。
    5. 点击OK。
    3、Working With TestDirector Data
    利用TestDirector网格(Grid)和树,你能够查看和修改你工程中的数据。本章描述如下几个部分内容:
      组织列(Arranging Columns)
      过滤记录(Filtering Records)
      高级/交叉过滤记录(Advanced/Cross Filtering Records)
      记录分类(Sorting Records)
      刷新清除设置(Refreshing and Clearing Setting)
      保存数据到文件(Saving Data to a File)

    1.1 About Working with TestDirector Data
    TestDirector利用网格或树组织并显示数据。
    Tree/Grid 描述
    需求树(Requirements Tree) 用在需求模块。为TestDirector工程显示测试需求。关于更进一步的信息,请看第八章"开发需求树"(Developing the Requirement Tree)。
    测试计划树(Test Plan Tree) 用在测试计划模块。在TestDirector工程中显示测试和对应的组。关于更进一步的信息,请看第十一章"开发测试计划树"(Developing the Test Plan Tree)。
    测试网格(Test Grid) 用在测试计划模块选择View>Test Grid时。在TestDirector工程中显示所有的测试。关于更进一步的信息,请看第十章"测试计划模块一览"(The Test Plan Module at a Glance)。
    设计步骤网格(Design Steps Grid) 用在测试计划模块。显示测试的步骤。关于更进一步的信息,请看127页的"构造测试"(Building Test)。
    测试集树(Test Sets Tree) 用在测试实验室模块。在TestDirector工程中显示测试集--一组测试,运行它们能够达到指定的测试目标。关于更进一步的信息,请看第十八章"创建测试集"(Creating Test Sets)。
    执行网格(Execution Grid) 用在测试实验室模块。显示测试集中的所有测试。关于更进一步的信息,请看第十七章"测试实验室模块一览"(The Test Lab Module at a Glance)。
    缺陷网格(Defects Grid) 用在缺陷模块。在TestDirector工程中显示测缺陷。关于更进一步的信息,请看第二十五章"增加并跟踪缺陷"(Adding and Tracking Defects)。
    当你利用TestDirector网格和树进行工作时,你能够对列进行排列、根据条件过滤记录、设置分类属性、刷新清除过滤和分类设置、保存数据到文件。注意:当TestDirector网格和树所显示内容的类型发生变化时,本章中的描述不总是完全适用。
    注意:你能够按照你自己的喜好保存你的网格设置,比如分类和过滤。更进一步的信息,请看第五章"Working With Favorite View"。
    1.2 组织列(Arranging Columns)
    你能够自定义每一列显示内容的顺序并且可以对每一列的长度进行调整。对列设置的修改将会在下次启动时仍然有效。
    设置列顺序(Setting Column Order)
    使用选择列对话框,你能够决定哪些列显示在TestDirector中,并决定所显示列的顺序。比如说,在Test Grid中你可以选择Subject作为第一列。
    决定显示的列和顺序:
    1. 点击Select Columns按钮 ,Select Columns对话框将被弹出。
              
     Available Columns列表框中显示当前没有被显示的列。
    Visible Columns列表框中显示了当前正在显示的列。
    2. 选择列名称并点击箭头按钮(<和>),将它们在Available Columns和Visible Columns列表框间移动。点击双向箭头按钮(<<和>>),将所有的列从一个列表框移动到另一个列表框。注意,你也可以点击列表名在两个列表框间进行拖动。
    3. 在Visible Columns列表框中,你可以通过Up和Down箭头 ,挑战列显示的顺序。注意,你也可以通过上下拖动列名称来调整它们的顺序。
    4. 设置非滚动列(Non-scrolling Columns)。通过在Fixed Columns框中设置你想要的非滚动列的数量,可以从最左边开始的这些数量的列设置为非滚动列。当你水平拖动滚动滑块时,非滚动列的位置是保持不变的,并且以阴影显示。(注意,此功能在需求模块中是无效的)
    5. 点击OK按钮,关闭对话框并应用新的列顺序。
    调整列宽度(Resizing Columns)
    你能够用鼠标调整每一列的尺寸。点击在列表头的右边界,通过拖动去调整列的宽度。注意,你仅仅只能够调整没有固定的列,即没有设置为非滚动列的列。
    1.3 过滤记录(Filtering Records)
    你能够过滤TestDirector数据,仅仅只按你定义的标准进行显示。你能为过滤条件指派一个简单的项(比如"Failed"),或一个合理的表达(比如"Passed Or Failed")。只有当记录满足所有的过滤标准时,才会显示在TestDirector网格或树中。
    你也能够指定多个过滤条件。举个例子,你能够指定Status的过滤条件为"Failed",为Tester指定过滤条件为"David Or Mark"。TestDirector将仅仅只显示由David或Mark操作的,并且失败的测试。
    定义一个过滤:
    1. 点击Set Filter/Sort按钮 。过滤对话框将被弹出,并显示Filter属性页。
                
    2. 点击相应的Filter Condition输入框,为指定的列设置过滤条件。点击Browse按钮,Select Filter Condition对话框将被弹出。
     
    3. 定义过滤条件。假如列表可用的话,从列表中选择项。你也能够增加一些操作,从而创建一个合理的表达式。
    注意:在定义过滤条件时,如下内容应该被考虑:
      显示在分级列表中的有些项包含子列表。这些项是被一个文件夹包括在一起。双击文件夹,并点击所要选择的项,就能够从子列表中选择一个项。
      当为一个用户定义条件时,你能够指定当前用户(选择【CurrentUser】)或整个用户组(如:【Developer】)。
      假如你输入的某个项超过一个单词,必须用一个引号在包含它们。举个例子,若搜索Login Boundary测试,在条件输入框中应该输入:"Login Boundary"。
      假如你只想输入某个项的一部分,你可以用星号(*)。举个例子,若想在所有测试中搜索包含Login单词的测试,在输入框中输入:*Login*。
    若想从所有的测试中搜索由Insert New开头的测试,在输入框中输入:"insert new*"。
    4. 点击OK去关闭Select Filter Condition对话框。
    5. 若想添加交叉过滤条件,点击Advanced链接。对于更进一步的信息,请看第30页的"高级/交叉过滤记录"(Advanced/Cross Filtering Records)。
    6. 点击OK去关闭过滤对话框。
    TestDirector应用这些过滤条件并显示过滤描述。对于一个网格,TestDirector也将在显示列名称下面的网格过滤框(Grid Filter Box)中显示过滤条件。
     
    技巧:对于一个网格,你也可以通过网格过滤框(Grid Filter Box)定义过滤条件。若想显示网格过滤框(Grid Filter Box),请选择View>Grid Filters。假如过滤框为空,则说明过滤条件对此项不适用。你可以直接在过滤框中输入过滤条件或点击过滤框,并点击显示出来的Browse按钮,在打开的Select Filter Condition对话框中输入过滤条件。
    注意:假如你正工作在测试计划树或测试集列表下,你能够保存过滤或分类信息并重新加载你所需要的树或列表。点击Save按钮去保存一个过滤设置、点击Load按钮去加载一个先前保存的过滤设置、点击Organize按钮去重命名,另存或删除过滤设置。假如你正工作在任何其它区域,请看第五章"Working with Favorite View"来保存作为自己喜欢视图的过滤信息。
    1.4高级/交叉过滤记录(Advanced/Cross Filtering Record)
    当你在定义过滤条件时,你也能够包括一个cross filter--关于关联项高级的第二次过滤,如关联的需求、测试、测试集或缺陷。举个例子,在测试计划树中,你能够定义状态为"Open"的测试集作为交叉过滤条件。另外,你可能有一些别的过滤条件,但TestDirector仅仅只会显示处于打开状态测试集的测试。
    下面的表格简要介绍了交叉过滤(Cross Filter)在各个TestDirector模块中的有效性。
    模块(Module) 交叉过滤(Cross Filter)
    需求(Requirements)   关联缺陷:通过缺陷和相关的测试覆盖过滤需求。
      关联测试:通过测试覆盖过滤需求
    测试计划(Test Plan)   关联测试集:通过包含测试的测试集来过滤测试。
      关联需求:通过需求覆盖来过滤测试。
      关联缺陷:通过相关联的缺陷来过滤测试。
    测试实验室--测试集列表(Test Lab-Test Sets List)   关联缺陷:通过缺陷过滤测试集。
      关联测试:通过包含的测试过滤测试集。
    测试实验室--执行网格(Test Lab-Execution Grid)   关联需求:通过覆盖了所选择的需求的测试来过滤测试实例。
      关联缺陷:通过相关联的缺陷来过滤测试。
    缺陷(Defects)   关联测试集:通过相关联的测试集来过滤缺陷
      关联需求:通过覆盖了所选择的需求的测试来过滤缺陷。
      关联测试:通过相关联的测试来过滤缺陷。
    定义交叉过滤:
    1. 点击Set Filter/Sort按钮 。过滤对话框被弹出,并显示过滤属性页。
     
     关于定义过滤条件的更进一步信息,请查看第27页的"过滤记录"(Filtering Records)。
    2. 点击Advanced链接去显示Cross Filter选项。
     
    3. 在Filter by下面,选择一个高级过滤的复选框。例如:选择"Associated Test Sets"复选框,然后点击相应的链接,Cross Filter:Associated【Filter】对话框将被弹出。
     
    4. 用你准备过滤规则定义一个交叉过滤。对于更详细信息,请查看27页的"过滤记录"(Filtering Records)。
    5. 点击OK按钮去保存你的改变并关闭Cross Filter对话框。
    6. 点击OK按钮去保存你的改变并关闭Filter对话框。
    1.5记录分类(Sorting Records)
    默认情况下,记录是以它们被添加的顺序进行显示的。当你设置记录的分类属性后,它们的显示顺序根据ASCII分类顺序(ASCII Sort Order)而定。ASCII分类顺序首先会认为以字符或空格开始的记录先于以数字开始的记录,接着会考虑大写字符,最终考虑小写字符。
    举个例子,假如在测试网格中的Tester列被标识为最高的分类优先级,记录将以显示在Tester列的名称根据ASCII分类顺序进行分类。假如Test Name被标识为次优先级,则先按Tester列的名称进行分类,对于同名的Tester列,再按Test Name列进行分类。
    注意:默认情况下,记录是按等级顺序定义在测试计划树中,只有当记录定义了根据主题进行分类后,记录才会按字母顺序进行排列。
    对记录进行分类(To sort records):
    1. 点击Set Filter/Sort按钮,过滤对话框将被弹出。
    2. 点击Sort属性页标签。
     
    Available Fields中包含了所有能够显示在列表中的域名称。
    Sorted Fields中包含了当前已经标识了分类优先级的域名称。
    3. 选择一个域名称并点击Arrow按钮(<和>),将它们在Available Fields和Visible Fields间移动。点击双向箭头按钮(<<和>>),将所有的名称从一个列表框移动到另一个列表框。注意,你也可以点击列表名在两个列表框间进行拖动。
    4. 在Sorted Fields中,使用向上和向下箭头,设置域名称的显示顺序。注意,你也可以直接向上或向下拖动域名称。
    5. 在Sorted Fields中,选择一个域名称并点击Sort Direction按钮,从而设置此域是以升序还是降序显示。
    6. 点击OK去应用分类顺序设置。
    注意:假如你正工作在测试计划树或测试集列表下,你能够保存过滤或分类信息并重新加载你所需要的树或列表。点击Save按钮去保存一个过滤设置、点击Load按钮去加载一个先前保存的过滤设置、点击Organize按钮去重命名,另存或删除过滤设置。假如你正工作在任何其它区域,请看第五章"Working with Favorite View"来保存作为自己喜欢视图的过滤信息。
    1.6 刷新和清除设置(Refreshing and Clearing Settings)
    你能够刷新清除TestDirector数据的过滤和分类设置。
       点击Set Filter/Sort箭头并选择Refresh,或点击Refresh Filter/Sort按钮来刷新在TestDirector网格或树中的数据。
       点击Set Filter/Sort箭头并选择Clear,或点击Clear Filter/Sort按钮来清除在TestDirector网格或树所有的过滤和分类优先级设置。
    1.7保存数据到文件(Saving Data to a File)
    你能够将网格中的内容保存为Text文件、Microsoft Excel电子表格、Microsoft Word文档、或HTML文档。
    保存数据到文件中:
    1. 在网格上点击右键,并在右键菜单上选择Save As。
    2. 选择一个文件类型:Text File、Excel Sheet、Word Document或HTML,保存网格结果对话框将被弹出。
    3. 在Save in框中,选择此文件保存的路径。
    4. 在File Name框中,输入此文件名称。
    5. 点击Save按钮。
    4、添加附件(Adding Attachments)
    你能为需求、主题文件夹、测试、测试步骤、测试集、测试运行或缺陷添加附件。本章将描述:
      Attaching a File
      Attaching a URL
      Attaching a Snapshot
      Attaching System Properties
      Attaching an Image from the Clipboard
      Managing Attachments

    4.1 About Adding Attachments
    遍及整个测试过程,你都可以添加附件来更好的阐明你的工作,这些附件可以是文件、URL、应用程序快照、从剪贴板拷贝的图像或系统信息。你是通过Attachments对话框来管理附件的。
     
    下面的表格描述了在TestDirector的各个模块,怎样去打开Attachments对话框。
    添加附件到…… 所在模块 过程
    需求 需求 从需求树上选择一个需求,并点击Attachments按钮或选择View>Attachments。
    测试或主题 测试计划--测试计划树视图 从测试计划树上选择一个主题文件夹或测试,点击Attachments标签页。
    设计步骤 测试计划--测试计划树视图 从测试计划树上选择一个测试,点击Design Steps标签页。在此标签页上选择一个步骤,并点击Attachments按钮。
    测试 测试计划--测试网格视图 从测试网格上选择一个测试,并点击Attachments按钮。
    测试集 测试实验室 选择一个测试集,并点击Test Set Properties标签页,然后点击Attachments链接。
    测试步骤 测试实验室--手动测试运行 在一个手动测试运行期间,点击Exec Steps按钮。选择其中一个步骤并点击Attachments按钮
    测试运行 测试实验室--执行网格或执行流图 在Test Run Properties对话框中,点击Attachments标签页。
    缺陷 缺陷 从缺陷网格上选择一个缺陷,并点击Attachments按钮。

    4.2 Attaching a File
    TestDirector能够让你去贴附文件。
    贴附一个文件:
    1. 在Attachments对话框,点击File按钮 ,Open对话框将被弹出。
    2. 选择一个文件名并点击Open。
    文件名称、文件尺寸和修改日期会连同一起显示在附件列表中,与文件程序相关联的图标显示在文件名称前面。
    3. 在Descrīption栏中输入任何与所附文件相关的信息。
    4.3 Attaching a URL
    TestDirector能够让你去贴附URL。能够是任何有效的URL,如:HTTP、FTP、Gopher、News、Mailto、File等。
    贴附一个URL:
    1. 在Attachments对话框,点击URL按钮 ,贴附URL的对话框将被打开。
     
    2. 在URL对话框中输入一个有效的URL,并点击OK。
    此URL将显示在附件列表中,系统默认的Web浏览器图标显示在URL前面。
    3. 在Descrīption栏中输入任何与所附URL相关的信息。

    4.4 Attaching a Snapshot
    TestDirector能够让你去贴附你应用程序的图像。
    贴附一个Snapshot:
    1. 在Attachments对话框,点击Snapshot按钮 ,Snapshot的对话框将被打开。
     
    2. 拖动Camera图标到你想要捕获的对象上。捕获的图像将被显示在Snapshot对话框中。
    3. 你能够改变你所捕获图像的缩放级别。
      点击Zoom Out或Zoom In去放大或缩小图片。
      点击Normal返回到原始状态。
    4. 点击Attach。
    TestDirector会为此图像统一分配一个文件名,且扩展名为.jpg。文件名显示在附件列表中,且图像图标显示在文件名旁边。文件的尺寸和修改日期也同样显示在附件列表中。
    5. 在Descrīption栏中输入任何与所附Snapshot相关的信息。

    4.5 Attaching System Properties
    TestDirector能够让你去贴附你计算机系统的信息。
    贴附系统属性:
    1. 在Attachments对话框,点击System Info按钮 ,系统信息的对话框将被打开。
     
    2. 若仅想贴附单个标签页上的信息,请点击此标签页并点击Current Topic按钮。
    3. 若想贴附所有标签页的信息,请点击All Topic按钮。
    TestDirector会为此信息统一分配一个扩展名为.tsi的文件名。文件名显示在附件列表中,且图标显示在文件名旁边。文件的尺寸和修改日期也同样显示在附件列表中。
    4. 在Descrīption栏中输入任何与所附文本文件相关的信息。

    4.6 Attaching an Image from the Clipboard
    你能够将拷贝到剪贴板中的图片贴附到TestDirector中。
    从剪贴板中贴附图像:
    1. 拷贝图像到剪贴板中。
    2. 在Attachments对话框,点击System Info按钮 。
    TestDirector会为此信息统一分配一个扩展名为.jpg的文件名。文件名显示在附件列表中,且图标显示在文件名旁边。文件的尺寸和修改日期也同样显示在附件列表中。

    4.7 Managing Attachments
    你能够通过Attachments对话框查看、修改和删除附件。
    查看附件:
    6. 在Attachments列表中,选择一个附件。附件相应的描述信息将显示在下面的Descrīption框中。
    7. 双击此附件并点击Open按钮 。附件将在相应的应用程序中打开。如,URL将在系统默认的Web浏览器中打开。

    修改附件:
    注意:当你在相应的应用程序中打开附件的时候,TestDirector是拷贝附件到你客户端机器的本地目录。在对此附件作修改后,你需要对它进行保存两次。首先是通过打开它的应用程序对本地拷贝进行保存,然后点击TestDirector中的Save按钮将本地拷贝保存到TestDirector工程中。
    a) 在附件列表中双击一个附件,此附件的一个本地拷贝将在相应的应用程序中打开。
    b) 修改此附件。
    c) 在打开的应用程序中保存此附件。注意这次保存的只是你附件的本地拷贝。
    d) 关闭附件。
    e) 在TestDirector的Attachments对话框中点击Save按钮 。此次是将本地拷贝保存到TestDirector工程中。

    删除附件:
    1. 在Attachments列表中,选择你准备删除的附件。可以利用Ctrl键一个选择多个附件。
    2. 点击Delete Selected按钮 ,并点击Yes确认。

    5、Working With Favorite Views
    Favorite View是按照你的设置执行的TestDirector窗口视图。TestDirector允许你保存Favorite View,并可以在需要的时候重新加载它们。本章将描述:
      Attaching Favorite Views
      Organizing Favorite Views

    4.1 About Working with Favorite Views
    你能够通过选择某种设置来决定TestDirector窗口的容貌。能够保存测试网格、执行网格、缺陷网格、所有的报告和图表、以及文档引擎的Favorite Views。这些设置可能包括为网格列应用一个过滤、在报告中对域进行分类或设置一个图像的外观。你能够为了以后的使用而保存一个Favorite View,并且可以加载它在以后任何适当的时候。
    可以在公共文件夹或私有文件夹保存Favorite View。在公共文件夹保存的视图可以被所有用户访问。在私有文件夹保存的视图仅能被创建者访问。
    从Favorite列表中选择一个Favorite View,并将其加载到TestDirector窗口中。
    注意:
    在执行网格中,与别的地方而言,对Favorite View的操作有一点细微的差别。取代Favorite按钮的是,你使用菜单栏命令:选择View > Favorites去显示Favorite View命令,选择Add去增加一个新的视图,选择View去加载一个存在的视图,选择Organize去组织你的视图。
    部分Favorite View命令仅仅对某些用户组有用。用户组的权限是被系统管理员决定的。更详细信息,请查看《TestDirector管理员手册》(TestDirector Administrator's Guide)。

    4.2 Adding Favorite Views
    你能够增加视图到Favorite列表。
    增加一个视图:
    1. 点击Favorites箭头 ,并选择Add to Favorites,增加Favorite对话框将被弹出。
     
    2. 在Name框中,输入一个视图名称。
    3. 在Location单选框内:
      选择Private去增加视图名到你的私有文件夹。在此文件夹内的Favorite Views仅仅只能够被你访问。
      选择Public去增加视图名到一般文件夹。在此文件夹内的Favorite Views能够被所有用户访问。
    那些已经存在的Favorite Views被显示在Existing Favorite框内。
    4. 点击OK按钮,新的视图名称被添加到Favorite列表。

    4.3 Organizing Favorite Views
    你能够通过删除视图和改变视图属性来组织Favorite列表。
    点击Favorites按钮 并选择Organize Favorites去打开Organize Favorites对话框。
     
    修改视图属性:
    你能够对Favorite列表中的视图属性进行修改。
    1. 在Organize Favorites对话框中,从视图列表中选择一个视图并点击Properties。属性对话框将被弹出。
     
    2. 在Name框中,为视图输入一个新的名称。
    3. 在Location单选框内:
      选择Private去增加视图名到你的私有文件夹。在此文件夹内的Favorite Views仅仅只能够被你访问。
      选择Public去增加视图名到一般文件夹。在此文件夹内的Favorite Views能够被所有用户访问。
    4. 点击OK。
    5. 点击OK去关闭Organize Favorites对话框。

    删除视图:
    你能够从Favorite列表中删除Favorite视图。
    1. 在Organize Favorites对话框的视图列表上,选择一个视图名称并点击Delete。
    2. 点击OK去确认。
    3. 点击OK去关闭Organize Favorites对话框。
    Part II
    Requirements Specification

     
    6、需求定义工作流(The Requirements Specification Workflow)
    你应该通过定义测试需求来开始整个应用程序的测试过程。需求详细地描述了在你的应用程序中哪些需要被测试,并为测试组提供了整个测试过程的基础。
    通过定义这些需求,你能够更好地聚焦于商业需要对测试进行计划和管理。需求与测试和缺陷关联,从而确保整个过程可追溯并帮助整个过程的决策。
    本章描述了怎样使用TestDirector需求模块来定义测试需求。以下是需求定义工作流的流程图:
                       
    在使用TestDirector之前,首先确保你已经有一个存放测试数据的工程。关于创建工程的更详细信息,请参考《TestDirector管理员手册》(TestDirector Administrator's Guide)。

    6.1定义测试范围(Defining the Testing Scope)
    测试组在基于测试的测试应用的基础上,收集所有可以利用的文档信息,开始测试处理过程,例如收集市场和商务需求文档、系统需求说明书和设计文档等。
    使用这些文档您可以对应用程序的测试方面作一个全面彻底的了解,并以此为基础来确定你的测试范围--测试目的、目标和策略(Goal、Objective、Strategy)。
    在确定您的测试范围之前你应该先问一下自己,以下的几个问题:
      应用程序的主要目的和反向是什么?
      应用程序有哪些主要特点?
      哪些功能在这个产品中是相对重要的?
      在应用程序中,哪些功能是危急的或高风险的?
      你的测试优先级是什么?
      你的客户或最终用户是否同意你的测试优先级?
      你总的质量目标是什么?

    6.2创建测试需求大纲(Creating the Testing Requirements Outline)
    质量保证的管理人员用测试范围为应用程序的测试定义所有的测试需求。它们先定义测试主题,并将各个测试主题指派给测试组内的各个QA测试人员。然后每一个QA测试人员将自己所负责的测试主题记录到TestDirector工程上。
    需求主题是通过创建需求树记录在需求模块里。此需求树是以图表的方式形象地描述了你的需求说明书,并显示了不同级别需求的等级关系。
    举个例子,假设一个航班预定软件,它能够让你去管理航班调动、旅客登记和机票销售。QA管理人员可能会定义他主要的测试需求为:登陆操作、数据库操作、传真发送操作、安全性能力检查、图形和报表操作、UI检查操作和帮助。对于完整的例子,请查看TestDirector_Demo工程。
     
    关于创建需求树的更进一步信息,请看第8章的"开发需求树"(Developing the Requirements Tree)。

    6.3定义需求(Defining Requirements)
     对于每一个需求主题,QA测试员均应该创建相应的详细测试需求列表。例如,Application Security需求主题可能会被分解为如下的需求:
     
     在需求树中的每一个需求均要求被详细描述,并且应该包括所有与需求相关的附件。QA测试人员分配每个需求一个优先级,此优先级会作为测试组创建测试计划的一个考虑因素。
    1.4分析需求定义(Analyzing your Requirements Specification)
     QA管理人员复查这些需求,并确定测试范围被更早的定义。他们还应该将需求的状态改为"Reviewed",假如这个需求被评审通过的话。
     你应该产生TestDirector报告和图表来帮助你评审需求。对于更多信息,请查看26章"产生报告"(Generating Reports)和27章"产生图表"(Generating Graphs)。
     在随后的测试计划中,你应该使用这些需求作为基础。你在测试计划阶段所创建的测试也应该覆盖这些需求。关于需求和测试覆盖的更多信息,请查看第12章"连接测试到需求"(Linking Tests to Requirements)。这些测试也能够被缺陷进行关联,从而在整个测试过程形成完整的回溯。
    7、需求模块一览(The Requirements Module at a Glance)
    本章将结束TestDirector需求模块的核心元素。包括如下内容:
      需求模块(The Requirements Module)
      需求菜单栏(The Requirements Menu Bar)
      需求工具条(The Requirements Toolbar)
      需求树(The Requirements Tree)

    7.1需求模块(The  Requirements Module)
    你可以在TestDirector中点击Requirements标签页来定义你的需求。你可以用Document View或Coverage View两种方式来显示需求树。
    注意:你可以从Microsoft Word、Excel或第三方的需求管理工具中导入需求到你的TestDirector工程。对于导入需求,你必须首先安装相应的TestDirector插件。对于更详细信息请查看《TestDirector安装手册》(TestDirector Installation Guide)。
     默认情况下,需求模块是以文档视图方式显示需求树。
     
    你也可以以覆盖视图方式显示需求树。这种方式能够让你更容易地为需求增加或修改测试覆盖。对于测试覆盖的更多信息,请看第12章"连接测试到需求"(Linking Test to Requirements)。
     
     需求模块包括如下的核心元素:
      Requirements Menu Bar,需求菜单栏,具有需求模块命令的下拉菜单。
      Requirements Toolbar,需求工具栏,具有创建或修改需求树的常用命令按钮。
      View Box,视图选择框,能够让你去选择需求树的显示方式:文档视图或覆盖视图。
      Requirements Tree,需求树,你的测试需求的一种图形表达。更详细信息请看60页的需求树(The Requirements Tree)。
      Descrīption Tab,描述标签页,显示当前所选择需求的注释,仅在文档视图中有效。点击Show箭头去显示描述面板。
      History Tab,历史标签页,显示当前所选择需求的历史操作列表。
      Tests Coverage Tab,测试覆盖标签页,显示了在需求树上,当前所选择的需求的测试列表。仅适用于覆盖视图。
      Details Tab,细节标签页,显示了在需求树上当前树选择需求的详细描述。仅适用于覆盖视图。

    7.2 需求菜单栏(The Requirements Menu Bar)
    需求菜单栏包括如下的菜单:
      Requirements菜单,包括命令:在需求树上修改需求、从一个需求产生一个测试、Mail一个需求。
      View菜单,包括命令:设置需求树的显示、查找一个需求、浏览测试覆盖、关联缺陷、附件。
      Tools菜单,包括命令:转换需求到测试。
      Analysis菜单,包括命令:产生需求报告和图表。关于需求报告的更详细信息,请看第26章,"产生报告"(Generating Reports)。关于需求图表的更详细信息,请看第27章,"产生图表"(Generating Graphs)。

    7.3 需求工具栏(The Requirements Toolbar)
    需求工具栏包括如下的按钮:
      New Requirements :新建需求,增加一个新的需求到需求树。TestDirector将增加此需求到当前所选择的需求下面,并处于相同等级。
      New Child Requirements :新建子需求,增加一个新的需求到需求树。TestDirector将增加此子需求到当前所选择的需求下面,并处于低一级的级别。
      Cut :剪切,移动所选择的需求到需求树的新位置。要与Paste按钮联合使用。
      Copy :拷贝,拷贝所选择的需求到需求树的另外位置或另外的TestDirector工程。需要与Paste按钮联合使用。
      Paste :粘贴,粘贴一个剪切或拷贝的需求到需求树的另外位置。
    点击Paste箭头并选择Paste,去粘贴需要到当前所选择的需求下面,以相同的级别。
    点击Paste箭头并选择Paste as Child,去粘贴需要到当前所选择的需求下面,以低一级的级别。
      Delete :删除,从需求树中删除所选择的需求。
      Refresh Selected :刷新,刷新在需求模块中的数据。
    点击Refresh Selected按钮,去刷新当前所选择的需求。所有子需求也会被同时刷新。
    点击Refresh Selected箭头并选择Refresh All去刷新所有的需求。
      Select Columns :选择列,打开选择列对话框,你可以决定哪些字段显示在需求树中,并决定它们的显示顺序。
      Zoom in :展开,改变需求树的细节等级。
    点击Zoom In按钮去展开需求树的指定分支。
    点击Zoom In箭头并选择Zoom Out One Level去取消预先展开的命令。
    点击Zoom In箭头并选择Zoom Out To Root去收缩,并显示整个需求树的根结点。
      Find :查找,打开查找需求对话框,能够让你在需求树中查找你想要的需求。
      Mail Requirement :Mail需求,打开发送邮件对话框,你可以从邮件列表中选择收件人,或输入其它的邮件地址,发送需求邮件。
      Attachments :附件,打开附件对话框,能够让你为所选择的需求添加附件。对于更多信息,请看第4章"增加附件"(Adding Attachments)。
      Test Coverage :测试覆盖,打开测试覆盖对话框,能够让你为选定的测试需求增加测试覆盖。注意:你也能够右键点击一个需求,并选择Associated Defects去浏览有测试覆盖需求的所有缺陷关联。

    7.4需求树(Requirements Tree)
    TestDirector在需求树中有机的组织并显示数据。需求树中每一行都显示了一条独立的需求。需求树中可以显示如下细节信息。
    选项 描述
    附件(Attachment) 指示本需求是否包含附件。
    此字段值可以为"Y"或"N"。
    作者(Author) 创建此需求的用户名。
    默认情况,TestDirector插入登陆用户名到此字段。
    覆盖状态(Cover Status) 需求当前的状态。默认情况下,状态为Not Covered。
    一个需求的状态能够是如下几种:
    Not Covered:这个需求没有被链接到测试。
    Failed:覆盖此需求的一个或多个测试被执行,且状态为:Failed。
    Not Completed:覆盖此需求的一个或多个测试被执行,且状态为:Not Completed。
    Passed:覆盖此需求的所有测试均有同样状态:Passed。
    No Run:覆盖此需求的所有测试均有同样状态:No Run。
    你能够点击一下State,去打开你所选择需求的测试覆盖对话框,关于覆盖的更详细信息,请看第12章的"连接测试到需求"(Linking Tests to Requirements)。
    创建日期(Creation Date) 需求被创建的日期。默认情况下,创建日期被设置为当前服务器日期。你也可以点击下拉箭头去显示一个日历,并选择一个不同的创建日期。
    创建时间(Creation Time) 需求被创建的时间。默认情况下,创建时间被设置为当前服务器的时间。
    修改(Modified) 标识此需求被最后修改的时间。
    名称(Name) 需求名。
    优先级(Priority) 需求的优先级。范围从最低级别(Level 1)到最紧急级别(Level 5)。
    产品(Product) 需求所基于的应用程序组件。
    需求ID(Req ID) 需求的唯一数字ID,右TestDirector自动分配。注意,需求ID是只读的。
    复查(Reviewed) 标识此需求是否被复查,并且被责任人批准通过。
    类型(Type) 需求的类型,可以是Hardware或Software。
    注意:你可以改变需求树中任何字段的标签,也可以增加最多24个用户自定义的域到需求树中。更进一步信息,请看《TestDirector管理员手册》(TestDirector Administrator's Guide)。
    1、开发需求树(Developing Requirements Tree)
    需求树组织并展示了你的测试需求体系。本章描述了:
      创建需求树(Creating a Requirements Tree)
      在树中查询需求(Finding Requirements in the Tree)
      查看需求树(Viewing the Requirements Tree)
      查看需求历史(Viewing Requirement History)
      邮寄需求(Mailing Requirements)
      查看关联缺陷(Viewing Associated Defects)
      修改需求树(Modifying the Requirements Tree)
      从需求创建测试(Creating Test from Requirements)

    8.1关于需求树(About the Requirements Tree)
    定义测试需求的过程是单调乏味并耗时的。大多数情况下,测试组是用字处理软件或电子表格文档来记录需求。这样的需求文档维护复杂,难以组织和分类,而且不能够连接到基于需求创建的测试和相应的缺陷。
    作为整个测试过程的第一步,TestDirector需求模块能够让你简单的定义和管理你的测试需求。测试小组通过在TestDirector中创建需求树来记录需求。它以图表的方式展现了整个需求说明和需求关系。
    一旦你已经创建了测试,你就可以在需求和测试间建立连接,而测试与缺陷又可以建立关联。通过这种方式,你就可以跟踪测试需求到整个测试过程的每一个步骤。假如测试需求被改变,你可以立即确定哪些测试和缺陷受到影响,并且是谁负责的收到了影响。你能够在需求树中分组和分类需求,监控需求过程和任务分配,并产生详细的报告和图表。
    注意:本章假定你是使用需求模块的Document View去创建需求树。关于Coverage View的更详细信息,请看第12章的"连接测试到需求"(Linking Tests to Requirements)。

    8.2 创建需求树(Creating a Requirements Tree)
    你可以通过创建需求树来定义你的需求。
    创建需求树:
    1. 在需求模块的工具栏上点击New Requirement按钮 ,或者选择Requirements > New Requirement.
    注意:假如需求字段已经在工程自定义窗口中定义,,则New Requirement对话框将被打开。为不要的字段选择值,并点击OK。
    TestDirector将增加一个默认名称为"New Requirement"的新需求到需求树中。
     
    2. 为新的需求输入一个名称,并按Enter。注意,需求名称中不能够包括字符:/ ^ *。
    3. 为需求添加需求细节。关于在需求树中的有效字段的更详细信息,请看第7章"需求模块一览"(The Requirements Module at a Glance)。
    4. 在Descrīption面板中,输入新需求的描述信息。
    5. 点击Attachments按钮或选择View > Attachments,为新需求添加附件。附件可以是文件、URL、应用程序的快照、剪贴板中的图像或系统信息。TestDirector会在需求树中,紧挨着需求名放置一个可点击的附件图标 。对于更多信息,请查看第4章"添加附件"(Adding Attachments)。
    6. 点击Tests Coverage按钮 或选择View  >  Tests Coverage,为需求添加测试覆盖。测试覆盖定义了测试计划树中的测试并能够让你连接测试需求到测试。你仅仅只有当在测试计划期间创建测试后,才能够定义测试覆盖。关于测试覆盖的更详细信息,请看第12章"连接测试到需求"(Linking Tests to Requirements)。
    7. 添加另外的需求到需求树:
      点击New Requirement按钮 ,在当前需求下面添加同等级需求。
      点击New Child Requirement按钮 ,在当前需求下面添加低一级的需求。

    8.3 在树中查找需求(Finding Requirements in the Tree)
    你可以基于需求名称或其它的一些信息,在需求树中查找需求。
    注意:假如你使用放大,TestDirector会限制在你放大的区域进行搜索。关于树放大的更多信息,请查看67页的"查看需求树"(Viewing the Requirements Tree)。
    查找需求:
    1. 在工具栏上点击Find按钮 ,或者右键点击需求树,并选择Find,Find Requirement对话框将被打开。
     
    2. 在Find in Field框中,选择查找的依据。
    3. 在Value to Find框中,输入或选择你所选择字段的值。此查找是不分大小写的。
    举个例子,假如字段为Name,则在Value to Find框中输入需求名称。假如字段名为Priority,则在Value to Find框中,选择一个优先级(从一到五)。
    4. 点击Find。TestDirector将会用给定的值去定位这个需求。假如搜索是成功的,搜索结果对话框将被打开,并显示可能匹配的列表。从列表中选择一个结果,并点击Go To按钮,则会在需求树中高亮显示此需求。
    假如搜索不成功,相应的提示信息框将被弹出。

    8.4查看需求树(Viewing the Requirements Tree)
    你能够改变TestDirector显示需求树的方式。包括放大和缩小树、显示编号、刷新树、展开和折叠树的分支。
    缩放树:
    你能够放大或缩小 需求树中的需求主题。这能够让你去改变树显示的明细程度。
    放大:
    1. 在需求树中选择一个需求主题
    2. 在工具栏上点击Zoom In按钮,或者右键点击需求并选择Zoom In。
    需求树仅仅只显示所选择的需求主题和这需求主题所包括的内容。
    缩小:
    要反转一个放大的行为,你可以缩小一个层次或完全的缩小。
      点击Zoom In箭头,并选择Zoom Out One Level去取消先前放大的命令。
      点击Zoom In箭头,并选择Zoom Out To Root去全部缩小并显示整个需求树。

    显示编号:
    现在View > Numeration去显示需求树中每一个需求具有等级的编号。一旦你对需求树作了改变,TestDirector将自动为这些需求重新编号。注意,这些编号和为每个需求分配的唯一需求ID是没有关系的。默认情况下,需求以编号方式显示。

    刷新树:
    你可以在需求模块中刷新数据。
      快速地刷新需求:选择所要刷新的需求,并点击Refresh Selected按钮 ,此需求和所有的子需求将被刷新。
      刷新所有需求:点击Refresh Selected箭头,并选择Refresh All。

    展开和折叠树:
    你能够展开或折叠需求树中的分支,这能够让你去改变树显示的细节程度。
      展开树枝:单击分支名左侧的展开符号 。若想展开分支的所有层,需要右击分支名称,并选择Expand。
      折叠树枝:单击分支名左侧的折叠符号 。若想折叠分支中所有层,需要右击分支名称,并选择Collapse。

    8.5查看需求历史(Viewing Requirement History)
     你可以查看需求树中所有需求的修改记录。
    查看需求的修改历史:
    4. 在需求树上选择一个需求。
    5. 点击History标签页,所有字段的修改历史都显示在网格中。
     
    对于需求的每一个改变,网格上都会显示相应的修改日期、修改人名称和修改后的值。
    6. 你能够定义哪些字段可以显示在网格中。在Field列表中,选择一个字段名称,仅仅只查看该字段的修改记录。
    关于保存历史记录的信息,请查看《TestDirector管理员手册》(TestDirector Administrator's Guide)。

    8.6 邮寄需求(Mailing Requirements)
    你可以发送E-mail给TestDirector项目中的其它使用者。这样你就可以定期地通知开发和质量保证人员关于测试需求的情况。
    注意:默认状态下,TestDirector以HTML格式发送E-mail。若希望TestDirector发送无格式的文本邮件,需要在Site Administrator的Site Config标签页中编辑MAIL_FORMAT参数。更详细信息,请查看《TestDirector管理员手册》(《TestDirector Administrator's Guide》)。

    邮寄需求:
    6. 在需求树中,选择一个需求,并点击Mail Requirement按钮 。Send Mail对话框将被弹出。
     
    7. 输入一个有效的E-mail地址。或者点击To按钮或Cc按钮去选择用户,Select Recipients对话框将被弹出。
     
    选择所要发送邮件的用户或用户组,并点击OK。注意,你可以通过右击一个用户,并选择Properties来查看用户属性。关于定义用户属性的更详细信息,请查看《TestDirector管理员手册》(《TestDirector Administrator's Guide》)。
    8. 在Subject框中,为邮件输入主题。
    9. 选择是否需要包括需求的Attachments、History和(或)Tests Coverage。
    10. 在Additional Comments框中,添加你想加的注释。
    11. 在对话框中进行拼写检查:
    a) 点击Check Spelling按钮 ,为所选择的词或文本框作拼写检查。假如不存在错误,一个确认消息将被弹出;假如有错误被发现,Spelling对话框将被打开,并显示错的词和更改建议。
    b) 点击Spelling Options按钮 打开拼写选择对话框。能够让你配置TestDirector拼写检查的规则。
    c) 点击Thesaurus按钮 打开辞典对话框,显示所选词的同义、反义或近义词。你能够替换所选择的词,或查找新单词。
    12. 点击Custom去查看并编辑完整的E-mail文本。
    13. 点击Send,发送E-mail。

    8.7 查看关联缺陷(Viewing Associated Defects)
    你能够查看需求树中的需求所关联的缺陷。为了让需求有关联的缺陷,此需求必须要有测试覆盖(详见第12章,"连接测试到需求"(Linking Tests to Requirements))。被连接的测试也需要与缺陷进行关联,或者在测试计划期间(详见第108页"Associating Defects with a Test"),或者在手动测试运行期间(详见第196页"Running a Test Manually")。
    查看关联缺陷:
    选择View > Associated Defected,或右键点击一个需求,并选择Associated Defected。关联缺陷对话框将被弹出。
     

    8.8修改需求树(Modifying the Requirements Tree)
    你可以在需求树中重命名、拷贝、移动或删除需求。

    重命名需求:
    你可以在需求树中对需求进行重命名。
    1. 从需求树中选择一个需求。
    2. 点击这个需求,或右键点击这个需求,并选择Rename。
    3. 编辑需求名称。注意,需求名称不能够包含如下字符:\ ^ *。
    4. 按Enter。

    拷贝需求:
    你可以在需求树中对需求进行拷贝。当你拷贝一个需求主题时,此需求主题的所包含的内容也将被拷贝。
    注意:你能够拷贝需求到不同的TestDirector工程。
    1. 在需求树中选择准备要拷贝的需求。
    2. 点击Copy按钮 ,或右键点击这个需求,并选择Copy。
    3. 在需求树中选择一个需求。
    4. 你可以将已复制的需求,粘贴到同级或低级。
      以同级粘贴所拷贝的需求到所选择需求的下面:点击Paste箭头 并选择Paste,或右键点击需求,并选择Paste > Paste。
    注意:假如要粘贴的需求与已经存在的需求同名,TestDirector将自动添加adds_Copy到拷贝的需求名后面。
      以低一级粘贴所拷贝的需求到所选择的需求下面:点击Paste箭头 并选择Paste as Child,或者右键点击需求,并选择Paste > Paste as Child。
    5. 点击Yes去确认。

    移动需求:
    你能够移动需求到需求树的不同位置。当你移动需求主题时,需求模块将自动移动需求主题所包含的内容。
    1. 在需求树中选择准备去移动的需求。
    2. 点击Cut按钮 ,或者右键点击需求并选择Cut。
    3. 在需求树中选择一个需求。
    4. 你可以将已剪切的需求,粘贴到同级或低级。
      以同级粘贴所拷贝的需求到所选择需求的下面:点击Paste箭头 并选择Paste,或右键点击需求,并选择Paste > Paste。
      以低一级粘贴所拷贝的需求到所选择的需求下面:点击Paste箭头 并选择Paste as Child,或者右键点击需求,并选择Paste > Paste as Child。
    5. 点击Yes去确认。
    提示:你可以通过拖动,将一个需求移动到需求树的新的位置。

    删除需求:
    你能够将需求从需求树中删除。若删除需求主题,需求主题所包含的所有内容也将被删除。
    1. 从需求树中选择一个需求。
    2. 点击Delete按钮 ,或选择Requirement > Delete。或者选择此需求,比按Delete键。
    3. 点击Yes去确认。

    8.9 从需求创建测试(Creating Tests from Requirements)
    一旦你创建了需求树,你可以用这些需求作为基础,在测试计划树中定义测试,并在测试集中运行测试。
    从需求创建测试有如下两种方法:
      转换需求到测试(Convert Requirement to Tests):转换需求到测试计划树中指定主题的测试。
    你可以转换需求树中的所选定的需求或所有需求。这种方法使用转换到测试向导,帮助你设计测试计划树。详见第77页的转换需求到测试(Convert Requirement to Tests)。
      从需求产生测试(Generate a Test from Requirements):转换需求到测试计划树中指定主题的测试,并添加到测试实验室模块指定的测试集中。
    这种方法使用产生测试对话框,在你分析需求时,能够帮你迅速运行测试。详见第81页的从需求产生测试(Generate a Test from Requirements)。

     转换需求到测试:
     使用转换到测试向导,转换需求到测试计划树中指定主题的测试。
    1. 你可以转换需求树中指定的需求或全部需求:
    转换所有需求:选择Tools > Convert to Test > Convert All。
    转换指定的需求:在需求树中选择所要转换的需求,并选择Tools > Convert to Tests > Convert Selected。
    Step 1对话框将被打开。
     
    2. 选择一种自动转换方法。
      选择Convert lowest child requirements to design steps,将所有最低级别的子需求转换为设计步骤、高一级别的转换为测试、所有更高级别的转换为主题。
      选择Convert lowest child requirements to tests,将所有最低级别的子需求转换为测试、所有高级别的转换为主题。
      选择Convert all requirements to subjects,将所有选择的需求转换为主题。
    3. 点击Next去开始转换需求。若想取消转换并返回到步骤1,点击进度条上的Stop按钮。当转换过程完成,转换结果将被显示在Step 2对话框中。
     
    注意:假如你仅仅只转换单个需求,向导将会跳过此对话框。
    4. 查看向导图例,点击Legend链接。
    5. 对每一个转换项,你能够做如下操作:
      选择一个项,并点击 Exclude按钮,或右键点击该项,并选择 Exclude,将此项从测试计划树中删除。
      选择一个项,并点击 Subject按钮,或右键点击该项,并选择 Subject,将选择的项改变为一个主题。子项将变为主题或测试。注意,主题名称必须唯一。
      现在一个项,并点击 Test按钮,或右键点击该项,并选择 Test,将选择的项改变为一个测试。子项将被转换为测试步骤。注意,测试名称必须唯一。
      选择一个项,并点击 Step按钮,或右键点击该项,并选择 Step,将所选择的项改变为测试步骤。子项将被转换为步骤的描述。
      选择一个项,并点击 Desc按钮,或右键点击该项,并选择 Desc,将所选择的项改变为步骤描述。子项将被转换为缩进的描述文本。
    6. 当你作修改时,若不希望使用向导,将默认选中的Auto Complete Children选择项取消。假如此项被选中,你在改变父级别时,如从主题改变为测试,向导会自动转换所有子项的级别,如从测试到测试步骤。
    7. 点击Next,步骤3的对话框将被打开。
     
    8. 在Destination Subject Path中,点击Browse按钮,Select a Destination Subject对话框将被打开,在此对话框中显示的测试计划树中选择一个主题。或者输入一个主题名称。默认情况下,TestDirector将放置这些测试到测试计划模块的临时测试文件夹。
    9. 点击Finish。在进度栏上点击Stop按钮,去停止转换过程,并返回到步骤3对话框。
    10. 点击信息对话框中的OK按钮,关闭转换到测试的对话框,或者查看生成的错误信息。

    从需求产生测试:
    使用产生测试对话框,转换需求到测试计划树中指定主题的测试,并添加到测试实验室模块指定的测试集中。
    1. 在需求树中,右键点击一个需求,并选择Generate Test。产生测试对话框将被打开。
     
    2. 对于Subject框,从测试计划树中选择一个主题或输入一个新的主题名。默认情况下,TestDirector放置此测试在测试计划模块的临时测试文件夹。
    3. 在Test Name框中,为新测试输入一个名字。默认情况下,TestDirector将使用需求名称作为测试名。
    4. 假如你不希望TestDirector去创建测试步骤,取消Create Design Steps复选框的选择。假如此选项是被选中的,TestDirector将为每个子需求添加一个步骤到测试。
    5. 选中Add Test to Test Set复选框,去要求TestDirector在测试实验室模块中增加测试到测试集。在Test Set列表中,选择一个测试集或输入一个新的测试集名称。
    6. 点击OK。
    Part III
    Test Planning

     
    9、测试计划工作流(The Test Plan Workflow)
    对成功的应用程序测试来说,开发一个清晰并简明的测试计划是必要的基础。一个好的测试计划,能够让你在整个测试过程的任何位置,对应用程序的质量进行评定。
    本章描述了怎样使用TestDirector测试计划模块来开发测试计划。开发一个测试计划包括如下步骤:
     

    9.1定义测试策略(Defining Testing Strategy)
    若想勾画一个测试策略,来达到定义在需求模块的测试需求,需要先问自己如下两个问题:
    你应当怎样测试你的应用程序?
      你将使用哪些测试技术(压力测试、安全测试、性能和负载测试等等)?
      你将怎样处理缺陷(缺陷严重等级、打开、关闭缺陷权限管理等)?

    你需要什么资源?
      为了测试,你需要什么资源(人员、硬件等等)?
      各个任务什么时候被完成?

    举个例子,假设一个航班预定软件,它能够让你去管理航班调动、旅客登记和机票销售。此种情况下,手动测试和自动测试均需要。你应该指派有编程经验的人设计自动测试,没有编程经验的人设计手动测试。

    9.2定义测试主题(Defining Test Subjects)
    根据应该程序功能的等级关系,将应该程序功能分解为各个主题,并建造相应的表现应用程序功能的测试计划树。
    测试计划树是你的测试计划的一种图形的表现。它是根据主题组织的测试分级表,而每一个主题所包含的,就是为了实现质量要求而需要进行的测试。例如,对于航班预定软件,你可以将Create Order、Delete Order、Open Order和Update Order作为测试主题。
    关于如何创建测试计划树的完整描述和说明,请看第11章的"开发测试计划树"(Developing the Test Plan Tree)。

    9.3设计测试(Planning Tests)
     为测试计划树上的每一个主题设计测试。确定每各测试主题应该创建哪些种类的测试,如正规级别测试或回归测试(关于测试类型的说明,请看第18章"创建测试集"(Creating Test Sets))。然后在每个测试计划树的分支上创建并设计它们。例如,在航班预定软件的Create Order测试主题下,可以包括如下的测试:Change Date、Change From Location、Change To Location、Insert New Order和Verify Insertion。
     你能够将测试与指定的缺陷关联。这是非常有用的,例如,你可以为一个已知的缺陷创建新的测试。通过创建关联,你能够基于所关联缺陷的状态来决定这个缺陷是否应该被运行。
     关于设计测试的更进一步信息,请查看第11章"开发测试计划树"(Developing the Test Plan Tree)。

    9.4创建需求覆盖(Creating Requirements Coverage)
     将测试计划树上的每一个测试连接到需求树上的一个或多个需求。通过为需求定义测试覆盖,你可以对你测试计划中的测试和它原始的测试需求之间进行追踪。例如,在航班预定软件中,在Create Order中的测试覆盖在需求主题Check Creation of New Order中的需求。
     另外,由于测试与缺陷的关联,测试覆盖提供了从需求定义到缺陷跟踪的完整的追踪。
     关于需求覆盖的更进一步信息,请看第12章的"连接测试到需求"(Linking Tests to Requirements)。

    9.5设计测试步骤(Designing Test Steps)
     在测试计划树中对具体的测试进行设计。创建测试步骤,描述所要执行的操作、检查点和预期的结果。定义完测试步骤后,紧接着就应该决定,该测试是准备手动测试还是自动测试。
     对于手动测试,应该按你定义好的步骤,在应该程序中执行它,并记录相应的结果。手动测试需要测试人员的响应,一般包括可用性测试、一次性测试、需要立即运行的测试、需要应用程序知识的测试和没有预定义结果的测试。
     例如,在航班预定软件中,假如检查对话框是否用户界面友好,需要使用者响应,因此你应该确定它们为手动测试。
     关于设计测试步骤的更多信息,请查看第13章"Building Tests"。

    9.6自动测试(Automating Tests)
     自动化测试允许在无人值守的情况下,高速地执行测试。它也使测试能够重复的执行和使用。例如,你能够对功能性的、基准、单元、压力和负载、以及需要详细应用程序信息的测试执行自动化操作。
     在设计完测试步骤后,你能够决定哪些测试应该进行自动化。影响测试自动化的因素包括:执行的频率、数据输入量、执行时间的长度和复杂度。
     对于自动化测试,你可以首先设计测试步骤,然后产生一个测试模板来对它们进行自动化测试。测试模板可以是:WinRunner,、QuickTest Professional、Astra QuickTest,、QuickTest Professional for MySAP.com Windows Client,、Astra LoadTest, LoadRunner,、XRunner、Visual API、or Visual A。
     例如,在航班预定软件中,你可以对登陆过程进行自动化测试。在添加完测试步骤后,你创建一个测试模板,然后用WinRunner来完成自动化测试脚本。
     关于创建自动化测试的更进一步信息,请看第14章"Creating Automated Tests"。
     注意:你也可以创建自动化的系统测试去要求TestDirector为机器提供系统信息、捕获桌面图像或重新启动计算机。更进一步信息,请看第15章"Working with System Tests"。

    9.7分析测试计划(Analyzing Your Test Plan)
     复查你的测试计划去确定怎样它才能满足在测试过程开始阶段定义的测试目标。然后通过产生TestDirector报告和图表对你的测试计划进行分析。请看第26章"Generating Reports"和第27章"Generating Graphs"。
     例如,你能够创建一个报告来显示测试计划树中每一个测试的测试步骤。你能够用此报告来帮助你决定你的测试设计的优先级。
     建议贯穿整个测试过程来分析你的测试计划,从而更好地保证测试过程的成功。复查测试计划,并确定是否满足测试目标,并相应地对测试计划作出调整。

    10、测试计划模块一览(The Test Plan Module at a Glance)
    本章将介绍TestDirector测试计划模块的核心元素。包括如下内容:
      测试计划模块(The Test Plan Module)
      测试计划菜单栏(The Test Plan Menu Bar)
      测试计划工具条(The Test Plan Toolbar)
      测试计划网格(The Test Plan Grid)

    10.1测试计划模块(The Test Plan Module)
    你可以通过点击Test Plan标签页进入测试计划模块设计测试。
     

     测试计划模块包括如下的核心元素:
      Test Plan Menu Bar,测试计划菜单栏,具有测试计划模块命令的下拉菜单。
      Test Plan Toolbar,测试计划工具栏,具有创建或修改测试计划树的常用命令按钮。
      Test Plan Tree,测试计划树,你的测试计划的图形表现。更详细信息,请看第11章"Developing the Test Plan Tree"。
      Details Tab,细节标签页,测试计划树上当前所选择的主题文件夹或测试的详细描述。更详细信息,请见第11章"Developing the Test Plan Tree"。
      Design Steps Tab,设计步骤标签页,一个测试步骤列表,描述怎样去执行测试计划树中当前所选中的测试。假如当前所选中的测试包含设计步骤的话,在标签页上将会包含一个设计步骤图标 。更详细信息,请见第13章"Building Tests"。
      Test scrīpt Tab,测试脚本标签页,测试计划树中当前所选中的测试的TSL测试脚本。假如当前所选中的测试具有测试脚本的话,在标签页上将会包括一个测试脚本图标 。更详细信息,请见第14章"Creating Automated Tests"。
      Attachments Tab,附件标签页,附件列表,为测试计划树中当前所选中的测试提供辅助信息。假如当前所选中的测试具有任何附件的话,在标签页上将会包括一个附件图标 。更详细信息,请见第4章"Adding Attachments"。
      Reqs Coverage Tab,需求覆盖标签页,测试计划树上当前所选中测试对应的需求列表。假如当前所选中的测试具有需求覆盖的话,在标签页上将会包括一个覆盖图标 。更详细信息,请见第12章"Linking Tests to Requirements"。
    技巧:在测试计划树上右键点击一个测试或选择Go to Test in Test Set。TestDirector将会打开测试实验室模块,并高亮显示所选择的测试。

    10.2 测试计划菜单栏(The Test Plan Menu Bar)
    测试计划菜单栏包括如下的菜单:
      Planning菜单,包含能够让你管理测试计划树上的文件夹和测试的命令,更详细信息,请见第11章"Developing the Test Plan Tree"。。
      View菜单,包括命令:设置测试计划树的显示(更详细信息,请见第3章"Working With TestDirector Data")、打开测试网格和添加关联缺陷。
      Analysis菜单,包括命令:产生计划报告和图表。关于计划报告的更详细信息,请看第26章,"产生报告"(Generating Reports)。关于计划图表的更详细信息,请看第27章,"产生图表"(Generating Graphs)。

    10.3 测试计划工具栏(The Test Plan Toolbar)
    测试计划工具栏包括如下的按钮:
      New Folder :新建文件夹,向测试计划树中添加一个新的测试主题。
      New Test :新建测试,向测试计划树中添加一个新的测试。
      Delete :删除,从测试计划树中删除所选择的文件夹或测试。假如删除一个文件夹,TestDirector将移动此文件夹中所有的

  • 常用 SQL 语句大全

    2007-12-01 14:40:53

    --语 句 功 能
    ,v2^q4o6r153092--数据操作51Testing软件测试网(w-z]'t3r5Yvr%R
    SELECT --从数据库表中检索数据行和列51Testing软件测试网*iO;M EV X
    INSERT --向数据库表添加新数据行51Testing软件测试网a.].tU1}
    DELETE --从数据库表中删除数据行
    4||y6lK.Ocs p [153092UPDATE --更新数据库表中的数据51Testing软件测试网6CsbMTy
    --数据定义51Testing软件测试网 Vb?,HV |+yRai
    CREATE TABLE --创建一个数据库表51Testing软件测试网&eMCT!]G!@@
    DROP TABLE --从数据库中删除表
    r1DC,s/RD W153092ALTER TABLE --修改数据库表结构51Testing软件测试网_K CGy*Vdl$wv
    CREATE VIEW --创建一个视图51Testing软件测试网8L mI1i4@(iznj
    DROP VIEW --从数据库中删除视图
    `A JI7y$ihf153092CREATE INDEX --为数据库表创建一个索引
    q9nqWQ,Bh B153092DROP INDEX --从数据库中删除索引
    F'Z%Q[2vT&]153092CREATE PROCEDURE --创建一个存储过程

     


    y_ b(L_C8| R153092DROP PROCEDURE --从数据库中删除存储过程
    cqF^D-K6t2C#Fd,a(u153092CREATE TRIGGER --创建一个触发器51Testing软件测试网b"A}:B k(I$P7U4t1|
    DROP TRIGGER --从数据库中删除触发器51Testing软件测试网N8}3O@ LgJ
    CREATE SCHEMA --向数据库添加一个新模式51Testing软件测试网 KlB9w2E
    DROP SCHEMA --从数据库中删除一个模式51Testing软件测试网$h[|/e*zF:})@
    CREATE DOMAIN --创建一个数据值域51Testing软件测试网 XY6l/S|(xuD5V
    ALTER DOMAIN --改变域定义51Testing软件测试网 SS+w8J#@ [WB,H2P
    DROP DOMAIN --从数据库中删除一个域51Testing软件测试网v/kC8Yg
    --数据控制
    m$?zMGP-v153092GRANT --授予用户访问权限51Testing软件测试网hS}4G;E2D
    DENY --拒绝用户访问
    Qgb9en,WZ153092REVOKE --解除用户访问权限51Testing软件测试网1j+K`,UMKv'LX)K
    --事务控制51Testing软件测试网Q9os'{V.S1Vp(TB5c
    COMMIT --结束当前事务
    Ccj}|%k:~uF153092ROLLBACK --中止当前事务51Testing软件测试网(\:j@a \1S#L*H
    SET TRANSACTION --定义当前事务数据访问特征
    ry1U(n_O153092--程序化SQL51Testing软件测试网Q'~.B*]MP%O^`T
    DECLARE --为查询设定游标
    ho.kNz`nD153092EXPLAN --为查询描述数据访问计划51Testing软件测试网'Xp&lr rJ
    OPEN --检索查询结果打开一个游标51Testing软件测试网l.iL$i4N
    FETCH --检索一行查询结果
    $q9s@Io?n w$A153092CLOSE --关闭游标
    (w/vt'h{V153092PREPARE --为动态执行准备SQL 语句51Testing软件测试网;x?X-^ Hd6o
    EXECUTE --动态地执行SQL 语句51Testing软件测试网G7T)So'gB o
    DESCRIBE --描述准备好的查询
    :w&lUm#{+p/k;D153092---局部变量
    1K2CQ| zBp F153092declare @id char(10)
    ;L O#a'Wrc153092--set @id = '10010001'
    g7Gw W4u mhl153092select @id = '10010001' 51Testing软件测试网 D7PK^V/k1G

    b_D1M&i X4j'w(BW153092---全局变量51Testing软件测试网3c/|.{TUsd Y Xx
    ---必须以@@开头51Testing软件测试网1| t&gr1a"uj3H#e;^

    7e?i)Nq$Fw6\h}153092
    7_ Yp$o]7_153092
    /} w^6J"|y1e'T153092--IF ELSE51Testing软件测试网#m&Hvo:I+m5a
    declare @x int @y int @z int51Testing软件测试网A'U+Zy+G#A9~$C
    select @x = 1 @y = 2 @z=3
    ]xDD#LK!\'^:w153092if @x > @y
    b+Y.Fm&S([|#}153092print 'x > y' --打印字符串'x > y'
    +r1L3nF8M4dJQ*g$h:n:m153092else if @y > @z51Testing软件测试网)ceaSN1Q,i*AY$t
    print 'y > z'51Testing软件测试网 fK+Bn8kX0_
    else print 'z > y'
    #Uzf]h/{.WU Q+m15309251Testing软件测试网-aD)e;NeC{z

    0h8?K|4IW.fWl b153092
    i#NS}w'~.x+lJg0G153092--CASE51Testing软件测试网$`/^/HU[ Us sv
    use pangu
    "a9F\[2A `153092update employee
    NE7F @V+R153092set e_wage =
    *{4d(A"V']F S+\z{ o153092case51Testing软件测试网#t6N|\ ?B E CW3] `f
    when job_level = ’1’ then e_wage*1.0851Testing软件测试网.Ogi1YX~7A!R
    when job_level = ’2’ then e_wage*1.0751Testing软件测试网9jI8tkU
    when job_level = ’3’ then e_wage*1.06
    [.Y6D9dN\153092else e_wage*1.0551Testing软件测试网,L H3RJv*T3\"h)x"P
    end
    (_2nT9Q/o ?15309251Testing软件测试网rk:eY2W,A2Q

    :E#Pa Ad2y{153092
    3WY&|4cR ds153092--WHILE CONTINUE BREAK51Testing软件测试网 D(?2i{b8f.d~H
    declare @x int @y int @c int
    &e3l @'{VR153092select @x = 1 @y=151Testing软件测试网`/A5Q:Q^$`fJ;m.S
    while @x < 3
    3hi3Gvl0e T153092begin
    A6\9| W\^5\c$S153092print @x --打印变量x 的值51Testing软件测试网8ul4dC{*n[kn0oo
    while @y < 351Testing软件测试网3E[iiI:hPU
    begin
    z@L,G(x*HS6t153092select @c = 100*@x + @y51Testing软件测试网k'w#v"p-G P7y.q.E
    print @c --打印变量c 的值
    %Kz%]k'o153092select @y = @y + 151Testing软件测试网G%_#dg;GpGJ
    end
    U)G6p]$^&d!P153092select @x = @x + 151Testing软件测试网"GmM.~4s1PiZY0e!X
    select @y = 151Testing软件测试网 uok7{.x"lA
    end
    (W4}Ufo15309251Testing软件测试网'w2l f~ pne

    ,J4gdJA3ME*y%x+B153092
    8j^1a C2?G(d+J2uV153092--WAITFOR
    1|.R%|5Qu+we:}%}X153092--例 等待1 小时2 分零3 秒后才执行SELECT 语句
    !D)E)pq0n*V u4J$f153092waitfor delay ’01:02:03’51Testing软件测试网Fo8e4kR,ZO
    select * from employee
    +jQV'BQ153092--例 等到晚上11 点零8 分后才执行SELECT 语句
    Dy!_K)V ub0l153092waitfor time ’23:08:00’
    gm]iH153092select * from employee
    8r&g2GmJ pPe@&p15309251Testing软件测试网H cd}"P'm J
    51Testing软件测试网,lCE5G7[o.[[0BS

    *QY l c8g,ggC15309251Testing软件测试网R"n3D,xi/X
    ***SELECT***51Testing软件测试网#f+l0R#]8RH5P

    !lI FOj pu'},T3S153092
    J7F.t6V$~-Jtk4Sd153092
    1bM"}mx-bq!zSL9w153092select *(列名) from table_name(表名) where column_name operator value51Testing软件测试网9Qlf(gD4wK*o
    ex:(宿主)51Testing软件测试网!Y\+[#SF]oQO _J
    select * from stock_information where stockid = str(nid)51Testing软件测试网#Hb9~M*B+S
    stockname = 'str_name'
    8fr8o H+v;i,|J153092stockname like '% find this %' 51Testing软件测试网NyO u#?n;\[
    stockname like '[a-zA-Z]%' --------- ([]指定值的范围)
    #IQb!G+lK_153092stockname like '[^F-M]%' --------- (^排除指定范围)51Testing软件测试网2c2Mj g*J.Q
    --------- 只能在使用like关键字的where子句中使用通配符)51Testing软件测试网*i5n a)m2a s#p+v6`
    or stockpath = 'stock_path'51Testing软件测试网)R M5bN;b r
    or stocknumber < 1000
    S6m y ?(}qDR+bh}153092and stockindex = 2451Testing软件测试网-}})H,[&u#?W
    not stock*** = 'man'51Testing软件测试网8ONHE}C/B K%D
    stocknumber between 20 and 100
    iUAS-U8z7]&K5I"tF153092stocknumber in(10,20,30)
    )WLlo?tA^aF&Op153092order by stockid desc(asc) --------- 排序,desc-降序,asc-升序51Testing软件测试网 Qxm#s ^w
    order by 1,2 --------- by列号
    s0@.Hq5R)?h153092stockname = (select stockname from stock_information where stockid = 4)51Testing软件测试网*I'ha&D5IE
    --------- 子查询51Testing软件测试网?B%GY{9X h5n
    --------- 除非能确保内层select只返回一个行的值,
    %v*wV3z sE8J;] q_153092--------- 否则应在外层where子句中用一个in限定符
    pz_i#k#a153092select distinct column_name form table_name --------- distinct指定检索独有的列值,不重复51Testing软件测试网R)kR d k
    select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name
    :A^ BK z:Mb}:[/g153092select stockname , "stocknumber" = count(*) from table_name group by stockname51Testing软件测试网C+tX y]N AA;xO
    --------- group by 将表按行分组,指定列中有相同的值
    Zf9C oH!Ss#^v nD153092having count(*) = 2 --------- having选定指定的组51Testing软件测试网`}L6xS!A#}%Xs ^

    Y1|f,X9S;BS"A~*an153092
    B tIcn$R153092
    t~]2O A153092select * 51Testing软件测试网9b1q1aF!GE
    from table1, table2 51Testing软件测试网:[a+U|E#E6` ZBe
    where table1.id *= table2.id -------- 左外部连接,table1中有的而table2中没有得以null表示
    %@k2GL{@c153092table1.id =* table2.id -------- 右外部连接
    F!}Cj P/R$H!C^153092
    X-g)z"b+R:R_153092
    O6QLE8[d&R1C15309251Testing软件测试网%r iH1lR8aJ
    select stockname from table151Testing软件测试网k]Jo6Rfh
    union [all] ----- union合并查询结果集,all-保留重复行
    *vDP$^+Y5C153092select stockname from table251Testing软件测试网 BSv J-`
    51Testing软件测试网{@2?`H WC v
    51Testing软件测试网m6b VTq&u j!D_ MI

    C-o ?R0im153092***insert***51Testing软件测试网+W|;A%rrLNq

    @6}-m2FLi/J2c153092
    "pV&tQ{+hW15309251Testing软件测试网}[SF$^X*KO b `-D
    insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")51Testing软件测试网-r*_9|?[;^r l
    value (select Stockname , Stocknumber from Stock_table2)---value为select语句51Testing软件测试网oW"K"[ ks6}
    51Testing软件测试网q N'b l"Hh
    51Testing软件测试网T{"B:x L:xGnT
    51Testing软件测试网/T5PvH w[%u ~
    ***update***
    ,SO%w.?/fz1N153092
    ]h})AY$D7b e(_%N15309251Testing软件测试网4zv/O,u A4]3no
    51Testing软件测试网syr+BM+k O,JX
    update table_name set Stockname = "xxx" [where Stockid = 3]
    Ys#\ J&Av6D t153092Stockname = default
    &xkG$?1_}153092Stockname = null
    D:T"b!S ~:N*k153092Stocknumber = Stockname + 4
    p c]1]Z-w153092
    -DZ:Y8uD5d7Lm153092
    /psd-@0JY153092
    0U1@:K8y:Mg153092***delete***51Testing软件测试网f+^ i2ZTx C

    5E$z{%oG&K@6_jT153092
    7@xj5D r9w)a;L15309251Testing软件测试网4b B0wt-ww*`
    delete from table_name where Stockid = 3
    2]k3Nh!~+P+K8tY153092truncate table_name ----------- 删除表中所有行,仍保持表的完整性51Testing软件测试网 H G,G0To m.t
    drop table table_name --------------- 完全删除表51Testing软件测试网 oh#^/^ ?~*w|R0I
    51Testing软件测试网bL] \ |8B
    51Testing软件测试网 N0eT.s%PeD

    z?Z SIF153092***alter table*** --- 修改数据库表结构
    3n0?/x | ]nF|15309251Testing软件测试网(B)N&XA*yJ$}O

    W1z&MBZ`1D15309251Testing软件测试网J:\/E0y&g\(?1V~*_
    alter table database.owner.table_name add column_name char(2) null .....
    KjG h{c^ WlW3{153092sp_help table_name ---- 显示表已有特征51Testing软件测试网~+nvtz1es4S
    create table table_name (name char(20), age smallint, lname varchar(30))
    ;Hk~ZiSG3y153092insert into table_name select ......... ----- 实现删除列的方法(创建新表)51Testing软件测试网Mmo:hsI%V#W `%w
    alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束
    rG"d8f'zvr15309251Testing软件测试网,Dy*o:}3p7@%x
    51Testing软件测试网/n-N/|&]9G3H$En
    51Testing软件测试网V a z&k7n
    ***function(/*常用函数*/)***
    *@o,`D@-weo!I15309251Testing软件测试网Q2EBBjB.Bc

    Hs.Ko s-Q%T'z!n+M153092
    b$d D4h;Ui153092----统计函数----
    5`Q(ng Ih X153092AVG --求平均值
    ;Q?%t'B%E&D&SX|J(k153092COUNT --统计数目
    4?9w$L,l+T8K s153092MAX --求最大值51Testing软件测试网Q&R:?_,P p L IC7y
    MIN --求最小值
    Nl6f;g{q5m153092SUM --求和
    IY.v8Wb~ m"A,X [(X15309251Testing软件测试网*|H2?!K;m

    ,StN qL x X[M153092
    MBA;DQ/X1V153092--AVG51Testing软件测试网-?^:ed{X
    use pangu51Testing软件测试网V6SJ-dt ?&t3o
    select avg(e_wage) as dept_avgWage51Testing软件测试网P }0[CEn
    from employee51Testing软件测试网Q!D5@y(|OO
    group by dept_id51Testing软件测试网"hz6P`JC|7l
    --MAX51Testing软件测试网?4Lp*Y%vw#c
    --求工资最高的员工姓名
    ]1?|$t0O Sp}153092use pangu
    :vCM0k$huj153092select e_name
    0lAj&F%ub4CNO153092from employee51Testing软件测试网E)p}]*L
    where e_wage =51Testing软件测试网T L"xlA7s8Y9n-[
    (select max(e_wage)
    '^4hcY+{gw#r153092from employee)51Testing软件测试网rz r'rAL
    51Testing软件测试网Mw1YJ*D

    J3h$u/tb$j153092
    3Z*^H5l r5M3[B153092--STDEV()51Testing软件测试网0`/h$`rs$ht!s
    --STDEV()函数返回表达式中所有数据的标准差51Testing软件测试网0S7ah0C&zM j&[

    3|tKhL-H$n&~153092
    &P8i&PVc7|15309251Testing软件测试网,G-Y@2p f
    --STDEVP()
    Jy)q/sn8FEv153092--STDEVP()函数返回总体标准差51Testing软件测试网gps p5Z0[
    51Testing软件测试网:IhWB7Hs DX*A

    F(vO,U4t!v}`K15309251Testing软件测试网 ^?S({*K x L"G#Q
    --VAR()51Testing软件测试网:I#x[ vzS @O
    --VAR()函数返回表达式中所有值的统计变异数
    Wl ji$D Ch ` a153092
    )e9Q;C~g$J/w15309251Testing软件测试网Pp|4j g
    51Testing软件测试网4TrLd/Zh ^6^
    --VARP()
    /@!y K8rq@K7`153092--VARP()函数返回总体变异数
    *~ ~E9j|a,]15309251Testing软件测试网9G8]e[I
    51Testing软件测试网0kv8VA ]:_#C$D4BG4n
    51Testing软件测试网SMm3KY2GW
    ----算术函数----51Testing软件测试网/ZbXE W

    vgsnpd$a3t153092
    0m*G V'a+h(N T.m#qC#m15309251Testing软件测试网$z7Y+^/hQ\
    /***三角函数***/51Testing软件测试网NFI#j%w[0f$A
    SIN(float_expression) --返回以弧度表示的角的正弦51Testing软件测试网}}"z.E6C R%Tm g
    COS(float_expression) --返回以弧度表示的角的余弦
    {*Ky8^c[153092TAN(float_expression) --返回以弧度表示的角的正切51Testing软件测试网g3U&i,D ]};K#uJ
    COT(float_expression) --返回以弧度表示的角的余切51Testing软件测试网3g1prU4i6k
    /***反三角函数***/
    (p`-o$o?9}153092ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角
    *ub-Q8|%MK%GE153092ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角51Testing软件测试网jf7{"Y+R4W+c
    ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角51Testing软件测试网;X.?{8SHK9m2q
    ATAN2(float_expression1,float_expression2) 51Testing软件测试网+FfZ$R!b/]o2n#^
    --返回正切是float_expression1 /float_expres-sion2的以弧度表示的角51Testing软件测试网/m%|/Ieoj"[ l
    DEGREES(numeric_expression)51Testing软件测试网-Vfz g,T Z
    --把弧度转换为角度返回与表达式相同的数据类型可为
    JF Z tx8N153092--INTEGER/MONEY/REAL/FLOAT 类型
    t-wxKvTj:]tbr153092RADIANS(numeric_expression) --把角度转换为弧度返回与表达式相同的数据类型可为
    jb6a7G+sAI'n153092--INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网 j!Cl7@ o ]{+c(L
    EXP(float_expression) --返回表达式的指数值
    :UXHc,D153092LOG(float_expression) --返回表达式的自然对数值51Testing软件测试网"bz,pT1Y#g"rB
    LOG10(float_expression)--返回表达式的以10 为底的对数值51Testing软件测试网;z IC~Gqw cRJb
    SQRT(float_expression) --返回表达式的平方根
    3gdtfD%k#KAbS153092/***取近似值函数***/51Testing软件测试网l z`_-mS
    CEILING(numeric_expression) --返回>=表达式的最小整数返回的数据类型与表达式相同可为
    %W1JeXq@M153092--INTEGER/MONEY/REAL/FLOAT 类型
    Y"~ \!ex@ N153092FLOOR(numeric_expression) --返回<=表达式的最小整数返回的数据类型与表达式相同可为51Testing软件测试网x r%f8r8geeQ%_E
    --INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网U O+mIX,f^
    ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五入值返回的数据51Testing软件测试网rRG&V{ k l ~E#]
    --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型
    -T Ak| ^:qQ!Ja$V R153092ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为
    k7jJ s!wgz153092--INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网!~ ^i3\a
    SIGN(numeric_expression) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型
    5]l%n9fB#c$|~'U153092--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型51Testing软件测试网TP;F*Q!@G+g
    PI() --返回值为π 即3.1415926535897936
    }C0F#ygsnw$V153092RAND([integer_expression]) --用任选的[integer_expression]做种子值得出0-1 间的随机浮点数
    1\*UgI:QU,DjRB9R T w153092
    ;] x1ck!}0sH!H Nx15309251Testing软件测试网S2A HX4b_1}

    [$xB9aF T(}?L153092
    g,V!I[%kJY/pP `153092----字符串函数----
    '\6Df1wq%xZ153092ASCII() --函数返回字符表达式最左端字符的ASCII 码值
    g|.w+rRnhd+bE153092CHAR() --函数用于将ASCII 码转换为字符
    v9e6d#|%T153092--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值51Testing软件测试网w5\Z3`C T;Z$^M
    LOWER() --函数把字符串全部转换为小写
    1w1a*RF5A!S3[U6M153092UPPER() --函数把字符串全部转换为大写51Testing软件测试网N J@h.w8FK]3~1B
    STR() --函数把数值型数据转换为字符型数据51Testing软件测试网n(F8b W uD8PH
    LTRIM() --函数把字符串头部的空格去掉51Testing软件测试网3q%q6xZIV;og
    RTRIM() --函数把字符串尾部的空格去掉51Testing软件测试网-rF)t*J&}AB
    LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串51Testing软件测试网 U"Nz.C(I(F!xu
    CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置
    #pB S$Z!c3Oh153092SOUNDEX() --函数返回一个四位字符码 51Testing软件测试网 eS&h+p e
    --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值
    v0_WPnDXd153092DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异51Testing软件测试网k9N&\Wj(M!~
    --0 两个SOUNDEX 函数返回值的第一个字符不同
    [^9`]`153092--1 两个SOUNDEX 函数返回值的第一个字符相同51Testing软件测试网,P%W,zJlA4a
    --2 两个SOUNDEX 函数返回值的第一二个字符相同
    kMw\0uEL153092--3 两个SOUNDEX 函数返回值的第一二三个字符相同
    9f'n9Ve!V153092--4 两个SOUNDEX 函数返回值完全相同51Testing软件测试网B t$PBqSl_^
    51Testing软件测试网:e0Eb?o7]'_

    Hpj;l&W(Z(z15309251Testing软件测试网 PZ FBpHGQ

    ^NU}YhO153092QUOTENAME() --函数返回被特定字符括起来的字符串
    !npLZ4jG|153092/*select quotename('abc', '{') quotename('abc')
    )]wv UTp QR4z KW153092运行结果如下
    2~#z F8V&@153092----------------------------------{
    %Qn2\9Q/iX3lm J153092{abc} [abc]*/51Testing软件测试网y$ig,z3qsPv
    51Testing软件测试网7WZ4FR_8M T.p%P

    9T;h`B [5hB2f"R^153092
    Nfd b&ZE*u%b AV153092REPLICATE() --函数返回一个重复character_expression 指定次数的字符串51Testing软件测试网 ?1@'A9t%j9E"a}8?!P
    /*select replicate('abc', 3) replicate( 'abc', -2)
    !R5AN#[ pW9?D153092运行结果如下
    TtvK$wMXNz153092----------- -----------
    1tj T!]7p![5] ~tA?153092abcabcabc NULL*/51Testing软件测试网)R g4g+tBK

    pO7Q V\ p153092
    "fN V;b/k1]cTs153092
    X Ry#N1cu{Jn"|5{[3T153092REVERSE() --函数将指定的字符串的字符排列顺序颠倒
    `Z ctz:VhEn153092REPLACE() --函数返回被替换了指定子串的字符串
    $J!?`)|u@9Uj153092/*select replace('abc123g', '123', 'def')51Testing软件测试网/L1yz4I v
    运行结果如下51Testing软件测试网zrxF&O J
    ----------- -----------51Testing软件测试网+u,B*GfSQK
    abcdefg*/
    iMM(Gtu G O [&fjn15309251Testing软件测试网.t b {,c%eCMs @

    qn$X`!]7^$t-@'f153092
    {bz(}[In#O153092SPACE() --函数返回一个有指定长度的空白字符串
    jbI@"e6@153092STUFF() --函数用另一子串替换字符串指定位置长度的子串
    w&Cxn kxu-gEAE#~(e15309251Testing软件测试网 cZ"?sL$l__
    51Testing软件测试网$k(mY9[;hF

    u2jZXkx#B15309251Testing软件测试网]'}2tc+sx RQ
    ----数据类型转换函数----51Testing软件测试网/L RM#Q&JV
    CAST() 函数语法如下
    0x1Oe1y"@q0}-r153092CAST() (<expression> AS <data_ type>[ length ])
    5w6g l(PS-f*t8^cZt6C153092CONVERT() 函数语法如下
    HEEMW7Il@V153092CONVERT() (<data_ type>[ length ], <expression> [, style])51Testing软件测试网_}mM#R*|
    51Testing软件测试网K5F V4w\

    3@?"[4n!N9~4?(N15309251Testing软件测试网xk ZPf\:B;ctc
    select cast(100+99 as char) convert(varchar(12), getdate())
    "m+I2xG0Q153092运行结果如下51Testing软件测试网(^w y+{)p[;~ N1f"^q
    ------------------------------ ------------51Testing软件测试网+j1I kh _\
    199 Jan 15 2000
    p l[6_3Tx V9O153092
    ;Q&Fo#T n}fj153092
    6VOA9gR3e&u |3M3K153092
    ,|gDu@mt153092----日期函数----
    'c0{ [N,FzU#RL XX153092DAY() --函数返回date_expression 中的日期值
    }B+{S:AP153092MONTH() --函数返回date_expression 中的月份值51Testing软件测试网d\`[:X L)@
    YEAR() --函数返回date_expression 中的年份值
    %F6{5jW'\h)aVV@153092DATEADD(<datepart> ,<number> ,<date>)
    [3C5r.M*N~ g153092--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期
    p a4w-j|153092DATEDIFF(<datepart> ,<number> ,<date>)
    :MM,Uw)LB6B153092--函数返回两个指定日期在datepart 方面的不同之处
    e.Y-EO GjF153092DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分
    Cg4K3Z{)t n153092DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分
    6I~ r`cXTa8^153092GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间
    7iy-sn b15309251Testing软件测试网S7G6D%MM` M6T
    51Testing软件测试网qL.X(g'I { ~
    51Testing软件测试网_U%\'aT4M
    ----系统函数----51Testing软件测试网ni9O ^ KqV
    APP_NAME() --函数返回当前执行的应用程序的名称51Testing软件测试网C6G:{$kF2l
    COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
    2C ~ KGW5tB7^S153092COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值51Testing软件测试网SwVFW/bD
    COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名51Testing软件测试网[ YSc1x
    DATALENGTH() --函数返回数据表达式的数据的实际长度51Testing软件测试网jj*SjR9{2E i
    DB_ID(['database_name']) --函数返回数据库的编号
    @O9R9l-|G$~ V+MX ^153092DB_NAME(database_id) --函数返回数据库的名称
    "j3^:J&f,r/P2@/B153092HOST_ID() --函数返回服务器端计算机的名称
    *Q]6EuP,PPPv1J153092HOST_NAME() --函数返回服务器端计算机的名称51Testing软件测试网g q ka[,tp!cM
    IDENTITY(<data_type>[, seed increment]) [AS column_name])51Testing软件测试网Q0gN:n)t[4{P
    --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中51Testing软件测试网yj?]6iK:s
    /*select identity(int, 1, 1) as column_name
    #s'yUF E-m8kFS153092into newtable51Testing软件测试网L7vf+Ae%B$v
    from oldtable*/
    2SR*S6g r{v6I153092ISDATE() --函数判断所给定的表达式是否为合理日期51Testing软件测试网2u3d'jsU`i
    ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换
    w\ W"^I/D{153092ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
    6U!n8`jolQ153092NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
    P1cT'f`G[\153092NULLIF(<expression1>, <expression2>)51Testing软件测试网t}`,kq&F
    --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值51Testing软件测试网3o-[+jH t5Kmp
    51Testing软件测试网 bH'g h&O ?f,p6wn

    HaFJGw15309251Testing软件测试网:Fb-As8}4MA!F

    :@2V#e~~]15309251Testing软件测试网,V~Fu/sQIP

    M@_H9B15309251Testing软件测试网%s"vq~z/l_)L&v
    sql中的保留字51Testing软件测试网7p Xvrr1S

    |;k rl%Bo153092
    8uE8[gh~?Ai153092
    6lnh6l8_|Mq153092action add aggregate all 51Testing软件测试网IS/p7K{{%NUJB
    alter after and as
    [R[xl153092asc avg avg_row_length auto_increment
    .gl1ON0c'RL,_'L153092between bigint bit binary 51Testing软件测试网e{ ]9k|f+Bk{4yF
    blob bool both by
    d T8?])O\%N[#Iq153092cascade case char character
    :z;E9A1I,mYRDT2D153092change check checksum column 51Testing软件测试网:t ZxgZ
    columns comment constraint create 51Testing软件测试网/hM mP$q5t
    cross current_date current_time current_timestamp
    jO.Tep6]153092data database databases date
    %Yo"i*I!?153092datetime day day_hour day_minute 51Testing软件测试网E-gP*@2v L&o
    day_second dayofmonth dayofweek dayofyear
    YTPmg E$@$O&[153092dec decimal default delayed
    Xo;x1Exn3?153092delay_key_write delete desc describe
    1X'[x*~6Ws%w153092distinct distinctrow double drop 51Testing软件测试网l/q6W5}'kj-D~/H\
    end else escape escaped
    Iw;LHJo%UkI153092enclosed enum explain exists 51Testing软件测试网{/t%X~/B/TJgB
    fields file first float 51Testing软件测试网qA*W.r.kIU L
    float4 float8 flush foreign 51Testing软件测试网3kLQ8N$]w W
    from for full function 51Testing软件测试网h},J5i(X [.~Y
    global grant grants group
    nc?"r8L153092having heap high_priority hour 51Testing软件测试网*\7RK8g2q9BFFr
    hour_minute hour_second hosts identified
    .x`6ucoL153092ignore in index infile 51Testing软件测试网1zk&BdeL0MJ%uMx d
    inner insert insert_id int
    q%fcDM/s.p` \.c153092integer interval int1 int2 51Testing软件测试网e&J!U(j@c3_.D E'z]
    int3 int4 int8 into 51Testing软件测试网X*l bt]3h
    if is isam join 51Testing软件测试网 KdB.qV9Qy
    key keys kill last_insert_id 51Testing软件测试网0mT"E4YG
    leading left length like
    ^"Uot*{ g153092lines limit load local 51Testing软件测试网Ezq5P y/Y
    lock logs long longblob 51Testing软件测试网Z9U;d6l!ma8K
    longtext low_priority max max_rows
    ,}"xb)W a9Y153092match mediumblob mediumtext mediumint 51Testing软件测试网q$_5H7kIt
    middleint min_rows minute minute_second 51Testing软件测试网 woZA]3X:N+NI8e
    modify month monthname myisam
    F~R&Q(BB4J153092natural numeric no not
    V9?{'ea.H153092null on optimize option 51Testing软件测试网9K ]w\W:Qv4Q*N
    optionally or order outer 51Testing软件测试网cdEK4u
    outfile pack_keys partial password 51Testing软件测试网b#_&TG&I*N
    precision primary procedure process 51Testing软件测试网7m/p a%Y r1L%OP
    processlist privileges read real
    f z3B;A!S6\aB153092references reload regexp rename 51Testing软件测试网C^ \9I wHA
    replace restrict returns revoke
    0jF/KF$HS)V.jr(BQ153092rlike row rows second
    3p.Bj/X%mgU153092select set show shutdown 51Testing软件测试网N+QeqvJ [&W
    smallint soname sql_big_tables sql_big_selects 51Testing软件测试网o"q)o4@#f)l5c2H
    sql_low_priority_updates sql_log_off sql_log_update sql_select_limit
    1n6GNz1d153092sql_small_result sql_big_result sql_warnings straight_join
    TzcQ,M%r+z153092starting status string table
    ~-C|YT Y$C153092tables temporary terminated text 51Testing软件测试网 ~9T+ysa,a5v {k wb
    then time timestamp tinyblob
    5RbL;pgA|153092tinytext tinyint trailing to 51Testing软件测试网T#r&Q,t#WR x+`b~
    type use using unique 51Testing软件测试网,ol `,U2f)?6e{Q
    unlock unsigned update usage
    :k,}k[5cHL;EY9N5S153092values varchar variables varying
    k1Wl mB2nT153092varbinary with write when
    x$] t-}&ET?6J153092where year year_month zerofill


    ]7p}@4T0l FrD153092SQL语句导入导出大全

    /******* 导出到excel51Testing软件测试网0Y/@x q\O
    EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' 51Testing软件测试网3\vtDe6pL? d
    /*********** 导入Excel
    w)_ Cm:z6lgD Mj153092SELECT * 51Testing软件测试网 Zx U&Sd5{ h
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
    (i hOF`153092'Data Source="c:test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions51Testing软件测试网2S~"^KP3i t

    W j)}.Kx9t;gV5v8i153092/*动态文件名
    -H4k1[ O Q!?"U153092declare @fn varchar(20),@s varchar(1000)51Testing软件测试网"GH$x.[^ }mA
    set @fn = 'c:test.xls'
    }Eejz!v|I153092set @s ='''Microsoft.Jet.OLEDB.4.0'',
    O"beY)ZB)~f1O)}7x,D153092''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
    2Dz;ve3N"Qh153092set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
    gp w!@o153092exec(@s)
    Rb$TV9O/|g153092*/

     

    /*************导出到Access********************/
    /cw |dS9}153092insert into openrowset('Microsoft.Jet.OLEDB.4.0', 51Testing软件测试网 D&SoA+yLD;W
    'x:A.mdb';'admin';'',A表) select * from 数据库名..B表
    YI@b FO.t153092
    sjt KP!u153092/*************导入Access********************/
    0f4R^?mW\t153092insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0', 51Testing软件测试网6E H^T7V0ud.K%r#ju
    'x:A.mdb';'admin';'',A表)
    -kO}7?u Xl[~153092
    *_Fy@ j/}~'o153092文件名为参数51Testing软件测试网]6G5`Xp,D@4}
    declare @fname varchar(20)51Testing软件测试网6i1hq&aB$nT
    set @fname = 'd:test.mdb'
    M%o(@)age/|153092exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',51Testing软件测试网$C*]8s;SiswE0Z8~
    '''+@fname+''';''admin'';'''', topics) as a ')51Testing软件测试网2a+C gj:_"e1yF]

    y+uqM3Wd153092SELECT * 51Testing软件测试网;gVQ h7i ?t b
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
    {"}1]"Jr153092'Data Source="f:northwind.mdb";Jet OLEDB database Password=123;User ID=Admin;Password=;')...产品51Testing软件测试网C0D.FWMnG

    HP i%UYt153092********************* 导入 xml 文件
    n(S&II8gFm9_15309251Testing软件测试网7t@$yL l9BI[:P
    DECLARE @idoc int51Testing软件测试网#omT&Pb"pL9]
    DECLARE @doc varchar(1000)51Testing软件测试网*n$?_%lj8vx/~X
    --sample XML document
    'jNB.[/l153092SET @doc ='
    ,m$A:mm'K153092
    -mQ7e F:I.Jn15309251Testing软件测试网 B4uli F:DK
    51Testing软件测试网SD7KkGM
    Customer was very satisfied
    0v;mX1kCY u15309251Testing软件测试网 } e0CV-b(t2Z

    aV#I[.k j,{153092
    Gugy+A0G1[ Zd w15309251Testing软件测试网n%Y Z0zin
    Important
    E]3~uz(VZky153092Happy Customer.51Testing软件测试网8VHS8Y4EwTJ`

    &ZJ/S QI)L$Hl153092
    M2fS6j!W0\gK{15309251Testing软件测试网,{-\4x"l.MuE
    51Testing软件测试网 |*uLD f`0C
    '
    (C`#gF[153092-- Create an internal representation of the XML document.
    -ZiZVX ]f6HB"R(Yy153092EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
    !\#fF[9s2p153092
    [s aMd153092-- Execute a SELECT statement using OPENXML rowset provider.
    O2qXUVL I153092SELECT *51Testing软件测试网!i-u}E@ h-FY5Q
    FROM OPENXML (@idoc, '/root/Customer/Order', 1)51Testing软件测试网Q1X^$` gW
    WITH (oid char(5), 51Testing软件测试网 X1b5cK/I0B&nK1UP{
    amount float,
    $g/|3M+Zd9lt-E9w;O)a1v153092comment ntext 'text()')51Testing软件测试网.[s5sK]Lp0I
    EXEC sp_xml_removedocument @idoc51Testing软件测试网;G _ }LhK({2k?

    q.R5bc+VT,P15309251Testing软件测试网pgi]8kGV
    51Testing软件测试网Q g(_`0H9zl8O
    ???????51Testing软件测试网 {0^ g9u#A ej bn

    x;k U2oA153092/**********************Excel导到Txt****************************************/
    3ov8V4IX7q153092想用
    s!r\:_ K153092select * into opendatasource(...) from opendatasource(...)51Testing软件测试网+Ar1v5{4k4h%F*?p
    实现将一个Excel文件内容导入到一个文本文件51Testing软件测试网0o`S0S k2t

    '|-V0]h$Bt7`153092假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
    ,h"RC.ieq153092且银行帐号导出到文本文件后分两部分,前8位和后8位分开。51Testing软件测试网A,SP[7D7gq

    "gC#Ij)rlrpa15309251Testing软件测试网B8H bxl-}~N
    邹健:
    5rL^|[E P153092如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号251Testing软件测试网w},sj({+u&T)Y
    然后就可以用下面的语句进行插入
    .c/mIF!C!k n]1t153092注意文件名和目录根据你的实际情况进行修改.51Testing软件测试网IJ ~/Y/R0Y3T/f jO?
    51Testing软件测试网'N8i.n~R&Z%sy*s
    insert into
    $z6E&H]O*On153092opendatasource('MICROSOFT.JET.OLEDB.4.0'
    :J$N:NJ!`aT153092,'Text;HDR=Yes;DATABASE=C:'
    o!b*Ua/sL*w4}+P153092)...[aa#txt]51Testing软件测试网'a a ^V)gd8dJy%A
    --,aa#txt)51Testing软件测试网 HGZ&w8P]
    --*/
    @F^*\ZWh153092select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
    )K,K2V+k1iO7Zr153092from
    +^)ak5YZF CX153092opendatasource('MICROSOFT.JET.OLEDB.4.0'
    "nu[Ko}_2K153092,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'
    L'D Q uY2w153092--,Sheet1$)
    IAF"J {Po1V153092)...[Sheet1$]51Testing软件测试网~:iD5c1X

    4EpF$g+W8m*Q {153092
    YE.J2J|7p#]153092
    @ Z!S1zeE153092如果你想直接插入并生成文本文件,就要用bcp
    /Yh-M.M4I153092
    Y.C9u8W H/Pf0\l153092declare @sql varchar(8000),@tbname varchar(50)
    mlh:VRH2zf15309251Testing软件测试网.sT0`iG}/f3\
    --首先将excel表内容导入到一个全局临时表51Testing软件测试网~ K$iv5Ue$\e
    select @tbname='[##temp'+cast(newid() as varchar(40))+']'
    ,}$o8R.MDS$S153092,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
    ^apK?(s153092into '+@tbname+' from
    $svDO4x*]153092opendatasource(''MICROSOFT.JET.OLEDB.4.0''51Testing软件测试网a Pn0Q!^K$^
    ,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''51Testing软件测试网;iVqrO4s4G^
    )...[Sheet1$]'51Testing软件测试网F2Z,T8HK,O(cs$p:U
    exec(@sql)
    e+xxD7Qh{1M15309251Testing软件测试网r?n,BK"d;A
    --然后用bcp从全局临时表导出到文本文件
    f6~)B0?|.JB_X153092set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'51Testing软件测试网5wwTz"br`*O^\
    exec master..xp_cmdshell @sql
    *VE$}JMf15309251Testing软件测试网y/I@1i Y0z
    --删除临时表51Testing软件测试网,A/T,j}r
    exec('drop table '+@tbname)

    /*************导出到Access********************/51Testing软件测试网$AC-RFF8bI`!g
    insert into openrowset('Microsoft.Jet.OLEDB.4.0',
    (F%A&G2R/[0oW h153092'x:A.mdb';'admin';'',A表) select * from 数据库名..B表
    v @T(B%V!r.fN153092
    .Q?+U7^w153092/*************导入Access********************/
    "] i)vi @)i153092insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
    nu*a})U P153092'x:A.mdb';'admin';'',A表)
    K/Q#T!vSY+o15309251Testing软件测试网8`{ vPr Zf
    文件名为参数51Testing软件测试网+lQ esE dC
    declare @fname varchar(20)
    B6nT)vR7}UAP[^153092set @fname = 'd:test.mdb'
    :\Zdn'u(sb;O153092exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
    )| d{ m.A.~#I0hI5E ?153092'''+@fname+''';''admin'';'''', topics) as a ')51Testing软件测试网:?sS~;K6U4qS6PGP1zh

    UunS'g-Xb7cU153092SELECT *
    3}jDt x$Q#Q~,D8FRu'F153092FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
    (nt&`IO!U;_)B~T153092'Data Source="f:northwind.mdb";Jet OLEDB database Password=123;User ID=Admin;Password=;')...产品51Testing软件测试网"BMF,}:p0x x
    51Testing软件测试网y1L&O ur1r)}4N
    ********************* 导入 xml 文件
    .c`4qu F@-S6ACd153092
    ){ L)m"\8tm3[9_h153092DECLARE @idoc int
    6O)XIc/xr6f%Z S153092DECLARE @doc varchar(1000)51Testing软件测试网!C3h&p)D.U'P,H
    --sample XML document
    )h,E K6o d| zOE*e153092SET @doc ='
    2y L.]o ^s$crq15309251Testing软件测试网 x,SoW;A4fD%[7~nJ
    51Testing软件测试网C9T)zUF"R"u JL
    51Testing软件测试网&@mF iX
    Customer was very satisfied51Testing软件测试网PM1f-Ak`

    Q}&m^o.o @b#H153092
    }e*OQE'][15309251Testing软件测试网2Hw;cT(vio
    51Testing软件测试网(W v(t4G*N!g&i*Q
    Important51Testing软件测试网8?6@3V4GTe!A
    Happy Customer.51Testing软件测试网%PV5g rLQ!s
    51Testing软件测试网P1P:Cb%xT#Q
    51Testing软件测试网F1XBCNVsY
    51Testing软件测试网^+T.{"t p.s

    ab\l{'WO0x&r153092'
    5C UnbX5D153092-- Create an internal representation of the XML document.
    k.Rk;H]0AO153092EXEC sp_xml_preparedocument @idoc OUTPUT, @doc51Testing软件测试网R wKPq
    51Testing软件测试网S XFa&p#Z'k
    -- Execute a SELECT statement using OPENXML rowset provider.
    ;]E8p(kmg8J N153092SELECT *
    B8NN(Q.UoP/Pj153092FROM OPENXML (@idoc, '/root/Customer/Order', 1)
    i9@O6]JL#Rq"r153092WITH (oid char(5), 51Testing软件测试网.Snk$_ u
    amount float,
    /xZm5yw@153092comment ntext 'text()')
    7hORx%Q8V153092EXEC sp_xml_removedocument @idoc51Testing软件测试网BT$f-AT8GY^
    51Testing软件测试网#jz6mR#IiK)Y s
    51Testing软件测试网1d|r-{.U+x e|9p
    51Testing软件测试网.{c$wEIJ%[ n Z
    ???????51Testing软件测试网/~mx%].D
    51Testing软件测试网J?"~-\B]w
    /**********************Excel导到Txt****************************************/
    8Pcc;R x[}153092想用51Testing软件测试网*n1@4?D#Y BX tKQ
    select * into opendatasource(...) from opendatasource(...)
    +D'}%~ H5uVU153092实现将一个Excel文件内容导入到一个文本文件51Testing软件测试网j;}0iq I

    lu4P4Q3oK153092假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
    `[8P@3^4J;q-Z!h+{]153092且银行帐号导出到文本文件后分两部分,前8位和后8位分开。
    LE!e.L%`y153092
    N%p1ugUN'|r)`LNw153092
    TuUe1ZgU153092邹健:51Testing软件测试网F!HKpm+r f`6V2F
    如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号251Testing软件测试网(es*e4ZE
    然后就可以用下面的语句进行插入
    %B/pm8?-d-r\we153092注意文件名和目录根据你的实际情况进行修改.51Testing软件测试网SwT1J7`N'Oe{
    51Testing软件测试网+U&pxS?;IxN a
    insert into
    $c*oVC&jz;b g6M PT153092opendatasource('MICROSOFT.JET.OLEDB.4.0'51Testing软件测试网l#aX-|WD:}w6N
    ,'Text;HDR=Yes;DATABASE=C:'
    Jb_PDW%H$Bc%k153092)...[aa#txt]
    '{_ gp8B-^!v153092--,aa#txt)
    A(h;Ie#X;d1z153092--*/51Testing软件测试网s l3_c;pl$q
    select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
    C |4B$et153092from 51Testing软件测试网 [w/n'eY*{
    opendatasource('MICROSOFT.JET.OLEDB.4.0'51Testing软件测试网u%II'[D/e~K&YF
    ,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls'51Testing软件测试网FH udU
    --,Sheet1$)51Testing软件测试网]7A5B|nV3u m_ `#ep
    )...[Sheet1$]51Testing软件测试网R [~J4p)O W/t

    Zi*Xv4sH15309251Testing软件测试网kt$r%I;\2GSF
    51Testing软件测试网 p,n5USb6}
    如果你想直接插入并生成文本文件,就要用bcp51Testing软件测试网 U5|bD_7Q
    51Testing软件测试网4P@/ii.W
    declare @sql varchar(8000),@tbname varchar(50)
    /R'i T:I5Ls3H15309251Testing软件测试网B1AU J1`-s@xM NK5HD4Y
    --首先将excel表内容导入到一个全局临时表
    `f zx;E7hHW153092select @tbname='[##temp'+cast(newid() as varchar(40))+']'51Testing软件测试网V+MIHP?za
    ,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
    9|8H;ZL'SI0h.pC+x153092into '+@tbname+' from 51Testing软件测试网P3|OM~T `Y%qY7v
    opendatasource(''MICROSOFT.JET.OLEDB.4.0''51Testing软件测试网Jz9R'w1D@
    ,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:a.xls''51Testing软件测试网jw_R&r;]D2O
    )...[Sheet1$]'51Testing软件测试网Gh%w$x"{9\
    exec(@sql)
    &h*|0_6L j5T#R[ `15309251Testing软件测试网`}_Avo9ANm
    --然后用bcp从全局临时表导出到文本文件
    @Oc+r Vo3x153092set @sql='bcp "'+@tbname+'" out "c:aa.txt" /S"(local)" /P"" /c'51Testing软件测试网)n,biVo%y5`(Fy
    exec master..xp_cmdshell @sql
    9x+B:I9rWq\V153092
    ]DO0DrV+^153092--删除临时表51Testing软件测试网]{@#t-m*ynsdy
    exec('drop table '+@tbname)

  • 中国各大城市工资水平比较

    2007-11-21 08:21:35

    中国各大城市工资水平比较,准确性有多高?
    时下,很多人在寻找一个可以作为参照的城市,来衡量一下一个人的月薪能够在所在城市形成的生活标准!
    如,拿一个在北京月薪为5000.00元(税后)人民币的人,可以达到的生活水平作为参照点,那么达到同等的生活水平在其他城市需要多少的月薪来维持呢,下面一一指出(其中包括物价水平、居住成本、交通成本、城市现代化等诸多方面的因素):

    上海:5350.00元 广州:4750.00元 深圳:5280.00元

    杭州:4980.00 元 南京:3780.00元 无锡:3200.00元

    苏州:4300.00元 济南:3120.00元 太原:1980.00元

    银川:1100.00元 昆明:2800.00元 贵州:1600.00元

    南昌:1200.00元 福州:3380.00元 厦门 :4100.00元

    青岛:4000.00元 天津:3150.00元 成都:1900.00元

    重庆:2250.00元 长沙:2480.00元 武汉:2680.00元

    兰州:1500.00元 郑州:2880.00元 西宁:1000.00元

    秦皇岛:2550.00元 石家庄:2300.00元 哈尔滨:1700.00元

    长春:1500.00元 沈阳:2100.00元 合肥:1680.00元

    常州:3380.00元 温州:5020.00元 大连:3000.00元

    呼和浩特:1700.00元 乌鲁木齐:2100.00元 拉萨:900.00元

    西安:2080.00元 南宁:1300.00元 海口:2600.00元

    三亚:2360.00元 澳门:8900.00元 香港:18500.00元

    台北:11500.00元
  • 软件测试工程师笔试试题

    2007-11-13 20:15:38

    软件测试工程师笔试试题

    为什么要在一个团队中开展软件测试工作?
    02. 您是否了解以往所工作的企业的软件测试过程?如果了解,请试述在这个过程中都有哪些工作要做?分别由哪些不同的角色来完成这些工作?
    03. 您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?(对于软件测试部分,可以简述)
    04. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?
    05. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……
    06. 请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
    07. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的?
    08. 您认为做好测试计划工作的关键是什么?
    09. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    10. 您认为做好测试用例设计工作的关键是什么?
    11. 请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。
    12. 您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。
    13. 您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。
    14. 您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。
    15. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?
    16. 在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?
    17. 您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。
    18. 您以往是否曾经从事过单元测试和集成测试?如果有,请谈一下这些工作的实际开展情况。
    19. 您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?
    20. 您以往工作过的企业中,是否开展了软件配置管理工作?您能否描述一下这项工作的开展情况和您对这项工作的认识?
    21. 您是否熟悉一些主流的软件工程方法论和思想,如RUPCMMCMMIXPPSPTSP。如果熟悉,您是否可以谈一下对这些方法论和思想的认识?
    22. 您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?
    23. 在您以往的测试工作中,最让您感到不满意或者不堪回首的事情是什么?您是如何来对待这些事情的?
    24. 在即将完成这次笔试前,您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面)

  • Linux必学的60个命令

    2007-09-25 07:18:14

     

    安装和登录命令

    Linux提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统,就必须从Linux命令学起,通过基础的命令学习可以进一步理解Linux系统。

    不同Linux发行版的命令数量不一样,但Linux发行版本最少的命令也有200多个。这里笔者把比较重要和使用频率最多的命令,按照它们在系统中的作用分成下面六个部分一一介绍。

     

    安装和登录命令:loginshutdownhaltrebootinstallmountumountchshexitlast

    文件处理命令:filemkdirgrepddfindmvlsdiffcatln

    系统管理相关命令:dftopfreequotaatlpaddusergroupaddkillcrontab 网络操作命令:ifconfigippingnetstattelnetftprouterloginrcpfingermail nslookup

    系统安全相关命令:passwdsuumaskchgrpchmodchownchattrsudo pswho 其它命令:tarunzipgunzipunarjmtoolsmanunendcodeuudecode

数据统计

  • 访问量: 12326
  • 日志数: 11
  • 图片数: 1
  • 建立时间: 2007-09-08
  • 更新时间: 2008-01-13

RSS订阅

Open Toolbar