博文

<软件测试的艺术>摘要(2007-03-20 21:31:00)

摘要:测试:是为发现错误而执行程序的过程 回归测试:保留测试,当程序其它部件发生更动后重新执行,这就是所谓的‘回归测试’ 黑盒测试:(数据驱动的测试/输入输出驱动的测试)在这种测试方法中,将程序视为一个黑盒子。测试目标与程序的内部机制和结构完全无关,而是将重点集中放在发现程序不按其规范正确运行的条件 白盒测试:(逻辑驱动的测试),允许我们检查程序的内部结构。对程序的逻辑结构进行检查,从中获取测试数据 一个测试用例必须包括两部分: 1)对程序的输入数据的描述(我自己理解为操作步骤) 2)对程序在上述输入数据下的正确输出结果的精确描述(理解为每一步操作步骤下的预期结果) 软件测试原则: 1)测试用例中一个必需部分是对预期输出或结果进行定义 2)程序员应当避免测试自己编写的程序 3)编写的软件的组织不应当测试自己编写的软件 4)应当彻底检查每个测试的执行结果 4)测试用例的编写不公应当根据有效和预料到的输入情况,而且也应当根据无效和求预料到的输入情况 6)检查程序是否‘未做其应该做的’仅是测试的一半,测试的另一半是检查程序是否‘做了其不应该做的’ 7)应避免测试用例后即弃,除非软件本身就是一个一次性的软件 8)计划测试时不应默许假定不会发现错误 9)程序某部分存在更多错误的可能性,与该部分已发现错误数量成正比 10)软件测试是一项极富创造性、极具挑战力的工作......

阅读全文(2128) | 评论:0

watir的IE框架下有用(引用)(2007-03-20 18:10:00)

摘要:开发测试案例(Developing Test Cases)
1.打开编辑器
2.以.rb为你的文件扩展名
3.在测试文件的第一句写上“require 'watir'”,确保可以访问Watir工具。
4.打开浏览器并转到要测试的应用
5.与之交互并设计你的testcase
6.在测试脚本中使用Watir方法
7.验证结果 与网页交互(Interacting With a Web Page)
当使用Watir开发测试脚本的时候,通过给网页上的对象发送消息来与之交互。 ie.text_field(:name , "q").set("bluescorpio")
ie.button(:value , "Click Me").click Watir语法(Watir Syntax)
1.使用Watir工具,需要在脚本中加上
require 'watir' 2.创建一个IE的测试实例
ie = Watir::IE.new
或者在创建的同时直接转到页面
ie = Watir::IE.start("http://mytestsite")
Watir使用start方法同时创建一个浏览器实例并转到一个页面。 3.页面导航
ie.goto("http://mytestsite") 4.操纵Web页面对象
4.1超链接
4.1.1使用Text属性点击超链接
ie.link(:text , "Pickaxe").click
对应的HTML代码为:
<a href="http://pragmaticprogrammer.com/titles/ruby/">Pickaxe</a>
4.1.2使用URL属性点击超链接
ie.link(:url , "http://pragmaticprogrammer.com/titles/ruby/").click
对应的HTML代码为:
<a href="http://pragmaticprogrammer.com/titles/ruby/">Test Site</a> 4.2复选框
4.2.1使用name属性设置复选框
ie.check......

阅读全文(2083) | 评论:0

查看html中frame的源代码(2007-03-20 16:29:00)

摘要:ruby写测试脚本,目前还只是停留在照猫画虎的阶段,发觉目前两个语句有帮助。   $ie.text_field(:name, "password").set('zhaodw123')
  $ie.button(:value, "登 录").click 但是如果是frame的话,网页代码显示如下: <HTML>
<HEAD>
<TITLE>自助系统ver2.6 </TITLE>
</HEAD>
<FRAMESET COLS="212,*" FRAMEBORDER="0" rows="*">
 <FRAME SRC="tree.htm" SCROLLING="yes" name="left">
     <FRAME SRC="inform/info.htm" SCROLLING="yes" name="right">
  </FRAMESET><noframes>你的浏览器不支持FRAME!</noframes>
</HTML>             找不到源代码 在网上查,有人说要把SRC的内容补充到地址栏即可,试了一下,对是对的,但是显示的不是我要的网页。后来,在右键-->在新窗口中打开处解决了:这样的话打开的是一个没有frame框架的html网页,可在下就可以查看源代码了。 $ie.frame("right").text_field(:name , "operLogName").set('patient123')
  $ie.frame("right").button(:value,"下一步").click 但是接下来,又出现了问题:如果不是test_field和button而是有超链接的图片,要怎么做?用link方法:
       ie.link(:url, /login/)        ......

