发布新日志

  • CMMI知识点

    2008-03-10 21:33:58

    CMMI:1.定义介绍....2.实施后的意义 3.能帮我们做什么
     
    1.CMMI全称是Capability Maturity Model Integration, 即软件能力成熟度模型集成模型,是由美国国防部与卡内基-梅隆大学和美国国防工业协会共同开发和研制的。CMMI是一套融合多学科的、可扩充的产品集合, 其研制的初步动机是为了利用两个或多个单一学科的模型实现一个组织的集成化过程改进

    cmm是项目管理
    由美国卡内基梅隆大学的软件工程研究所(SEI)创立的CMM(Capability Maturity Model 软件能力成熟度模型)认证评估,在过去的十几年中,对全球的软件产业产生了非常深远的影响。CMM共有五个等级,分别标志着软件企业能力成熟度的五个层次。从低到高,软件开发生产计划精度逐级升高,单位工程生产周期逐级缩短,单位工程成本逐级降低。据SEI统计,通过评估的软件公司对项目的估计与控制能力约提升40%到50%;生产率提高10%到20%,软件产品出错率下降超过1/3。
    对一个软件企业来说,达到CMM2就基本上进入了规模开发,基本具备了一个现代化软件企业的基本架构和方法,具备了承接外包项目的能力。CMM3评估则需要对大软件集成的把握,包括整体架构的整合。一般来说,通过CMM认证的级别越高,其越容易获得用户的信任,在国内、国际市场上的竞争力也就越强。因此,是否能够通过CMM认证也成为国际上衡量软件企业工程开发能力的一个重要标志。
    CMM是目前世界公认的软件产品进入国际市场的通行证,它不仅仅是对产品质量的认证,更是一种软件过程改善的途径。参与CMM评估的博科负责人表示,通过CMM的评估认证不是目标,它只是推动软件企业在产品的研发、生产、服务和管理上不断成熟和进步的手段,是一种持续提升和完善企业自身能力的过程。此次由美国PIA咨询公司负责评估并最终通过CMM3认证,标志着博科在质量管理的能力已经上升到一个新的高度。

    CMMI分为五个等级,二十五个过程区域(PA)(如图所示)。

    1. 初始级 软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。

    2. 已管理级 建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。

    3. 已定义级 已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品的生产在整个软件过程是可见的。

    4. 量化管理级 分析对软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。

    5. 优化管理级 过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。

    每个等级都被分解为过程域,特殊目标和特殊实践,通用目标、通用实践和共同特性:

    每个等级都有几个过程区域组成,这几个过程域共同形成一种软件过程能力。每个过程域,都有一些特殊目标和通用目标,通过相应的特殊实践和通用实践来实现这些目标。当一个过程域的所有特殊实践和通用实践都按要求得到实施,就能实现该过程域的目标。

    能力度等级:属于连续式表述,共有六个能力度等级(0~5),每个能力度等级对应到一个一般目标,以及一组一般执行方法和特定方法。
    0 不完整级
    1 执行级
    2 管理级
    3 定义级
    4 量化管理级
    5 最佳化级

    CMMI的评估方式:
    自我评估:用于本企业领导层评价公司自身的软件能力。
    主任评估:使本企业领导层评价公司自身的软件能力,向外宣布自己企业的软件能力
    CMMI的评估类型:
    软件组织的关于具体的软件过程能力的评估。
    软件组织整体软件能力的评估(软件能力成熟度等级评估)。
    CMMI的基本思想
    1、解决软件项目过程改进难度增大问题
    2、实现软件工程的并行与多学科组合
    3、实现过程改进的最佳效益


    1、CMMI的背景
    CMM的成功促使其他学科也相继开发类似的过程改进模型,例如系统工程、需求工程、
    人力资源、集成产品开发、软件采购等等,从CMM衍生出了一些改善模型,比如:
    (1) SW-CMM (Software CMM) 软件CMM
    (2) SE-CMM (System Engineering CMM) 系统工程CMM
    (3) SA-CMM (Software Acquisition CMM) 软件采购CMM
    (4) IPT-CMM (Integrated Product Team CMM) 集成产品群组CMM
    (5) P-CMM (People CMM) 人力资源能力成熟度模型
    为了以示区别,国内外很多资料把CMM叫做SW-CMM。按照SEI原来的计划,CMM的改进版本2.0应该在1997年11月完成,然后在取得版本2.0得实践反馈意见之后,在1999年完成准CMM2.0版本。但是,美国国防部办公室要求SEI推迟发布CMM2.0版本,而要先完成一个更为紧迫的项目CMMI,原因是在同一个组织中多个过程改进模型的存在可能会引起冲突和混淆, CMMI就是为了解决怎么保持这些模式之间的协调。
    CMMI(Capability Maturity Model Integration)即能力成熟度集成模型,这是美国国防部的一个设想,他们想把现在所有的以及将被发展出来的各种能力成熟度模型,集成到一个框架中去。这个框架有两个功能,第一,软件采购方法的改革;第二,建立一种从集成产品与过程发展的角度出发、包含健全的系统开发原则的过程改进。就软件而言,CMMI是SW-CMM的修订本。它兼收了SW-CMM 2.0版C稿草案和SPA中更合理、更科学和更周密的优点。SEI在发表CMMI-SE/SW 1.0版时,宣布大约用两年的时间完成从CMM到CMMI的过渡。
    CMMI项目更为工业界和政府部门提供了一个集成的产品集,其主要目的是消除不同模型之间的不一致和重复,降低基于模型改善的成本。CMMI将以更加系统和一致的框架来指导组织改善软件过程,提高产品和服务的开发、获取和维护能力。
    由业界、美国政府和卡内基•梅隆大学软件工程研究所率先倡导的能力成熟度模型集成(CMMI)项目致力于帮助企业缓解这种困境。CMMI为改进一个组织的各种过程提供了一个单一的集成化框架,新的集成模型框架消除了各个模型的不一致性,减少了模型间的重复,增加透明度和理解,建立了一个自动的、可扩展的框架。因而能够重总体上改进组织的质量和效率。CMMI主要关注点就是成本效益、明确重点、过程集中和灵活性四个方面。
      与原有的能力成熟度模型类似,CMMI也包括了在不同领域建立有效过程的必要元素,反映了业界普遍认可的"最佳"实践;专业领域覆盖软件工程、系统工程、集成产品开发和系统采购。在此前提下,CMMI为企业的过程构建和改进提供了指导和框架作用;同时为企业评审自己的过程提供了可参照的行业基准。
    2、CMMI的源模型
    软件能力成熟度模型2.0版,C稿;电子行业协会临时标准(EIA/IS)731;集成产品开发能力成熟度模型(IPD-CMM)v0.98。
    3、CMMI的原则
      (1)、 强调高层管理者的支持。过程改进往往也是由高层管理者认识和提出的,大力度的、一致的支持是过程改进的关键。
      (2)、 仔细确定改进目标,首先应该对给定时间内的所能完成的改进目标进行正确的估计和定义并制定计划。选择能够达到的目标和能够看到对组织的效益。
      (3)、 选择最佳实践,应该基于组织现有的软件活动和过程财富,参考其他标准模型,取其精华去其糟粕,得到新的实践活动模型。
      (4)、 过程改进要与组织的商务目标一致,与发展战略紧密结合。
    4、CMMI目标
      (1)、 为提高组织过程和管理产品开发、发布和维护能力的提供保障。
      (2)、 帮助组客观织评价自身能力成熟度和过程域能力,为过程改进建立优先级以及执行过程改进。
    5、CMMI的方法
      (1)、决定哪个CMMI模型等级最适合组织过程改进需要。
      (2)、 选择模型的表示法是连续式还是阶段式。
      (3)、 决定组织需要用到的模型中的知识领域。
      (4)、 类似CMM提出的过程改进6步,集成化过程改进分成:开始集成过程改进,建造集成改善平台,集成传统过程,启动新过程,进行改进评估。
    6、CMMI内容
      CMMI内容分为“Required”(必需的)、“Expected”(期望的)、“Informative”(提供信息的)三个级别,来衡量模型包括的质量重要性和作用。最重要的是"要求"级别,是模型和过程改进的基础。第二级别"期望"在过程改进中起到主要作用,但是某些情况不是必须的可能不会出现在成功的组织模型中。 "提供的信息"构成了模型的主要部分,为过程改进提供了有用的指导,在许多情况下他们对需要和期望的构件做了进一步说明。
      "要求"的模型构件是目标,代表了过程改进想要达到的最终状态,它的实现表示了项目和过程控制已经达到了某种水平。当一个目标对应一个关键过程域,就称为"特定目标";对应整个关键过程域就称为"公用目标"。整个CMMI模型包括了54个特定目标,每个关键过程域都对应了一到四个特定目标。每个目标的描述都是非常简捷的,为了充分理解要求的目标就是扩展"期望"的构件。
      "期望"的构件是方法,代表了达到目标的实践手段和补充认识。每个方法都能映射到一个目标上,当一个方法对一个目标是唯一就是"特定方法";而能适用于所有目标时就是"公用方法"。CMMI模型包括了186个特定方法,每个目标有两到七个方法对应。
      CMMI包括了10种"提供的信息":目的,概括和总结了关键过程域的特定目标;介绍说明,介绍关键过程域的范围、性质和实际方法和影响等特征;引用,关键过程域之间的指向是通过引用;名字,表示了关键过程域的构件;方法和目标关系,关键过程域中方法映射到目标的关系表;注释,注释关键过程域的其他模型构件的信息来源;典型工作产品集,定义关键过程域中执行方法时候产生的工作产品;子方法,通过方法活动的分解和详细描述;学科扩充,CMMI对应学科是独立的,这里提供了对应特定学科的扩展;公用方法的详细描述,关键过程域中公用方法应用实践的详细描述。
      CMMI提供了阶段式和连续式两种表示方法,但是这两种表示法在逻辑上是等价的。我们熟悉的SW-CMM软件能力成熟模型就是是阶段式的模型,SE-CMM系统工程模型是连续式模型,而IPD-CMM集成产品开发模型结合了阶段式和连续式两者的特点。
      阶段式方法将模型表示威一系列"成熟度等级"阶段,每个阶段都有一组KPA指出一个组织应集中于何处以改善其组织过程,每个KPA用满足其目标的方法来描述,过程改进通过在一个特定的成熟度等级中满足所有KPA的目标而实现的。
      连续式模型没有像阶段式那样的分散阶段,模型的KPA中的方法是当KPA的外部形式,并可应用于所有的KAP中,通过实现公用方法来改进过程。它不专门指出目标,而是强调方法。组织可以根据自身情况适当裁剪连续模型并以确定的KPA为改进目标。
      两种表示法的差异反应了为每个能力和成熟度等级描述过程而使用的方法,他们虽然描述的机制可能不同,但是两种表示方法通过采用公用的目标和方法作为需要的和期望的模型元素,而达到了相同的改善目的。
      现在CMMI面临的一个挑战就是创建一个单一的模型,可以从连续和阶段两个角度进行观察,包含相同的过程改进基本信息;处理相同范围的一个CMMI过程能够产生相同的结论。统一的CMMI(U-CMMI)是指产生一个只有公用方法和支持他们的KPA组成的模型。当按一种概念性的可伸展的方式编写,并产生了用于定义组织的特定目标过程模版,定义的模版构件将定义一个模型以适用于任何工程或其他方面。

    CMMI与CMM差别:
      CMMI 模型的前身是 SW-CMM 和 SE-CMM,前者就是我们指的CMM。CMMI与SW-CMM的主要区别就是覆盖了许多领域;到目前为止包括四个下面领域:
      (1)、软件工程(SW-CMM)
      软件工程的对象是软件系统的开发活动,要求实现软件开发、运行、维护活动系统化、制度化、量化。
      (2)、系统工程(SE-CMM)
      系统工程的对象是全套系统的开发活动,可能包括也可能不包括软件。系统工程的核心是将客户的需求、期望和约束条件转化为产品解决方案,并对解决方案的实现提供全程的支持。
     (3)、集成的产品和过程开发(IPPD-CMM)
      集成的产品和过程开发是指在产品生命周期中,通过所有相关人员的通力合作,采用系统化的进程来更好地满足客户的需求、期望和要求。如果项目或企业选择IPPD进程,则需要选用模型中所有与IPPD相关的实践。
     (4)、采购(SS-CMM)
      采购的内容适用于那些供应商的行为对项目的成功与否起到关键作用的项目。主要内容包括:识别并评价产品的潜在来源、确定需要采购的产品的目标供应商、监控并分析供应商的实施过程、评价供应商提供的工作产品以及对供应协议很供应关系进行适当的调整。
      在以上模块中,企业可以选择软件工程,或系统工程,也可以都选择。集成的产品和过程开发和采购主要是配合软件工程和系统工程的内容使用。例如,纯软件企业可以选择CMMI中的软件工程的内容;设备制造企业可以选择系统工程和采购;集成的企业可以选择软件工程、系统工程和集成的产品和过程开发。CMMI中的大部分内容是适用各不同领域的,但是实施中会有显著的差别,因此模型中提供了"不同领域应用详解"。
      CMM的基于活动的度量方法和瀑布过程的有次序的、基于活动的管理规范有非常密切的联系,更适合瀑布型的开发过程。而CMMI相对CMM更一步支持迭代开发过程和经济动机推动组织采用基于结果的方法:开发业务案例、构想和原型方案;细化后纳入基线结构、可用发布,最后定为现场版本的发布。虽然CMMI保留了基于活动的方法,它的确集成了软件产业内很多现代的最好的实践,因此它很大程度上淡化了和瀑布思想的联系。
      在 CMMI 模型中在保留了CMM阶段式模式的基础上,出现了连续式模型,这样可以帮助一个组织以及这个组织的客户更加客观和全面的了解它的过程成熟度。同时,连续模型的采用可以给一个组织在进行过程改进的时候带来更大的自主性,不用再象CMM 中 一样,受到等级的严格限制。这种改进的好处是灵活性和客观性强,弱点在于由于缺乏指导,一个组织可能缺乏对关键过程域之间依赖关系的正确理解而片面的实施过程,造成一些过程成为空中楼阁,缺少其他过程的支撑。两种表现方式(连续的和阶段的)从他们所涵盖的过程区域上来说并没有不同,不同的是过程区域的组织方式以及对成熟度(能力)级别的判断方式。
      CMMI 模型中比CMM 进一步强化了对需求的重视。在CMM 中,关于需求只有需求管理这一个关键过程域,也就是说,强调对有质量的需求进行管理,而如何获取需求则没有提出明确的要求。在CMMI的阶段模型中,3 级有一个独立的关键过程域叫做需求开发,提出了对如何获取优秀的需求的要求和方法。CMMI 模型对工程活动进行了一定的强化。在CMM中,只有3级中的软件产品工程和同行评审两个关键过程域是与工程过程密切相关的,而在CMMI中,则将需求开发,验证,确认,技术解决方案,产品集成这些工程过程活动都作为单独的关键过程域进行了要求,从而在实践上提出了对工程的更高要求和更具体的指导。CMMI中还强调了风险管理。不像在CMM 中把风险的管理分散在项目计划和项目跟踪与监控中进行要求,CMMI3级里单独提出了一个独立的关键过程域叫做风险管理。
    2.很多人认为,实施CMMI的意义在于项目工程走向世界,可以在西方国家接到订单。实际上,这只是我国企业实施CMMI的意义的很小一部分。更为重要的意义则是,CMMI的实施能够提高我国企业的管理水平。降低企业的工程成本。事实表明,企业实施CMMI技术的投入都会得到丰厚的回报。据SEI统计,用于软件项目上的CMMI的投资,其回报率在5:18:1之间。由此可见,为什么这么多的企业纷纷实施CMMI项目管理技术。

          近年来,很多软件企业纷纷实施CMMI管理模式,这一方面反映了我国企业在进入WTO后的危机意识,以及与世界接轨的迫切愿望。另一方面则反映出我国软件企业在改进管理方法上所作的努力。但是CMMI到底能够为我们做什么呢?实际上这个问题对不同的人有不同的答案。

    对采购部门的人员来说,掌握了CMMI技术可以有目的地考察项目实施人员或公司的实施能力,从而保证所采购的项目能够顺利完成。

    对于项目经理来说,掌握CMMI技术能够提高自己的管理能力,从而能够使项目高质量,低成本,按期限地完成。

    对于企业老总来说,CMMI还能够引入科学的管理理念,提升企业的整体管理水平。

         在美国,很多企业通过CMMI评估,一方面为了满足承包国防工程或一些大企业的工程的要求,另一方面也是为了提高企业自身的管理能力。美国政府的工程项目,绝大多数都要求承包商有一定的CMMI级别作为参加投标的资格。越来越多的大型企业开始要求其工程承包商具有一定的CMMI级别。级别高的企业在赢得项目的竞标中具有一定的优势。因此,如果没有CMMI的等级评估,企业就会失去很多商机。

    3.项目计划的过程
    1.确定范围

    2.制定计划活动的计划
    3.项目目标和范围,假设和约束
    4.确定项目自定义过程,生命周期模型选择
    5.分解WBS,进行估算
    6.考虑资源安排,活动依赖,排进度计划,确定里程碑和基线
    7.获取计划的内部承诺
    8.通知质量保证人员,测试,配置管理拟制相关子计划
    9.制定风险管理计划,识别分析风险
    10.穿叉制定项目依赖承诺,质量计划,度量计划,数据管理计划,监控计划,沟通计划,资源计划,培训计划,沟通计划
    11.各计划的协商和讨论
    12.对计划进行基线


    项目估算
    1.确定估算小组成员,估算的约束和假设
    1.估算首先需要历史版本复盘的经验数据,包括工作量比例分布,需求开发生产率,缺陷密度,评审速率,缺陷修复速率
    2.采用专家法估算,首先估算出项目的总规模,然后除以生产率后得到工作量数据
    3.根据评审速率得到项目评审工作量
    4.根据缺陷密度得到版本预计缺陷个数,然后除以缺陷修复速率得到返工的时间
    5.根据需求用例规模乘以测试复杂度得到测试规模,根据测试设计,测试执行和回归测试生产率得到测试工作量。
    6.估算需要预留5-10%的余量。
    7.预计项目的COPQ,COGQCOQ



    项目跟踪和控制
    1.项目跟踪和控制包含了日跟踪,周跟踪,里程碑跟踪和复盘四个层次。
    2.监控项目四要素相关指标(范围,规模,进度,工作量,COPQCOGQCOQ,资源,缺陷移除率,缺陷密度)
    3.监控项目干系人活动,风险,依赖和承诺



    项目结束时候的相关活动
    1.项目复盘报告
    2.项目成员各自的版本总结,由我汇总,开总结会,总结相关经验教训
    3.项目经验应该导入相关的经验库
    4.项目资源的释放

    风险管理
    1.风险管理计划内容:小组成员->风险管理范围->风险识别(方法,工具和来源)->风险参数->风险分析->风险跟踪->风险应对
    2.风险类别分技术和管理过程两大类,技术主要是生命周期各阶段的风险,项目管理主要有人员,过程,计划,环境,资源,管理方法等的风险。
    3.项目风险来源主要有项目历史版本风险,风险库,比较多考虑的是需求不确定性,技术可用性,人员技能,项目进度,测试等方面风险
    4.风险的分析是针对风险的根源进行分析的。风险缓解策略主要是规避,转移,减轻和承担。项目一般采用的是减轻和承担。
    5.风险的减轻计划是在风险发生前做的,主要是减轻风险发生的概率。风险应急计划是在风险发生后作的补救措施。
    6.风险的分析分为定性分析和定量分析,一般先采用定性分析确认风险优先级和排序,然后定量分析风险概率和后果,得到风险的综合影响值。当风险值超过事先定义的阀值后风险就会触发必须考虑对风险进行应对。

    项目度量
    1.度量目的是纠偏,辅助决策和收集历史数据用于下个版本
    2.主要对工作量,规模,进度,缺陷密度,缺陷移除率,需求稳定度和变更率,需求生产率,编码生产率,COQ等进行度量。
    3.执行度量分为数据的收集(系统自动,手工)->数据的分析->提出建议

  • TestComplete 内主要六种回放

    2008-02-02 11:37:35

    读完此教程后,读者应该学会:

    1.        TestComplete 内主要六种回放,范围由小至大分别是

    1.1         Run Current Routine (执行函式)

    1.2         Run scrīpt (执行脚本)

    1.3         Run Manual Test (执行手工测试)

    1.4         Project Test Items 里面的 Run Focused Item (执行当前选择的测试物件)

    1.5         Run Project (执行项目)

    1.6         Run Project Suite (执行专案)

    2.        TestComplete 内测试项目的架构

    3.        透过 Test Items 来组织测试单元 (Units) 的串连回放

     

    正文:

    Run Current Routine

    下图是 Run Current Routine 的方法,在 Sub Main 任何一个范围上右按,选择 Run Current Routine 便会执行 Main 这个函式。

    根据图内的代码的话,结果会是先出现 “Hello.” MsgBox,然后呼叫AnotherFunction 继而出现 “Hello World!” MsgBox


    Run scrīpt

    透过下图所显示,在工具列上的按钮可以执行 Run scrīpt, Run Project 或者 Run Project Suite

    按照下图的代码,如果执行 Run scrīpt,会先运行左边栏的 “scrīpt” 内的 Main Routine (启始函式)

     

    scrīpt Main Routine,可以按照下图来设置。

    如果设置成 AnotherFunction,执行 Run scrīpt 就只会出现 “Hello World!” 这个结果。

    如果设置成 Main,执行 Run scrīpt 就会先出现 “Hello.”,再出现 “Hello World!”

     


    Run Manual Test

    Manual Test 是手工测试,可以在 Project 右按来建立,主要就是纪录一些人手操作的步骤。

    Run Manual Test 就是回放一个一个的画面显示每个人手操作步骤,测试员人手执行实际动作后可回到 TestComplete 去选择适合的按钮来纪录结果。

    Run Project

    执行 Run Project,是会执行 Project Test Items

    如下图的设置的话,Project 的第一个 Test Item 就是执行 Unit1 AnotherFunction 这个函式。

    右按介面,透过 New Item 可以陆续加上更多 Test Items,甚至用 New child item 来分层次地加上 Test Items

    Test Items 不单可以是 scrīpt (脚本),还可以是 Manual Test (手工测试)

     

    如下图的设置的话,执行 Run Project 的结果就是出现 “Hello World!”,然后出现 ManualTest1 的手工测试脚本,测试员完成手工测试后,继续运行自动测试而出现 ”Goodbye”,然后出现 “Hello.” “Hello World!”


    在此处,分层次的主要是为了方便启动或者屏蔽某一项测试范围。如下图。你还可以直接拖拉或者透过右按来移动项目。

     

    这里通常就是管理者组织很多复杂脚本的地方。

     

    通常,测试队伍可以陆续建立很多 Function (函式) 甚至 Unit (单元),每个 Unit 或者 Function 通常都有自己的录制起点和终点。而管理者,透过测试计划 Test Plans 和用例 Test Cases 等等设计文件和辅助文件引导下,可以在这里组织 Unit 来实现计划的。

     

    因此,其实没有必要透过代码编写多个 Call 函式来实现多个脚本组合运行的。反而,使用 Call 函式更适合去呼叫一些经过代码重构 (Refactorization) 后可以循环再用或者共用的函式的。

     

    Run Focused Item

    同样在 Project Test Items 介面内,你可以透过右按来执行 Run Focused Item,将目前选取的项目运行。如根据下图的设置,是不会运行的,因为,事前已经将 ProjectTestItem2 屏蔽了。

    Run Project Suite

    Project Suite 同样有 Test Items 的设置。此处所谓的 Test Items,其实就是指 Projects,如下图,就是指 Windows 专案下 Notepad 这个项目。

    一个专案 (Project Suite) 可以有多个项目 (Projects) 的。这个例子中则只有一个。如果出现多个,你是可以同样地在 Test Items 内设置 Projects 的次序先后和屏蔽状态。

    执行 Run Project Suite 的话,就会先运行 Notepad 这个 Project,也就会根据 Notepad Project Test Items 的设置来运行了。

     

    - -

  • 常用数据库操作命令(SQL)

    2008-02-02 11:07:45

    1.--数据操作

      SELECT --从数据库表中检索数据行和列  

    select * from table order by oid desc limit 0,5; 查表中最后5条记录

      INSERT --向数据库表添加新数据行

      DELETE --从数据库表中删除数据行

      UPDATE --更新数据库表中的数据

      --数据定义

      CREATE TABLE --创建一个数据库表

      DROP TABLE --从数据库中删除表

      ALTER TABLE --修改数据库表结构

      CREATE VIEW --创建一个视图

      DROP VIEW --从数据库中删除视图

      CREATE INDEX --为数据库表创建一个索引

      DROP INDEX --从数据库中删除索引

      CREATE PROCEDURE --创建一个存储过程

      DROP PROCEDURE --从数据库中删除存储过程

      CREATE TRIGGER --创建一个触发器

      DROP TRIGGER --从数据库中删除触发器

      CREATE SCHEMA --向数据库添加一个新模式

      DROP SCHEMA --从数据库中删除一个模式

      CREATE DOMAIN --创建一个数据值域

      ALTER DOMAIN --改变域定义

      DROP DOMAIN --从数据库中删除一个域

    --数据控制

      GRANT --授予用户访问权限

      DENY --拒绝用户访问

      REVOKE --解除用户访问权限

      --事务控制

      COMMIT --结束当前事务

      ROLLBACK --中止当前事务

      SET TRANSACTION --定义当前事务数据访问特征

      --程序化SQL

      DECLARE --为查询设定游标

      EXPLAN --为查询描述数据访问计划

      OPEN --检索查询结果打开一个游标

      FETCH --检索一行查询结果

      CLOSE --关闭游标

      PREPARE --为动态执行准备SQL 语句

      EXECUTE --动态地执行SQL 语句

      DESCRIBE --描述准备好的查询

      ---局部变量

      declare @id char(10)

      --set @id = '10010001'

      select @id = '10010001'

    2.常用加实用的: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
    DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
    DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  
    首先,简要介绍基础语句:  
    1、说明:创建数据库CREATE DATABASE database-name   
    2、说明:删除数据库drop database dbname  
    3、说明:备份sql server  
    --- 创建 备份数据的 deviceUSE master
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'  
    --- 开始 备份BACKUP DATABASE pubs TO testBack   
    4、说明:
    创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)  
    根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old definition only  
    5、说明:  
    删除新表:drop table tabname   
    6、说明:  
    增加一个列:Alter table tabname add column col type  注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。  
    7、说明:
      添加主键:Alter table tabname add primary key(col)
      说明:
      删除主键:Alter table tabname drop primary key(col)  
    8、说明:
      创建索引:create [unique] index idxname on tabname(col….)
      删除索引:drop index idxname  注:索引是不可更改的,想更改必须删除重新建。  
    9、说明:
      创建视图:create view viewname as select statement
      删除视图:drop view viewname  
    10、说明:几个简单的基本的sql语句
      选择:select * from table1 where 范围
      插入:insert into table1(field1,field2) values(value1,value2)
      删除:delete from table1 where 范围
      更新:update table1 set field1=value1 where 范围
      查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
      排序:select * from table1 order by field1,field2 [desc]
      总数:select count * as totalcount from table1
      求和:select sum(field1) as sumvalue from table1
      平均:select avg(field1) as avgvalue from table1
      最大:select max(field1) as maxvalue from table1
      最小:select min(field1) as minvalue from table1  
    11、说明:几个高级查询运算词
      A: UNION 运算符
      UNION 运算符通过组合
    其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
      B: EXCEPT 运算符
      EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
      C: INTERSECT 运算符
      INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。  注:使用运算词的几个查询结果行必须是一致的。  

    12、说明:使用外连接
      A、left outer join:
      左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。 SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
      B:right outer join:
      右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
      C:full outer join:
      全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

    3.SQL复制的基本元素包括

            出版服务器、订阅服务器、分发服务器、出版物、文章。

    SQL复制的工作原理

            SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器。

    SQL SERVER复制技术类型

            SQL SERVER提供了三种复制技术,分别是:

            1、快照复制(呆会我们就使用这个)

            2、事务复制

            3、合并复制

            只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。

    一:先来配置出版服务器

            (1)选中指定[服务器]节点。

            (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令。


            (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。


            (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)。

    二:创建出版物

            (1)选中指定的服务器。

            (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框。

            (3)选择要创建出版物的数据库,然后单击[创建发布]。

            (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)。

            (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器

            (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表。

            (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。

    三:设计订阅


            (1)选中指定的订阅服务器。


            (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]。


            (3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。然后[下一步]直到操作完。

    4.1>、sysobjects

      系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等

      sysobjects 重要字段解释:

    sysObjects (
      Name sysname,      --object 名称
      id   int,          --object id
      xtype char(2),     -- object 类型 
      type  char(2),     -- Object 类型(与xtype 似乎一模一样? 有点郁闷…)
      uid   smallint,     -- object 所有者的ID
      ...                --其他的字段不常用到。 
    )

    注:需要解释的是 xtype 和type 是一模一样的,他的数据为:

    C = CHECK 约束
    D = 默认值或 DEFAULT 约束
    F = FOREIGN KEY 约束
    FN = 标量函数
    IF = 内嵌表函数
    K = PRIMARY KEY 或 UNIQUE 约束
    L = 日志
    P = 存储过程
    R = 规则
    RF = 复制筛选存储过程
    S = 系统表
    TF = 表函数
    TR = 触发器
    U = 用户表
    V = 视图
    X = 扩展存储过程

      该表中包含该数据库中的所有对象,如有那些表 存储过程 视图  等信息
     

    2、sysColumns   数据库字段表。 当前数据库的所有字段都保留在里面。

    重要字段解释:

    sysColumns (
      name     sysname,   --字段名称
      id       int,        --该字段所属的表的ID
      xtype    tinyInt,    --该字段类型,关联sysTypes表
      length   smallint,   --该字段物理存储长度
      ...
    )


      比如要查询某一个张表的有那些字段和这些字段的长度
           3、sysUsers

      当前数据库的系统组,以及用户。

    sysUsers(
      uid smallint,       --用户id
      name smallint ,     --名称
      uid  varbinary(85) , --属于一个登陆
      ....
    )

      对数据库的用户进行管理

    4、sysdenpends
      当前数据库的依赖关系。   比如 我要修改某一张的结构时,怕修改后会影响到
    其它的视图 函数 存储过程 ,这是在修改之前可以查询一下.那些视图 函数 存储过程调用了这个表的
      这样在修改后就可以修改的视图 函数 存储过程,


      一般程序员用到的系统表,基本也就这几个 其他的特殊的系统表(主要都在master 或者 tempdb )里面了


     


  • SQL Server 基本函数

    2008-02-02 10:57:10

    1.字符串函数
    长度与分析用

    datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格

    substring(expression,start,length) 不多说了,取子串

    right(char_expr,int_expr) 返回字符串右边int_expr个字符

    字符操作类

    upper(char_expr) 转为大写

    lower(char_expr) 转为小写

    space(int_expr) 生成int_expr个空格

    replicate(char_expr,int_expr)复制字符串int_expr次

    reverse(char_expr) 反转字符串

    stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从

    start开始的length个字符用char_expr2代替

    ltrim(char_expr) rtrim(char_expr) 取掉空格

    ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符

    字符串查找

    charindex(char_expr,expression) 返回char_expr的起始位置

    patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0

    2.数学函数

    abs(numeric_expr) 求绝对值

    ceiling(numeric_expr) 取大于等于指定值的最小整数

    exp(float_expr) 取指数

    floor(numeric_expr) 小于等于指定值得最大整数

    pi() 3.1415926.........

    power(numeric_expr,power) 返回power次方

    rand([int_expr]) 随机数产生器

    round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入

    sign(int_expr) 根据正数,0,负数,,返回+1,0,-1

    sqrt(float_expr) 平方根

    3.日期函数

    getdate() 返回日期

    datename(datepart,date_expr) 返回名称如 June

    datepart(datepart,date_expr) 取日期一部份

    datediff(datepart,date_expr1.dateexpr2) 日期差

    dateadd(datepart,number,date_expr) 返回日期加上 number

    上述函数中datepart的

    写法 取值和意义

    yy 1753-9999 年份

    qq 1-4 刻

    mm 1-12 月

    dy 1-366 日

    dd 1-31 日

    wk 1-54 周

    dw 1-7 周几

    hh 0-23 小时

    mi 0-59 分钟

    ss 0-59 秒

    ms 0-999 毫秒

    日期转换

    convert()

    4.系统函数 

    suser_name() 用户登录名

    user_name() 用户在数据库中的名字

    user 用户在数据库中的名字

    show_role() 对当前用户起作用的规则

    db_name() 数据库名

    object_name(obj_id) 数据库对象名

    col_name(obj_id,col_id) 列名

    col_length(objname,colname) 列长度

    valid_name(char_expr) 是否是有效标识符

    APP_NAME() --函数返回当前执行的应用程序的名称

    select app_name()
    COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值
    COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值
    COL_NAME(, ) --函数返回表中指定字段的名称即列名
    DATALENGTH() --函数返回数据表达式的数据的实际长度
    DB_ID(['database_name']) --函数返回数据库的编号
    DB_NAME(database_id) --函数返回数据库的名称
    HOST_ID() --函数返回服务器端计算机的名称
    HOST_NAME() --函数返回服务器端计算机的名称

    select host_name()
    IDENTITY([, seed increment]) [AS column_name])
    --IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中
    /*select identity(int, 1, 1) as column_name
    into newtable
    from oldtable*/
    ISDATE() --函数判断所给定的表达式是否为合理日期
    ISNULL(, ) --函数将表达式中的NULL 值用指定值替换
    ISNUMERIC() --函数判断所给定的表达式是否为合理的数值
    NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值
    NULLIF(, )
    --NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值


  • TestComplete 5 / 6 的选项设置介绍

    2008-02-02 10:26:56

    读完此文章之后,读者应该学会:

    1.      Tools > Customize Keyboard 的用途

    2.      Tools > Default Project Properties… 的用途和影响

    3.      Project > Properties的用途和影响

    4.      Tools > Options 的用途和影响

     

    本文章不是将所有设置都介绍,而是针对一些值得一提的设置,属于经验之谈。无论你是测试员或者是需要为队伍统一一下一些设置,希望你会觉得本文章有点用。

     

    Tools > Customize Keyboard

    不知道有多少人像我一样,是个键盘怪癖者,学习任何软件都特爱学习快捷键,希望键不离手,不希望被鼠标操作拖慢效率。就正如很多从事图像设计的高手也很熟练  Photoshop 等等工具内的快捷键一样。

     

     

    Tools > Customize Keyboard 就是自定义快捷键设置的地方。各种功能都会在此纪录其目前的快捷键 (Current key)

     

    你可以赋以新的快捷键,直接在 Press new shortcut key 里面键入你的快捷键组合便可,但需要留意 Shortcut currently used by 看看你所键的快捷键是否已经被另一功能使用。

     

    例如下图,笔者的个人喜好之一就是将 Code Explorer 赋以快捷键。这样的话,在编写代码时键不离手就可以很快得到代码方面的基本帮助。

     

     

    不过,笔者也同时建议不要将已经存在的快捷键更改,尤其是如果你知道不一定会在同一台电脑操作或者你的电脑不只是固定一人操作的话,以免因为不统一而一时不习惯。

     

    另外,Tools > Options 内有一部份是设置全局快捷键的,就算 TestComplete 不是当前的画面也可以用的,但这些键不是在 Customize Keyboard 里面设置的。文章后面会有介绍。

     

    Tools > Default Project Properties…

     

    Default Project Properties 的设定,就是影响你目前及将来建立的 Project 里面的 Properties 的设定。

     

     

    首先值得一提的就是 Project > General > Character encoding

    如果你所做的测试开发,会使用一般亚洲语言 (中文 [ 繁体 / 简体 ]、日文、韩文等),或者处理一些已国际化 (i18n) 或者本地化 (l10n) 的测试对像,你或需要设置成 UTF-8 或者 UTF-16,避免代码乱码的问题。

     

    当你有已经存在的单元档案后才转换 Encoding 的话,TestComplete 会在当你下次编辑并且保存单元档案时对档案进行转换。

     

    唯独 TestComplete 6 则多了个 Auto 的选择,是不会对已经存在的档案进行转换。不过如无特别原因,笔者不建议使用。

     

    UTF-16 應該注意它和你連接外部的版本控制工具的兼容。相信如果你明白你的測試項目是有 UTF-16 的需求的話,你應該是個高手的了,可以參考一下幫助文件。

     

     

     

    另一个值得一提的是 Project > Playback 的选项。

     

    根据帮助文件所说明,Error Dialog 是只会对 Delphiscrīpt 的单元起作用的。它是当回放脚本时遇到错误时是否弹出提示窗口要求测试员是否终止回放的。

     

    如果你的测试对像可能存在一些效能上的问题,笔者建议你调整一下右面那四种时间上的设置。尤其 Auto-wait timeout, ms 的设置,预设是 10000 (10 ),笔者目前的习惯是调整成 30000 的。Key-pressing delay, ms 我也习惯从预设的 0 改为 20

     

    On unexpected window 主要是控制回放时遇到未预期的窗口时应该怎么处理。

     

    On overlapping window 是控制当回放是遇到被其他窗口覆盖正要操作的窗口是是否理会那前面的窗口。

     

    Project > Properties

     

     

    Project > Properties 基本上就是和 Tools > Default Project Properties 里面的设置一样的,但只是对当前的 Project 起作用。

     

    Tools > Options

     

     

    上图这部份是设置 Global Shortcuts (全局快捷键) 的,就算 TestComplete 不是当前的画面也可以用的,但这些键不是在 Customize Keyboard 里面设置的。

     

    笔者建议记一下,用得多就容易习惯的了。

     

    另外也提示一下,如果你的测试对像正好也有全局快捷键的话,留意一下有没有发生冲突,你是可以在这里更改的。更改时也留意有没有和 Customize Keyboard 里面的设置有冲突。

     

     

    上图这部份里面,可以设置预设的脚本编程语言。笔者用 VBscrīpt 的。

     

     

    上图这部份是设定 Visualizer,可以设置脚本在录制或者回放时,是否保存抓图。

    这个抓图功能很好,尤其当实际运行脚本后测试出错误时,你就有抓图可以利用它作为向开发组提供错误报告的有力证据 (呵呵,测试报告是讲求证据的)

     

    笔者也建议按 Configure,适度调节抓图的图像格式。预设的 BMP 实在会是很大的,笔者就试过,刚开始的项目,代码不多,经过几次运行之后,所有抓图加起来就已经超过 3MB 了。所以笔者都习惯都会转成 JPG,已经很足够。

     

    录制或者运行后,你回顾代码就会发现代码旁边的图示,按下去就可以浏览抓图了,而且,多次运行的抓图都有纪录的。右按图示的话,是有菜单提供给你去一次过或逐个清除抓图的,不一定要到我的电脑去删除。

     

    深入一点的话,笔者会建议,测试组具体进行录制和尝试运行的电脑,不需要抓图,因为主要都只是进行测试代码开发和试行的工作;最好设置另一台独立的电脑,是专门独立负责正式运行测试组的完成品,这台电脑的硬盘空间最好是足够有余的。

     

     

    也留意 Engines > Log > Images > Configure 里面同样有图像格式的设置,也是例行地转为 JPG 比较化算。这些图片是纪录在脚本运行后所生成的测试报告 (Logs) 里面的。

     

    (TestComplete 6+ only)

     

    TestComplete 6 多了个 Name Mapping 的选项。管理者应该深思熟虑决定并且为队伍统一设置。

     

    主要就是 TC 6 增强了代码编辑介面的 Code Completion 功能,可以将 Name Mapping 生成的 Aliases (物件别名) 也保存,供 Code Completion 使用,是手工编写代码的工作更轻松和准确。

  • TestComplete: 对Manual Test 的介绍 (及TestComplete 6 对 Manual Test 的增强)

    2008-02-02 10:20:52

    TestComplete: Manual Test 的介绍 (TestComplete 6 Manual Test 的增强)

    读完此文章之后,读者应该学会:

    1.      Manual Test 的应用范围和一些启发

    2.      Manual Test 的建立和修改

    3.      Manual Test 的回放和运行

    4.      Manual Test Run Project 内的串连运行

    5.      TestComplete 6 Manual Test 的增强,Manual Test TC5 TC6 的升级

     

    TestComplete Manual Test 是什么?

    TestComplete Manual Test,是用来建立一个个画面 (有点像安装软件过程一个一个的画面一样),每个画面其实就是手工测试的步骤描述和预期结果。在回放时,它就会一个个画面展现在测试员面前。测试员按照画面内所描述的步骤进行手工测试,步骤完成了,就回到 TestComplete 这个画面,决定是通过还是不合格。测试员可以在每个步骤加入备注形容具体的结果。到整个 Manual Test 回放完成了, TestComplete 一样会生成一个测试报告 (Log) 的。

     

    Manual Test 的应用

    Manual Test,顾名思议就是手工测试的意思。

    你或者会问:‘咱们用这 TestComplete 不是为了实现自动化测试? 那这手工测试的功能是不是有点本末倒置了?

     

    其实,很多人都已经知道,一个测试对像里面并不是所有地方都适合实施自动化的测试的。

     

    有哪些地方适合利用 TestComplete Manual Test ? 笔者来分享一下构想和经验。

     

    对于一些逻辑性很强而且复杂的测试或者变数很多的测试,要开发一个覆盖率可靠的自动化脚本作回归测试之用,并非一朝一夕可以完成的。那么,不妨先建立一个 Manual Test。况且,未建好自动化脚本之前,你的队伍还不一样是要做些手工测试来应付目前的需求,对不?

     

    那么,这边有人已经按照 Manual Test 进行手工测试,那边就有人开始构想自动化的可能,继而开发自动化测试脚本。

     

    Manual Test 是可以利用作为无工具测试和自动化测试之间的过渡桥。假使真的可以自动化了并且完成了,原本的 Manual Test 也可以被取代了。

     

    又或者,有些测试项目根本不值得或者不需要自动化的,是不会带来有价值的回报或者会严重加重维护的负担的话,管理者适宜将此类测试纳入手工测试的工作里面。

     

    Manual Test 的建立

    如果你目前已经存在的项目并未包括 Manual Test 的话,你可以右按 Project > Add > New Item,选择 Manual Test 来建立。

     

    TestComplete 6 的左边栏组织得更好,所有手工测试项目都在 Manual Test 这个目录之下,不如 TestComplete 5 一样保存在 Project 这一层,感觉上直观得多。

     

    Manual Test 的编辑

     

    利用 Test steps 的按钮,你可以增加,移除或者移动每个步骤。

     

    步骤的根层适合作为本次测试的介绍,以及描述一些事前准备功夫;最好可以把所有不涉及预期结果的内容都写进去。例如上图。

     

    上图右面就是所选择步骤的编辑介面。值得一提的是 Test descrīption Test notes and comments 似乎对输入中文字有问题。但你最主要去编写的步骤内容会是写在中间的 Test instructions,这才是编写 Manual Test 的核心部份之一,而且可以保存成一个个 HTML 档案,或者导入一些已经存在的 HTML 档案的。

     

    由于是 HTML 格式,你可以加插图像,或者加入超连结指向其他文件以辅助测试员之用。

     

     

    以上例子就是 Step1 的编辑画面和内容。

     

    每个步骤应该能给测试员一些步骤指示,和预期结果。

     

    如果你步骤过于复杂,牵涉很多变数,或者预期结果比较长的话,右可以利用超连结指向具体的档案供测试员参考。或者可以来得简单点,留给测试员思考和判断的空间。这完全是测试设计者去决定了。

     

    Manual Test 的回放和运行、TC 6 内的增强,以及升级问题

     

    单独运行一个 Manual Test,就透过左边栏上右按 > Run Manual Test 吧。

     

     

     

    管理者亦可以在 Project > Test Items 里面加插这 Manual Test,那么,Run Project 或者 Run Project Suite 也可以包括这个 Manual Test 的,如上图。

     

    以下是运行 Manual Test 的过程。

      

    正如之前所说,手工测试一开始时,最好可以给测试员描述一下测试起点在哪,应该有什么设置和环境等等;是不牵涉预期结果,也不预期测试员要报告通过或者不合格的一种描述。

     

     

    留意,除了 Success, Fail Stop 之外,工具列上还有个双箭头按钮,就是 Skip (跳过) 的意思。

     

    以下是按了 Fail 之后出现的画面,会要求测试员输入对不合格的描述。

    此时可以 Continue 继续下一步测试,或者 Try Again 继续尝试目前的步骤,或者 Stop 终止整个手工测试。

     

     

    由以上画面中圈着的可见,TestComplete 6 最主要增强的地方,就是有实时抓图的能力,会纪录在测试完成后的报告内

     

    另外,笔者亦试过了,TC5 TC6 所生成的 Manual Test 档案并没有不兼容的问题的,可以交替来用。

  • TestComplete的单元测试

    2008-02-02 10:08:17

    TestComplete的单元测试

     

    陈能技

    2007-9-17

     

    单元测试包括对程序模块的函数、过程、方法的测试。“单元”可以是单个的函数或整个库。单元测试的关键点是只对程序的一部分进行了测试。

     

    通常,单元测试的简单方法是编写一个叫“driver”或“test harness”的小程序(“驱动”),对这些函数进行测试并报告结果。

     

    自动化单元测试工具一般执行以下操作:

    1、  执行测试过程并给它们输入数据

    2、  从测试过程获取测试结果

    3、  与存储的期待值比较结果

     

    TC可以把各种类型的单元测试组合在一起。大部分这些单元测试都是通过外部工具来执行的(MSTestNUnitJUnitDUnit),TC只是帮你组织和调用它们。只有TCUnitTest类型的单元测试是由TC自己执行的。

     

    下面以VS.NETC#为蓝本简要介绍TCUnitTest的建立过程:

    1、  首先在VS.NET中添加对AutomatedQA.TestComplete.UnitTesting.dll的引用。

     

    2、  为了让测试类能被TC可视化地配置,应该调用UnitTesting对象的AddClasses方法,如下:

    using TestComplete; // Add this directive to provide access to the UnitTesting object软件测试专业网站:51Testing软件测试网`9t%eP3IcRu%gM
    ...软件测试专业网站:51Testing软件测试网{*vg3}G7F*BO8u
    // Add MyTestClass to unit testing
    "dx(J p5k\!Z:i167635Type[] typearr = {typeof(MyTestClass)};软件测试专业网站:51Testing软件测试网J.l,R]`b\
    UnitTesting.AddClasses(typearr);

     

    3、  在代码中添加包含测试逻辑的测试类

     

    4、  TCUnitTest编辑器中配置单元测试,选择需要进行的单元测试方法,如下图所示:

     

    5、  执行单元测试

    启动被测试程序,通过UnitTesting对象的Execute方法执行单元测试脚本,当然也可以在Project Explorer中选中UnitTesting下的某个单元测试直接运行。


  • 介绍 TestComplete 的 LLP (Low-Level Procedures)

    2008-02-02 10:06:36

    介绍 TestComplete LLP (Low-Level Procedures)

     

    原著者: Terry Young

    适合程度: 初学至进阶

     

    读完此文章之后,读者应该认识:

    1.      LLP (Low-Level Procedures) 是什么、它的原理、录制以及编辑的基本方法。

     

    LLP 是什么?

    LLP (Low-Level Procedures) 实际上可能比较少机会用,但好奇心强烈的你,难免也按捺不住想知道它是什么。它是低层次的键盘和鼠标的纪录方式。

     

    首先要说我们一般所录制的脚本,它的原理是识别测试对像的控件,录制对控件上键盘和鼠标的动作,回放时就是以这个原理摹拟动作的。

     

    LLP 则是低层次、座标式的纪录方式。它是不识别控件的。它只会纪录鼠标 (点击,移动和滚轮) 和键盘的动作事件,以及事件之间的时间间距。

     

    也因为此,录制后未经修改的情况,回放时的速度是和录制时的速度一样的。

     

    有什么情况可以利用 LLP ? 比如要测试图像软件或者一些基于鼠标 / 画笔的绘制动作,就适宜利用 LLP 了。一些以 Flash 作为平台的互动程序,或者也可以利用 LLP 的,不过笔者就未曾深入探究过了。

     

    对于 Rational Robot 有认识的人士,TestComplete LLP 可以说是类似 Robot 内的 VU 吧。不过,TestComplete LLP 在录制后是提供一个可视化的介面来编辑动作的,而不是从编写代码的层面去修改。

     

     

    如果你的侧边栏未有 LLP 的话,可以在 Project 右按 > Add > New Item 来建立,如上图。

     

    TestComplete LLP 的录制方式

    TestComplete 的工具列按 Record 按钮,所弹出的小窗口内可以选择录制方式。

     

     

     

    前者是基于整个荧幕作为座标基础去录制动作的座标;后者是基于窗口的,需要拖拉动作拖至对像窗口才开始录制。

     

    如果你的测试对像固定是全屏的话,或者你的动作牵涉多个窗后的话,应该选择 Screen Coordinates 比较适合。不过,在另一台机回放的话,要留意电脑荧幕的解像度是否吻合。管理者应该预先为此安排好。

     

    如果你的测试的动作只是对一个窗口的话,可以考虑使用 Window Coordinates 的。

     

    LLP 录制后的编辑

     

     

    录制完成后,首先会自动建立一个函数,Screen Coordinates 录制的话,就是生成一句 LLCollection1.LLP1.Execute 的语句,也就是执行LLP1 这个低层次动作纪录了,如上图。

     

    然后,自己再编辑一下何时调用这函数便可。

     

     

    而当你打开 LLCollection1 LPP1 的话,就会看到一个可视化的编辑画面,里面详细纪录了 Event (鼠标和键盘的动作)Parameters (鼠标的座标或者键盘的 CharCode、以及 Delay, ms (动作与动作之间相隔的时间 [微秒])

     

    点击一行就可以进行微调编辑。

     

    如果编辑鼠标动作,可以看到,它能纪录四种鼠标动作,分别是 Mouse Down, Mouse Up, Mouse Move Mouse Wheel (滚轮)

     

    如果编辑键盘动作,可以看到,它纪录了 Key Up Key Down 两种动作。

     

    你还可以对一个或多个动作进行拖拉或者剪贴删除,以编辑动作的次序,或者贴进另一个 LLP 内。

     

    右按介面的话,有几个值得提及的功能。

     

     

     

    Add Event 是手工地加插鼠标或者键盘的动作。

     

    如果你如上图一样,预先选择多个动作,Expand/Shrink Time for Selected Events… 是可以批次调整动作执行的时间间距的。

     

     

    以上图为例,假设我原本录制花了大概 1 分钟完成,以以上的设置,就是将所有动作缩短到 10 秒内完成,而每个动作所需要的时间是 Evenly 平均分配的。假如有 10 个动作,也就是每个动作相隔 1 秒了。记住,如要缩短,就要推断一个合理的值,否则,你的测试对像也可能未能及时反应过来而间接导致一些不必要的错误。

     

    另外,如果你选择的动作包含鼠标动作的话,你可以用Shift Coordinates for Selected Events… 来批次将座标的 xy 中心点移动。

     

     

    以上图为例,就是批次向右水平移动 100 pixels (像素),及向上垂直移动 100 pixels

    假设原本的第一个动作是 Mouse Down X: 150, Y: 250 的话,编辑后就会变成 Mouse Down X: 250, Y: 150 了。

     

    是否需要动用到这些功能是很视乎实际情况和需要的。如果过程时间不长的话,还不如重新录制再回放。如果只是测试对像介面上的少许改动,手工地批次编辑则可能更快。

  • TestComplete 等待控件是否出现的函数

    2008-01-31 22:48:45

    在使用TC的过程中发现:在回放脚本时,有些控件的加载速度太慢,导致脚本报错。

    一开始是使用delay()函数进行控制,感觉效果不好,通过与同事的讨论发现:

     

    使用Wait Windows()可以解决等待下一窗口出现的问题,该函数的使用方法见下图:

    ProcessObj.WaitWindow(WndClass, WndCaption, GroupIndex, Timeout)

    Parameters

    ProcessObj       A process object                                                当前进程对象

    WndClass        [in] Required String                                            窗体类名字符串

    WndCaption    [in] Optional String Default value: *                窗体属性名,默认为*

    GroupIndex      [in] Optional Integer Default value: -1             窗体的索引

    Timeout            [in] Required Integer                                           等待窗体的时间长度

    Result                An Window object                                             返回一个窗体对象

     

    这个函数还是不错的,具体的使用方法和实例,大家可以看看在线帮助


    全部脚印 不留脚印 留下脚印:
  • TC 录制脚本

    2008-01-31 22:43:48

    TestComplete,该工具是一种基于GUI的自动化测试工具。使用一段时间,觉得还是不错的,简单个大家介绍一下。

    该工具安装后,点击新建工作suit,然后新建一个测试工程(会让你选择保存的目录和脚本类型等一些信息,根据需要选择就可以了)

    在工具栏上有一个录制的标志,点击开始录制后,该工具会记录下你鼠标点击的所有操作。

    比如我们录制一段打开IE访问google并查询testcomplete相关信息的一段操作,录制的脚本如下:

    function Test3()
    {
      var  w1;--定义的一些变量
      var  w2;

      --启动sys中的IE游览器
      Sys.Process("Explorer").Window("Shell_TrayWnd").Window("ReBarWindow32").Window("ToolbarWindow32", "Quick Launch").ClickItem("启动 Internet Explorer 浏览器", false);


      w1 = Sys.Process("IEXPLORE").Window("IEFrame", "*");
      w2 = w1.Window("WorkerW", "", 1).Window("ReBarWindow32").Window("ComboBoxEx32").Window("ComboBox").Window("Edit");
      w2.Click(71, 8);

      --输入的信息(可以修改)
      w2.Keys("www.google.com.cn[Enter]");
      w2 = w1.Window("Shell DocObject View").Window("Internet Explorer_Server");
      w2.ToURL("http://www.google.cn/");
      w1 = w2.Page("http://www.google.cn/").document.all;
      w1.Item("q").Keys("test\");
      w1.Item("q").Keys("c");
      w1.Item("q").Keys("o");
      w1.Item("q").Keys("m");
      w1.Item("q").Keys("[Down]");
      w1.Item("q").Keys(" ");
      w1.Item("q").Keys("[Enter]");

       --以上的代码可以用一下代码代替

       --w1.item("q").keys("testcomplete[Enter]")
      //Please wait until download completes: "http://www.google.cn/search?hl=zh-CN&q=testcomplete+&meta=&aq=t"
      w2.Wait();
      //Please wait until download completes: "about:blank"
      w2.Wait();
    }

    通过上面的代码我们可以看到,该工具其实是通过捕捉控件来实现录制脚本。

    在该工具非常适合做一些单元测试,并支持C++ VB javascrīpt vbscrīpt 语言,对于脚本的扩展性支持的比较好。

     

  • TC 下载点

    2008-01-31 22:39:23

    testcomplete6下载地址

     

    http://automatedqa.com/downloads/thankyou.asp?download=testcomplete60demo.exe

    试用版激活码: F9053532-624F5442-A74A0BA9-62BCAD52-2F2E0F49-151181EB-73C2

  • TC 与Web services

    2008-01-31 22:26:46

    1.Web Services是一种新的使用基于XML标准和协议来交换信息的web应用程序。它不像传统C/S应用程序那样拥有图形界面,因为它不是设计成与用户交互的。而是提供编程接口把功能服务暴露给客户端程序调用,例如web页面或可执行程序。

     

    TestComplete 6 开始支持对web services进行功能测试。你可以创建调用web services的方法并检查返回的结果来判断web services是否正确工作

     

    你可以指定需要测试的web servicesWSDL,通过Get Services来获取WSDL指定的服务列表。如下图所示:

     

     

    TC会帮你把该Web services 包含的所有方法以及参数的数据类型返回并展示出来,如下图所示:

     

     

    根据这些方法和参数,我们可以编写测试脚本进行测试,一般调用方法如下:

    WebServices.WebServiceName.MethodName(parameters)

     

     

    通过调用所暴露的方法,取得返回结果与预期结果进行比较,从而检查web services是否正确工作,例如,以下脚本调用FahrenheitToCelcius方法并传入参数,取得返回结果后与预期结果进行比较,如果比较结果不相等则log一个错误信息:

     

      var tFahrenheit, tCelsius, result; 

     

      // Specify the tested values: 212 F = 100 C 

      tFahrenheit = 212; 

      tCelsius = 100; 

     

      // --= Test the FahrenheitToCelcius method =-- 

      // Call the method and get the result   

      result = WebServices.WebService1.FahrenheitToCelcius(tFahrenheit); 

      msgEx = "Expected value for " + tFahrenheit + " F is: " + tCelsius + " C\r\n" + 

              "Actual value: " + result + " C"; 

      // Compare the result and the expected value 

      if (result == tCelsius) 

        Log.Message("The FahrenheitToCelcius method works correctly.", msgEx) 

      else

        Log.Error("The FahrenheitToCelcius method works wrong!", msgEx); 

     

     

    2.

    TestComplete 6 之前,TC提供了Code Completion的功能,但需要通过快捷键的方式激活,而且默认快捷键设置还与操作系统的输入法切换快捷键冲突,参见《TestComplete的一些小技巧》(http://www.51testing.com/?141783/action_viewspace_itemid_61319.html

    在TC6,Code Completion的功能得到了增强,提供了Autocompletion选项。通过这个选项,提供了在具体上下文中自动调用和完成属性、方法、函数等的输入的功能,大大增强了输入速度。这类似现在很多流行的开发工具提供的敏感输入、自动完成功能,让脚本代码的开发速度大大提高,让我们减少在记忆和输入方面的工作量。

    另外,TC6的脚本解析能力也加强了,能检测变量赋值,例如如下Jscrīpt脚本:

    var ōbj = Sys.Desktop;软件测试专业网站:51Testing软件测试网N v:x[5b;kW.G@ Z
    var obj2 = obj;软件测试专业网站:51Testing软件测试网Q;Fe M*F]#f
    obj2.

    在obj2后面加个点号,就能显示Desktop对象的属性和方法。

     

  • TC 一些小技艺

    2008-01-31 22:23:20

    TestComplete的一些小技巧

     

     

    录制用户界面操作之间的实际延迟时间

    如果你希望脚本执行时按照录制时的速度来回放,那么你需要在录制时记录用户操作之间的实际延迟时间。

     

    有两种方式记录用户操作之间的延迟:

    1、  录制low-level procedure脚本。以这种方式录制的脚本,TC除了记录鼠标和键盘的事件外,还会记录事件之间的延迟时间。所以用户操作之间的延迟能被正确地复制下来。但是要注意low-level procedure是以绝对坐标的方式录制的,因此,如果被测应用程序改变了窗体大小,这种脚本可能会回放失败。

     

    2、  你可以使用Real-time mode选项。如果激活该选项,TC会通过在脚本中插入BuiltIn.Delay的方法记录用户操作之间的实际延迟时间。

     

    Real-time mode的设置通过Tools | Options -> Engines | Recording 打开后勾选。

     

    Code Completion

    在编写脚本时,通常很难记住很多对象、方法和属性的确切名称。因此TC提供了Code Completion功能,它能帮助你节省很多查阅联机帮助文档和纠正错误拼写的时间。

     

    Code Completion窗口可通过右键显示出来,也可以使用快捷键来触发,默认快捷键是CTRL+Space,这个快捷键与中文操作系统的输入法切换冲突,所以不能生效,需要改变快捷键的设置。

     

    选择菜单Tools | Customize Keyboard ,在Categories选择Edit,然后选择Code Completion,把快捷键改成你想要的,但是又不与其它快捷键冲突的设置。

     

    Code Templates

    Code Templates,也叫Code Snippets,允许你把预先定义的代码模板插入到脚本代码中,为你节省很多敲击代码的时间。

     

    默认按快捷键CTRL+J就能展开Code Templates界面,让你可以选择需要的代码片断。默认会提供trywhile这些常用的代码框架,你也可以自己定制、增加、删除代码片断。选择菜单Tools | Options,在Panels | Code Editor | Code Templates中就可以做这些操作。

     

    Outlining

    Outlining让你可以更好地组织代码,让脚本代码的结构更加清晰、可读性更强。

     

    Outlining意味着你可以把一些代码组合成在一个区域里(block),然后可以展开或收起这个区域的代码。当展开时,你可以看到block中的所有代码,当收起时,只能看到block的第一行代码。所以Outlining让你可以把一些暂时不需要看到、不需要编辑的代码片断隐藏起来,这在代码行比较多的情况下会很有用。

     

    Outlining的使用方法很简单,只需要选中需要隐藏的代码行,右键选择Outlining | Hide SelectionOutlining | Hide by Definitions,要展开时,选择相应的Expand项或直接点代码编辑器左侧的+号即可展开。

      

  • TC 计划

    2008-01-31 22:20:01

    TestComplete的计划运行


            可以在批处理文件中使用TC的这些退出代码,例如:
    REM Clears the screen
    CLS
    @ECHO OFF
    REM Launches TestComplete,
    REM executes the specified project
    REM and closes TestComplete when the run is over
    START \W C:\TestCompleteFolder\Bin\TestComplete.exe /r /e C:\TestCompleteFolder\Projects\MyProj\MyProj.mds
    IF ERRORLEVEL 3 GOTO CannotRun
    IF ERRORLEVEL 2 GOTO Errors
    IF ERRORLEVEL 1 GOTO Warnings
    IF ERRORLEVEL 0 GOTO Success
     
    CannotRun
    ECHO The scrīpt cannot be run
    GOTO End
     
    :Errors
    ECHO There are errors
    GOTO End
     
    :Warnings
    ECHO There are warnings
    GOTO End
     
    :Success
    ECHO No errors
    GOTO End
     
    :End
     
    命令行参数
            TC的命令行参数如下所示:
            TestComplete.exe [file_name [/run [(/project:project_name) | (/project:project_name /projectitem:item_name) |          (/project:project_name /unit:unit_name /routine:routine_name)] [/exit]][/SilentMode][/ns]
            可以指定运行整个TC项目,也可以指定执行某个单元的某个脚本程序,运行模式可以是安静模式,还可以指定启动TC时是否显示Splash界面。
     

  • TC 6的新特性

    2008-01-31 22:16:17

    TestComplete6的新特性 - Checkpoints软件测试专业网站:51Testing软件测试网7SP:bL2B
    陈能技
    'E| r4Wsa;v1676352007-9-28

    测试是为了发现错误,通过把实际得到的结果与预期的结果进行比较,看是否一致从而判断测试是否通过,因此比较是测试的最基本原理之一。

    TestComplete 6 之前,是通过一些特定的对象来帮助比较文件、图像和对象属性。

    而在TC6,比较的功能进一步加强,提供了像Rational Robot检查点一样的功能。而且除了文件、图像和对象属性,还能比较数据库、XML文档、web页面、web service的返回结果和表格控件的数据。

    在TC6,比较的动作被称为Checkpoints。可以在录制过程中就插入Checkpoints,也可以在测试脚本设计时插入。

    通过这种方式插入验证点可以节省大量脚本编写和调试的时间,因为TC会为你自动产生验证点代码。

    另外,可视化地选择需要比较的对象、属性和数据的过程都为我们节省了很多时间。

    唉,可惜我们公司刚买了5.0版本没多久,现在还需要考虑一下要不要升级。

    对于尚未升级到TC6。0或不打算升级到TC6.0,而又想要获得这些特性的人们来说,我觉得可以通过自己写一些代码框架、建立代码片段的方式来部分解决。例如,对于文件、对象属性的比较,我们可以把这些常用的代码封装成公共的函数,供大家来传入参数调用,返回比较结果。

    而这些也是自动化测试需要的一个过程:不断积累和完善公共的库,以利于减轻重复开发脚本的工作量。

  • test complete 性能测试

    2008-01-31 22:03:54

    Test Complete主要是一个功能测试工具,利用其对GUI控件的识别、动作记录、回放等脚本技术实现替代部分的人工测试的执行。但是它同时还提供很多机制让我们在功能测试的同时记录性能。
     
    MemUsage,CPUUsage
            可利用TC(Test Complete)的sys对象的属性获得关于进程和操作系统的内存、CPU使用情况。
     
            下面脚本记录当前所有进程和操作系统使用的内存:
       log.Message(VarToStr(Sys.MemUsage)+'%'); 
     
            下面脚本记录notepad进程的当前内存使用情况:
       Log.Message(VarToStr(Sys.Process('notepad').MemUsage)+'K');
      
     
            通过访问Sys对象,可以获取关于CPU的各种信息,例如,CPU处理器、处理器个数、CPU使用率(包括系统的和某个具体进程的)
       //Information on the processor(s) installed on the current computer.
       log.Message( Sys.CPU);
       //Returns the number of processors installed on the current computer.
       log.Message( Sys.CPUCount);
       //Current percentage of CPU time used by the operating system and all running processes.
       log.Message( VarToStr(Sys.CPUUsage)+'%');   
       //the current approximate percentage of the CPU time spent running the process.
       log.Message( VarToStr(Sys.Process('notepad').CPUUsage)+'%'); 
      
            注意:使用TC提供的VarToStr函数把Sys对象的各种属性变量值转换成String类型,否则log信息无法显示值。
     
    与AQTime集成
            上面说的方法是TC本身提供的,只能记录基本的性能参数,例如内存、CPU,TC还提供另外的途径记录性能,例如通过与AQTime集成的方式,AQTime是AutomatedQA公司出品的代码性能测试工具,它能在程序执行过程中记录每行代码的执行效率,内存使用情况、代码覆盖率等。
     
            与AQTime集成有两种方式。一种是调用AQTime软件的方式,另外一种是直接使用AQTime提供的接口对象。
     
            如果采用第一种方式,则首先应该把TC的TestedApps的执行模式改成 Profile 模式,可在TestedApps editor中设置,也可在脚本中设置,例如:
     
    var
     MyApp : OleVariant;
    begin
     // Obtains the tested application
     MyApp := TestedApps.MyTestedApp;
     
     // Specifies the run mode parameters
     MyApp.Params.ProfileParams.AQtimeVersion := 5;
     MyApp.Params.ProfileParams.ProfilerName := 'Coverage Profiler';
     MyApp.Params.ProfileParams.RunMode := 'Normal';
     MyApp.Params.ProfileParams.UseProject := False;
     
     // Activates the Profile run mode
     MyApp.Params.ProfileParams.Activate;
     ...
    end;
     
            第二种方式是采用访问提供的编程对象的方式,提供AQtimeIntegration 、AQtime、slAQtime对象来访问AQTime的各种功能。
     
            例如,下面脚本使用AQtimeIntegration 和AQtime对象,首先通过AqtimeIntegration对象的IsSupportedVersionAvailable属性判断某版本的AQTime是否存在,如果存在,则指定CurrentVersion为某版本的AQTime,然后通过AQTime对象的CreateProjectFromModule方法创建一个新的AQTime项目,通过SelectProfiler方法指定Profile的类型,通过StartProfiling方法开始Profile,通过WaitAndExportResults输出结果。
     
    procedure TestAQtime;
    begin
     // Checks AQtime version
     if not AQtimeIntegration.IsSupportedVersionAvailable('4') then
     begin
        Log.Error('The required version of AQtime is not installed.');
        Exit;
     end;
     
     // Specifies the desired AQtime version
     AQtimeIntegration.CurrentVersion := 4;
     
     // Creates a new project
     if not AQtime.CreateProjectFromModule('C:\MyTestedApp\MyTestedApp.exe') then
     begin
        Log.Error('Cannot open the project.');
        Exit;
     end;
     
     // Selects the desired profiler
     if not AQtime.SelectProfiler('Performance Profiler') then
     begin
        Log.Error('Cannot select the specified profiler.');
        Exit;
     end;
     
     // Starts profiling
     if not AQtime.StartProfiling() then
     begin
        Log.Error('Cannot start profiling.');
        Exit;
     end;
     
     // Waits until the profiling is over and
     // exports profiling results
     AQtime.WaitAndExportResults('C:\MyTestedApp\MySummaryResults.xml',
                                  'C:\MyTestedApp\MyResults.xml');
     
     // Closes AQtime
     AQtime.Close();
    end;

362/2<12
Open Toolbar