希望在测试这条路上可以走得很远

发布新日志

  • 专访陆怡颐:测试人员应该如何参与敏捷

    2013-12-07 11:23:19

    【了解和认识敏捷】

    51Testing:您是从何时接触和认识敏捷的呢?

    陆怡颐:08年的时候,华为公司开始大规模推行敏捷开发,我有幸参与其中,成为所在产品线敏捷推行的责任人。通过在敏捷能力中心系统学习了敏捷开发,也接触了业内的一些敏捷专家。09年我所在的产品线也正式开始推行敏捷,我带了两个试点项目,开始实践敏捷,过程虽然曲折,倒是让我认识到了实践敏捷过程中的很多实际问题。[查看原文]

    51Testing:在您看来,什么是敏捷开发呢?

    陆怡颐:从起源来讲,敏捷其实就是一伙程序员被繁重的过程模型所束缚,为了能跳出来,而聚到一起发表的一份宣言。其实敏捷开发就是这一份宣言中强调的四条价值观:

    ● 个体与交互比流程和工具更有价值
    ● 可用的软件比冗长的文档更有价值
    ● 与客户的协作比合同谈判更有价值
    ● 对变化的响应比遵循计划更有价值

    我们要正确认识敏捷,就要从这四条价值观触发。切忌把敏捷当做一种超越了瀑布、V&V等传统模型的新模型,只要照着它的流程做就会如何如何。

    我从3个层次认识敏捷,首先是理念层次:敏捷是一种思想,帮助我们跳出传统的模型束缚,解决积累的管理问题。当然它并不空洞,有很多具体的操作可供我们参考(敏捷实践)。
    我把敏捷的四条价值观总结为3个敏捷理念——聚焦客户价值、加强团队协作、响应变化。

    所谓聚焦客户价值,需要做到:
    1、标识和消除软件开发中的浪费
    2、交付刚刚好的系统
    3、随时构建质量,不容忍缺陷
    4、及时消除技术债务,持续保持快速响应

    所谓加强团队协作,需要做到:
    1、认清团队的基本事实
    2、敏捷方式下的管理者转变
    3、敏捷方式下的团队成员转变[查看原文]

    51Testing:不管开发还是测试,对写文档都很头痛,那么敏捷开发中,是不是就可以不用再写文档了呢?

    陆怡颐:其实我们不能从这个角度看文档。敏捷创始人之一罗伯特马丁说过他的敏捷12条原则,其中一条就是“除非有必要,否则不需要写文档”。很多人误解了这句话,所以很多公司实践敏捷的时候,就是不写文档了。我把这种项目称为“裸奔”。

    罗伯特马丁这条敏捷原则其实是告诉我们,重新去审视文档的作用。文档的作用是什么?我总结为三个词:沟通、承诺、传承。那需求文档举例,需求说明书是干嘛的?是和产品和客户沟通、开发和测试沟通的,同时,也是对客户的一份承诺。这是一份非常重要的文档,所以是无法用口口相传的方式承载的(你不能和客户空口说白话),需求是必须文字化的。但我们不一定按照V&V的需求模板来写,文档格式有时候也是一种负担,我们可以应用更灵活的文字记载需求,比如SCRUM/XP流派都应用的优秀实践——用户故事。[查看原文]

    【有效实现敏捷开发】

    51Testing:敏捷开发在公司里面应该怎么推行呢?

    陆怡颐:这个话题就大了,简单说,推行敏捷一定要弄清楚,公司目前整个产品开发面临哪些问题,可以围绕价值、团队、变化这三个核心来分析,获得公司最高层

    推行敏捷并不是一、两个部门的事情,而是牵一发动全身的,它会涉及到业务部门的工作方式的变化、产品需求设计的变化、组织结构的变化、绩效引导的变化、文化的牵引,这是系统工程。需要自上而下的力量。

    其实从我个人角度讲,公司一下子就要全面推行敏捷开发,风险是很大的。倒不如先“低调”行事,只考虑公司产品开发面临的问题,然后借助一些有效的敏捷实践来进行改进[查看原文]

    51Testing:您觉得众多敏捷实践中,哪些实践最容易看到正面效果呢?

    陆怡颐:这个不好回答,因为这和公司的具体情况有关系。还是那句话,敏捷是思想,它是解决问题的。如果硬要回答,那么这么来说吧,我把敏捷实践大致分为两大类,分别是管理类实践,比如每日站会、状态墙、迭代验收、回顾会议等等,以及技术类实践,比如持续集成、测试驱动开发、重构等等。很多公司喜欢优先考虑做管理类实践,觉得容易实现。

    但是我却觉得,优先做管理类实践虽然好做,但是能看到的效果很有限。敏捷开发,它毕竟是一群程序员想出来的,所以更加偏技术一些。如果看过马丁那本《敏捷软件开发:原则、模式与实践》的,应该还有印象吧,他大量的篇幅都是讲的技术实践,这是最根本的东西,缺了这个,上层就站不住脚。公司不妨优先尝试测试驱动开发和持续集成。[查看原文]

    51Testing:很多公司这几年都在推行敏捷开发,但是从效果来看,收效甚微,您认为原因是什么呢?

    陆怡颐:原因当然是多方面的,但是我觉得最根本的是东西方价值观的差异。敏捷是国外一群研发人员搞出来的,所以带有很多西方特色。举个例子,关于敏捷的团队概念,在一个敏捷团队中,并不设置leader,而主张团队自运作自管理,团队依靠设置团队规则运作,产品负责人仅仅设置团队目标。国内可能很难理解,团队没有leader不就全乱套了吗,他们会不会偷懒?其实这是典型的y理论管理原则。这里可以简单谈一下道格拉斯·麦克里戈的著作《企业的人性面》一书中提出的xy理论。

    所谓x理论,或者说x假设,说的是:
    1、多数人天生是懒惰的,他们都尽可能逃避工作;
    2、多数人都没有雄心大志,不愿负任何责任,而心甘情愿受别人的指导;
    3、多数人的个人目标都是与组织的目标相矛盾的,必须用强制、惩罚的办法,才能迫使他们为实现组织目标而工作;
    4、在人群中广泛存在着高度的想象力、智谋和解决组织中问题的创造性;
    5、在现代工业条件下,一般人的潜力只利用了一部分。

    国外的管理理论一直以y假设为主,而国内我们习惯了以x假设来指导企业管理。我们的领导都习惯了事无巨细的管理,用绩效考核鞭策员工。员工也习惯了被动接受任务的指派。[查看原文]

    51Testing:测试人员应该如何参与敏捷呢?

    陆怡颐:敏捷开发本身没有对测试人员有明确的定位,从用户故事、结对编程、测试驱动开发、持续集成、迭代验收这些实践来看,测试人员可以参与用户故事中关于定义完成的部分,为了能够做到持续集成,测试人员在开发进行编程的同时,可以进行自动化测试用例的设计和实现,如果有一定编程能力,也可以参与结对编程。最后也可以主持迭代验收。但是不管从什么角度讲,测试人员要参与敏捷,都需要有比较过硬的技术才行。

    举个例子,敏捷开发的迭代节奏非常快,而且持续集成要求测试必须可以反复的执行,所以测试自动化的要求诉求非常大,但是在敏捷开发过程中,我们不能采用录制回放的方式进行自动化测试,录制回放是回归测试的做法,必须等待可测软件编码已完成,但这种做法对快节奏的迭代来说太没效率了,会拖长迭代周期。测试的自动化用例实现必须和被测软件编码是同步进行的,这样才能在持续集成中每天都有新集成[查看原文]

  • 转:单元格格式的自定义详解

    2009-09-16 16:05:35


    单元格格式的自定义详解
    ”G/通用格式”:以常规的数字显示,相当于”分类”列表中的”常规”选项。
    例:代码:”G/通用格式”。10显示为10;10.1显示为10.1。

    2、 “#”:数字占位符。只显有意义的零而不显示无意义的零。小数点后数字如大于”#”的数量,则按”#”的位数四舍五入。
    例:代码:”###.##”,12.1显示为12.10;12.1263显示为:12.13

    3、”0”:数字占位符。如果单元格的内容大于占位符,则显示实际数字,如果小于点位符的数量,则用0补足。
    例:代码:”00000”。1234567显示为1234567;123显示为00123
    代码:”00.000”。100.14显示为100.140;1.1显示为01.100

    4、”@”:文本占位符,如果只使用单个@,作用是引用原始文本,
    要在输入数字数据之后自动添加文本,使用自定义格式为:”文本内容”@;要在输入数字数据之前自动添加文本,使用自定义格式为:@”文本内容”。@符号的位置决定了Excel输入的数字数据相对于添加文本的位置。
    如果使用多个@,则可以重复文本。
    例:代码”;;;"集团"@"部"“,财务显示为:集团财务部
    代码”;;;@@@“,财务显示为:财务财务财务

    5、”*”:重复下一次字符,直到充满列宽。
    例:代码:”@*-”。”ABC”显示为”ABC-------------------”
    可就用于仿真密码保护:代码”**;**;**;**”,123显示为:************

    6、”,”:千位分隔符
    例:代码” #,###“,12000显示为:12,000

    7、\:用这种格式显示下一个字符。"文本",显示双引号里面的文本。
    “\”:显示下一个字符。和“”””用途相同都是显示输入的文本,且输入后会自动转变为双引号表达。
    例:代码"人民币 "#,##0,,"百万",与\人民币 #,##0,,\百万,
    输入1234567890显示为:人民币 1,235百万

    8、“?”:数字占位符。在小数点两边为无意义的零添加空格,以便当按固定宽度时,小数点可对齐,另外还用于对不等到长数字的分数
    例:分别设置单元格格式为”??.??”和”???.???”,对齐结果如下:
    输入12.1212 显示12.12 12.121

    9、颜色:用指定的颜色显示字符。可有八种颜色可选:红色、黑色、黄色,绿色、白色、兰色、青色和洋红。
    例:代码:“[青色];[红色];[黄色];[兰色]”。显示结果为正数为青色,负数显示红色,零显示黄色,文本则显示为兰色
    [颜色N]:是调用调色板中颜色,N是0~56之间的整数。
    例:代码:“[颜色3]”。单元格显示的颜色为调色板上第3种颜色。、

    10、条件:可以单元格内容判断后再设置格式。条件格式化只限于使用三个条件,其中两个条件是明确的,另个是“所有的其他”。条件要放到方括号中。必须进行简单的比较。
    例:代码:“[>0]”正数”;[=0];”零”;负数”。显示结果是单元格数值大于零显示正数,等于0显示零,小于零显示“负数”。

    11、 “!”:显示“"”。由于引号是代码常用的符号。在单元格中是无法用"""来显示出来“"”。要想显示出来,须在前加入“!”
    例:代码:“#!"”。“10”显示“10"”
    代码:“#!"!"”。“10”显示“10""”

    12、时间和日期代码常用日期和时间代码
    “YYYY”或“YY”:按四位(1900~9999)或两位(00~99)显示年
    “MM”或“M”:以两位(01~12)或一位(1~12)表示月。
    “DD”或“D”:以两位(01~31)或一位(1-31)来表示天。
    例:代码:“YYYY-MM-DD”。2005年1月10日显示为:“2005-01-10”


    excel单元格自定义格式1

    代码结构组成代码码分为四个部分,中间用“;”号分隔,具体如下:

    正数格式;负数格式;零格式;文本格式

    各个参数的涵义

    “G/通用格式”:以常规的数字显示,相当于“分类”列表中的“常规”选项。

    例:代码:“G/通用格式”。10显示为10;10.1显示为10.1。


    “0”:数字占位符。如果单元格的内容大于占位符,则显示实际数字,如果小于点位符的数量,则用0补足

    例:代码:“00000”。1234567显示为1234567;123显示为00123

    代码:“00.000”。100.14显示为100.140;1.1显示为01.100

    “#”:数字占位符。只显有意义的零而不显示无意义的零。小数点后数字如大于“#”的数量,则按“#”的位数四舍五入。

    例:代码:“###.##”,12.1显示为12.10;12.1263显示为:12.13

    “?”:数字占位符。在小数点两边为无意义的零添加空格,以便当按固定宽度时,小数点可对齐,另外还用于对不等到长数字的分数

    例:分别设置单元格格式为“??.??“和“???.???”,对齐结果如下:
    例:设置单元格自定义格式“# ??/???”。“1.25”显示为“1 1/4”

    “.”:小数点。如果外加双引号则为字符。

    例:代码“0.#”。“11.23”显示为“11.2”

    “%”:百分比。

    例:代码“#%”。“0.1”显示为“10%”

    “,”:千位分隔符。数字使用千位分隔符。如时在代码中“,”后空,则把原来的数字缩小1000倍。

    例:代码:“#,###”。“10000”显示为“10,000”

    代码:“#,”。10000显示为10。

    代码:“#,,”。“1000000”显示为“1”。

    “/”:显示下一个字符。和“”””用途相同都是显是输入的文本,且输入后会自动转变为双引号表达。不同的“/”是显后面的文本,双引号是显示双引中间的文本。

    例:代码“\ABC”或“”ABC””。均显示为“ABC”

    “*”:重复下一次字符,直到充满列宽。

    例:代码:“@*-”。“ABC”显示为“ABC-------------------”

    “_”(下划线):留下一个和下一个字符同等宽度的空格“文本”:显示双引号中的文本。

    例:代码:“”中国”@”显示为“中国河南”

    [颜色]:用指定的颜色显示字符。可有八种颜色可选:红色、黑色、黄色,绿色、白色、兰色、青色和洋红。

    例:代码:“[青色];[红色];[黄色];[兰色]”。显示结果为正数为青色,负数显示红色,零显示黄色,文

    本则显示为兰色

    [颜色N]:是调用调色板中颜色,N是0~56之间的整数。

    例:代码:“[颜色3]”。单元格显示的颜色为调色板上第3种颜色。

    [条件]:可以单元格内容判断后再设置格式。条件格式化只限于使用三个条件,其中两个条件是明确的,另个是“所有的其他”。条件要放到方括号中。必须进行简单的比较。

    例:代码:“[>0]”正数”;[=0];”零”;负数”。显示结果是单元格数值大于零显示正数,等于0显示零,小于零显示“负数”。

    “!”:显示“"”。由于引号是代码常用的符号。在单元格中是无法用"""来显示出来“"”。要想显示出来,须在前加入“!”

    例:代码:“#!"”。“10”显示“10"”

    代码:“#!"!"”。“10”显示“10""” 2.1.1.2 时间和日期代码常用日期和时间代码

    “YYYY”或“YY”:按四位(1900~9999)或两位(00~99)显示年

    “MM”或“M”:以两位(01~12)或一位(1~12)表示月。

    “DD”或“D”:以两位(01~31)或一位(1-31)来表示天。

    例:代码:“YYYY-MM-DD”。2005年1月10日显示为:“2005-01-10”

    代码:“YY-M-D”。2005年10月10日显示为:“05-1-10”

    “AAAA”:日期显示为星期。

    “H”或“HH”:以一位(0~23)或两位(01~23)显示小时

    “M”或“MM”:以一位(0~59)或两位(01~59)显示分钟

    “S”或“SS”:以一位(0~59)或两位(01~59)显示秒

    例:代码:“HH:MM:SS”。“23:1:15”显示为“23:01:15”

    [H]或[M]或[SS]:显示大于24小时的小时或显示大于60的分或秒。

    下面介绍几个常遇到的实例

    把12345显示为1.2

    代码:“0.,”

    设置千元显示且四舍五入保留两位小数要求:把“12345”显示为:12.35

    代码:“#.00,”

    在数字中任意插入字符要求:把“20050512”设置为:2005-05-12

    代码:“0000-00-00”

    在文本或数字前添加字符要求:“郑州市”显示为“河南省郑州市”

    代码:“"河南省"@”

    要求:“1035010121”显示为“手机号码1034010121”

    代码:“"手机号码"@”或“"手机号码"#”

    另外日期格式的显示方法

    "e":显示四位年份,2003版本有效。

    "bbbb":显示四位佛历年份,即以公元前543年为纪年元年,对1900年以后的日期有效。

    "mmm":显示英文月份的简称。

    "mmmm":显示英文月份的全称。

    "ddd":显示英文星期几的简称。

    "dddd":显示英文星期几的全称。

    关于特殊数字的显示

    中文小写数字 [DBNum1][$-804]G/通用格式

    例:代码:“[DBNum1][$-804]G/通用格式”。“1”显示为“一”

    代码:“[DBNum1][$-804]G/通用格式”。“13”显示为“一十三”

    中文小写数字 [DBNum2][$-804]G/通用格式

    例:代码:“[DBNum2][$-804]G/通用格式”。“1”显示为“壹”

    代码:“[DBNum2][$-804]G/通用格式”。“13”显示为“壹拾叁”

    中文小写数字 [DBNum3][$-804]G/通用格式

    例:代码:“[DBNum3][$-804]G/通用格式”。“123”显示为“1百2十3”

    特殊说明

    因为参数的特殊性,所以自定义的参数也是有关键字的。如函数=TEXT(A1,"b0000")就会显示错误。因为“b”就是保留的关键字,在自定义格式输入“b”系统就会自动填入“bb”。bb就是佛历年份,即以公元前543年为纪年元年,对1900年以后的日期有效。“bbbb”就是四位佛历年份。要解决=TEXT(A1,"b0000")的错误问题,需要这样定义函数=TEXT(A1,"""b""0000")。在自定义格式中定义就是“"b"0000”。其它的关键字自己体会如:“d”、“e”............


    单元格自定义格式2
    在Excel中自定义数字格式

    虽然Excel为用户提供了大量的数字格式,但还是有许多用户因为工作、学习方面的特殊要求,需要使用一些Excel未提供的数字格式,这时我们就需要利用Excel的自定义数字格式功能来帮助实现用户的这些特殊要求。

    一、在Excel中创建自定义数字格式的方法

    1、选择要设置格式的单元格或单元格区域。
    2、单击“格式”菜单中的“单元格”命令,然后单击“数字”选项卡。
    3、在“分类”列表中,单击“自定义”选项。
    4、在“类型”框中,编辑数字格式代码以创建所需的格式。

    在Excel自定义数字格式使用如下的表达方式:

     


    正数的格式        负数的格式       零的格式          文本的格式

    #,##0.00              [Red]-#,##0.00        0.00                 "TEXT"@


    在Excel自定义数字格式的格式代码中,用户最多可以指定四个节;每个节之间用分号进行分隔,这四个节顺序定义了格式中的正数、负数、零和文本。如果用户在表达方式中只指定两个节,则第一部分用于表示正数和零,第二部分用于表示负数。如果用户在表达方式中只指定了一个节,那么所有数字都会使用该格式。如果在表达方式中要跳过某一节,则对该节仅使用分号即可。

    二、自定义数字格式实例

    (一)自动添加文本

    (1)要在输入数据之后自动添加文本,使用自定义格式为:@"文本内容";要在输入数据之前自动添加文本,使用自定义格式为:"文本内容"@。@符号的位置决定了Excel输入的数字数据相对于添加文本的位置,双引号得用英文状态下的。

    实例一:

    在学生姓名前添加“初二(2)班”字样,就可以创建:

    "初二(2)班"@

    (2)在输入数字之后自动添加文本。

    实例二:

    如在日常财务工作中,常常需要在金额数字后加单位“元”,这时就可以使用:

    0.00"元"

    0"元"

    (二)在自定义数字格式中使用颜色

    要设置格式中某一部分的颜色,只要在该部分对应位置用方括号键入颜色名称或颜色编号即可。Excel中可以使用的颜色名称有[黑色]、[蓝色]、[青色]、[绿色]、[洋红]、[红色]、[白色]、[黄色]八种不同的颜色,此外Excel还可以使用[颜色X]的方式来设置颜色,其中X为1-56之间的数字,代表了56种不同的颜色。

    例如:当用户需要将单元格中的负数数字用蓝色来表示,只要使用“#,##0.00;[蓝色]-#,##0.00”自定义数字格式,用户在单元格中录入负数时,Excel就会将数字以蓝色显示。

    (三)在自定义数字格式中使用条件格式

    在Excel自定义数字格式中用户可以进行条件格式的设置。当单元格中数字满足指定的条件时,Excel可以自动将条件格式应用于单元格。Excel自定义数字格式中可以使用如下六种标准的比较运算符:

     


    运算符                 含义

    =                       等于

    >                       大于

    <                       小于

       >=                    大于等于

        <=                  小于等于

       <>                    不等于


    例如:在学生成绩工作表中,当我们想以红色字体显示大于等于90分的成绩,以蓝色字体显示小于60分的成绩时,其余的成绩则以黑色字体显示,这时只需将自定义数字格式设置为“[红色][>=90];[蓝色][<60];[黑色]”即可。

    值得注意的是,当你在以后需要继续使用刚才所创建的成绩条件自定义数字格式时,你会发现在“单元格格式”的“自定义”分类类型中找不到“[红色][>=90];[蓝色][<60];[黑色]”格式,这是因为Excel自动将你所创建的“[红色][>=90];[蓝色][<60]”格式修改成“[[红色][>=90]G/通用格式;[蓝色][<60]G/通用格式;[黑色]G/通用格式”,你只需选择此格式即可达到同样的使用效果。

    实例一:

    在工人奖金列表中,当我们想以小于50的显示“低”,50至100间显示“中等”,大于100的显示“高”。这时只需将自定义数字格式设置为:

    [<50]"低";[>100]"高";"中等"

    实例二:

    把“数学”、“语文”成绩中90分以上替换成“优”:

    [>=90]"优"

    (四)隐藏单元格中的数值

    在Excel工作表中,有时为了表格的美观或者别的因素,我们希望将单元格中的数值隐藏起来,这时我们使用“;;;”(三个分号)的自定义数字格式就可达到此目的。这样单元格中的值只会在编辑栏出现,并且被隐藏单元格中的数值还不会被打印出来,但是该单元格中的数值可以被其他单元格正常引用。在Excel中要想设置满足指定条件数字的格式,在自定义数字格式代码中必须加入带中括号的条件,条件由比较运算符和数值两部分组成。
     

  • 转载:recordset对象其它方法^_^

    2009-09-16 10:45:07

    1.AddNew 方法
    创建可更新 Recordset 对象的新记录。
    recordset.AddNew FieldList, Values
    FieldList   可选。新记录中字段的单个名称、一组名称或序号位置。
    Values   可选。新记录中字段的单个或一组值。如果 Fields 是数组,那么 Values 也必须是有相同成员数的数组,否则将发生错误。字段名称的次序必须与每个数组中的字段值的次序相匹配。
    我们一般是
    rs.addnew
    rs("xx")=xx
    rs("xx")=xx
    rs.update
    需要注意 的是在立即更新模式(调用 Update 方法时提供者会立即将更改写入基本数据源)下,调用不带参数的 AddNew 方法可将 EditMode 属性设置为 adEditAdd。提供者将任何字段值的更改缓存在本地。调用 Update 方法可将新记录传递到数据库并将 EditMode 属性重置为 adEditNone。如果传送了 Fields 和 Values 参数,ADO 则立即将新记录传递到数据库(无须调用 Update),且 EditMode 属性值没有改变 (adEditNone)。
    可 能大家会问在ASP中使用ADO的AddNew方法和直接使用“Insert into...”语句有和不同?那种方式更好?答:ADO的AddNew方法只是将“Insert into ”语句封装了起来,所以,当对大量数据进行操作的时候,直接使用SQL语句将会大大加快存取数据的速度,因为他减少了ADO的“翻译”时间。

    2、Delete 方法
    删除当前记录或记录组。
    recordset.Delete AffectRecords

    AffectRecords   AffectEnum 值,确定 Delete 方法所影响的记录数目,该值可以是下列常量之一。
    AdAffectCurrent 默认。仅删除当前记录。
    AdAffectGroup 删除满足当前 Filter 属性设置的记录。要使用该选项,必须将 Filter 属性设置为有效的预定义常量之一。
    adAffectAll 删除所有记录。
    adAffectAllChapters 删除所有子集记录。
    使用立即更新模式将在数据库中进行立即删除,否则记录将标记为从缓存删除,实际的删除将在调用 Update 方法时进行。

    3、Update 方法
    保存对 Recordset 对象的当前记录所做的所有更改
    recordset.Update Fields, Values
    Fields   可选。变体型,代表单个名称;或变体型数组,代表需要修改的字段(一个或多个)名称及序号位置。
    Values   可选。变体型,代表单个值;或变体型数组,代表新记录中字段(单个或多个)值。
    如果希望取消对当前记录所做的任何更改或者放弃新添加的记录,则必须调用 CancelUpdate 方法。

    4、CancelUpdate 方法
    recordset.CancelUpdate
    使用 CancelUpdate 方法可取消对当前记录所作的任何更改或放弃新添加的记录。在调用 Update 方法后将无法撤消对当前记录或新记录所做的更改,如果在调用 CancelUpdate 方法时添加新记录,则调用 AddNew 之前的当前记录将再次成为当前记录。如果尚未更改当前记录或添加新记录,调用 CancelUpdate 方法将产生错误。

    5、Find 方法
    搜索 Recordset 中满足指定标准的记录。如果满足标准,则记录集位置设置在找到的记录上,否则位置将设置在记录集的末尾。
    Find (criteria, SkipRows, searchDirection, start)
    criteria   字符串,包含指定用于搜索的列名、比较操作符和值的语句。
    SkipRows    可选,长整型值,其默认值为零,它指定当前行或 start 书签的位移以开始搜索。
    searchDirection    可选的 SearchDirectionEnum 值,指定搜索应从当前行还是下一个有效行开始。其值可为 adSearchForward 或

    adSearchBackward。搜索是在记录集的开始还是末尾结束由 searchDirection 值决定。
    start    可选,变体型书签,用作搜索的开始位置。
    criteria “比较操作符”可以是“>”(大于)、“<”(小于)、“=”(等于)、“>=”(大于或等于)、“<=”(小于或等于)、“<>”

    (不等于)或“like”(模式匹配)。 criteria 中的值可以是字符串、浮点数或者日期。字符串值以单引号分界(如“state = 'WA'”)。

    日期值以“#”(数字记号)分界(如“start_date > #7/22/97#”)。
    需要注意的是find是不支持多字段。但是可以用filter实现。"name='abc'"AND "city='sh'" 是不允许的

    6、Move 方法
    移动 Recordset 对象中当前记录的位置
    recordset.Move NumRecords, Start
    NumRecords    带符号长整型表达式,指定当前记录位置移动的记录数。
    Start    可选,字符串或变体型,用于计算书签。也可为下列值之一:
    AdBookmarkCurrent 默认。从当前记录开始。
    AdBookmarkFirst 从首记录开始。
    AdBookmarkLast 从尾记录开始。
    需要注意的是:
    (1)如果 NumRecords 参数大于零,则当前记录位置将向前移动(向记录集的末尾)。如果 NumRecords 小于零,则当前记录位置向后移动(向记录集的开始)。
    (2)从空的 Recordset 对象调用 Move 方法将产生错误。
    (3) 如果 Move 调用将当前记录位置移动到首记录之前,则 ADO 将当前记录放置在记录集(BOF 为 True)的首记录之前。在 BOF 属性已经为 True 时试图向后移动将产生错误;如果 Move 调用将当前记录位置移动到尾记录之后,则 ADO 将当前记录放置在记录集(EOF 为 True)的尾记录之后。在 EOF 属性已经为 True 时试图向前移动将产生错误。

    7、MoveFirst、MoveLast、MoveNext 和 MovePrevious 方法
    在指定 Recordset 对象中移动到第一个、最后一个、下一个或前一个记录并使该记录成为当前记录。
    recordset.{MoveFirst | MoveLast | MoveNext | MovePrevious}
    需要注意的是:
    (1) 使用 MoveNext 方法将当前记录向前移动一个记录(向 Recordset 的底部)。如果最后一个记录是当前记录并且调用 MoveNext 方法,则 ADO 将当前记录设置到 Recordset (EOF 为 True)的尾记录之后。当 EOF 属性已经为 True 时试图向前移动将产生错误。
    (2)使用 MovePrevious 方法将当前记录位置向后移动一个记录(向记录集的顶部)。Recordset 对象必须支持向后游标移动;否则方法调用将产生错误。如果首记录是当前记录并且调用 MovePrevious 方法,则 ADO 将当前记录设置在 Recordset (BOF 为 True)的首记录之前。而 BOF 属性为 True 时向后移动将产生错误。

    8、Clone 方法
    创建与现有 Recordset 对象相同的复制 Recordset 对象。可选择指定该副本为只读。
    Set rstDuplicate = rstOriginal.Clone
    rstDuplicate   对象变量,标识正在创建的复制 Recordset 对象。
    rstOriginal   对象变量,标识要被复制的 Recordset 对象。
    使用 Clone 方法可创建多个 Recordset 对象副本,这对于希望在给定的记录组中保留多个当前记录十分有用。使用 Clone 方法比使用与初始定义相同的定义创建和打开新 Recordset 对象要有效得多。
    也就是说
    rs.open exec,conn,1,1
    rs2.open exec,conn,1,1
    应该这么改写
    rs.open exec,conn,1,1
    rs2=rs.clone

    需要注意的是:
    (1)新创建副本的当前记录将设置为首记录。
    (2)关闭原始 Recordset 时并不关闭它的副本,而关闭某个副本也将不关闭原始 Recordset 或任何其他副本。

    9、Close 方法
    关闭打开的对象及任何相关对象。
    object.Close
    需要注意的是:
    (1)使用 Close 方法可关闭Recordset 对象以便释放所有关联的系统资源。关闭对象并非将它从内存中删除,可以更改它的属性设置并且在

    此后再次打开。要将对象从内存中完全删除,可将对象变量设置为 Nothing。
    (2)如果正在立即更新模式下进行编辑,调用 Close 方法将产生错误,应首先调用 Update 或 CancelUpdate 方法。

  • 转载:recordset对象方法Open详解

    2009-09-16 10:39:33

    Recordset对象方法
      
      Open方法
      
      recordset.Open Source,ActiveConnection,CursorType,LockType,Options
      
      Source
      Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。
      
      ActiveConnection
      Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。
      
      CursorType
      Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:
      
      
      常数 常数值 说明
      adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)
      adOpenKeyset 1 启动一个Keyset类型的游标
      adOpenDynamic 2 启动一个Dynamic类型的游标
      adOpenStatic 3 启动一个Static类型的游标
      
      以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。

      Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
      AbsolutePage 不支持 不支持 可读写 可读写
      AbsolutePosition 不支持 不支持 可读写 可读写
      ActiveConnection 可读写 可读写 可读写 可读写
      BOF 只读 只读 只读 只读
      Bookmark 不支持 不支持 可读写 可读写
      CacheSize 可读写 可读写 可读写 可读写
      CursorLocation 可读写 可读写 可读写 可读写
      CursorType 可读写 可读写 可读写 可读写
      EditMode 只读 只读 只读 只读
      EOF 只读 只读 只读 只读
      Filter 可读写 可读写 可读写 可读写
      LockType 可读写 可读写 可读写 可读写
      MarshalOptions 可读写 可读写 可读写 可读写
      MaxRecords 可读写 可读写 可读写 可读写
      PageCount 不支持 不支持 只读 只读
      PageSize 可读写 可读写 可读写 可读写
      RecordCount 不支持 不支持 只读 只读
      Source 可读写 可读写 可读写 可读写
      State 只读 只读 只读 只读
      Status 只读 只读 只读 只读
      AddNew 支持 支持 支持 支持
      CancelBatch 支持 支持 支持 支持
      CancelUpdate 支持 支持 支持 支持
      Clone 不支持 不支持
      Close 支持 支持 支持 支持
      Delete 支持 支持 支持 支持
      GetRows 支持 支持 支持 支持
      Move 不支持 支持 支持 支持
      MoveFirst 支持 支持 支持 支持
      MoveLast 不支持 支持 支持 支持
      MoveNext 支持 支持 支持 支持
      MovePrevious 不支持 支持 支持 支持
      NextRecordset 支持 支持 支持 支持
      Open 支持 支持 支持 支持
      Requery 支持 支持 支持 支持
      Resync 不支持 不支持 支持 支持
      Supports 支持 支持 支持 支持
      Update 支持 支持 支持 支持
      UpdateBatch 支持 支持 支持 支持
      
      其中NextRecordset方法并不适用于Microsoft Access数据库。
      
      LockType
      Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:
      
      
      常数 常数值 说明
      adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
      adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性
      adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作
      
      adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作
      
      
      Options
      Recordset对象Open方法的Options参数表示对数据库请求的类型,Options参数包含adCmdText、adCmdTable、adCmdStoredProc及adCmdUnknown等,分述如下:
      
      常数 常数值 说明  
      adCmdUnknown -1 缺省值,表示指定的CommandText参数类型无法确定
      adCmdText 1 表示指定的CommandText参数是一般的命令类型
      adCmdTable 2 表示指定的CommandText参数是一个存在的表的名称
      adCmdStoredProc 3 表示指定的CommandText参数是Stored Procedure的名称
     

  • 转:看搜狐研发中心测试工程师招聘信息

    2009-08-27 10:15:13

    软件自动化测试工程师招聘

    你是否能够通过编写测试程序来代替手工测试的繁琐工作?
    你是否具有扎实的计算机基础知识、很强编程能力以及设计能力?
    你是否有很宽的技术面,能够综合运用各种方法来解决实际遇到的问题?
    你是否不仅懂开发,还具有测试思想,能够用程序驱动的方式来进行软件质量保证?
    你是否不仅能够自己开发,还能利用一些商业或开源的工具来简化复杂的问题?

    如果你的回答是肯定的,你或许已经认识到:
    软件测试自动化已经是软件测试发展不可逆转的趋势;
    精通自动化测试技术,无论从企业的核心竞争力还是个人的工作技能来说,都有巨大的优越性。

    那么,请你加入我们专业的自动化测试团队。

    我们在做什么?
    也许有些人提到自动化测试,就认为是“利用测试工具进行录制回放”或者“执行已有的自动化测试程序”。但我们的工作方式不是这样。
    我们的自动化测试不是录制回放。
    录制回放只是自动化测试的最初级阶段,而我们目前正在使用自主开发的基于关键字驱动的自动化测试框架,框架具有模块化、层次化、松耦合等特点。使用框架,脚本、数据、业务分离,Case分层且能够复用。
            我们的自动化测试不仅仅是使用工具。
    我们会使用一些工具来简化复杂的问题,但这是不足够的。更多的情况下,我们会综合运用Windows底层编程、GUI编程、COM技术、HOOK技术等方法,辅助完成自动化测试需求。
           我们的自动化测试不是一种独立的行为。
    公司高层重视自动化测试,全面支持自动化测试。自动化测试纳入整体研发体系中,不仅在测试本身流程上、组织结构上进行了调整与改进,也在需求、设计、开发等各个环节进行配合。

    我们正在进行的工作
    使用java、C++等语言,自主开发API测试工具、评测工具、模拟工具、检查工具、性能测试工具。
    结合自动化测试工具并开发辅助脚本,以关键字驱动方式进行带有UI界面的自动化测试。
           为搜索产品测试组、桌面产品测试组提供多种自动化测试支持。比如输入法配置界面自动化测试、输入法效果评测、输入法按键流程测试、输入法切出速度检测、linux下内存泄露检查等。

    你能来从事什么工作?
    我们是一个正处于发展期的团队,需要各种角色的成员加盟。
    如果你精通自动化测试技术,加入我们的团队后,你能够与我们团队其他自动化测试方面的专家一起,进行自动化测试框架的设计、优化、扩展等方面的工作,并参与自动化测试流程的改进。发展方向为架构设计师。如果你有很强的开发功底及扎实的计算机基础知识,但目前还不是很熟悉自动化测试,加入我们的团队后,会以导师制度进行培训,以实践的方式不断加强自动化测试思想,并在多个项目中进行磨练。发展方向为高级自动化测试工程师。

    我们的未来什么样?
          自动化测试平台
    我们将会搭建公司统一的自动化测试平台,实现可视化操作、测试用例集中管理、测试执行调动与控制、测试结果综合分析等。具体分为:
     测试管理--管理不同产品,不同版本的测试需求、测试脚本、测试用例、测试数据
          测试调度--测试的调度,控制和执行中心
          测试资源--管理测试资源,用于执行测试用例
    测试维护--测试用例的维护
     测试分析--测试结果汇总及分析
          技术及管理
          改进自动化测试框架,进一步提高可重用性、增强可扩展性、加强稳定性、降低维护成本、更加快速定位问题。
      提高项目需求覆盖度
      缩短成本收回周期
        更好与研发体系融合

  • [转载][qtp]QTP描述性编程技术详解

    2009-08-17 14:12:04

    1、使用描述性编程的时机:

          录制方式的测试脚本创建是最简单和快捷的测试脚本开发方式,但是,它带来的问题也是明显的,就是依赖测试对象库,测试脚本中使用的对象都必须是测试对象库中的对象。

          测试过程中,有些界面元素是动态出现或动态变化的,在录制时,并没有被添加到对象库中。

          用描述性编程编写的测试脚本在运行时,QTP会使用测试脚本中给出的对象描述来查找对象,查找的位置不是对象库,而是与测试程序运行时QTP为其创建的临时测试对象版本进行匹配。

    描述性编程的使用方法:

       2、 有两种描述性的开发方法:

            a、一种是“直接描述”的方式 ,通常使用正则表达式来匹配动态的窗口名或其他变化数据。

             语法格式:TestObject("PropertyName1:=PropertyValue","...","PropertyNameX:=PropertyValueX")

            如:SwfWindow("Form1").Activate

                   FormName="MyForm.*"

                  SwfWindow("name:=" & FormName,"text:=" & FormName).Activate

            描述性编程的“后续强迫性”:也就是说,一旦父对象开始使用描述性编程,则后续子对象都要通过“描述”的方式(在对象的框中添加属性即可)出现。

             如:SwfWindow("name:=" & FormName,"text:=" & FormName).SwfButton("text:=ON").Click不能用SwfButton("ON").Click

           使用变量的方式简化很长的描述语句

           使用“With”关键字简化代码  With.....End With

          b、 另一种是使用“Description对象”的方式,用于返回对象包含的属性

                首先要使用该语句: Set MyDescription=Description.Create()    ‘MyDescription为变量 

                 FormName="MyForm.*"

                  MyDescription("name").Value=FormName

                  MyDescription("text").Value=FromName

                  SwfWindow(MyDescription).SefButton("text:=ON").Click

             注意:在这里,测试对象的属性描述都包装在了Description对象中,用Description对象的实例来代表一个测试对象的属性描述。

         使用Description对象的方式进行描述性编程同样有“后续强迫性”问题。

    3、设置Description对象的RegularExpression属性

           由于QTP把描述性编程中的的所有“描述”控件属性的值当成正则表达式来处理,所以,如果希 望输入的描述包含某些特殊符号,则在前面加“”。

           另一种方法是设置RegularExpression的属性为False。如:

           MyDescription("RegularExpression").Value=False

    4、在ChildObject对象中使用Description对象

         获取父对象下的子对象,参数为空表示获取所有子对象。如果要选择性的获取子对象,则需要用描述性编程的方式给ChildObjects一个输入参数。如:

           Set MyDescription=Description.Create()

           MyDescription("text").Value="button.*"     '匹配所有名字以“button”开头的对象

           Set MychildObject=SwfWindow("Form1").ChildObjects(MyDescription)  '获取所有符合条件的控件对象集合

           ChildObjectsCount=MychildObject.Count

            For counter=0 to MychildObjectsCount-1       '遍历对象集合并执行操作

                  MychildObject(Counter).Click

             Next

    5、用编程的方式创建检查点

          如果需要检查的对象属性没有存储在对象库中,可以自己创建检查点,并可写入测试结果中。

          通过GetROProperty添加对控件的动态属性的判断

          并可以把逻辑判断封装成函数,方便对所有控件的执行类似的检查时使用

Open Toolbar