阅读全文(4678) | 评论:0

Control Structures(2007-03-15 15:41:00)

摘要:ruby has all the usual control structure, such as if statements and while loops. 其它语言用括号来结束,但是ruby用end来结束。如
if count>10
   puts 'try again'
elsif tries==3
   puts "you lose"
else
   puts "Enter a number"
end           结束符号
ruby中的大部分语句都返回一个值,这个值可以做条件。如
while line=gets
   puts line.downcase
end        如果它没有到达下一个,则line=gets为false,否则为true. the assignment statement sets the variable line to either the nest line of test or nil, and then the while statement tests the value of the assignment, terminating the loop when it is nil......

阅读全文(1775) | 评论:0

hashtable(2007-03-15 14:59:00)

摘要:hashtable是一种常用的数据结构,(key, value).和数据组比较类似的数据结构形式。和数据不同的是,作为取出数值的主键,key(相当于数组的附加码-下标),可以是任意使用的对象,如下所示::inst_section = {'cello' => 'string','clarinet' => 'woodwind','drum' => 'percussion','oboe' => 'woodwind','trumpet' => 'brass','violin' => 'string'}cello作为为key,而string作为value,虽然hahstable一个键只能对应一个value,但是因为hashtable作为一个对象,他的value也可以是多种结构,如数组和hashtable本身。如之前的vector套用vector ruby提供了输入数组的简便方法a = [ 'ant', 'bee', 'cat', 'dog', 'elk' ]可以直接输入成a = %w{ ant bee cat dog elk },前面加上%W,之后即可直接输入数组的内容直接加空格即可,不用加“”和逗号了。注意之前为[ ]后来变成{} hashtable的检索为:int_section[ 'cello' ]=string。小程序段如下: hashtest = Hash.new()
hashtest = {'cello'=>'string','clarinet'=>'woodwind'}   难道要这么复杂的创建hashtable么?
puts hashtest['cello']        输出结果为string puts hashtest['string']    用value索引key,是没有结果的。有,为nil(其它语言中的null) puts hashtest['davy']          用没有key索引value,也为nil 注意键必须是唯一的,如:
hashtest = {'cello'=>'string','cello'=>'woodwind'}

阅读全文(1904) | 评论:0

pdf to word(2007-03-15 12:00:00)

摘要:http://www.opticsky.cn/htm_data/81/0511/1754.html 会提供一个PDF转换成word的下载链接,一个光学论坛,只要注册即可下载。......

阅读全文(1691) | 评论:0

化妆棉用法(2007-03-13 13:10:00)

摘要:前天和同学上街,买了一套护肤品,露得清,洗面奶+爽肤水。小姐推荐用水时最好用化妆棉。于是买了一个回来看看用法,总结如下: 分类及其用法:化妆棉共有两种,每一种都适合不同皮肤的人配有不同用法,在使用爽肤水的时候,要根据自己肌肤的需要来选择不同材质的化妆棉。如下:(1) 脱脂棉比较厚实,触感柔细,吸水能力较强,但是在擦拭的时候易脱屑。注重爽肤水的快速补水效果,最好选择脱脂棉材质的化妆棉,不要在脸上擦拭,而是轻轻地在脸上拍打,这样就发挥了脱脂棉吸水量强的优势,又避免了容易掉屑的问题。(2)无纺棉相对于脱脂棉来说比较轻薄,触感比较粗糙,吸水量比较差。而使用无纺棉,最好沾取爽肤水轻轻地擦拭,既节省爽肤水,又能在擦拭过程中起到去死皮的作用。所以,要根据不同的需求而选择不同的化妆棉,同时配合不同的手法。补:我买的是无纺棉,还好,没有掉屑,屈臣氏,9,9元100片,价格还是可以接受的 正确使用方法:用化妆棉的时候掌心向上,将化妆棉放在中指上用食指和无名指夹住,浸满化妆水(但是注意不要滴下),轻轻在脸部擦拭。 使用原因:相比直接用手涂抹化妆水,以正确的方法用棉片,化妆水渗透肌肤的能力最多可提高160%。这是因为手指或者手掌会吸收很大一部分的营养水,而顺着手指缝流失的分量也很可观,真正到面部肌肤被吸收的部分就少而又少了。 小锦囊:  1、化妆棉还可以做应急的面膜或眼膜使用,将化妆棉蘸满保湿或美白的化妆水,在眼周或需要的部位敷上5~10分钟。用敷面后的化妆棉擦拭面部和手部的肌肤,将保养进行到底。
  2、在出现肌肤局部过敏或长痘痘等肌肤问题的情况下,敷面膜的时候,可以将化妆棉垫在面膜和问题部位肌肤之间,防止肌肤脆弱的部位负担过重,症状更加严重。 仔细想想,近三十的人了,天天对着电脑,还是对自己好一点,细水长流。......

