一个人不应该依附在其他人身上,一个人应该首先自力更生。你应该自己能够独立,能够安顿你自己,那你就不会害怕了。你爱你自己的话,别人不能不爱你吧。

发布新日志

  • 软件测试的前途与职业发展

    bob123654 发布于 2012-08-02 09:32:24

      软件测试的职业发展是个很宽泛的命题,不同测试工作经历的人有不同的观点,初入测试行业的新手与具有丰富测试工作经验的老手具有不同的认识。为了提高文章内容的针对性,本文将以对软件测试感兴趣,准备从事软件测试的人员,已经从事软件测试1到3年的人员为读者对象。文章将分析软件测试人员的职业发展方向途径,提出实现职业发展的方式方法。

      在信息技术产业快速发展过程中,软件应用领域不断扩展,市场对软件产品的质量提出了更高的要求。软件工程领域的实践证明,有效实施软件测试可以显著改进软件质量。软件测试是专业性、技术性、实践性要求非常高的工作,有效实施软件测试,需要依靠高素质的测试人才。

       一个时期以来,我国一些软件企业存在“重开发,轻测试”的错误观念,很多国内高校没有设立软件测试专业,因此,国内软件测试人才(特别是具有10年以上 软件测试实践经验的人才)的紧缺已是一个无法回避的事实。由于软件测试是新兴的IT职业,很多测试从业者对职业发展感到迷茫,需要加强软件测试人才的职业 化建设,明确职业发展的方向和途径,增强职业的自豪感和工作动力。

      1、软件测试是有前途的职业吗?

       笔者在为企业培训和大学教课过程中,经常有学员问到“软件测试工作是否有前途?”的问题。我总是反问一句:“你是如何理解工作前途的?”学员的回答五花 八门,如图1所示。有人说工作挣钱多,工资高,有人说能够不断学到新知识,有人说工作受到社会尊重,有人说有到全球500强企业工作的机会,有人说今后不 会被淘汰。

    图1 什么是有前途的职业

       笔者认为,判断一个职业是否有前途需要以发展的眼光分析,既要看到短期的工资待遇,更要看到未来的发展空间;既要看到短期市场需求,更要看到长远的社会 需求;既要看到职业的社会地位,更要考虑到个人的职业兴趣。如果幻想不经过努力,刚从事某个职业就可以获取高薪,受到社会尊重,那么软件测试肯定没有前 途,而且世上没有任何职业是有前途的。

      软件测试工作是否有前途?我的回答是“优秀的软件测试从业者,测试工 作有前途,而且前途很大”。软件测试顺应全球化和信息化发展趋势,符合我国信息化与工业化发展目标,是新兴的朝阳职业。优秀的测试从业者依靠软件测试的专 业技术,可以获得职业的不断提升,随着测试能力的提升,薪资待遇不断提升,成为受人尊敬的测试专家。

      2、软件测试职业的发展路线图

      “人往高处走,水往低处流”。每个测试从业人员都希望通过努力,提高工作职位,实现个人价值。软件测试从业者有哪些职位可以不断提高和发展呢?我将软件测试职业进行全方位分析,测试职业发展具有多级别,多层次,多方向,多职位的“四多”特征。软件测试职业发展的路线图如图2所示。

    图2 软件测试的职业发展路线图

      “级别”

      描述了测试工作的影响范围,从小到大的各个级别分别是“任务级”,“项目级”,“部门级”,“组织级”和“行业级”。最小的测试工作影响范围只能影响到某个具体的测试任务,最高的测试工作可以影响到某个具体的测试任务,最高的测试工作可以影响到测试行业的发展趋势。

      “层次”

      描述了测试工作在组织结构中的所在地位,从低到高的各个层次分别是“执行层”,“设计层”,“计划层”,“决策层”和“指引层”。测试工作最底层是软件测试的具体执行工作,最高层是测试工作可以指引测试行业的发展。

      “方向”

      描述了测试工作的技能发展倾向,可以分为“技术”和“管理”两个方向。“技术”方向是在测试技术、领域技术和软件工程技术的广度和深度方面进行发展。“管理”方向是向提高组织能力,领导能力,沟通协调方面深入发展。

      “职位”

      描述了测试工作对应的具体岗位类别是名称,职位类别可以分为“组员”,“组长”,“经理”,“总监”和“高管”,每个类别分别对应许多具体的测试岗位。

      测试工作的职业发展方向决定测试职业的职位发展,测试职业发展的不同职业级别和层次影响测试职位的类别,不同的组织具有不同的测试职位名称及职责要求。软件测试强调实践性和应用性,无论今后向哪个方向发展,达到哪个级别和层次,最好从最基础的测试组员做起。

      3、软件测试的职业发展之道

      追求卓越,追求成功是职业人员的永恒主题。由于人生阅历不同,价值观不同,每个人对卓越和成功的理解不同。笔者认为“卓越”是具有超出大众的杰 出表现,“成功”是经过积极努力,实现设定目标后的自信状态和满足感受。那么,测试职业人员如何才能实现测试职业发展的目标呢?

      (1)思路决定出路,视野决定事业

      没有工作目标的人永远为有明确目标的人工作。目标影响未来,如果你从事软件测试的目标是成为测试经理,则很少有机会成为公司高级管理者和测试行业专家。学习和工作中遇到了困难和问题,如果缺少主动分析和探索的工作思路,依靠别人帮助,很难突破工作发展的出路。

      追求软件测试职业发展的过程像攀登高山,在山脚下和半山腰徘徊,永远无法体会在山顶“一览众山小”的意境,无法领略极目远眺的宽广视野。取得微 小成绩沾沾自喜的人,无法产生继续探索的动力。“山外有山,人外有人”,不要把眼光仅局限于一个公司,一个行业,也不要只仅局限于国内,还要放眼全球。软 件测试领域的创新主要来自美国和欧洲,向国外测试专家学习,才能了解自己的专业差距,明确职业前进的方向。

      (2)庸人抱怨,智者行动

      软件测试行业存在两种人:庸人和智者。庸人从来都是打工者的心态,一辈子都要替别人打工。此举一例:两个都是新入职的同事,也都是第一份工作, 领导交给他们差不多的事情做,一个想“TMD,就这么点工资,让干这么多活?”,另一个则想“没想到新人都给这么多机会锻炼,一定好好干”,一年后,第一 个成为第二个人下属,几年后第二个成为公司部门经理。

      智者把工作当作带薪学习的机会,主动思考,踏实工作。当你月薪2000元的时候,象月薪8000的人士那样工作,一年后月薪肯定6000多。每 个公司和同事都有自身存在的问题,庸者抱怨公司管理混乱,同事愚蠢,无法学到新技术,智者把存在的问题看作工作机会,主动解决问题,赢得同事的尊重和领导 的提拔。

      智者未来注定不平凡,无论干什么工作。机会无大小,只有时间早晚,智者永远不嫌弃小机会。软件公司是最公平的名利场,机会是自己干出来的,否则只能说你无能。心态影响结果,心态影响未来。

      (3)成功有先后,在于学习效率和实践能力

      软件行业是最具创新和发展的行业,新技术,新工具,新思想,新需求,新模式,日新月异,推陈出新。软件测试人员是一群智商出众的人群,如果再这 些人员中快速脱颖而出,需要坚持持续学习,高效率的学习,并且积极实践。“要想人前显贵,必须人后受罪”,如果你还没有成功,自问一下你是否比大多数同学 或同事勤奋认真。

      庸人抱怨工作太紧张,没有时间学习,庸人抱怨年龄大了,学不进去了。庸人总是找各种借口和抱怨,智者抓住一切机会学习。不妨主动问自己,每年购 买和阅读多少本软件测试领域的新书,每周浏览多少国际和国内软件测试领域的网站,是否关注和阅读了国内和国际测试领域最新研究成果和文章。如果你还没有做 到这些,请从现在做起,坚持3年,你的未来掌握在你的手中。

      优秀的测试人员总是在积极工作项目实践的基础上,学习软件测试的理论知识,学习软件测试目标,原则,策略,流程,方法,技术和工具。没有理论指 导的测试实践是盲目的实践,测试理论是测试实践的抽象和归纳,是测试实践的智慧总结。优秀的测试人才既是实践高手,也是理论高手。

      (4)最好最简单的小事,才能担当好大事

      很多人刚开始从事测试工作是从执行手工测试做起的,根据测试用例,运行软件,分析输出结果,报告软件缺陷。庸人认为这件工作没有任何技术挑战,枯燥乏味,抱怨软件测试没有前途。这其实还是不正确的工作心态作怪,是眼高手低的表现。

      海尔公司CEO张瑞敏有句名言:“能把每一件简单的事情做好就是不简单,能把每一件平凡的事做好就是不平凡”。手工测试是最基础的软件测试工 作,是培养软件缺陷敏感性的实践性工作,是最有效的发现软件缺陷的工作。不妨以学习的心态拷问自己:“我还可以更快的完成测试码?我还能更多的发现缺陷 吗?”,从多方面提高测试工作的效率和效果。

      我来说说我刚开始做软件测试的情形吧。我1999年博士毕业后,先从事4年的软件编程工作,2002年初开始转入软件测试工作。我每天根据测试 用例执行手工测试,由于缺乏测试工作经验,开始的时候经常遗漏软件缺陷,为此经常被测试经理指出,甚至遭受严厉地批评。于是,我购买了书籍学习被测试软 件,分析缺陷的类型和特征。3个月后,我每天执行的测试用例数量和发现的有效缺陷数量,在我所在的测试团队名列第一,并且提出了改进测试执行效率的流程, 后被测试部门作为后续测试项目的基础流程,半年后我开始独立带领一个项目的测试团队。

      (5)个人是否优秀,在于和谁一起奋斗

      古语讲“良禽择木而栖,贤臣择主而事”,一个人能够取得伟大的成就,需要良好的工作环境,需要宽广的事业舞台。新广告语说“打球找国梁,贷款找银行”,如果要提高乒乓球技艺,最好找奥运冠军刘国梁打球,如果要申请贷款买房,找大型银行最专业。

      软件测试工作同样如此,公司的文化对于测试人员的成长影响较大。准备从事软件测试的信任,寻找第一份工作时一定要对这家公司有比较清楚的了解, 对比这家公司的规模,行业,理念,学习机会和发展空间是否与自己的职业发展吻合。不要随便找一家公司工作,否则,对于自己对于公司都是损失。

      如果工作若干年后,掌握了充分的测试技能,在寻求新发展目标时,如果当前工作单位没有合适的职位,无法提供更大舞台,可以主动走出去,到可以施 展个人职业技能的新单位谋求发展。“出路出路,走出去才有路”,与优秀公司的测试智者为伍,增强的不仅是技能,还有解决问题的视野和信心,以及更宽广的职 业发展空间。

  • 一块来研究下“自学”软件测试的思路,应该学些什么……

    晓蕾LUCKY 发布于 2008-12-28 16:53:14

        自学测试一个多月了。相关的书籍也看了不少。可觉得自己老在“测试基础”这块打转,进步很小。今天无意在网上看到***培训机构的课程设置,拿来和自己做下比较,看看自己学到了什么程度?还应该学点什么?应该按照怎样的思路continue……只是不知道这些课程是否适合“自学的”初学者。望自学软件测试的、正在从事测试工作的前辈、还有对测试感兴趣的朋友给提供点入门建议,更希望大家能提供点各个阶段的经典的书目或是电子资料。

    功能测试

    软件测试基础概念

     

    20 什么是软件工程
    什么是软件生命周期
    软件生命周期的阶段划分
    什么是软件测试
    软件测试的意义
    软件测试的发展历史
    软件测试在软件生命周期中的地位
    瀑布模型和V模型
    软件测试的分类
    按照测试目的划分(功能测试、并发测试、压力测试、稳定性测试、容量测试、本地化测试、兼容性测试、安装卸载测试、界面测试、易用性测试、恢复备份测试、安全性测试)
    按照执行方式划分(静态测试、动态测试)
    按照阶段划分(单元测试、集成测试、系统测试、验收测试)
    按照透明度划分(黑盒测试、白盒测试、灰盒测试)
    功能测试的意义
    软件测试流程基础概念 20 什么是软件测试流程
    什么是测试计划
    测试计划的意义
    什么是测试需求
    测试需求的意义
    测试需求的属性定义
    什么是测试用例
    测试用例的意义
    测试用例的属性定义
    什么是测试执行
    测试执行的属性定义
    什么是缺陷
    缺陷的生命周期
    缺陷的属性定义
    什么是测试报告
    测试报告的意义
    测试管理工具的基础使用(TestDirector) 40 介绍TD的基本情况
    介绍TD的结构和工作原理
    需求模块使用(界面介绍、三种视图、需求的添加,修改,删除)
    测试用例模块使用(界面介绍、两种视图、测试用例的添加,修改,删除、测试用例对测试需求的覆盖)
    测试执行模块使用(界面介绍、两种视图、执行流的设置,测试集的设置)
    缺陷模块使用(界面介绍、缺陷的添加,修改,删除)
    测试过程的图表汇总分析
    软件测试流程中的方法介绍 40 测试计划的模板元素讲解
    测试计划的编写
    测试需求的分析方法和实践应用
    测试需求的优先级分析方法
    测试用例的设计方法和实践应用
    测试用例的优先级分析方法
    测试数据的准备
    测试执行的日志记录
    如何汇报缺陷
    测试报告的模板元素讲解
    测试报告的编写
    测试项目实践(标准项目和提高项目) 96 标准项目:双向就业系统的测试实践
    根据标准的软件需求说明书,由老师指导学员编写测试计划,测试需求分析,测试用例设计,测试用例实现,测试执行,缺陷汇报,测试报告。其中测试需求,测试用例,测试执行和缺陷都在TD中实现。通过项目,将理论和工具都应用到实践中。
    提高项目:焦点测试论坛的测试实践
    根据目前大多数IT公司的测试情况,由学员独立进行项目的测试。提高项目的规模,复杂度都高于标准项目,这样学员在掌握标准测试流程的基础上,加深对测试的理解和应用。
    测试管理工具的高级使用(TestDirector) 24 TD的安装
    TD的目录结构介绍
    新建项目
    项目的用户管理
    项目的访问模块管理
    项目的用户组和权限管理
    项目的字段管理
    项目的列表管理
    项目的邮件设置
    项目的跟踪性原则设置
    项目的工作流设置
    自动化测试 自动化回归测试基础知识 9 自动化测试基本概念
    自动化测试用途
    自动化发展史
    自动化测试工具介绍、对比
    自动化测试项目组角色及其职责
    自动化测试实施风险
    自动化测试工具QuickTestPro使用技能 20 自动化测试工具QTP安装
    自动化测试工具QTP介绍
    自动化测试工具QTP操作
    自动化测试工具QTP使用高级技巧
    自动化测试项目实施管理流程 21 自动化测试项目建组
    自动化测试策略制定
    自动化测试需求调研
    自动化测试计划制订
    自动化测试设计
    自动化测试实现
    自动化测试运行
    自动化测试结果分析
    自动化测试项目练习 30 项目:焦点测试论坛
    在讲师带领下,通过调研获取自动化测试需求,然后制订策略、计划,设计、开发自动化测试脚本、执行测试、收集测试结果并分析。通过项目让学员掌握自动化测试项目的标准流程,并学习各种测试文档的编写。
    性能测试 性能测试基础知识 9 什么是性能测试
    性能测试的价值
    性能测试好做吗
    什么是性能测试瓶颈
    什么是性能测试经理、分析师、工程师
    什么是响应时间
    什么是吞吐量/处理能力
    什么是资源利用率
    什么是负载
    负载与响应时间、吞吐量、资源利用率的关系
    什么是在线用户
    什么是并发用户
    什么是TPS、HPS
    什么是基础数据
    什么是测试数据
    如何保证性能测试项目正确实施(需求分析的正确性、实现的准确性、执行的合理性、监控的有效性、分析的完整性)
    性能测试工具LoadRunner使用技能 20 脚本录制
    参数设置-录制设置、一般设置、运行设置
    脚本增强-事务
    脚本增强-检查点
    脚本增强-thinktime
    脚本增强-参数化
    脚本增强-自动关联&手动关联
    场景设置
    结果分析
    性能测试项目实施管理流程 21 如何启动性能测试项目
    如何制订性能测试策略
    如何建立性能测试模型
    如何制定性能测试计划
    如何制定性能测试方案
    如何准备性能测试
    如何执行性能测试
    如何分析性能测试结果
    如何编制性能测试报告
    如何评审性能测试报告
    性能测试项目练习 30 项目:焦点测试论坛
    在讲师带领下,通过调研获取性能测试需求,然后制订策略、建立模型、制订计划和方案、准备测试数据、执行测试、收集测试结果并分析。通过项目让学员掌握性能测试项目的标准流程,并学习各种测试文档的编写。
    操作系统 Unix/Linux基本命令、sh编程 19 Unix/Linux常用命令
    Unix/Linux sh编程
    Unix/Linux资源监控 5 Unix/Linux资源监控命令
    LoadRunner如何监控Unix/Linux资源
    Linux安装 3 如何安装Linux
    数据库 SQL Server2000安装、基本使用 5 SQL Server2000安装
    SQL Server2000基本使用
    SQL语法、高级使用 8 SQL基本语法(查询、修改、删除、插入、建表等)
    SQL高级使用(多表查询、修改、删除等)
    SQL存储过程 8 SQL存储过程
    SQL触发器、视图 8 SQL触发器、视图

        一比较才发现自己学的东西好少。刚学了功能测试前两个阶段---软件测试基础概念、软件流程基础概念、还有就是在51论坛,博客里看的一些比较零散的知识。哎很难整合到一块,更别说成体系了。按照上面的这个课程设置,下一步我应该学TD、自动化测试。可不管自己怎么学,终究是一些书面的知识,没有实际的环境。即使装个真实的环境,也没有实际的项目练习。还是不想这些了,掌握基础再说。最近超喜欢一句广告语“只要你想到了,全世界都会为你让路”,只要能想到,就有实现的机会!

         现实生活的压力,我不可能全心全意地停下来学习软件测试还得继续工作。生活有保障了,我才能谈测试,谈其它。明年吧,明年的目标是真正能进入测试行业!

         忘说了,软件测试基础阶段我看的是ROTTON的《软件测试》;蔡为东的《测试实战--WEB MSN》;蔡为东的《软件测试工程师面试指导》,最近刚出一本《软件测试工程师培训教程》我大概看了几眼,这本书可以给大家提供一个学习的体系和思路,虽然介绍的东西挺全,但都不是很详细,不如看网上下的电子资料……其它 各个阶段的经典书目,电子资料,希望大家能提供点……

  • 坏上司是一所好学校:可以学到三门重要“功课”[转]

    crystallhy 发布于 2008-08-07 16:10:51

    坏上司是一所好学校,在这所学校里有许多功课可以学,并且是非常重要的功课。

      想到这个题目,是因为收到一位朋友的来信。这位朋友刚刚留学回国,在一所大学供职。前几天来信向我诉苦,说他的那位“混蛋”系主任千方百计地挤兑他。这本是我意料之中的事情,因为我这位朋友机敏多才,初来乍到即崭露头角,而且性情刚烈,生就一把刀子嘴,上司既然少才缺德,不怕他、恨他才怪。

      为他颇感不平之后,却突然想到,照他的个性,发展下去于组织、于他人、于自己、于事业都没啥好处,遇上个跟他过不去的上司未尝不是一件好事。于是写信给他说:坏上司是一所学校,在这所学校里有许多功课可以学,并且是非常重要的功课。

      我想,如果你有一个坏上司,至少有三门功课好学:

       第一课:坏上司能教会你一种面对逆境的平常心

      这应该是人生最宝贵的一课。在面对一个不能由我们自己决定的客观环境时,有两种态度可以选择:一是心平气和、平心静气地接受它,因为这是一个客观的环境;二是从心理上不接受这个不能改变的事实,为它而烦躁、叹息、愤慨。第一种态度至少能够保持自己的心理平衡,第二种态度则是拿别人的错误惩罚自己,在客观上受损失的同时,再加一层心理的伤害。

      一座山挡住你的去路,你不会对着山生气,只能想法攀越它,或者绕过它。一群狼围住你时,你也不会对着狼群生气,你会用最大的智慧和力量战胜它们、消灭它们或者逃避它们。一丛荆棘刺破你的手时,你也知道刺人不过是荆棘的本性而已。为什么这些元素代换成“人”的时候,就令你怒火中烧或者愤愤不平呢?古人说:君子不跟牛执气。跟牛执气,就是把自己降低到牛的层次,跟小人执气呢?

      有一位名字叫弗兰克的心理学家,他在希特勒的集中营里呆了十几年,在那里他的一个重要发现就是:如果一切都不能改变,至少还能改变自己的感受;如果一切都不能控制,至少还能控制自己的风度。还有谁面对的环境能比希特勒的集中营更糟糕呢?

      还有人说,婚姻的意义,就是让一对冤家相互磨砺,以培养出坚韧、自制、温和、稳重、耐心、责任感、善与人相处、容忍不同意见等种种单身所不需要的品质。用希腊哲人苏格拉底的话说,“娶一位好老婆的男人会变得快乐;娶一位坏老婆的男人会变成哲学家。”既然婚姻可以成为培养治国、平天下的能力和美德的学校,坏上司为何不能呢?

      要成为一个领域的领袖人物,首先需要培养节制、坚韧等诸多品质。现在你遇上了一个坏上司,不应该感谢上苍的厚爱吗?你应该以“我不入地狱,谁入地狱”的决心,勇敢地面对你的坏上司。然后,在与坏上司的相处中努力培养你的各项美德。


     第二课:坏上司能激发你的潜能

     台湾的刘墉写过这样一个故事,说他在美国留学的时候,有一天,一位已经就业的同学对他抱怨他的美国老板“吃”他,不但给他很少的薪水,而且故意拖延他的绿卡申请。刘墉当时对他说:“这么坏的老板,不做也罢。

      但你岂能白干这么久,总要多学一点再跳槽,所以你要偷偷地学。”他听了刘墉的话,不但每天加班,留下来背那些商业文书写法,甚至连怎样修理影印机,都跟在工人旁边记笔记,以便有一天自己出去创业,能够省点修理费。隔了半年,刘墉问他,是不是打算跳槽了?他居然一笑:“不用!现在我的老板对我刮目相看,又升官,又加薪,而且绿卡也马上下来了,老板还问我为什么做事态度一百八十度转变,变得那么积极呢?”他心里的不平不见了,他做了“报复”,只是换了一种方法,而且他自我检讨,当时其实是他自己不努力。刘墉接着说:你喜欢斗狠吗?你总是心里愤愤不平吗?你要知道,敌人、仇人都可以激发你的潜能,成为你的贵人。你也要知道,许多仇、怨、不平,其实问题都出在你自己。你更要知道,这世间最好的“报复”,就是运用那股不平之气,使自己迈向成功,以那成功和“成功之后的胸怀”,对待你当年的敌人,且把敌人变成朋友。

      人没有敌手是很难发挥自己的全部潜能的,因为最难的是“战胜自我”。没有敌手的激励,难免怠惰、难免放纵、难免降低追求的目标。

      精神病学家J·A·哈德菲尔德深入研究过危机环境在人的身体、心理、感情和精神上激发的非凡力量。他说:“我们过着拘谨的生活,避开困难的任务,除非我们被迫去做或者下决心去做时,才会产生无形的力量。我们面临危机时,勇气就产生了;被迫接受长期的考验时,就发现自己拥有持久的耐力;灾难降临时,我们会发现内在的潜力,仿佛是出自一个永恒手臂的力量。一般的经验告诉我们,只要我们无所畏惧地接受挑战,自信地发挥我们的力量,任何危险和困难都会激发能量。”

      当“怨怨相报何时了”的两败俱伤,变成“相逢一笑泯恩仇”的双赢时,不是人生的最大成功吗?

      第三课:坏上司能增加你处理组织内部事务的政治智慧

      任何一个组织都需要政治。有人说,一个好的企业家,必须是好的政治家。组织中的政治斗争,从来就不会停止,只不过好企业与坏企业的分别是,好组织有明确的政治斗争规则,而坏的组织则没有。或者说好的组织的游戏规则鼓励积极的斗争,而坏的组织则放任大家内耗,从而导致组织在与别的组织的竞争中落败。

      专家出身的人往往缺乏这一课。著名的“陈天生怪圈”就是例证。

      1986年,陈天生到广州,用1500元自有资金,加上800元稿费,另加一位朋友的5000元,办起了一家技术经济发展公司。公司迅速获得了发展。为了图谋进一步发展,他去海南考察。这时,公司内部有人冒充他的签名私收货款。司法机关找上门,内部马上有人栽赃陈天生,甚至合伙“要在思想上、组织上彻底肃清陈天生的流毒”。于是,法人代表的工资被停发,办公桌被搬出门外,连铺盖卷也被扔了出来。一时间,各分公司纷纷倒戈,百万资产瞬间付之东流。

      1989年,陈天生在广州鼎湖区再度白手起家,创办了鼎湖科技实业城。自筹资金,自生自灭。经过三年的苦干,鼎湖开发区终于兴旺起来了。然而,历史悲剧再次重演。就在陈天生雄心勃勃,准备扩大开发区规模时,突然被这个由自己亲手创办的经济组织抛了出来。他抗争无效,静悄悄地走了。

      1992年陈天生与蒲圻市签订合同,以民间方式筹资在蒲圻建赤壁长江大桥、创办开发区。

      很快,陈天生在家乡这块熟悉的土地上再次显示出杰出的组织协调、招商引资、宣传鼓动等各方面的才能。企业又兴旺起来了。不曾料想,脚下的跳板被人抽走了!陈天生跌了有生以来最大的一跤。乡亲亦无情,他再一次饮恨离开。

      广州怪圈、鼎湖怪圈、蒲圻怪圈这三个怪圈,环环相扣,一圈比一圈大。陈天生创业,红火,转眼间烟消云散,孤身一人,又回到原点。这种怪圈,在不同的企业家身上反复不同程度地发生。

      一个人在自己创业之前遇上一个坏上司,逼迫你学习组织政治学,那就太幸运了。就算你永远不打算自己创业,学好这门功课对你的职业生涯也大有助益。

    有一位在美国三大汽车公司之一高级管理人员遇到了一个难题:一方面他喜欢自己的工作,对薪水也很满意;另一方面,他痛恨自己的上司。他已经忍气吞声好多年了,现在到了忍无可忍的地步。于是,他决定通过一个猎头公司找个新工作。在与猎头公司的交流中他获得了灵感,他把上司的情况告诉猎头公司,委托了猎头公司为上司找一份工作。当这位上司接到电话被告知有一份新的工作在等他时,正好也厌倦了当前的工作,爽快地接受了新的职位。妙就妙在当上司的职位空缺时,这位高级主管申请补缺并且成功了。他从这次调职中领悟了一种高超的政治智慧,让他在这个组织中一帆风顺。

      在与坏上司的过招中,你还会悟到许许多多的“招数”。譬如,宁肯得罪君子,不可得罪小人的原则。你现在就得罪小人了——因为一句话,他就要运用他的职权,找茬扣工资奖金。这已经表明是典型的小人了。但是,你能做到不得罪小人,反而利用小人为你服务吗?再譬如,统一战线原则,不要四面出击,一次只能打击一个对手,同时与其他人联合。这点你做的怎样?同上一级领导的关系、与上一级各职能部门的关系,与外界的关系,与一般同事的关系,都是你的环境的一部分。在与上司的斗争中,你做到了“有理、有利、有节”了,还是负气而为?

      这三门功课学完,你的功力必会大长,今后的事业一定会因此而顺利。天将降大任于斯人也,必先让他遇到坏上司

  • 修炼成QTP高手的十个步骤【转载】

    丫头骗子 发布于 2008-08-01 14:18:30

    http://motevich.blogspot.com/上看到一篇文章,讲述成为QTP高手需要学习的几个方面的知识,以及一些有用的链接:
     
    让我们来一起共同学习吧!
    1. VBscrīpt QTP实用VBscrīpt作为测试脚本语言,因此需要掌握很多VBscrīpt的知识:
    2. 软件测试自动化框架
    3. QTPTutorial帮助文档 Sources: '\help\QTTutorial.pdf' or '\help\Tutorial.chm' in QTP Install folder.
    4. QTP的用户指南 Sources: '\help\QTUsersGuide.pdf' or '\help\MainUsersGuide.chm' in QTP Install folder.
    5. COM/DCOM 技术 主要是Excel, Word, Outlook等相关的COM技术:
    6. SQL
    7. XML
    8. HTML, DOM 测试WEB应用程序时必须了解:
    9. HPQTP Knowledge Base 包含很多实用的QTP技术文章:
    10. 一些有用的网站
  • 做好测试计划和测试用例的工作的关键

    godn_1981 发布于 2008-06-06 00:08:05

    51testing每周一问的这个问题很精彩,于是我做了如下回答。

    问题如下:

    测试的流程中,测试计划是对整个测试活动的安排,而测试用例则是测试执行的指导,但是,现在仍然有很多的测试人员没有认识到测试计划和测试用例的重要性,在项目时间比较紧张的情况下,计划和用例往往成了形式上的东西,甚至有些测试人员脱离用例,完全凭借自己的经验在执行测试活动,对此,你有什么样的看法?

       这个问题问的非常好,也确实是很多人有过切肤之痛的问题,对我来说,我也一直在苦苦追寻这个问题的答案,现在我不能说完全找到了,只能说把自己的心得分享一下,希望大家的测试计划和测试用例不再是一个摆设。

    (一)   先说测试计划吧

    诚如magic_zhu所言,现在很多测试人员没意识到测试计划的重要性,很多时候测试计划成为一纸空文,其根本原因在于测试计划缺乏可执行性,也正是因为测试计划缺乏可执行性,导致下一次写计划的时候非常草率,甚至不写,就算写了也是一个花架子应付领导,这样形成了一个恶性循环,久而久之,测试计划纯属一个摆设,我们很多从业者不写测试计划,其理由是反正写了也不能按照计划执行,这种理由真的很荒唐可笑,这是典型的因噎废食,因为你的计划执行性差就不写?这样只能使测试更加失去控制,使你的测试过程彻底无计划,无目标,变成一个放任主流的状态,完全没有受控性。这样的产品质量保证显然是空谈。

    我觉得这个问题的解决方案不是不写,而是想办法写得更好,更有实效性,执行性。这个是问题的关键。

    一个好的测试计划是用来计划测试的,指导整个测试过程。所以一个好的测试计划一定是可以指导测试的,就是对整个测试过程中的人力,时间,资源,策略,范围的一个说明。

    作为一个测试计划来讲,核心的三个要素是时间,资源,范围。(这句话摘自微软的软件测试培训材料),时间就是什么时候做以及要花多久做,资源就是你要调用的人力、机器等资源,范围是你要测试的东西以及测试重点。

    除以上提到的3项之外,还有比较重要的项目有策略(具体就是怎么测)、风险控制(一旦有问题采取什么应急措施)等项目。

    要把一个计划做得很有实用性,按照笔者的经验,要注意以下几个方面:

    a.   上面提到的三要素不能少

    b.   测试策略一定要交待清楚,就是大概怎么测试

    c.   需要其他人员(部门)协调的,要交待清楚

    d.   在估计测试所需的时间、人力及其它资源时,尽量做到客观、准确、留有余地,特别是估计开发时间和debug时间,以及要对自己的执行用例速度,回归速度心里有数

    e.   测试计划中每个阶段要明确表明,并且测试阶段的输入、输出文档要清楚

    f.   测试计划中的时间段不宜太长(最好以day为单位),太长就比较模糊,不好度量,不好check

    g.   一定要有风险控制,要不然计划缺乏可执行性

    h.   计划写完之后不是装在兜里,要组织PMDev进行评审

    i.   要不断更新计划,记住:每个计划都是动态的,不是一成不变的

    (二)   再说测试用例

    和测试计划一样,测试用例很多时候也沦为形式,这是软件测试的可悲之处,软件测试的依据就是测试用例,如果用例弃之不用,你凭什么做好测试?这个很可笑。但是实际测试过程中很多时候测试用例并没用到实处,笔者认为还是用例实用性问题,有的时候用例洋洋洒洒数万字,到回归测试的时候根本用不上,至于如何选择回归测试用例,我曾经写过另一篇文章,欢迎查阅。

    下面我就个人体会谈谈做好测试用例的关键。

    首先,在做用例之前,要做两件事情。

    第一,   透彻了解程序(需求和架构)。

    第二,   做一个正式的测试设计(最好文档化)。然后再开始写用例。一般写用例的步骤和建房子一样,先搭框架,然后填材料,填材料的时候,主要根据需求做相关的设计,具体的设计方法就是那几种(郑老的书上写的很清楚)

    一般来说,设计一个比较实用的测试用例,注意如下几个方面:

    a.   选用好的用例管理工具(这个很重要,千万不要用wordexcel

    b.   用例一定要及时更新(补充新的想法,删除过时的需求)

    c.   做好用例分级

    d.   做好用例评审,写用例之前可以征询相关人员的意见

    e.   可以考虑结对编写,这个是不错的主意

    f.   要全面,包括功能、性能、兼容性、安全性、易用性、容错性等等

    g.   注意把握适当的颗粒度

    OK,以上是我个人总结的一些心得,希望对您有些帮助,谢谢magic_zhu提这个问题,如果对读者您有些帮助,也不浪费我写到凌晨0点的心血,呵呵~~~~~~~~关于这两个话题太大了,欢迎大家展开讨论!!

    本文是godn_1981原创,如需转载,请注明出处。

  • 史上最全的测试用例设计方法总结(边界值分析)

    千里 发布于 2008-05-08 15:27:44

    边界值分析方法:

    .方法简介
    1.定义:边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 

    2.与等价划分的区别
      1)
    边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。
      2)
    边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。

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

    4.常见的边界值
      1)
    16-bit 的整数而言 32767 -32768 是边界
      2)
    屏幕上光标在最左上、最右下位置
      3)
    报表的第一行和最后一行
      4)
    数组元素的第一个和最后一个
      5)
    循环的第 0 次、第 1 次和倒数第 2 次、最后一次

    5.边界值分析
      1)
    边界值分析使用与等价类划分法相同的划分,只是边界值分析假定错误更多地存在于划分的边界上,因此在等价类的边界上以及两侧的情况设计测试用例。
       
    例:测试计算平方根的函数
            --
    输入:实数
            --
    输出:实数
            --
    规格说明:当输入一个0或比0大的数的时候,返回其正平方根;当输入一个小于0的数时,显示错误信息"平方根非法-输入值小于0"并返回0;库函数Print-Line可以用来输出错误信息。
           
      2)
    等价类划分:
        I.
    可以考虑作出如下划分:
          a
    、输入 (i)<0 (ii)>=0
          b
    、输出 (a)>=0 (b) Error
        II.
    测试用例有两个:
          a
    、输入4,输出2。对应于 (ii) (a)
          b
    、输入-10,输出0和错误提示。对应于 (i) (b)

      3)边界值分析:
       
    划分(ii)的边界为0和最大正实数;划分(i)的边界为最小负实数和0。由此得到以下测试用例:
        a
    、输入 {最小负实数}
        b
    、输入 {绝对值很小的负数}
        c
    、输入 0
        d
    、输入 {绝对值很小的正数}
        e
    、输入 {最大正实数}
       
      4)
    通常情况下,软件测试所包含的边界检验有几种类型:数字、字符、位置、重量、大小、速度、方位、尺寸、空间等。
      5)
    相应地,以上类型的边界值应该在:最大/最小、首位/末位、上/下、最快/最慢、最高/最低、  最短/最长、 /满等情况下。
      6)
    利用边界值作为测试数据

    边界值

    测试用例的设计思路

    字符

    起始-1个字符/结束+1个字符

    假设一个文本输入区域允许输入1个到255 字符,输入1个和255个字符作为有效等价类;输入0个和256个字符作为无效等价类,这几个数值都属于边界条件值。

    数值

    最小值-1/最大值+1

    假设某软件的数据输入域要求输入5位的数据值,可以使用10000作为最小值、99999作为最大值;然后使用刚好小于5位和大于5位的 数值来作为边界条件。

    空间

    小于空余空间一点/大于满空间一点

    例如在用U盘存储数据时,使用比剩余磁盘空间大一点(几KB)的文件作为边界条件。

    7)内部边界值分析:
       
    在多数情况下,边界值条件是基于应用程序的功能设计而需要考虑的因素,可以从软件的规格说明或常识中得到,也是最终用户可以很容易发现问题的。然而,在测试用例设计过程中,某些边界值条件是不需要呈现给用户的,或者说用户是很难注意到的,但同时确实属于检验范畴内的边界条件,称为内部边界值条件或子边界值条件。
       
    内部边界值条件主要有下面几种:
        a)
    数值的边界值检验:计算机是基于二进制进行工作的,因此,软件的任何数值运算都有一定的范围限制。

    范围或值

    位(bit

    0或者1

    字节(byte

    0——225

    字(word

    0~65535(单字)或 0~4294967295(双字)

    千(K

    1024

    兆(M

    1048576

    吉(G

    1073741824

    b)字符的边界值检验:在计算机软件中,字符也是很重要的表示元素,其中ASCIIUnicode是常见的编码方式。下表中列出了一些常用字符对应的ASCII码值。

    字符

    ASCII码值

    字符

    ASCII码值

    (null)

    0

    A

    65

    空格 (space)

    32

    a

    97

    斜杠 ( / )

    47

    Z

    90

    0

    48

    z

    122

    冒号 ( : )

    58

    单引号 ( ‘ )

    96

    @

    64

     

     

    c)其它边界值检验
       
    6.
    基于边界值分析方法选择测试用例的原则
      1)
    如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
       
    例如,如果程序的规格说明中规定:"重量在10公斤至50公斤范围内的邮件,其邮费计算公式为……"。作为测试用例,我们应取1050,还应取10.01,49.99,9.9950.01等。
      2)
    如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
       
    比如,一个输入文件应包括1~255个记录,则测试用例可取1255,还应取0256等。
      3)
    将规则1)和2)应用于输出条件,即设计测试用例使输出值达到边界值及其左右的值。
       
    例如,某程序的规格说明要求计算出"每月保险金扣除额为01165.25",其测试用例可取0.001165.24、还可取一0.01116526等。
       
    再如一程序属于情报检索系统,要求每次"最少显示1条、最多显示4条情报摘要",这时我们应考虑的测试用例包括14,还应包括05等。
      4)
    如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
      5)
    如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
      6)
    分析规格说明,找出其它可能的边界条件。

    .实战演习
    1.现有一个学生标准化考试批阅试卷,产生成绩报告的程序。其规格说明如下:程序的输入文件由一些有80个字符的记录组成,如右图所示,所有记录分为3组:

    标题:这一组只有一个记录,其内容为输出成绩报告的名字。
     
    试卷各题标准答案记录:每个记录均在第80个字符处标以数字"2"。该组的第一个记录的第1至第3个字符为题目编号(取值为1999)。第10至第59个字符给出第1至第50题的答案(每个合法字符表示一个答案)。该组的第2,第3……个记录相应为第51至第100,第101至第150题的答案。
     
    每个学生的答卷描述:该组中每个记录的第80个字符均为数字"3"。每个学生的答卷在若干个记录中给出。如甲的首记录第1至第9字符给出学生姓名及学号,第10至第59字符列出的是甲所做的第1至第50题的答案。若试题数超过50,则第2,第3……纪录分别给出他的第51至第100,第101至第150……题的解答。然后是学生乙的答卷记录。
     
    学生人数不超过200,试题数不超过999
     
    程序的输出有4个报告:
        a)
    按学号排列的成绩单,列出每个学生的成绩、名次。
        b)
    按学生成绩排序的成绩单。
        c)
    平均分数及标准偏差的报告。
        d)
    试题分析报告。按试题号排序,列出各题学生答对的百分比。
     
    解答:分别考虑输入条件和输出条件,以及边界条件。给出下表所示的输入条件及相应的测试用例。

     
     
    输出条件及相应的测试用例表。

     
     
    2.
    三角形问题的边界值分析测试用例
    在三角形问题描述中,除了要求边长是整数外,没有给出其它的限制条件。在此,我们将三角形每边边长的取范围值设值为[1, 100]

    3.NextDate函数的边界值分析测试用例
    NextDate函数中,隐含规定了变量mouth和变量day的取值范围为1≤mouth≤121≤day≤31,并设定变量year的取值范围为1912≤year≤2050

    (本文节选自开拖拉机上班《史上最全的测试用例设计方法总结》)

  • 转:英文简历常用词汇

    wyy83 发布于 2006-12-06 16:46:59

    个人品质常用词汇

    able 有才干的,能干的        adaptable 适应性强的
    active 主动的,活跃的      aggressive 有进取心的
    ambitious 有雄心壮志的      amiable 和蔼可亲的
    amicable 友好的          analytical 善于分析的
    apprehensive 有理解力的 aspiring 有志气的,有抱负的
    audacious 大胆的,有冒险精神的 capable 有能力的,有才能的

    careful 办理仔细的      candid 正直的
    competent 能胜任的          constructive 建设性的
    cooperative 有合作精神的 creative 富创造力的
    dedicated 有奉献精神的      dependable 可靠的
    diplomatic 老练的,有策略的 disciplined 守纪律的
    dutiful 尽职的 w       ell--educated 受过良好教育的
    efficient 有效率的           energetic 精力充沛的
    expressivity 善于表达       faithful 守信的,忠诚的
    frank 直率的,真诚的       generous 宽宏大量的
    genteel 有教养的            gentle 有礼貌的
    humorous 有幽默           impartial 公正的
    independent 有主见的      industrious 勤奋的
    ingenious 有独创性的      motivated 目的明确的
    intelligent 理解力强的 learned 精通某门学问的
    logical 条理分明的      methodical 有方法的
    modest 谦虚的           objective 客观的
    precise 一丝不苟的       punctual 严守时刻的
    realistic 实事求是的       responsible 负责的
    sensible 明白事理的       sporting 光明正大的
    steady 踏实的           systematic 有系统的
    purposeful 意志坚强的 sweet-tempered 性情温和的
    temperate 稳健的           tireless 孜孜不倦的
    教育程度常用词汇
    education 学历          educational history 学历
    educational background 教育程度 curriculum 课程
    major 主修 minor 副修
    educational highlights 课程重点部分         curriculum included 课程包括
    specialized courses 专门课程 courses taken 所学课程
    special training 特别训练    social practice 社会实践
    part-time jobs 业余工作     summer jobs 暑期工作
    vacation jobs 假期工作     refresher course  进修课程
    extracurricular activities 课外活动               physical activities 体育活动
    recreational activities  娱乐活动              academic activities 学术活动
    social activities 社会活动 rewards 奖励
    scholarship 奖学金 excellent League member 优秀团员
    excellent leader 优秀干部 student council 学生会
    off-job training 脱产培训 in-job training 在职培训
    educational system 学制 academic year 学年
    semester 学期(美) term 学期(英)
    supervisor 论文导师 pass 及格
    fail 不及格 marks 分数
    examination 考试 degree 学位
    post doctorate 博士后 doctor(Ph.D) 博士
    master 硕士       bachelor 学士
    graduate student 研究生 abroad student 留学生
    abroad student 留学生 undergraduate 大学肆业生
    government-supported student  公费生 commoner 自费生
    extern 走读生        intern 实习生
    prize fellow 奖学金生   boarder 寄宿生
    graduate 毕业生     guest student 旁听生(英)
    auditor 旁听生(美) day-student 走读生

    工作经历常用词汇

    work experience 工作经历 occupational history 工作经历
    professional history 职业经历 specific experience 具体经历
    responsibilities 职责      second job 第二职业
    achievements 工作成就,业绩 administer 管理
    assist 辅助          adapted to 适应于
    accomplish 完成(任务等) appointed 被认命的
    adept in 善于 analyze 分析
    authorized 委任的;核准的 behave 表现
    break the record 打破纪录     breakthrough 关键问题的解决
    control 控制            conduct 经营,处理
    cost 成本;费用        create 创造
    demonstrate 证明,示范 decrease 减少
    design 设计            develop 开发,发挥
    devise 设计,发明        direct 指导
    double 加倍,翻一番       earn 获得,赚取
    effect 效果,作用      eliminate 消除
    enlarge 扩大            enrich 使丰富
    exploit 开发(资源,产品)        enliven 搞活
    establish 设立(公司等);使开业 evaluation 估价,评价
    execute 实行,实施       expedite 加快;促进
    generate 产生 good at  擅长于
    guide 指导;操纵       improve 改进,提高
    initiate 创始,开创       innovate 改革,革新
    invest 投资          integrate    使结合;使一体化
    justified 经证明的;合法化的     launch 开办(新企业)
    maintain 保持;维修      modernize 使现代化
    negotiate 谈判      nominated 被提名;被认命的
    overcome 克服        perfect 使完善;改善
    perform 执行,履行     profit 利润
    be promoted to 被提升为    be proposed as   被提名(推荐)为
    realize 实现(目标)获得(利润) reconstruct 重建
    recorded 记载的            refine 精练,精制
    registered 已注册的 regenerate 更新,使再生
    replace 接替,替换 retrieve 挽回
    revenue 收益,收入 scientific 科学的,系统的
    self-dependence 自力更生 serve 服务,供职
    settle 解决(问题等) shorten 减低……效能
    simplify 简化,精简 spread 传播,扩大
    standard 标准,规格 supervises 监督,管理
    supply 供给,满足 systematize 使系统化
    test 试验,检验 well-trained 训练有素的
    valuable 有价值的        target 目标,指标
    working model 劳动模范 advanced worker 先进工作者


    个人资料常用词汇
    name 姓名 in. 英寸
    pen name 笔名 ft. 英尺
    alias 别名 street 街
    Mr. 先生 road 路
    Miss 小姐 district 区
    Ms (小姐或太太) house number 门牌
    Mrs. 太太 lane 胡同,巷
    age 年龄 height 身高
    bloodtype 血型 weight 体重
    address 地址 born 生于
    permanent address 永久住址       birthday 生日
    province 省 birthdate 出生日期
    city 市 birthplace 出生地点
    county 县 home phone 住宅电话
    prefecture 专区     office phone 办公电话
    autonomous region 自治区     business phone 办公电话
    nationality 民族;国籍 current address 目前住址
    citizenship 国籍    date of birth 出生日期
    native place 籍贯     postal code 邮政编码
    duel citizenship 双重国籍    marital status 婚姻状况
    family status 家庭状况       married 已婚
    single 未婚           divorced 离异
    separated 分居       number of children 子女人数
    health condition 健康状况        health 健康状况
    excellent (身体)极佳     short-sighted 近视
    far-sighted 远视       ID card 身份证
    date of availability  可到职时间 membership 会员、资格
    president 会长 vice-president 副会长
    director 理事 standing director 常务理事
    society 学会 association 协会
    secretary-general 秘书长 research society 研究会

    应聘职位

    objective 目标       position desired 希望职位
    job objective 工作目标 employment objective 工作目标
    career objective 职业目标   position sought 谋求职位
    position wanted 希望职位 position applied for  申请职位

    离职原因

    for more specialized work 为更专门的工作             for prospects of promotion 为晋升的前途
    for higher responsibility 为更高层次的工作责任        for wider experience 为扩大工作经验
    due to close-down of company 由于公司倒闭        due to expiry of employment 由于雇用期满
    sought a better job 找到了更好的工作             to seek a better job 找一份更好的工作

    业余爱好

    hobbies 业余爱好         play the guitar 弹吉他
    reading 阅读           play chess 下棋
    play 话剧     long distance running 长跑
    play bridge 打桥牌   collecting stamps 集邮
    play tennis 打网球       jogging 慢跑
    sewing 缝纫          travelling 旅游
    listening to symphony 听交响乐 do some clay scultures 搞泥塑
  • 跟小师父学习QTP后的总结

    kxllr 发布于 2008-04-25 11:21:46

    做测试工作马上就一年了,用QTP也有几个月了,在这里感谢一下小师父教了我这么多的知识,也把我的总结跟大家分享一下,有不对的地方希望大家指出我好修改,谢谢了!!

    1、拆分语句split
    例:取得当前日期后拆分
    riqi=date()
        my=split(riqi,"-")
        riqi=my(1)&"月"&my(2)&"日"
        datatable("riqi",DtGlobalSheet)=riqi
        本地表:DataTable("a", dtLocalSheet)
    riqi= year(date)& "-" & Right("0"& month(date),2) & "-"&Right("0"&   Day(Date),2)

    2、取得表格中某行某列的值GetCellData
    例:飞机票取票价
    shuA=Browser("Welcome: Mercury Tours").Page("Book a Flight: Mercury").WebTable("New York to Zurich").GetCellData(3,3)


    3、取距某年某月某日的天数datediff
    例:计算距2008-08-08奥运天数
    datediff("d",now,"2008-8-8")


    4、描述性编程text:=
    例:取得某页面上某文字的链接
    Browser("").Page("").Link("text:=娱乐").Click
         或
         neirong="娱乐"
         Browser("").Page("").Link("text:="&neirong).Click


    5、网页中HTML编辑器的录制
    功能:验证126邮箱的发信功能正确
    操作步骤:
          a.录制脚本,动作包括整个发信的过程。
          b.修改脚本,在输入信件主题代码后加wait 10语句
           c.回放脚本,观察在邮件正文中输入的内容,回放时QTP是否写入
          d.重新修改脚本,保证回放时QTP在邮件正文中写入内容

    英文解决方案:
        Browser("网易126免费邮--你的专业电子邮局").Page("网易电子邮箱 - xueqinzhaoqing@126.co").Frame("indexFrame").WebEdit("subject").Click
        wait 1
         Setting.WebPackage( "ReplayType")=2      '配置使用浏览器事件或鼠标运行鼠标操作的'方式.1 - 使用浏览器事件运行鼠标操作,2 - 使用鼠标运行鼠标操作。
         Set ōbj=createobject("wscrīpt.shell")
         obj.sendkeys "{TAB}"
         wait 2
         obj.sendkeys "abc1111"
         wait 1
         Setting.WebPackage( "ReplayType")=1
    中文解决方案

    strCopy = "软件测试." 
    Set ōbjIE = CreateObject("InternetExplorer.Application") 
    objIE.Navigate("about:blank") 
    objIE.document.parentwindow.clipboardData.SetData "text", strCopy 
    objIE.Quit

    wait 1
    Setting.WebPackage( "ReplayType")=2
    Set ōbj=createobject("wscrīpt.shell")
    obj.sendkeys "{TAB}"
    wait 2
    obj.sendkeys "^v"
    wait 1
    Setting.WebPackage( "ReplayType")=1

    6.使用Multi Test Manager添加文件时可以直接往里拖的哦。

    7.函数:新建记事本,改名为public.vbs例:
       function ZHIRSS
    ZHIRSS="RSS行业资讯分类维护"
    end function
      使用语句executefile "d:\zhaopin\case\denglu.vbs"或设置QTP test/settings/resources/+函数目录

    8.设置动作循环:右击/actiong call properties/run on all rows

    9.设置动作允许被调用:右击/action properties/general/reusable action打勾

    10.QTP与MTM连接:Tools/option/run/allow other mercury products to run...

    11.插入已存在的动作1)insert/call to copy of action...复制可修改
                       2)insert/call to existing of action...复制不可修改

    12.QTP报告自动跳出设置:Options>Run>View results when run session ends

    13.判断表格是否存在:
    If Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").Exist then
    reporter.ReportEvent 0,"pass","系统显示了所有的资讯列表!"
    else
      reporter.ReportEvent 1,"fail","系统没有显示资讯列表!"
    end if

    14.获取表格行数:Browser("数商3.0后台管理系统").Page("Page").Frame("main_5").WebTable("标题").RowCount

    15.注释脚本存在位置:qtp/dat/ActionTemplate.mst

    16取本地文件名称Function ShowFileList(folderspec)
       Dim fso, f, f1, fc, s
       Set fso = CreateObject("scrīpting.FileSystemObject")
       Set f = fso.GetFolder(folderspec)
       Set fc = f.Files
       For Each f1 in fc
          s = s & f1.name
          s = s &   "  "
       Next
       ShowFileList = s
    End Function
    wenjian=ShowFileList("D:\下载\本地下载1\")

    17.取本地文件删除:del= DeleFile("D:\下载\本地下载1\")
    Function DeleFile(folderspec)
       Dim fso, f, f1, fc, s
       Set fso = CreateObject("scrīpting.FileSystemObject")
       Set f = fso.GetFolder(folderspec)
       Set fc = f.Files
       For Each f1 in fc
             f1.delete
       Next
    End Function

    18.sousuo2=Browser("Browser").Page("Page_4").Check (CheckPoint("2007-11-08 14:21"))
    If (sousuo2)eqv(true) Then
        reporter.ReportEvent 0,"",""
    else
       reporter.ReportEvent 1,"",""
    End If

    19.取参数化数据的行数,只在某几行进执行某些语句
    row=datatable.GetSheet(3).getcurrentrow
    If row = 3 Or row = 4 Then

    20.单选框置灰zhihui=Browser("下载中心--新增下载文件").Page("下载中心--新增下载文件_4").WebRadioGroup("downloadType").GetROProperty("disabled")
    If  zhihui=1 Then
    End If

    29.取树结构
    Set Desc=descrīption.create
    Desc("micclass").value="WebTable"
    Set List=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)
    yuqi=List(0).GetROProperty("innertext")
    msgbox yuqi
    yuqi=split(yuqi," ")
    msgbox yuqi(1)

    30.关闭所有IE
    SystemUtil.CloseProcessByName("iexplore.exe")

    31.创建action template.
        当希望在每一个新建action时都增加一些头部说明,比如作者、创建日期、说明等,用action template
        来实现最简单快捷。
        方法:用记事本等文本编辑器,输入如下类似的内容:
              'Company: xxxx
              'Author: xxx
              'Product: xxx
              'Date: xx
             然后将文件保存为ActionTemplate.mst,并存放到QTP安装目录下的dat目录。

    32.启动IE的语句:SystemUtil.Run "iexplore.exe", "http://www.***.com"
       关闭IE或其他程序的语句:SystemUtil.CloseProcessByName "app.exe"
         or  SystemUtil.CloseProcessByWndTitle "Some Title"

    33.获取图片的名称
    ObjectName = Browser(…).Page(…).Image("Find").GetProperty("Name")

    34.检查某个对象是否存在,如果存在弹出对话框说明对象存在。
    If Browser("Browser").Page("Page").Applet("login.html").JavaEdit("username").Exist Then
    MsgBox("The object exists.")
    End if

    35.同步点
    Browser("数商3.0制作平台").Dialog("Microsoft Internet Explorer").WaitProperty "visible", True, 120000
    设置test/test settings/object synchronizationg timeout 一致

    36.视图框显示为乱码时:调整原页面编码,在QTP/tools/change active screen

    37.添加附件:
       Browser("**").Page("**").WebFile("filePath").Click
    Browser("**").Dialog("**").WinEdit("文件名(N):").Set "D:\**.jpg"
    Browser("下载中心--新增下载文件").Dialog("选择文件").WinButton("打开(O)").Click
    添加相应的对象


    38.在图片上右击添加:tools/web event recording configuration/custom settings
    webedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmit
    webdlement/event/add/onclick,onmousedown,onmouseup/listen always

    39.数据执行保护
      方法一、右击我的电脑/高级/性能/设置/数据执行保护/为除下列选定程序之外的所有程序和服务启用DEP/添加被保护的程序。
      方法二、C:/BOOT.INT修改noexecute=alwaysoff

    40.在图片上右击添加:tools/web event recording configuration/custom settings
    webedit/event/add/onblur,onchange,onfocus,onpropertychan,onsubmit
    webdlement/event/add/onclick,onmousedown,onmouseup/listen always

    41.去掉前后空格
    If trim(mingcheng)=trim(yuqi) Then

    42.分类树问题解决
    Set Desc=descrīption.create
    Desc("micclass").value="WebTable"
    Set List=Browser("Browser").Page("Page").Frame("main").ChildObjects(Desc)
    yuqi=List(0).GetROProperty("innertext")
    msgbox yuqi
    yuqi=split(yuqi," ")
    msgbox yuqi(1)


    43.引用自定义环境变量
    Environment.LoadFromFile "D:\询价\case\环境\huiyuan.xml"

    44.环境变量有2种,一种是QTP的内置变量,一种是用户自定义的变量。内置变量是可以直接就可以用,自定义环境变量需要在菜单中选择“文件”——>“设置”——>“环境”,在变量类型中选择“用户自定义”,然后进行添加,可以对添加的变量全部导出,导出的文件为.xml格式的文档。既然可以导出,那么必然可以导入.xml文件,你可以在该对话框中的选中“从外部文件导入”,然后添加其文件路径即可。(当然这些操作都可以直接使用脚本来实现,如:Environment.LoadFromFile(“FileName”))
    例如:在桌面建立一个Var.xml,如下
    -<Environment>    //以这个开始的内部都是定义环境变量,直到以</Environment>结束
    - <Variable>                           // 变量定义起始标识
                     <Name>aa</Name>               // 变量名称
                     <Value>11</Value>               // 变量值
            </Variable>                            // 变量定义结束标识
    - <Variable>
                     <Name>bb</Name>
                     <Value>22</Value>
            </Variable>
    - <Variable>
                     <Name>cc</Name>
                     <Value>33</Value>
                  </Variable>
      </Environment>
    然后导入本测试的环境变量文件中,在专家视图里编写下面的脚本代码:
    Dim aParam3
    aParam3=Environment.Value(“aa”)          // 调用环境变量
    msgbox aParam3
    运行测试,会输出”11”

    45.在HTML编辑器中写入数据
    用低水平录制写入编辑器过程,增加编辑部器前的对象,加入click事件,再用TAB
    例如:
    Browser("广告管理").Page("广告管理").WebEdit("descrīption").Click
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Type mictab
    Window("Microsoft Internet Explorer").WinObject("Internet Explorer_Server").Type "aaa"

    46.Browser("creationtime:=1").close
       两个页面title相同无法识别时使用描述必编辑
        Browser("creationtime:=1").page(title:=****).WebEdit("name:=***").Set "***"
        或Browser("creationtime:=1").page(index:=1).WebEdit("index:=0").Set "***"

    47.场景恢复:
       当某些提示框会在不定期时有提示时,如果自动点击确定或某些按钮
       1、tools/recovery scenaril manager,制作相应的提示框和要点击的按钮,并保存
       2、test/settings/recovery,添加刚保存的.qrs

    48.输入验证码,先提示一个输入框,在输入框内输入验证码,点击[确定],把输入的验证码框
       Dim a
      a = InputBox("输入名字")

    49.对象库中对象名称不分为_2,_3...设置:tool/options/web/page/fram options/
         crate a new page test object for为different test object descrīptons
         crest a new frame test object for为different test object descrīptions

    50.验证测试输入框输入的最大允许字数功能的正确

    QTP脚本代码中编写
    Set aa=Browser("Browser").Page("Page").Frame("main").WebEdit("PayTypeName")
    if konglen(aa,20) eqv true then
    reporter.ReportEvent 0,"添加支付方式,支付方式输入框允许输入的最大字符功能正确",""
    else
    reporter.ReportEvent 1,"添加支付方式,支付方式输入框允许输入的最大字符功能错误",""
    end if

    此函数的功能为:验证测试输入框输入的最大允许字数功能的正确,函数可写在public.vbs中
    Function konglen(duixiang,guifanshu)
    duixiang.Click
    wait 1
    Setting.WebPackage( "ReplayType")=2
    Set ōbj=createobject("wscrīpt.shell")
    i=0
    ōld="a"
    xin="b"
    while old<>xin
    ōld=duixiang.GetROProperty("value")
    i=i+1
    wait 0,20
    obj.sendkeys "1"
    wait 0,20
    xin=duixiang.GetROProperty("value")
    wend
    'msgbox i
    If i-1=guifanshu Then
    konglen=true
    else
    konglen=false
    End If
         Setting.WebPackage( "ReplayType")=1
    End Function

    51.超时设置:Setting("DefaultTimeout") =1000000

    52.共享对象库:Set App = CreateObject("QuickTest.Application")
    App.Test.Settings.Resources.ObjectRepositoryPath = "path"

    53.取颜色   browser("b").page("p").Object.currentStyle“:.color
    54.显示行号设置:Tools- --> Editor Options...-->General-->Show line number,


    55.不同数据库检查点手动SQL写法
    QTP插入数据库检查点,手动指定SQL语句的写法。
    一、SQL Server格式(本地无需安装SQL Server)
    connectionstring(连接字符串):
    1.本地没有创建数据源的方式
    DRIVER=SQL Server;SERVER=数据库IP地址;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=本地主机名;DATABASE=数据库名

    实例:
    DRIVER=SQL Server;SERVER=10.160.11.10;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJHLJUN;DATABASE=dcwork

    2.本地已创建数据源的方式
    DSN=数据源名称;UID=用户名;PWD=密码;APP=Microsoft Office 2003;WSID=数据库的主机名;DATABASE=数据库名

    实例:
    DSN=LocalServer;UID=sa;PWD=sa;APP=Microsoft Office 2003;WSID=RJDCWORKTEST;DATABASE=dcwork

    3.SQL语句实例(从数据库表HR_LANGUAGE_TYPE中,查询字段语言名称LANGUAGE_NAME,条件语言名称=中文,按语言名称升序排序结果)
    source(SQL语句):
    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM dcwork.dbo.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME


    二、DB2格式:(本地至少安装DB2 Run-Time Client Lite)
    connectionstring(连接字符串):
    1.本地没有创建数据源的方式
    DRIVER={IBM DB2 ODBC DRIVER};UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=数据库名;

    实例:
    DRIVER={IBM DB2 ODBC DRIVER};UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;

    2.本地已创建数据源的方式
    DSN=数据源名称;UID=用户名;PWD=密码;MODE=SHARE;DBALIAS=DCWORK;

    实例:
    DSN=DWCORKDB2;UID=db2admin;PWD=db2admin;MODE=SHARE;DBALIAS=DCWORK;

    3.SQL语句实例
    source:SQL语句
    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM DB2ADMIN.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME


    三、Oracle格式:(本地需要安装Oracle ODBC DRIVER)
    connectionstring(连接字符串):
    1.本地没有创建数据源的方式
    DRIVER={Oracle in OraHome92};SERVER=数据库服务名;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;

    实例:
    DRIVER={Oracle in OraHome92};SERVER=DCWORK;UID=DCWORK;PWD=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;XSM=Default;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=Lo;BAM=IfAllSuccessful;MTS=F;MDI=Me;CSR=F;FWC=F;PFC=10;TLO=O;



    2.本地已创建数据源的方式
    DSN=数据源名称;UID=用户名;PWD=密码;DBQ=数据库名;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

    实例:
    DSN=dcworkoracle;UID=DCWORK;DBQ=DCWORK;DBA=W;APA=T;EXC=F;FEN=T;QTO=T;FRC=10;FDL=10;LOB=T;RST=T;GDE=F;FRL=F;BAM=IfAllSuccessful;MTS=F;MDI=F;CSR=F;FWC=F;PFC=10;TLO=0;

    3.SQL语句实例
    source:SQL语句
    SELECT HR_LANGUAGE_TYPE.LANGUAGE_NAME  FROM DCWORK.HR_LANGUAGE_TYPE HR_LANGUAGE_TYPE  WHERE (HR_LANGUAGE_TYPE.LANGUAGE_NAME='中文')  ORDER BY HR_LANGUAGE_TYPE.LANGUAGE_NAME



    四, mysql
    Set Conn = CreateObject("ADODB.Connection" )
    str="DRIVER={MySQL ODBC 3.51 Driver};SERVER=192.168.1.100;DATABASE=wp_blog;user id=zzz ; password=123456"
    Conn.open str
    Set Rs = CreateObject ("ADODB.Recordset" )
    sql = "select * from `wp_blog`.`blg_webcategory` limit 0, 5000;"
    Rs.open sql,conn,1,3
    If (not Rs.eof) then
    Rs.MoveFirst
    MsgBox Rs(0)
    MsgBox Rs(1)
    MsgBox Rs(2)
    MsgBox Rs(3)
    end if

    Rs.close
    Set Rs = Nothing
    Conn.close
    Set Conn = Nothing
    (转载于 http://bbs.51testing.com/thread-42921-1-1.html )

    五. access

    Set Conn = CreateObject("ADODB.Connection" )
    str="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/db1.mdb"
    Conn.open str
    Set Rs = CreateObject ("ADODB.Recordset" )


    56.*.xml
    Environment.LoadFromFile "D:\新建文件夹\a.xml"
    Browser("百度一下,你就知道").Page("百度一下,你就知道").WebEdit("wd").Set Environment("HuiYuanB")

    57、类似时间控件,不能手到输入的文本档
       1)手工添加对象,
       2).object.value="2008-4-12"

  • SQL Server实用经验与技巧大汇集

    zxiangsen 发布于 2008-04-23 17:51:34

    包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等。

    1.挂起操作

    在安装Sql或sp补丁的时候系统提示之前有挂起的安装操作,要求重启,这里往往重启无用,解决办法:

    到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager

    删除PendingFileRenameOperations

    2.收缩数据库

    --重建索引

    DBCC REINDEX

    DBCC INDEXDEFRAG

    --收缩数据和日志

    DBCC SHRINKDB

    DBCC SHRINKFILE

    3.压缩数据库

    dbcc shrinkdatabase(dbname)

    4.转移数据库给新用户以已存在用户权限

    exec sp_change_users_login 'update_one','newname','oldname'

    go

    5.检查备份集

    RESTORE VERIFYONLY from disk='E:\dVBbs.bak'

    6.修复数据库

    ALTER DATABASE [dvbbs] SET SINGLE_USER

    GO

    DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK

    GO

    ALTER DATABASE [dvbbs] SET MULTI_USER

    GO

    --CHECKDB 有3个参数:

    --REPAIR_ALLOW_DATA_LOSS

    -- 执行由 REPAIR_REBUILD 完成的所有修复,包括对行和页进行分配和取消分配以改正分配错误、结构行或页的错误,以及删除已损坏的文本对象。这些修复可能会导致一些数据丢失。修复操作可以在用户事务下完成以允许用户回滚所做的更改。如果回滚修复,则数据库仍会含有错误,应该从备份进行恢复。如果由于所提供修复等级的缘故遗漏某个错误的修复,则将遗漏任何取决于该修复的修复。修复完成后,备份数据库。

    --REPAIR_FAST 进行小的、不耗时的修复操作,如修复非聚集索引中的附加键。这些修复可以很快完成,并且不会有丢失数据的危险。

    --REPAIR_REBUILD 执行由 REPAIR_FAST 完成的所有修复,包括需要较长时间的修复(如重建索引)。执行这些修复时不会有丢失数据的危险。

    --DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY

    7.SQL Server日志清除的两种方法

    在使用过程中大家经常碰到数据库日志非常大的情况,在这里介绍了两种处理方法……

    方法一:

    一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大。

    1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存。

    2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定。

    3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据。

    方法二:

    SET NOCOUNT ON

    DECLARE @LogicalFileName sysname,

    @MaxMinutes INT,

    @NewSize INT

    USE databasename -- 要操作的数据库名

    SELECT @LogicalFileName = 'databasename_log', -- 日志文件名

    @MaxMinutes = 10, -- Limit on time allowed to wrap log.

    @NewSize = 1 -- 你想设定的日志文件的大小(M)

    -- Setup / initialize

    DECLARE @OriginalSize int

    SELECT @OriginalSize = size

    FROM sysfiles

    WHERE name = @LogicalFileName

    SELECT 'Original Size of ' + db_name() + ' LOG is ' +

    CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +

    CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'

    FROM sysfiles

    WHERE name = @LogicalFileName

    CREATE TABLE DummyTrans

    (DummyColumn char (8000) not null)

    DECLARE @Counter INT,

    @StartTime DATETIME,

    @TruncLog VARCHAR(255)

    SELECT @StartTime = GETDATE(),

    @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

    DBCC SHRINKFILE (@LogicalFileName, @NewSize)

    EXEC (@TruncLog)

    -- Wrap the log if necessary.

    WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired

    AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)

    AND (@OriginalSize * 8 /1024) > @NewSize

    BEGIN -- Outer loop.

    SELECT @Counter = 0

    WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

    BEGIN -- update

    INSERT DummyTrans VALUES ('Fill Log')

    DELETE DummyTrans

    SELECT @Counter = @Counter + 1

    END

    EXEC (@TruncLog)

    END

    SELECT 'Final Size of ' + db_name() + ' LOG is ' +

    CONVERT(VARCHAR(30),size) + ' 8K pages or ' +

    CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'

    FROM sysfiles

    WHERE name = @LogicalFileName

    DROP TABLE DummyTrans

    SET NOCOUNT OFF

     

    8.删除数据库中重复数据的几个方法

    数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置……

    方法一

    declare @max integer,@id integer

    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1

    open cur_rows

    fetch cur_rows into @id,@max

    while @@fetch_status=0

    begin

    select @max = @max -1

    set rowcount @max

    delete from 表名 where 主字段 = @id

    fetch cur_rows into @id,@max

    end

    close cur_rows

    set rowcount 0

    方法二

    有两个意义上的重复记录:

    一是完全重复的记录,也即所有字段均重复的记录,

    二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

    A、对于第一种重复,比较容易解决,使用

    select distinct * from tableName

    就可以得到无重复记录的结果集。

    如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除:

    select distinct * into #Tmp from tableName

    drop table tableName

    select * into tableName from #Tmp

    drop table #Tmp

    发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。

    B、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下

    假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集。

    select identity(int,1,1) as autoID, * into #Tmp from tableName

    select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID

    select * from #Tmp where autoID in(select autoID from #tmp2)

    最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)。

    9.更改数据库中表的所属用户的两个方法

    大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户……

    --更改某个表

    exec sp_changeobjectowner 'tablename','dbo'

    --存储更改全部表

    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch

    @OldOwner as NVARCHAR(128),

    @NewOwner as NVARCHAR(128)

    AS

    DECLARE @Name as NVARCHAR(128)

    DECLARE @Owner as NVARCHAR(128)

    DECLARE @OwnerName as NVARCHAR(128)

    DECLARE curObject CURSOR FOR

    select 'Name' = name,

    'Owner' = user_name(uid)

    from sysobjects

    where user_name(uid)=@OldOwner

    order by name

    OPEN curObject

    FETCH NEXT FROM curObject INTO @Name, @Owner

    WHILE(@@FETCH_STATUS=0)

    BEGIN

    if @Owner=@OldOwner

    begin

    set @OwnerName = @OldOwner + '.' + rtrim(@Name)

    exec sp_changeobjectowner @OwnerName, @NewOwner

    end

    -- select @name,@NewOwner,@OldOwner

    FETCH NEXT FROM curObject INTO @Name, @Owner

    END

    close curObject

    deallocate curObject

    GO

    10.SQL Server中直接循环写入数据

    declare @i int

    set @i=1

    while @i<30

    begin

    insert into test (userid) values(@i)

    set @i=@i+1

    end

    11.无数据库日志文件恢复数据库方法两则

    数据库日志文件的误删或别的原因引起数据库日志的损坏。

    方法一:

    1.新建一个同名的数据库;

    2.再停掉SQL Server(注意不要分离数据库);

    3.用原数据库的数据文件覆盖掉这个新建的数据库;

    4.再重启sql server;

    5.此时打开企业管理器时会出现置疑,先不管,执行下面的语句(注意修改其中的数据库名);

    6.完成后一般就可以访问数据库中的数据了,这时,数据库本身一般还要问题,解决办法是,利用。

    数据库的脚本创建一个新的数据库,并将数据导进去就行了。

    USE MASTER

    GO

    SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE

    GO

    UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的数据库名'

    Go

    sp_dboption '置疑的数据库名', 'single user', 'true'

    Go

    DBCC CHECKDB('置疑的数据库名')

    Go

    update sysdatabases set status =28 where name='置疑的数据库名'

    Go

    sp_configure 'allow updates', 0 reconfigure with override

    Go

    sp_dboption '置疑的数据库名', 'single user', 'false'

    Go

    方法二:

    设置数据库为紧急模式;

    停掉SQL Server服务;

    把应用数据库的数据文件XXX_Data.mdf移走;

    重新建立一个同名的数据库XXX;

    停掉SQL服务;

    把原来的数据文件再覆盖回来;

    运行以下语句,把该数据库设置为紧急模式;

    运行

    “Use Master

    Go

    sp_configure 'allow updates', 1

    reconfigure with override

    Go”

    执行结果:

    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

    已将配置选项 'allow updates' 从 0 改为 1。请运行 RECONFIGURE 语句以安装。

    接着运行“update sysdatabases set status = 32768 where name = 'XXX'”

    执行结果:

    (所影响的行数为 1 行)

    重启SQL Server服务;

    运行以下语句,把应用数据库设置为Single User模式;

    运行“sp_dboption 'XXX', 'single user', 'true'”

    执行结果:

    命令已成功完成。

    做DBCC CHECKDB;

    运行“DBCC CHECKDB('XXX')”

    执行结果:

    'XXX' 的 DBCC 结果。

    'sysobjects' 的 DBCC 结果。

    对象 'sysobjects' 有 273 行,这些行位于 5 页中。

    'sysindexes' 的 DBCC 结果。

    对象 'sysindexes' 有 202 行,这些行位于 7 页中。

    'syscolumns' 的 DBCC 结果。

    ………

    运行以下语句把系统表的修改选项关掉;

    运行“sp_resetstatus "XXX"

    go

    sp_configure 'allow updates', 0

    reconfigure with override

    Go”

    执行结果:

    在 sysdatabases 中更新数据库 'XXX' 的条目之前,模式 = 0,状态 = 28(状态 suspect_bit = 0),

    没有更新 sysdatabases 中的任何行,因为已正确地重置了模式和状态。没有错误,未进行任何更改。

    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。

    已将配置选项 'allow updates' 从 1 改为 0。请运行 RECONFIGURE 语句以安装。

    重新建立另外一个数据库XXX.Lost;

    DTS导出向导

    运行DTS导出向导;

    复制源选择EmergencyMode的数据库XXX,导入到XXX.Lost;

    选择“在SQL Server数据库之间复制对象和数据”,试了多次,好像不行,只是复制过来了所有表结构,但是没有数据,也没有视图和存储过程,而且DTS向导最后报告复制失败;

    所以最后选择“从源数据库复制表和视图”,但是后来发现,这样总是只能复制一部分表记录;

    于是选择“用一条查询指定要传输的数据”,缺哪个表记录,就导哪个;

    视图和存储过程是执行SQL语句添加的。

    12.维护SQL Server中表的索引

    在使用和创建数据库索引中经常会碰到一些问题,在这里可以采用一些另类的方法解决…

    --第一步:查看是否需要维护,查看扫描密度/Scan Density是否为100%

    declare @table_id int

    set @table_id=object_id('表名')

    dbcc showcontig(@table_id)

    --第二步:重构表索引

    dbcc dbreindex('表名',pk_索引名,100)

    --重做第一步,如发现扫描密度/Scan Density还是小于100%则重构表的所有索引

    --杨铮:并不一定能达100%。

    dbcc dbreindex('表名','',100)

    13.SQL Server补丁版本的检查

    SQL Server的补丁版本检查不如Windows 补丁版本检查直接,一个系统管理员,如果不了解SQL Server版本对应的补丁号,可能也会遇到一点麻烦,因此在这说明一下,通过这样的办法判别机器是安全的办法,不会对系统产生任何影响。

    1、用Isql或者SQL查询分析器登录到SQL Server,如果是用Isql,请在cmd窗口输入isql -U sa,然后输入密码,进入;如果是用SQL查询分析器,请从程序中启动,输入sa和密码(也可以用windows验证)。

    2、在ISQL中输入:

    Select @@Version;

    go

    或者SQL查询分析器中输入(其实如果不想输入,只要打开帮助的关于就可以了:))

    Select @@Version;

    然后按执行;

    这时会返回SQL的版本信息,如下:

    Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation EntERPrise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)

    其中的8.00.760就是SQL Server的版本和补丁号。对应关系如下:

    SQL Server 2000 版本和级别 @@VERSION 产品级别

    SQL Server 2000 原始版本 8.00.194 RTM

    Database Components SP1 8.00.384 SP1

    Database Components SP2 8.00.534 SP2

    Database Components SP3、SP3a 或 MSDE 2000 Release A 8.00.760 SP3

    Database Components SP4 8.00.2039 SP4

    这样我们就能看到SQL Server的正确版本和补丁号了。

    我们也可以用xp_msver看到更详细的信息。

    14.Sql Server数据库的备份和恢复措施

    14.1、备份数据库

    1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server;

    2、SQL Server组-->双击打开你的服务器-->双击打开数据库目录;

    3、选择你的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择备份数据库;

    4、备份选项选择完全备份,目的中的备份到如果原来有路径和名称则选中名称点删除,然后点添加,如果原来没有路径和名称则直接选择添加,接着指定路径和文件名,指定后点确定返回备份窗口,接着点确定进行备份。

    14.2、还原数据库

    1、打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server;

    2、SQL Server组-->双击打开你的服务器-->点图标栏的新建数据库图标,新建数据库的名字自行取;

    3、点击新建好的数据库名称(如论坛数据库Forum)-->然后点上面菜单中的工具-->选择恢复数据库;

    4、在弹出来的窗口中的还原选项中选择从设备-->点选择设备-->点添加-->然后选择你的备份文件名-->添加后点确定返回,这时候设备栏应该出现您刚才选择的数据库备份文件名,备份号默认为1(如果您对同一个文件做过多次备份,可以点击备份号旁边的查看内容,在复选框中选择最新的一次备份后点确定)-->然后点击上方常规旁边的选项按钮;

    5、在出现的窗口中选择在现有数据库上强制还原,以及在恢复完成状态中选择使数据库可以继续运行但无法还原其它事务日志的选项。在窗口的中间部位的将数据库文件还原为这里要按照你SQL的安装进行设置(也可以指定自己的目录),逻辑文件名不需要改动,移至物理文件名要根据你所恢复的机器情况做改动,如您的SQL数据库装在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢复机器的目录进行相关改动改动,并且最后的文件名最好改成您当前的数据库名(如原来是bbs_data.mdf,现在的数据库是forum,就改成forum_data.mdf),日志和数据文件都要按照这样的方式做相关的改动(日志的文件名是*_log.ldf结尾的),这里的恢复目录您可以自由设置,前提是该目录必须存在(如您可以指定d:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldf),否则恢复将报错;

    6、修改完成后,点击下面的确定进行恢复,这时会出现一个进度条,提示恢复的进度,恢复完成后系统会自动提示成功,如中间提示报错,请记录下相关的错误内容并询问对SQL操作比较熟悉的人员,一般的错误无非是目录错误或者文件名重复或者文件名错误或者空间不够或者数据库正在使用中的错误,数据库正在使用的错误您可以尝试关闭所有关于SQL窗口然后重新打开进行恢复操作,如果还提示正在使用的错误可以将SQL服务停止然后重起看看,至于上述其它的错误一般都能按照错误内容做相应改动后即可恢复。

    14.3、收缩数据库

    一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大。

    1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如论坛数据库Forum)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存;

    2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定;

    3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据。

    14.4、设定每日自动备份数据库

    强烈建议有条件的用户进行此操作!

    1、打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器;

    2、然后点上面菜单中的工具-->选择数据库维护计划器;

    3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息,这里一般不用做选择-->下一步检查数据完整性,也一般不选择;

    4、下一步指定数据库维护计划,默认的是1周备份一次,点击更改选择每天备份后点确定;

    5、下一步指定备份的磁盘目录,选择指定目录,如您可以在D盘新建一个目录如:d:\databak,然后在这里选择使用此目录,如果您的数据库比较多最好选择为每个数据库建立子目录,然后选择删除早于多少天前的备份,一般设定4-7天,这看您的具体备份要求,备份文件扩展名一般都是bak就用默认的;

    6、下一步指定事务日志备份计划,看您的需要做选择-->下一步要生成的报表,一般不做选择-->下一步维护计划历史记录,最好用默认的选项-->下一步完成;

    7、完成后系统很可能会提示Sql Server Agent服务未启动,先点确定完成计划设定,然后找到桌面最右边状态栏中的SQL绿色图标,双击点开,在服务中选择Sql Server Agent,然后点击运行箭头,选上下方的当启动OS时自动启动服务;

    8、这个时候数据库计划已经成功的运行了,他将按照您上面的设置进行自动备份。

    修改计划:

    1、打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->管理-->数据库维护计划-->打开后可看到你设定的计划,可以进行修改或者删除操作

    14.5、数据的转移(新建数据库或转移服务器)

    一般情况下,最好使用备份和还原操作来进行转移数据,在特殊情况下,可以用导入导出的方式进行转移,这里介绍的就是导入导出方式,导入导出方式转移数据一个作用就是可以在收缩数据库无效的情况下用来减小(收缩)数据库的大小,本操作默认为您对SQL的操作有一定的了解,如果对其中的部分操作不理解,可以咨询动网相关人员或者查询网上资料。

    1、将原数据库的所有表、存储过程导出成一个SQL文件,导出的时候注意在选项中选择编写索引脚本和编写主键、外键、默认值和检查约束脚本选项;

    2、新建数据库,对新建数据库执行第一步中所建立的SQL文件;

    3、用SQL的导入导出方式,对新数据库导入原数据库中的所有表内容;

    利用数据库日志恢复数据到时间点的操作

    由于不正常的数据丢失,而又不想使用备份数据还原,只要原来有备份且当前日志保存完好,可以采用这个方法试试,说不定可挽回损失……

    1,如果误操作之前存在一个全库备份(或已有多个差异备份或增量备份),首先要做的事就是进行一次日志备份(如果为了不让日志文件变大而置trunc. log on chkpt.选项为1那你就死翘了);

    backup log dbName to disk='fileName'

    2,恢复一个全库备份,注意需要使用with norecovery,如果还有其他差异或增量备份,则逐个恢复;

    restore database dbName from disk='fileName' with norecovery

    3,恢复最后一个日志备份即刚做的日志备份,指定恢复时间点到误操作之前的时刻。

    restore log dbName from disk='fileName'

    with stopat='date_time'

    以上这些操作都可以在SQL SERVER企业管理器里完成,难度不大。。。

    当然,如果误操作是一些不记日志的操作比如truncate table,select into等操作,那么是无法利用上述方法来恢复数据的...

    15.SQL Server2000数据库文件损坏时如何恢复

    出现这样的问题是比较严重的了,能否修复只能看你的运气……

    SQL Server2000中,如果数据库文件(非系统数据库文件)遇到错误的时候,仅适用于非master,msdb的数据库。

    说明如下:

    1 建一个测试数据库test(数据库类型为完全);

    2 建一个表,插入点记录:

    create table a(c1 varchar(2))

    go

    insert into a values('aa')

    go

    insert into a values('bb')

    go

    3 作完全备份,到文件test_1.bak;

    4 再作一点修改:

    insert into a values('cc')

    go

    create table b(c1 int)

    go

    insert into b values(1)

    go

    insert into b values(2)

    go

    5 shutdown 数据库服务器;

    6 用ultraedit编辑数据库文件test_data.mdf,随便修改点字节内容,相当于数据库遭到致命的损坏;

    7 启动数据库,并且运行企业管理器,点开数据库,看到test变成灰色,而且显示置疑;

    8 运行isql -SLocalhost -Usa -P:

    1> backup log test TO DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKUP

    est_2.bak' WITH NO_TRUNCATE

    2>go

    已处理 2 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。

    BACKUP LOG 操作成功地处理了 2 页,花费了 0.111 秒(0.087 MB/秒)。

    9 进行恢复最老的完全备份:

    1> RESTORE DATABASE test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQL

    BACKUP est_1.bak' WITH NORECOVERY

    2> go

    已处理 96 页,这些页属于数据库 'test' 的文件 'TEST_Data'(位于文件 1 上)。

    已处理 1 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。

    RESTORE DATABASE 操作成功地处理了 97 页,花费了 0.107 秒(7.368 MB/秒)。

    10 恢复最近的日志:

    1> RESTORE LOG test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKU

    P est_2.bak' WITH RECOVERY

    2> go

    已处理 2 页,这些页属于数据库 'test' 的文件 'TEST_Log'(位于文件 1 上)。

    RESTORE LOG 操作成功地处理了 2 页,花费了 0.056 秒(0.173 MB/秒)。

    16.存储过程编写经验和优化措施

    一、适合读者对象:

    数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人。  

    二、介绍:

    在数据库的开发过程中,经常会遇到复杂的业务逻辑和对数据库的操作,这个时候就会用SP来封装数据库操作。如果项目的SP较多,书写又没有一定的规范,将会影响以后的系统维护困难和大SP逻辑的难以理解,另外如果数据库的数据量大或者项目对SP的性能要求很,就会遇到优化的问题,否则速度有可能很慢,经过亲身经验,一个经过优化过的SP要比一个性能差的SP的效率甚至高几百倍。  

    三、内容:  

    1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。  

    2、开发人员在提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。  

    3、高程序运行效率,优化应用程序,在SP编写过程中应该注意以下几点:   

    a)SQL的使用规范:

    i. 尽量避免大事务操作,慎用holdlock子句,提高系统并发能力。

    ii. 尽量避免反复访问同一张或几张表,尤其是数据量较大的表,可以考虑先根据条件提取数据到临时表中,然后再做连接。

    iii. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该改写;如果使用了游标,就要尽量避免在游标循环中再进行表连接的操作。

    iv. 注意where字句写法,必须考虑语句顺序,应该根据索引顺序、范围大小来确定条件子句的前后顺序,尽可能的让字段顺序与索引顺序相一致,范围从大到小。

    v. 不要在where子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

    vi. 尽量使用exists代替select count(1)来判断是否存在记录,count函数只有在统计表中所有行数时使用,而且count(1)比count(*)更有效率。

    vii. 尽量使用“>=”,不要使用“>”。

    viii. 注意一些or子句和union子句之间的替换

    ix. 注意表之间连接的数据类型,避免不同类型数据之间的连接。

    x. 注意存储过程中参数和数据类型的关系。

    xi. 注意insert、update操作的数据量,防止与其他应用冲突。如果数据量超过200个数据页面(400k),那么系统将会进行锁升级,页级锁会升级成表级锁。   

    b)索引的使用规范:

    i. 索引的创建要与应用结合考虑,建议大的OLTP表不要超过6个索引。

    ii. 尽可能的使用索引字段作为查询条件,尤其是聚簇索引,必要时可以通过index index_name来强制指定索引。

    iii. 避免对大表查询时进行table scan,必要时考虑新建索引。

    iv. 在使用索引字段作为条件时,如果该索引是联合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用。

    v. 要注意索引的维护,周期性重建索引,重新编译存储过程。  

    c)tempdb的使用规范:

    i. 尽量避免使用distinct、order by、group by、having、join、cumpute,因为这些语句会加重tempdb的负担。

    ii. 避免频繁创建和删除临时表,减少系统表资源的消耗。

    iii. 在新建临时表时,如果一次性插入数据量很大,那么可以使用select into代替create table,避免log,提高速度;如果数据量不大,为了缓和系统表的资源,建议先create table,然后insert。

    iv. 如果临时表的数据量较大,需要建立索引,那么应该将创建临时表和建立索引的过程放在单独一个子存储过程中,这样才能保证系统能够很好的使用到该临时表的索引。

    v. 如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table,然后drop table,这样可以避免系统表的较长时间锁定。

    vi. 慎用大的临时表与其他大表的连接查询和修改,减低系统表负担,因为这种操作会在一条语句中多次使用tempdb的系统表。  

    d)合理的算法使用:   

    根据上面已提到的SQL优化技术和ASE Tuning手册中的SQL优化内容,结合实际应用,采用多种算法进行比较,以获得消耗资源最少、效率最高的方法。具体可用ASE调优命令:set statistics io on, set statistics time on , set showplan on 等。

  • 很全的sql用法

    belie 发布于 2008-04-05 20:48:29

    一、基础

    1、说明:创建数据库
    CREATE DATABASE database-name
    2、说明:删除数据库
    drop database dbname
    3、说明:备份sql server
    --- 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:mssql7backupMyNwind_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:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
  • 6门课程和测试的关系

    jumptor 发布于 2008-03-30 15:26:55

     1CC++Java和测试
    不管是什么语言,在将来的测试工作中起到两个作用:

    1)看懂开发人员写的代码,需要掌握基本概念,比如面向对象,以及基本语法和基本
    编程思路
    2)能编写简单的代码,为编写自动化测试脚本和测试代码做准备,将来测试用到的可
    能是其它编程语言,比如tclperl等,但都是类似的
    需要做到能进行简单的编程,能准确使用循环、判断等语句

    2、数据结构和测试
    数据结构比较抽象、复杂,在将来的测试工作中起到两个作用:
    1)看懂开发人员写的代码,程序等于数据结构加算法,不懂基本的数据结构和算法很
    难看懂现在开发人员写的代码
    2)锻炼逻辑思维能力,测试除了需要细心耐心之外,还需要很强的逻辑思维和分析能
    力,而且是测试能否做好的关键
    需要做到能编写基本的算法,搞清各数据结构的定义、特点和表示方法

    3、操作系统和测试
    应用软件都需要在操作系统上来运行,因此操作系统对于软件研发而言很重要,对于将
    来的测试工作而言,主要和测试环境的搭建关联起来
    需要做到:
    1)安装、配置各种操作系统,如linux
    2)在操作系统下进行熟练的操作,如输入命令等
    3)了解操作系统的基本功能、基本参数,如虚拟内存等

    4、数据库和测试
    现在流行的web系统一般都带有数据库,因此数据库在当前的软件研发中非常重要,对
    于将来的测试工作而言,不仅涉及到测试环境的搭建,还涉及到测试结果的检查
    需要做到:
    1)了解数据库基本原理和基本概念,如存储过程、事务、视图等
    2)数据库的安装和配置
    3)常用SQL语句的编写

    5、计算机网络和测试
    和数据库类似,现在网络也是非常重要的,越来越多的单机软件变成了web软件,对于
    将来的测试工作而言,不仅涉及到测试环境的搭建,还涉及到测试结果的检查
    需要做到:
    1)了解OSI7层模型,搞清各层的作用
    2)了解tcp/ip协议
    3)了解常见的应用层协议,如httpftp

    6、计算机组成原理和测试
    计算机组成原理涉及到计算机的硬件组成,对于将来的测试工作而言,主要涉及到测试
    环境的搭建,对应配置测试
    需要做到:
    1)了解计算机的硬件构成
    2)了解计算机各组件之间的通信机制
    3)了解计算机底层的处理机制,比如如何寻址、寄存器等
  • 学习习惯和学习方法总结【更新中】

    caicai1724 发布于 2007-07-14 20:18:04

    工作中的学习习惯总结:
    1。工作中,遇到困难/遇到不明白的地方,提出问题,找到最快解决问题的途径(分类问题记录文档/相关文档/相关书籍/帮助手册/google/同事)寻找答案,解决问题,将知识点记录到相关文档中(分类问题记录文档/学习笔记/博客空间日志),解决困难/理解不明白的地方。
    2。每天记录下工作总结和经验。

     

    技术系统学习的学习习惯总结:
    1。每天坚持2个半小时进行学习
    2。每天坚持写工作学习日志
    3。每月写学习计划并改进学习方法

     

    业务和系统熟悉学习方法总结:
    1.在进入工作后,系统的看所有业务和系统文档,有个大致印象。
    2.遇到问题时,先查询业务和系统文档,用红色字体标识出知识点,表示已经在工作中接触到了该知识点。如果没有找到答案或文档不够详细,问资深的同事或查看代码(系统知识),然后将知识点补充到业务和系统文档中(如果没有文档,则自己积累出个文档来)。
    3.问题解决了,但没明白内部细节,而且任务时间有限不允许更深入的理解时,记录下解决问题的过程,等工作任务结束后,解决不明白的地方,同样将知识点补充到业务和系统文档中。
    4.平时工作中,接触到的陌生的业务和系统知识点时,补充到业务和系统文档中,并用红色字体标识出。
    5.定期的整理业务和系统文档,加深印象。

     

    工作相关技术的学习方法总结:
    1.找到相关技术的查询途径(联机帮助/技术官方网站/技术手册/权威技术书籍/google)
    2.遇到问题时,在寻找答案过程中,不要牵连出一堆的知识点,抓住和问题紧密相关的知识点,除了顺利解决问题之外,需要彻底的弄清楚该知识点,如果时间不允许,先解决问题,并记录下未明白的知识点,在工作任务完成后,继续掌握该知识点。
    3.晚上学习进行系统的学习,技术的系统学习方法总结另外总结。


     

    技术的系统学习方法总结:
    1.找一本权威的该技术书籍.先通读一遍,注重掌握关键问题,关键知识和技术,关键的方法和算法. 再细读一遍, 挑出重点,结合下面的4点学习方法进行,然后把整个的学习过程、经验心得、理解认识,写成学习笔记的方式总结.(正在试用)
    2.技术手册中查询并练习函数手册中的范例。
    3.调试权威技术书籍中的实例源代码。
    4.自己编写相关技术的小程序。
    5.阅读后台系统中包含相关知识点的源代码文件。

    6.写一些学习心得日志。

    7.将学习过程以提问和回答的方式写成文档形式。

     

    测试技术学习方法总结:

    1.测试技术非常具有实践性,所以,我的学习方法是:首先系统的学习该测试技术权威书籍,对该测试技术有个全面的了解,其次,在测试工作中找到能使用该测试技术的地方,尝试用该测试技术进行工作,在实际工作中总结该测试技术的使用经验,以写日志的方式提炼.最后,在多次测试任务完成中,反覆查阅该技术权威书籍,达到温故而知新的目的,不断尝试改进自己实际使用的该测试技术.不断增加自己对该测试技术的经验总结.
    2.测试技术的学习离不开对业务和系统知识和开发相关技术知识的熟悉,这2方面是测试技术学习的前提,但也不是前2者完全具备了才能开始测试技术的学习,可以在进行测试技术学习的同时,按需学习前2者.
    3.测试技术的学习的目的是提高测试效率,不是为了学习而学习,任何测试技术的学习一定是在有工作环境可实践的情况下进行,学习效率才会高. 如果发现某个测试技术很好,但并不适合现在的测试系统使用,请暂时放弃该测试技术的学习.

     

    别人的编程学习习惯和学习方法收集:
    1.坚持每天看所测系统的源代码,直到全部看完为止。
    2.看一本书时,先通读一编;再细读一编;然后洗刷式的快速反馈学习;然后把你整个的学习过程、经验心得、理解认识,写一个详细的文章;找些不错的源代码,认识别人对实现过程的思路. 一边编写自己感兴趣的小程序。
    3.在论坛上提问
    4.对于基本功和基础知识的学习适宜采用系统学习的方法,尽管需要系统而深入的学习但也并不是要去弄清楚各种烦琐的细节问题,而是要注重掌握关键问题,关键知识和技术,关键的方法和算法。同样是有所选择和侧重的。而对于应用技术或者自己以前不熟悉的技术的学习则适宜采用按需学习的方法,针对实际工作和应用中对该技术和知识的需求只侧重于自己需要的那个部分进行重点学习,理解,吸收和掌握,应用的需求决定了学习的内容和程度。对于与项目应用需求不是特别相关的技术细节只做概要式的领会,注意其与别的部分的整体联系就可以了,不必深究。
    5.我们在学习之前必须要对要学习的东西有充分的了解,特别是从整体的角度要有一种系统观的了解。学习新技术或者新领域时,最好能找一本关于那个方向比较好的综述性质的书,先从总体架构上了解该技术的整个面貌,技术要点和流程,然后再联系自己现有的知识结构,根据自己的实际需要选择和制定合适的学习阶段,学习内容和学习计划。

  • 2007-03-03 | 在windows系统下安装Linux系统

    caicai1724 发布于 2007-04-27 22:19:16

    步骤很简单

    1.下载VMware workstation v5.5.3
    下载地址:
    http://www.crsky.com/soft/8612.html


    2。下载Linux镜像文件
    本地已下载过,目录为E:\各种安装程序,文件为:shrike-i386-disc1,shrike-i386-disc2,shrike-i386-disc3


    3。安装VMware,序列号:HKXHD-KUN0G-HA5DF-4MTZ2


    4。使用Linux镜像文件安装Linux系统

  • 2007-01-10 | 工作中Linux常用命令整理

    caicai1724 发布于 2007-04-27 21:49:19

    Linux常用命令
    安装
    基本命令
    修改口令
    Shell>>passwd
    用户认证
    Shell>>id
    用户
    Shell>>who am i
    系统时间显示
    Shell>>date 修改:shell>>date 12061025(月年时分)
    清除屏幕
    Shell>>clear
    查看隐藏文件
    Shell>>ls –a
    一个以“.”打头的文件表明这个文件是隐藏文件(可以用 ls -a 查看)
    显示文件内容
    Shell>>cat   显示文件所有内容
    Shell>>more   显示部分
    Shell>>less
    Shell>>head  显示头部分多少行:head -10 test.txt
    Shell>>tail   显示尾部多少行:tail -10 test.txt
    文件内容查询
    Shell>>grep 查询多个文件中的某内容:grep –r “test” *
    文件查找
    Shell>>find 查找某目录下以及子目录下是否有某文件:find /home –name test.txt
    文件内容统计
    Shell>>wc 统计有多少行:wc -l
    文件比较命令
    Shell>>comm 比较2个文件:comm file1 file2
    Shell>>diff 比较2个文件:diff file1 file2
    文件复制,删除,移动
    Shell>>cp 复制1个文件到新文件: cp file1 newfile
    Shell>>rm 删除一个文件:rm –f file1
    Shell>>mv 修改文件名:mv file1 newfile
    文件链接
    Shell>>ln  硬链接–s file1 file2
    创建目录,删除目录
    Shell>>mkdir 新建目录:mkdir dir1
    Shell>>rmdir 删除目录:rmdir dir1
    进入目录和显示目录路径
    Shell>>cd 
    Shell>>pwd
    改变文件或目录存取权限
    Shell>>chmod 赋予某文件一些权限:chmod 741 file
    改变文件属主和用户组
    Shell>>chown 改变某文件的所属用户 chown –R webadmin:webadmin mykc
    联机帮助
    Shell>>help 命令
    Shell>>man 命令
    常见目录
    /bin 目录包含供每个人使用的可执行程序
    /sbin 目录包含仅供管理员使用的可执行程序
    /lib 目录包含库文件
    /boot 目录包括了内核镜像和其它相关内容
    /dev 目录包含着代表硬件设备的设备文件
    /etc 目录包含着整个系统的各种配置文件
    /home 目录包含各用户的主目录
    /root 目录是root的主目录
    /mnt 目录包含装载其它非标准文件系统的装载点
    /proc 是个虚拟目录,里面保存内核和进程的信息
    /tmp 目录是为程序和用户提供放置临时空间的目录
    /usr 目录包含UNIX系统的众多资源,较占空间
    /var 目录包含了一些文件大小比较特殊的文件,如日志文件,锁文件等,还包括各种用途的文件,如:邮件、计划、打印文件等
    /lost+found 存在于所有的文件系统中,保存文件碎片
    /opt 目录是由一些外部应用程序使用的目录
    其它一些用户自己建的目录
    . 和 .. 目录
    文本编辑器vi
    模式
    命令模式:键盘输入为命令
    插入模式:键盘输入为编辑命令,esc键可回到命令模式
    末行模式:在命令模式下,键入:即可进入。
    编辑
    新增 (append) 
    a 从光标所在位置后面开始新增内容
    A 从光标所在行最后面的地方开始新增内容。
    插入 (insert)
    i 从光标所在位置前面开始插入内容
    I 从光标所在行的第一个非空白字符前面开始插入资料。
    开始 (open)
    o 在光标所在行下新增一行并进入输入模式。
    O 在光标所在行上新增一行并进入输入模式。
    光标的移动
    h   左移一个字符  l   右移一个字符
    j  下移一行      k   上移一行
    w,W  跳至后一个字的开头(W忽略标点)
    b,B   跳至前一个字的开头(B忽略标点)
    e   移动到后一个字的末尾
    ^   至本行第一个非空字符 
    $   至行尾     0   至行首
    H   移动到当前窗口的第一列
    M   移动到当前窗口的中间列
    L   移动到视窗的最后一列
    删除
    x  删除光标所在字符
    X   删除光标前面的字符
    s   删除光标所在字符,并进入输入模式
    S  删除光标所在的行,并进入输入模式
    dd   删除光标所在的行
    D    从光标位置开始删除到行尾
    3.退出
    文件的保存和退出
    :w    保存
    :q    退出
    :w!   强制保存
    :q!   强制退出
    :wq   保存退出
    :wq!  强制保存退出

    Shell脚本
    简单的说 shell 脚本就是一个包含若干行 linux 命令的文件
    1.bin/bash
    # 这个程序将打印“Hello World”到屏幕上
    echo "Hello World"
    2.检查在数值之间的比较:
     x -eq y 检查x和y是否相等
     x -ne y 检查x和y是否不相等
     x -gt y 检查x是否大于y
     x -lt y 检查x是否小于y
    3.检查在字符串之间的比较:
     x = y 检查x与y是否相同
     x != y 检查x与y是否不相同
     -n x 若x不是空字符串(null)则为真
     -z x 若x是空字符串(null) 则为真

  • 华为软件测试工程师面试编程题

    tiantian010 发布于 2008-03-19 19:36:13

    华为测试工程师的面试题 
     

     1:请你分别划划OSI的七层网络结构图,和TCP/IP的五层结构图?
    OSI的七层网络结构图,和TCP/IP的五层结构图
    OSI
    OSI是Open System Interconnect的缩写,意为开放式系统互联。在OSI出现之前,计算机网络中存在众多的体系结构,其中以IBM公司的SNA(系统网络体系结构)和DEC公司的DNA(Digital Network Architecture)数字网络体系结构最为著名。为了解决不同体系结构的网络的互联问题,国际标准化组织ISO(注意不要与OSI搞混))于1981年制定了开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM)。这个模型把网络通信的工作分为7层,它们由低到高分别是物理层(Physical Layer),数据链路层(Data Link Layer),网络层(Network Layer),传输层(Transport Layer),会话层(Session Layer),表示层(Presen tation Layer)和应用层(Application Layer)。第一层到第三层属于OSI参考模型的低三层,负责创建网络通信连接的链路;第四层到第七层为OSI参考模型的高四层,具体负责端到端的数据通信。每层完成一定的功能,每层都直接为其上层提供服务,并且所有层次都互相支持,而网络通信则可以自上而下(在发送端)或者自下而上(在接收端)双向进行。当然并不是每一通信都需要经过OSI的全部七层,有的甚至只需要双方对应的某一层即可。物理接口之间的转接,以及中继器与中继器之间的连接就只需在物理层中进行即可;而路由器与路由器之间的连接则只需经过网络层以下的三层即可。总的来说,双方的通信是在对等层次上进行的,不能在不对称层次上进行通信。

    OSI参考模型的各个层次的划分遵循下列原则:

    1、同一层中的各网络节点都有相同的层次结构,具有同样的功能。

    2、同一节点内相邻层之间通过接口(可以是逻辑接口)进行通信。

    3、七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。

    4、不同节点的同等层按照协议实现对等层之间的通信。

    第一层:物理层(PhysicalLayer),规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息是,DTE和DCE双放在各电路上的动作系列。

    在这一层,数据的单位称为比特(bit)。

    属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

    第二层:数据链路层(DataLinkLayer):在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。  

    数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

    在这一层,数据的单位称为帧(frame)。

    数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

    第三层是网络层

    在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。

    如果你在谈论一个IP地址,那么你是在处理第3层的问题,这是“数据包”问题,而不是第2层的“帧”。IP是第3层问题的一部分,此外还有一些路由协议和地址解析协议(ARP)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。

    在这一层,数据的单位称为数据包(packet)。

    网络层协议的代表包括:IP、IPX、RIP、OSPF等。

    第四层是处理信息的传输层。第4层的数据单元也称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所为透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。

    传输层协议的代表包括:TCP、UDP、SPX等。

    第五层是会话层

    这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。

    第六层是表示层

    这一层主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。

    第七层应用层,应用层为操作系统或网络应用程序提供访问网络服务的接口。

    应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。

      通过 OSI 层,信息可以从一台计算机的软件应用程序传输到另一台的应用程序上。例如,计算机 A 上的应用程序要将信息发送到计算机 B 的应用程序,则计算机 A 中的应用程序需要将信息先发送到其应用层(第七层),然后此层将信息发送到表示层(第六层),表示层将数据转送到会话层(第五层),如此继续,直至物理层(第一层)。在物理层,数据被放置在物理网络媒介中并被发送至计算机 B 。计算机 B 的物理层接收来自物理媒介的数据,然后将信息向上发送至数据链路层(第二层),数据链路层再转送给网络层,依次继续直到信息到达计算机 B 的应用层。最后,计算机 B 的应用层再将信息传送给应用程序接收端,从而完成通信过程。下面图示说明了这一过程。

      OSI 的七层运用各种各样的控制信息来和其他计算机系统的对应层进行通信。这些控制信息包含特殊的请求和说明,它们在对应的 OSI 层间进行交换。每一层数据的头和尾是两个携带控制信息的基本形式。

      对于从上一层传送下来的数据,附加在前面的控制信息称为头,附加在后面的控制信息称为尾。然而,在对来自上一层数据增加协议头和协议尾,对一个 OSI 层来说并不是必需的。

      当数据在各层间传送时,每一层都可以在数据上增加头和尾,而这些数据已经包含了上一层增加的头和尾。协议头包含了有关层与层间的通信信息。头、尾以及数据是相关联的概念,它们取决于分析信息单元的协议层。例如,传输层头包含了只有传输层可以看到的信息,传输层下面的其他层只将此头作为数据的一部分传递。对于网络层,一个信息单元由第三层的头和数据组成。对于数据链路层,经网络层向下传递的所有信息即第三层头和数据都被看作是数据。换句话说,在给定的某一 OSI 层,信息单元的数据部分包含来自于所有上层的头和尾以及数据,这称之为封装。

      例如,如果计算机 A 要将应用程序中的某数据发送至计算机 B ,数据首先传送至应用层。 计算机 A 的应用层通过在数据上添加协议头来和计算机 B 的应用层通信。所形成的信息单元包含协议头、数据、可能还有协议尾,被发送至表示层,表示层再添加为计算机 B 的表示层所理解的控制信息的协议头。信息单元的大小随着每一层协议头和协议尾的添加而增加,这些协议头和协议尾包含了计算机 B 的对应层要使用的控制信息。在物理层,整个信息单元通过网络介质传输。

      计算机 B 中的物理层收到信息单元并将其传送至数据链路层;然后 B 中的数据链路层读取计算机 A 的数据链路层添加的协议头中的控制信息;然后去除协议头和协议尾,剩余部分被传送至网络层。每一层执行相同的动作:从对应层读取协议头和协议尾,并去除,再将剩余信息发送至上一层。应用层执行完这些动作后,数据就被传送至计算机 B 中的应用程序,这些数据和计算机 A 的应用程序所发送的完全相同 。

      一个 OSI 层与另一层之间的通信是利用第二层提供的服务完成的。相邻层提供的服务帮助一 OSI 层与另一计算机系统的对应层进行通信。一个 OSI 模型的特定层通常是与另外三个 OSI 层联系:与之直接相邻的上一层和下一层,还有目标联网计算机系统的对应层。例如,计算机 A 的数据链路层应与其网络层,物理层以及计算机 B 的数据链路层进行通信
    
    2:请你详细的解释一下IP协议的定义,在哪个层上面,主要有什么作用? TCP与UDP呢?
    
    3:请问交换机和路由器分别的实现原理是什么?分别在哪个层次上面实现的?
    
    4:请问C++的类和C里面的struct有什么区别?
    
    5:请讲一讲析构函数和虚函数的用法和作用?
    
    6:全局变量和局部变量有什么区别?实怎么实现的?操作系统和编译器是怎么知道的?
    
    7:一些寄存器的题目,主要是寻址和内存管理等一些知识。
    
    8:8086是多少尉的系统?在数据总线上是怎么实现的?
    
    軟件測試的各階段!

    面试就是跟你聊聊工作,看经验了
    笔试,看看数据结构,二叉树,排序,什么的

    可能会考多线程

  • 在TD的测试用例中显示测试用例编号的方法

    g_win 发布于 2006-11-29 22:42:34

     

    就像Defect里每个bug都有一个ID一样,其实TD为每个测试用例(Test Case)也赋予了一个编号,默认是不显示的,如果希望在界面上让它显示出来,可以这么做:

    步骤1

    创建一个Object,类型为Number,命名之(随意,如TEST_ID)

    步骤2

    进入Customize->Set Up Workflow->scrīpt Editor,找到Test Plan module scrīpt->TestPlan_Test_moveto

    步骤3

    在TestPlan_Test_moveto这个过程内插入如下代码:

    if TestPlan_Fields.Field("Test_ID").Value <> Test_Fields.Field

    ("TS_TEST_ID").Value then

    Test_Fields.Field("Test_ID").Value = Test_Fields.Field("TS_TEST_ID").Value

    end if

    或者只插入下面这句:

    Test_Fields.Field("TS_USER_01").Value = Test_Fields.Field("TS_TEST_ID").Value

    步骤4

    保存,退出,5min之后打开测试用例查看其编号

  • 最新QTP10下载地址-6/11更新

    jifeng 发布于 2008-02-28 19:56:44

    最新版QTP10下载2009-6-11更新,地址:

    http://h30302.www3.hp.com/prdownloads/T6510-15063.zip?ordernumber=520012557&itemid=1&downloadid=55040343&merchantId=HP_DOWNLOAD_CENTER&dlm=ON


    在迅雷中新建下载任务,复制上述地址。

     

  • TestDirector使用的一些经验

    lgwmlx 发布于 2007-04-04 21:34:24

    这两天部门决定使用TestDirector7.6做为用例服务器。在安装配置TD的过程中,出现了一些问题,也有了一定的心得体会,写出来给大家分享。

    1.安装
    第一次安装的时候,因为硬盘资源分配方面的问题,把所有相关的设置都修改了。结果最后使用中出现了问题。

    后来又使用缺省设置安装了一次,一点问题都没有。我猜想是因为在配置Virtual Directory的时候,我修改了Physical Location,可能TD对虚拟目录的处理有问题,结果最后无法使用。所以建议大家安装的时候,不要修改这里的缺省配置。

    Domain Repository是存储数据使用,由Administrator用户共享控制。每一个Domain都会在TD_dir中创建一个目录,每一个Project都会在Domain目录中创建一个子目录,数据配置信息放在此对应目录中。。

    2.数据库
    这里我犯了一个天大的错误。我使用的是MS SQL数据库。因为我原先使用CQ,还以为也需要建立空数据库连接,结果数据库的Connect String自己修改到了新建的库上,使用的时候,就总提示连接不上数据库。

    后来查资料,有人说删除添加一个DB Server就没有问题了,我就照做了,没有修改配置,结果就没有问题了。Project的数据库也按照直接创建连接的方法,也成功了。所以TD的数据库都是自动生成的,不能修改Connect String的设置。

    后来我去查数据库,数据库中存在TestDirector库,应该对应DB Server连接库;每个Project有自己的数据库,名称方式为:TD_[Domain]_[Project]_db。

    3.汉化

    按照汉化补丁包的说明,我去找服务器上面相关目录,发现“系统盘\Program Files\Common Files\Mercury Interactive\TD2000”里面根本没有tdclientui.ocx这个文件。

    客户端倒是存在tdclientui.ocx,替换注册后界面还是英文版的,弄的我很郁闷。

    后来才发现自己的TD没有打SP4补丁,下载安装SP4补丁后,在客户端覆盖注册tdclientui.ocx后,界面终于是中文版了。

    所以汉化有两个条件,一个是必须打SP4补丁,第二个就是在访问TD的客户端使用tdclientui.ocx。

    4.用户组和用户相关的一些内容

    在Site Administrator中,有Users一项,但在里面只能添加一个用户名,个人感觉只是为了使用Import功能批量导入用户方便使用。所以真正添加用户,还是去CUSTOMIZE中。

    在Users中,有两个缺省的用户Admin和Guest是不可删除的;Groups中缺省的Developer、Project Manager、QATester、TDAdmin、Viewer组不可修改和删除。

    每个用户至少要属于一个用户组。

    权限设置在用户组(Groups)中,用户的权限其实就是他所在组的权限和。

    用户的E-mail就是发送接收邮件的使用的E-mail。

    5.字段汉化

    汉化补丁,汉化是仅仅是界面,字段的内容没有进行汉化。

    进入CUSTOMIZE,选择Customize Project Entities,在这里,就可以进行字段的汉化工作。有人已经做好了TD7.6字段中英文对照表,在http://www.51testing.com/tool/20050103_2.htm,对有心人的工作表示感谢。

    6.自定义列表内容

    CUSTOMIZE->Customize Project Lists中可以设置列表内容。

    一些缺省的列表字段是不可修改的,比如Statue列表。列表的项目储存在数据库中的ALL_LISTS表,我曾经尝试着修改数据库,但使用过程中,缺省的取值还是原来的而不是修改的。

    7.添加新字段

    CUSTOMIZE,选择Customize Project Entities,在里面的User Fields中可以添加新字段。

    在程序中,相应的会出现“其它信息项”框架,里面有新添加的字段,说真的,位置很难看。

    8.新建工程

    上面的工作做好后,会发现都是基于一个Project中的,当建立一个新的Project的时候,汉化内容、新字段等都没有了。

    解决方法很简单,建立新工程的时候,不使用Create,而使用Copy,选择一个已经建立好的工程和需要保留的内容进行复制。其实比较标准的做法是建立一个标准Project,把常用的内容全部建立好,以后建立新Project的时候,Copy标准Project就OK了。

    9.汉化所遗留的问题

    从本质来讲,TD是英文版的,后来大家为了方便,做了字段补丁和汉化补丁等,但英文版的本质是不变的。

    汉化后,会有一些问题。我遇到的一个问题就是TEST LAB中,添加重复的test plan的时候,就会出现错误。英文版没有此问题,猜测是因为添加相同记录的时候,会把字段前面自动添加[1]、[2]等,中文可能在添加的时候出现了问题。

    10.从其它的环境导入内容

    这个主要说的是从Excel或Word环境中导入内容到TD。

    点击Add-Ins Page,选择More TestDirector Add-ins,进入TD附加控件下载页面,下载Word和Execl控件并安装。

    打开需要导入的Excel文档,选择工具中的Export To TestDirector。最后填写的字段,必须要把使用的字段和Excel的列字面对应。
    还有要注意的是,Excel文档必须标准规范,不能有合并单元格,也不能有分格的情况。Excel里面的一行,代表输入的一条用例内容。

    Word的处理方法相当的复杂,就不多介绍了。

    11.关于项目的显示

    在Site Administraor中,Projects页,选中需要隐藏的项目,点击“Deactivate”,再登陆界面,就无法看到此项目了。

    12.关于项目的控制问题1

    TD对于各种元素的控制实在算不上很好,比如新添加的字段,位置和大小都是固定的,无法修改,比如如果新添加一个字段,需要录入大量的文本,实际只能看到最前面的几个字符而已。

    还有就是一些缺省的值无法修改(Plan、Subject等),在使用的时候,中间总夹杂着英文(特别是在出报表的时候,看着就讨厌)。

    13.关于项目的控制问题2

    在Test LAB中,如果使用了自己的State,在自己的状态前面无法使用小图标,和缺省的不一样。

    自己的状态几乎无法控制。状态分用例的状态和步骤的状态,如果步骤的状态使用了自定义的状态,结果用例的状态,还是以缺省定义的状态为主。而直接修改用例的状态为自定义的状态,则步骤的状态都变成了“No Run”,这是最讨厌的。

    14.录入用例的稳定性问题

    在TEST PLAN中录入的时候,总发现有的时候数据没有录入进去。界面也没有保存按钮,只能通过切换来看。

    在统计表也有同样的问题存在,没有有效的保存机制,总是不确定是否已经保存!!

    15.关于EXCEL导入用例的问题

    Excel导入的时候,需要选中导入的行,导入的时候,只导入选中的那些行。

    Excel导入的时候,如果Subject和Test Name一样,则只能导入第一行,其实这里TD应该处理一下的,比如名称加序号等。

    16.界面内容的控制

    TD这点不好,界面元素无法隐藏,特别是Tab,只能取消相应的控制。控制里面包含的也不全,一些操作无法取消。

    17.列问题

    列无法保存,只能每次手工进行调整。

    18.Execution Flow

    Execution Flow的150条限制有些莫名其妙。

    19.Tools中的内容

    Document Generator是比较好玩的,生成的文档比较大,唬人最好,很Easy就能做出几百页的文档。

    Product Information的版权信息(C)显示的是?,应该算一个bug吧。

    20.过滤条件

    过滤的时候,在符号的左右都需要加空格,特别是( ),不加空格不承认。

    21.用例的提交问题

    测试用例有些死板,因为自定义的东西加入不到Step面板中,写的时候也就有了一些限制。比如Actual只有用例的,没有步骤的,不方便。

    22.State的转换

    这里也不好,所有的状态都显示出来,只是无法选择限制的状态而已,其实最好把不需要的状态都隐藏,只显示受控制的状态。

    23.讨厌Unattached和Default

    去不掉,看着很不爽。

    24.Setup Workflow
    这个有什么用?好像都是控制Defect的,用处不大。
  • 51testing 首场招聘会有感

    liyun100 发布于 2008-03-11 13:29:45

    今天去参加了51testing组织的首届软件测试人员专场招聘会,一开始去的目的就是想了解一下目前国内软件测试市场的行情以及对软件测试人员的要求。

    早上晚起了些,将近中午才到招聘现场,发现有一些招聘摊位已经空了,但是还是有些比如HPSOHU,神州数码,Array,阿里巴巴,百度,文思创新,中软国际等知名企业前排满了前去应聘的人员。

    下面先给出几个单位的招聘海报内容,招聘海报内容是我从51testing 51job上搜罗而来的:

    2.以下是相关分析:

    (1)从各单位的招聘职位来看,主要分为以下几大类:

    • 流程改进方面:SQA
    • 管理方面:测试组长或测试经理
    • 软件测试方面:
    • WEB测试
    • 功能测试工程师
    • 性能测试工程师
    • 自动化测试师
    • 高级性能测试工程师
    • 高级自动化测试工程师
    • 手机测试
    • 硬件测试

    (2)各招聘岗位的任职要求:

    • SQA
    • 至少2年软件过程改进和SQA经验
    • 有一年以上软件产品开发经验,熟悉一门开发语言(如C/C++等)或脚本语言(如Per/python等)
    • 熟悉CMM/CMMI模型
    • 熟悉相关质量知识
    • 参与或主导过软件过程改进
    • 测试组长或测试经理
    • 至少三年以上QA管理经验
    • 至少两年以上质量管理或项目管理经验,熟悉CMM/CMMI质量模型
    • 精通Loadrunner,QTP,QC等测试工具.
    • 熟悉软件测试开发流程,熟悉掌握性能测试和自动化测试方法
    • 参与或主导过软件过程改进
    • 软件测试工程师:
    • 理解测试理论,熟练掌握各种软件的测试方法
    • 对测试流程有一定的理解, 熟悉缺陷管理流程/方法,善于进行缺陷分析
    • 熟练使用TD/ LoadRunner/ Winrunner/ Junit等多种测试工具
    • 掌握一种以上的编程语言,有开发经验的优先,C/C++/Java; Perl/Python/PHP
    • 熟悉网络技术
    • 熟悉软件开发环境
    • 熟悉操作系统:如windows,unix/linux,mac and so on
    • 相关数据库技术: MySql/Oracle

    (3)综合上述,要想做一个优秀而且全能的QA或软件测试师,需要具备以下几点:

    • 测试基础扎实
    • 对测试流程有自己独特的见解,可以根据不同的软件开发模型来定义软件测试模型
    • 掌握使用各种自动化测试工具Loadrunner,QTP 和测试管理工具QC,TD
    • 掌握一种以上的编程语言: C/C++/Java; Perl/Python/PHP
    • 熟悉软件开发环境
    • 熟悉各类操作系统
    • 熟悉相关数据库技术: MySql/Oracle
    • 熟悉网络开发技术
    • 了解CMM/CMMI加分
    • 英语优秀者加分.

     

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

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

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

    测试过程以序号标识!

    1.      添加

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

    可能存在的bug

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

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

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

                   可能存在的bug

    ü          输入字段出现错别字

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

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

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

                   可能存在的bug

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

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

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

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

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

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

    可能存在的bug

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

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

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

    可能存在的bug

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

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

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

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

    可能存在的bug

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

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

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

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

    可能存在的bug

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

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

    2.      查询

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

            可能存在的bug

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

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

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

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

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

    可能存在的bug

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

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

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

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

    可能存在的bug

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

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

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

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

    可能存在的bug

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

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

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

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

    可能存在的bug

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

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

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

    可能存在的bug

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

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

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

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

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

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

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

    可能存在的bug

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

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

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

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

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

    可能存在的bug(同上)

401/212>
Open Toolbar