阅读全文(3774) | 评论:0

ruby中的变量(2007-03-12 15:53:00)

摘要: Ruby 变量和常量的种类包括全局变量、实变量、局部变量和常量,都是靠其名称的第一个字符来区分的。通常变量的第二个字符开始是使用字母、数字或“_”,内部变量中有一部分是「’$’ + 1 个符号」的变量(请参考内部变量)。 变量和常量指定的是特定对象。变量和常量的赋值,是为了指定新的对象进行操作。所以代入对象不会生成新的拷贝。 全局变量 例子:$foobar 以“$”开头的变量就是全局变量,程序的任何地方都能引用(因此应用时要特别注意)。全局变量没有必要事先声明。引用尚未初始化的全局变量其值为 nil。 实变量 例子:@foobar 以“@”开头的变量就是实变量,属于特定的对象。实变量可以在其类或子类的方法中引用。引用尚未初始化的实变量其值为 nil。 属于个体对象的变量称为实变量。名称以 @ 开头的变量,自动作为实变量使用。局部变量只有在 def ~ end 等结构内部使用时才有效,然而使用实变量的话,只要其对象存在,变量的值就会被保存。实变量一般作为对象的属性来使用。class Person def name return @name end def name=(name) @name = name end def hello print "我是" + @name + "" end end alex = Person.new alex.name = "艾力克斯" alex.hello # => 我是艾力克斯 局部变量 例子:foobar 以小写字母或“_”开头的标识符就是局部变量或方法调用。 在局部变量作用域(类、模块、方法定义的部分)中小写字母开头的标识符要初始赋值,这个赋值属于局部变量的声明。引用未声明的标识符会当作无参数的方法调用。 常量 例子:FOOBAR 以大写字母开头的标识符就是常量。常量的定义(和初始化)就是进行代入赋值,但是在方法里是不能定义的。访问未定义的常量会发生 NameError 异常。 常量可在类/模块中定义,除在该类/模块中可以引用外,该类的子类或嵌套该模块的类/模块中也能引用该常量。从外部引用常量要用到“::”运算符。class Foo FOO =......

阅读全文(2183) | 评论:0

Some Basic Ruby(2007-03-12 15:25:00)

摘要:def say_goodnight(name)
    result = "Good night, " + name
    return result
    end
   
    # Time for bed
    puts say_goodnight("John-Boy")
    puts say_goodnight("Mary-Ellen") As the example shows, Ruby syntax is clean: (1) don't need semicolons at the ends of statements as long as you put each statement on a sepatate line. (2) Ruby comments start with # character and run to the end of the line. (3) indentation is not sighificant (but using two-character indentation will make you friends in the community if you plan on distributing your code) Methods are defined with the keyword def , followed by the method name(in this case, say_goodnight) and the method's parameters between parentheses, and finished the body with the keyword end. Note that we didn't have to declare the variable result: it sprang into existence when we assigned to it. Ruby string object......

阅读全文(1744) | 评论:0

ruby learning(2007-03-12 15:07:00)

摘要:Methods are invoked by sending a message to an object. The message contains the method's name, along with any parameters the method may need. When an object receives a message, it looks into its own calss for a corresponding method. if found, that method is executed. If the method isn't found....  This business of methods and message may sound complicated, but in practive it is very natural. Let's look at some method calls:  "gin goint".length --> 9;  "Rick".index("c" ) --> 2; -1942.abc --> 1942 It's worth noting here a major difference between Ruby and most other languages. In Java, you'd find the absolute value of some number by calling a separate function and passing in that number: number = Math.abs(nmmber)  //JAVA                number = number.abs   //ruby   In ruby, the ability to determine an absolute value is built into numbers __ they take care of ......

阅读全文(1894) | 评论:0