发布新日志

  • 28岁的女人

    2010-05-12 16:58:48

    足够的年轻也足够的老,这就是女人的28岁。 

      该拥有的已经得之七七八八了,该体验的也知道酸甜苦辣了,该看穿的也不再执迷不悟了,然而,拨云见日之时,一切又似乎刚刚开始…… 

      28岁的女人已经经济独立。用赚来的第一笔钱为自己买来第一支唇膏的雀跃已经是很久以前的回忆。 

      28岁的女人已经好好地谈过几次恋爱了。真诚地爱过,也痛心地失望过,常在河边走,也掉了好几回鞋了,渐渐知道“爱情有多美,就有多么累”,不再沉迷于一醉方休,一晌贪欢的感情游戏了。懂得节制,懂得珍惜,知道“平平淡淡才是真”是青涩的青春时代的甘美果实。拨开爱情的迷雾,需要面对的始终是一个真实的男人,一段平凡的生活。 

      28岁的女人不再对男人充满少女式的天真幻想,虽然她们依然对幸福满怀渴望。她们对“公主和王子结了婚,从此幸福地生活”这一类的结局心存疑虑,因为经验使她们怀疑王子可能还有一个叫卡米拉的情人。 

      28岁是最自由的——适合结婚,单身也还不错,决不会被家人嫌做老姑婆;适合拍拖,但如果尚未找到明确“目标”,再等等也不急;做妈妈不算早,不生小孩也不算迟……总之你可以前瞻后顾,一切都还来得及,不必为了什么而非去干什么。 

      28岁的女人,有过去,有现在,也有未来。然而,时间过得真快…… 

  • QTP

    2010-04-07 12:01:46

    QTP疑难问题解答(不能识别对象)

    1. 运行错误:不能识别对象(Cannot identify object
    出现了这个错误时,就表示当前被测程序的窗口中没有符合条件的对象。
    出现这种错误,可能的原因有以下两种:
    1 对象此时在程序中没有显示或不存在。
    2)在程序中存在该对象,但是它的描述在后来发生了改变,导致与对象仓库中存储的信息不匹配,从而QTP无法识别对象。
    如果你正遇到“Cannot identify object”的问题,解决方法1.1
    1.1如何去识别对象描述(Identifying Test Object Descrīption Problems
    如果你能在被测程序中看到对象,但仍出现了“Cannot Identify Object”错误信息,这就表示仓库中对象的描述与程序中对象的描述一定存在着差异。
    解决对象描述问题的第一步是找到差异,最简单的方法是将仓库中对象的属性值与程序中对象的属性值进行比较(仓库中对象的属性值可在Object Repository窗口中查看,程序中对象的属性值可用Object Spy功能查看。)
    比较仓库中对象的属性值与程序中对象的属性值的操作见1.3
    在完成比较后,是否发现存在差异?
    如果是,请参考1.4
    如果否,请参考1.5
    1.2处理对象丢失问题(Solving Missing Object Problems
    在运行脚本时,QTP尝试进行某种操作,而该操作的对象在程序中却没有出现,出现这种情况的原因有以下几种:
    l           
    对象不再存在。对象已经被从程序中删除。
    解决方法:见1.2.1
    l           
    对象还没有装载。
    解决方法:见1.2.2
    l           
    当前的程序页面(或窗口)不正确,不是对象所在的页面(或窗口)。
    解决方法:见1.2.3
    l           
    前一个步骤没有正确执行。
    解决方法:见1.2.3
    1.2.1
    解决对象不再存在的问题
    如果对象已经不再在被测程序中存在,则应在脚本中修改或删除相关步骤。
    1.2.2
    解决对象装载超时的问题
    如果对象丢失的原因是因为没有足够的时间装载,尝试以下解决方案
    a.
    对于Web对象,增加Browser Navigation TimeoutFile>Setting>Web页签)时间。
    b.
    在包括该对象的步骤前使用Wait语句,让QTP在执行该步骤之前等待一段时间。
    1.2.3
    检查前面步骤的执行情况
    如果是因为打开了错误的页面(或窗口)导致对象丢失问题,或因为前一步骤执行错误导致对象丢失问题,则请按以下方法检查原因:
    a.
    如果怀疑在完成脚本后,被测程序又发生了改变,则检查对象的继承关系以及对象描述。参考1.1
    b.
    如果怀疑脚本错误,则检查脚本的每一个步骤。你可能是遗失了某个步骤,也可能是使用了不正确的方法或参数。
    1.3测试对象的属性值与Run-time对象的属性值的比较(Comparing Test Object and Run-Time Object Property Values
    根据以下的步骤比较测试对象与Run-time对象的属性值:
    1)   
    进入Object Repository窗口(Resources>Object Repository),选择对象。
    2)   
    笔记下对象的class以及它的各个属性及属性值。
    3)   
    打开被测程序,并打开包含被测对象的页面或窗口。
    4)   
    QTP中选择菜单Tools>Object Spy或点击Object Spy按钮,打开Object Spy对话框。
    5)   
    选择“Test Object Properties”选项。
    6)   
    点击右上角的按钮(带有手图标的),这时QTP窗口以及Object Spy对话框都被最小化。
    7)   
    在程序页面(或窗口)中点击目标对象,恢复Object Spy对话框,并在对话框中显示对象及其父对象(以树的形式显示),并在Properties页签中显示当前对象的属性及属性值。
    8)   
    这时Object Spy对话框的Properties页签中显示Run-time对象的所有属性,在此查看对象的class,以及它的属性及属性值,并将它与第2步中记下的内容进行比较。
    1.4解决对象描述存在的问题(Solving Object Descrīption Problems
    如果发现仓库中对象的属性值与程序中对象的属性值存在不同,你应该判断这个不同是个别对象的问题,还是其它同类对象也存在相同的问题。
    是所有(或多个)同类对象都存在问题吗?
    如果是,则参考1.6
    如果否,则参考
    1.7
    1.5关于父对象描述的识别问题(Identifying Parent Object Descrīption Problems

    对象的识别还与它所继承的父对象有关。
    如果你能在被测程序中看到对象,而且程序中对象的属性值与仓库中对象的属性值也是一致的,但仍然遭遇到了“Cannot identify object”错误,则这个错误可能与它的父对象有关(如仓库中父对象的属性值与程序中父对象的属性值不一致),也可能是仓库中的对象与程序中对象的继承关系不相同导致的。
    要判断是继承关系中的哪个父对象出现了问题,请尝试下面的方法之一:
    l           
    重新录制对象,比较新旧对象的父对象。
    欲了解如何完成比较,参考1.8
    l           
    对继承关系中的每个父对象,分别插入一个Exist语句,并运行该部分脚本。
    欲了解如果创建Exist语句,参考1.9
    注:你也可以使用Object Repository窗口中的Highlight in Application功能,在被测程序中定位对象。
    一旦找到了存在问题的父对象,接下来尝试以下方法:
    l           
    修复存在问题的父对象的描述。方法见1.4
    l           
    在专家视图的模式下,查找所有继承存在问题的实例并进行修正。
    举例:1.8.1
    1.6解决某类对象的识别问题(Solving Object Identification Problems for a Test Object Class
    如果你发现某类对象的对象描述对于被测程序来说都不是很合理,或你预期到对象描述中的某属性值是经常变化的,你可以在Object Identification对话框中改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。
    1.7   解决单个对象的描述问题(Solving Individual Test Object Descrīption Problems
    选择下列方法之一来解决对象的描述问题:
    l           
    如果被测程序中对象描述发生了改变,并且你也清楚改变的内容,并且该改变是永久性或长期性的,你可以直接手工修改仓库中对象描述中的相关属性值。
    l           
    如果被测程序中的对象的属性值依赖于前面的步骤或其它对象,则将该属性值参数化,这样就可以使用其它步骤的输出值为属性值。
    l           
    如果属性值的组成部分中,部分是固定的,部分是动态改变的,则可以将属性值设计为正则表达式。
    l           
    如果属性值是遵循某种规则变化的,或者是不可预期的,则从对象描述中移除该属性,并向对象描述中添加一个或多个属性以便于QTP进行对象识别。
    l           If you can only access the information on the property values during the run session, you can create and use functions that use programmatic Descrīptions to identify the object using property values retrieved earlier in the run session.
    l           
    如果在录制过程中对象是唯一的,但现在程序中出现了两个或多个描述相同的对象,但是它们在页面(或窗口)中的位置不相同,则应在Object PropertiesObject Repository窗口中,向对象描述中添加一个ordinal identifierindexlocation)。
    1.8重新录制对象,以判断父对象描述是否存在问题(Re-recording an Object to Identify Parent Object Descrīption Problems
    根据下面的指引,来判断父对象的问题。
    通过重新录制对象,来判断它的父对象是否存在问题:
    1)
    打开浏览器或程序,来到包含被测对象的页面或窗口。
    2)
    在关键字视图模式,选择最后一个组件(component),或在专家视图模式,将光标放在最后一个脚本步骤的下面。
    3)
    点击Record按钮,或选择Automation>Record
    4)
    点击(或操作)页面或窗口中的目标对象。
    5)
    点击Stop按钮,或选择Automation>Stop,完成步骤添加。
    6)
    右击新添加的步骤,并选择Object Properties右键菜单。
    7)
    Object Properties对话框中,点击Repository,打开Object Repository窗口,并选中了新对象。注意记下该对象的继承关系。
    8)
    Object Repository窗口中找到旧的对象(即存在问题的对象),将它的继承关系与新对象的继承关系进行比较。
    通过比较,可以检查到新旧对象是父对象的描述存在不同,还是它们的继承关系根本就不同。
    a.
    如果是父对象的描述问题,则修改父对象的描述。参见1.4.
    b.
    如果是对象的继承关系不正确(即具有不同的父对象)引起的问题,则在脚本中找到所有使用该继承关系的实例,将它们替换为正确的继承关系。

    举例:参见1.8.1
    1.8.1
    举例
    假设有一个带有Frame的网站,你录制了一个操作针对Image对象“Poster”的操作步骤。在Object Repository窗口,你可以Image对象的继承关系如下所示:
    MyCompany
    Browser
          MyCompany
    Page
              Main(Frame)
                   Poster(image)
    当你运行脚本时,网页看起来没有什么不同,但是识别Image对象时却出现了“Cannot identiry object”的错误提示。当你重新录制操作步骤,然后在Object Repository窗口中查看新的Image对象时,发现该对象的继承关系如下所示:
    MyCompany
    Browser
          MyCompany
    Page
               Poster(image)
    从中可以看出,Frame已经从Web Page

  • QTP

    2010-04-07 11:27:44

    1.8.1举例
    假设有一个带有Frame的网站,你录制了一个操作针对Image对象“Poster”的操作步骤。在Object Repository窗口,你可以Image对象的继承关系如下所示:
    MyCompany
    Browser
          MyCompany
    Page
              Main(Frame)
                   Poster(image)
    当你运行脚本时,网页看起来没有什么不同,但是识别Image对象时却出现了“Cannot identiry object”的错误提示。当你重新录制操作步骤,然后在Object Repository窗口中查看新的Image对象时,发现该对象的继承关系如下所示:
    MyCompany
    Browser
          MyCompany
    Page
               Poster(image)
    从中可以看出,Frame已经从Web Page中移除,所以尽管Image对象“Poster”的描述没有发生任何改变,但它的继承关系已经改变了。
    Object Repository窗口,你可以看到新旧Image对象“Poster”是两个完全不同的对象:旧的位于已经被移除的Frame对象之下,而新的则直接位于PageMyCompany”对象之下。
    修复这个问题,可以在脚本步骤中将旧的对象替换为新的对象。
    为了保持Object Repository窗口的整洁,你应删除那些已不再存在的对象(如本例中的Frame)。
    1.9创建Exist语句,以判断父对象的描述是否存在问题
    QTP
    在录制发生在某个对象上的操作时,也会同时去了解对象以及它的继承关系。因此,如果在运行过程中,QTP不能识别继承关系中的任何一个父对象,都会导致目标对象的识别失败。
    使用带有Exist方法的MsgBox语句,可以方便的检查出是继承关系中的哪个父对象出现了问题。
    假设在运行下面脚本时,你遇到了“Cannot identify Object”错误信息(但是可以确定对象仓库中Link对象的描述与当前程序中对象的描述是完全一致的):
    Browser("Yahoo!").Page("Yahoo!").Link("Arts & Humanities").Click
    你可以在该语句前面插入以下语句:
    Msgbox Browser("Yahoo!").Exist
    Msgbox Browser("Yahoo!").Page("Yahoo!").Exist
    Msgbox Browser("Yahoo!").Page("Yahoo!").Link("Arts & Humanities").Exist
    然后你从头开始运行脚本,发现第1行语句运行成功,并且弹出信息框,内容为“True”。
    但是,当QTP运行到第2步时,就弹出信息框,内容为“False”,表示不能找到Page object。这就证明Page对象存在问题。
    确定了出现问题的父对象以后,修复该问题。参见1.4
    2.        运行错误:对象不唯一(The object is not unique
    在被测页面或窗口中的同一父对象下,找到多个与仓库中对象描述相符的Run-time对象。
    请确定是只有个别对象存在此问题,还是此类对象的所有对象(或部分对象)存在此问题。
    此类对象的所有对象(或部分对象)都存在此问题吗?
    如果是,参考2.1
    如果否,参考2.2
    2.1为某对象类设置能唯一识别对象的描述规则(Configuring Unique Test Object Descrīptions for a Test Object Class
    如果你发现某类对象的对象描述都不足以唯一识别对象,你可以在Object Identification对话框中,改变该类的识别属性的设置,或定义该类的Smart Identification设置并启用Smart Identification机制,这样QTP就可以唯一识别对象了。
    2.2设置通唯一识别对象的对象描述(Creating a Unique Test Object Descrīption for an Object
    查看当前对象的描述,并尝试在程序中找到其它具有相同描述的对象并查看它们的描述。
    l           
    如果你找到了可以将它们区别开来的一个或多个属性,则修改仓库中对象的相关属性(如向描述中添加属性等),以使QTP在运行时可以唯一识别它。
    l           
    如果它们的识别属性完全相同,则在对象描述中为对象添加一个ordinal identifierindexlocation)。
    3.        运行错误:找不到父对象(Parent not found
    识别对象时,会先识别它的父对象是否正确。如果遇到“Parent not found”的错误信息,请尝试以下解决方法:
    l           
    修复出现问题的父对象的描述。参见1.4
    l           
    在脚本中找到继承关系不正确的实例,并修改为正确的继承关系。例如1.8.1
    4.        运行错误:无效的参数(Invalid arguments
    一个或多个方法的参数是无效的。
    参数无效可能是参数类型错误,也可能是参数个数不正确。
    根据以下建议,找到方法的正确语法:
    l           
    Keyword模式,如果方法包括参数,则在Value栏会显示该方法的参数提示。
    l           
    Expert模式,如果方法包括参数,则当你插入方法然后按下Shift+Ctrl+Space键时,QTP会显示该方法的参数的提示信息。(注:只有在Editor Options对话框的General页签中打开了Statement completion功能时才可以看到参数的提示信息。)
    5.        运行错误:不能识别itemCannot identify itemQTP不能识别方法参数中指定的列表或树对象的item时,请确认指定的item是否存在于对象之中。
    l           
    如果item不存在,则删除相关脚本步骤,或修改item
  • 明年楼市崩盘并非危言耸听

    2010-04-02 09:08:38

    明年楼市崩盘并非危言耸听

               ——任远

     

    最近网络上流行着一个“中国房地产崩盘时间表(中日对照)”,预测2011年中国楼市必将步日本后尘而崩盘。很多人看后都笑了,认为这个预测很傻很天真,还有很多业内专家都对此嗤之以鼻,高傲的宣称2011年不是中国楼市的崩盘年、五年内中国楼市都不可能崩盘,等等,一副坚决唱多的嘴脸!

    明年楼市崩盘并非危言耸听

       其实这个崩盘对比图在去年都已经出现,只不过当时并没有引起大家的重视,而现在当房价再一次吃了北京三块地王的壮阳药后雄起,这个预言才被人们所重视和流传,我不知道研究这个图标的人是怎样的心情,但我看了后对他却表达了崇高的敬意,因为,在“众人皆醉”疯狂炒房的今天,他却能“独醒”用一个生动形象现实的对比图表给国人敲响了楼市风险的警钟。

    我不相信中国政府的超高掌控力,可以将中国楼市玩弄于鼓掌之间,这一点连日本、美国等发达国家都无法做到,而我们一个发展中国家却能化险为夷,你信吗?

    现在的国人完全是被上涨预期迷住了双眼,认为房价还要大涨,不可能跌,这和07年股市6124点的时候人们的心理一个样,认为还要涨到8000点、10000点;而政府接二连三的调控并没有对房价又丝毫的遏制作用,反而更加助推了房价的疯涨,特别是近期面对更加疯狂的房价和民众呼声,政府却集中保持了沉默,这无疑向人们表明政府已经默认房价继续疯涨,这又在另一层面加重了购房客户的恐慌心理。

    放眼望去,政府信誓旦旦的保障性住房还没踪影,政府规定的保障性用地还没见出现,政府反复强调的中低价位土地和住房也仅仅停留在嘴上,而真正的商品房用地也在政府的恐吓和捂地惜售下变得更加稀少和高贵,特别是一二线城市,库存量无论是房源和土地都已经严重不足,而这些必将助长开发商的哄抬房价和捂盘惜售,愈是这样老百姓的心理愈是恐慌,这无疑将今年的房价再次推上一个更高的台阶。

    前几天,笔者担心的预测“今年房价会再涨一倍”,而现在我所担心的已经不止一倍,如果政府还保持现在态度不变和调控思路不变,房价涨幅可能还要更高,两倍?三倍?五倍?都有可能!

    而一旦那样,楼市离崩盘也不远矣!

  • SQL

    2010-03-31 11:13:11

    SQL语句实例

    6.5外连接查询

    select student.snosnamessexsagesdeptcnograde

    from studentsc

    where student.sno = sc.sno(*)

    6.6复合条件连接查询

    select student.sno, student.sname

    from student, sc

    where student.sno = sc.sno and sc.cno= ' 2 ' and sc.grade > 90

    七.嵌套查询

    7.1带有in谓词的子查询

    select snosname 最后在student关系中

    from student 取出snosname

    where sno in

    (select sno 然后在sc关系中找出选

    from sc 修了3号课程的学生学号

    where cno in

    (select cno 首先在course关系中找出

    from course 息系统的课程号,结果为3

    where cname= ‘信息系统));

    7.2带有比较运算符的子查询

    select snosnamesdept

    from student

    where sdept =

    select sdept

    from student

    where sname= ' 刘晨 '

    7.3带有any(某个)或all(任何一个)谓词的子查询

    all谓词 select snamesage

    from student

    where sage < all

    (select sage

    from student

    where sdept= ' is ') and sdept <> ' is ’;

    用集函数 select snamesage

    from student

    where sage <

    (select min(sage)

    from student

    where sdept= ' is ') and sdept <>' is

    7.4带有exists谓词的子查询

    select sname

    from student

    where not exists

    (select *

    from sc

    where sno = student.sno and cno='1')

  • SQL

    2010-03-31 11:11:52

    SQL语句实例

    (2) 确定范围

    select snamesdeptsage

    from student

    where sage not between 20 and 23

    (3) 确定集合

    select snamessex

    from student

    where sdept not in ( 'is''ma''cs' );

    (4) 字符串匹配

    4.1 = 运算符取代 like 谓词;!= < >取代 not like 谓词

    % (百分号) 代表任意长度(长度可以为0)的字符串

    _ (下横线) 代表任意单个字符

    select snamesnossex

    from student

    where sname not like '%'

    4.2当用户要查询的字符串本身就含有 % _ 时,要使用escape '<换码字符>' 短语对通符进行转义。

    select *

    from course

    where cname like 'db\_%i_ _' escape ' \ '

    (5) 涉及空值的查询

    使用谓词 is null is not null is null” 不能用= null” 代替

    select snocno

    from sc

    where grade is not null

    (6) 多重条件查询

    and的优先级高于or,可以用括号改变优先级

    select sname

    from student

    where sdept= 'cs' and sage<20

    三、对查询结果排序

    升序:asc;降序:desc;缺省值为升序

    asc:排序列为空值的元组最后显示;desc:排序列为空值的元组最先显示

    select *

    from student

    order by sdeptsage desc

    四、使用集函数

    计数 count[distinct|all] *

    count[distinct|all] <列名>

    计算总和 sum[distinct|all] <列名>

    计算平均值 avg[distinct|all] <列名>

    求最大值 max[distinct|all] <列名>

    求最小值 min[distinct|all] <列名>

    distinct短语:在计算时要取消指定列中的重复值

    1.select count(distinct sno)

    from sc

    2. select avg(grade)

    from sc

    where cno= ' 1 '

    五、对查询结果分组

    5.1使用group by子句分组

    select cnocount(sno)

    from sc

    group by cno

    5.2使用having短语筛选最终输出结果

    select sno, count(*)

    from sc

    where grade>=90

    group by sno

    having count(*)>=3;

    六.连接查询

    6.1广义笛卡尔积

    select student.* , sc.*

    from student, sc

    6.2等值连接(含自然连接)

    a.等值连接 select student.*sc.*

    from studentsc

    where student.sno = sc.sno

    b.自然连接

    select student.snosnamessexsagesdeptcnograde

    from studentsc

    where student.sno = sc.sno

    6.3非等值连接查询 比较运算符:><>=<=!=

    6.4自身连接查询

    select s1.snos1.snames1.sdept

    from student s1student s2

    where s1.sdept = s2.sdept and s2.sname = '刘晨'

    6.5外连接查询

    select student.snosnamessexsagesdeptcno 查看(452) 评论(0) 收藏 分享 管理

  • SQL

    2010-03-31 11:02:12

    SQL语句实例

    4.6让定义的默认值对象应用于字段上

    use xscj

    exec sp_bindefault 'zxf_default','xs.总学分'

    go

    4.7定义表

    create table book

    (book_id char(6),

    name varchar(20) not null,

    hire_date datetime not null)

    go

    4.8默认值对象的定义

    create default today as getdate()

    go

    4.9绑定默认值对象

    use xscj

    exec sp_bindefault 'today','book.hire_date'

    例子:

    //定义数据类型birthday_date

    use xscj

    exec sp_addtype birthday_date,'datetime','null'

    go

    //定义day默认值对象

    create default day as '1960,00,00'

    //将默认值对象day绑定到birthday_date数据类型

    use xscj

    exec sp_bindefault 'day','birthday_date'

    //域完整性约束

    use xscj

    create table kc

    (课程号 char(6) not null,

    课程名 char(8) not null,

    学分 tinyint check(学分>=0 and 学分<=10) null,

    备注 text null)

    go

    constraint fk foreign key(managerid) reference employees(managerid),

    constraint fk foreign key(depmid) reference deptments(depmid),

    SQL Server数据管理

    一.条件表达式

    1.1算数操作符 四则运算符,如+”-”*”/”以及取摸运算符%”

    select price + 5 newprice

    from products

    1.2比较操作符=”<”<=”>”>=”!= <>”

    select customername

    from customers

    where companyarea <> ‘beijing

    1.3字符操作符 like 操作符 通配符%”

    selec *

    from employees

    where emplyeename like ‘back%’

    1.4逻辑表达式 and (与) or (或) not (非)

    select employeeid

    from employees

    where emplyeename like p%

    and daysofholiday < 3

    二.插入数据

    2.1使用valuse 子句插入数据

    insert into shippers (companyname, phone)

    values ('snowflake shipping', '(503)555-7233')

    2.2使用insert… select语句添加数据

    insert costomers

    select substring(firstname, 1, 3) + substring(lastname, 1, 2),

    lastname, firstname , title, address, city, region ,

    postalcode, country, homephone, null

    from employee

    三.更新数据

    update语句

    update northwind.dbo.customers ||数据库名.所有者.表名||

    set city = s.city

    from suppliers s

    where s.companyname = customers.companyname

    .删除数据

    delete 语句

    delete northwind.dbo.orders

    where datediffmonthshippeddategetdate())> 6

    SQL Server数据查询

    1.     语句格式

    selectt [all|distinct] <目标列表达式> [<目标列表达式>] …

    from <表名或视图名>[ <表名或视图名> ] …

    [ where <条件表达式> ]

    [ group by <列名1> [having <条件表达式> ] ] 注:筛选只有满足指定条件的组

    [ order by <列名2> [ asc|desc ] ];注:升序|降序

    二.单表查询

    2.1使用列别名改变查询结果的列标题

    select sname name'year of birth: ’ birth

    2000-sage birthday,islower(sdept) department from student

    2.2.查询满足条件的元组

    (1) 比较大小

    select snamesage

    from student

    where not sage >= 20

    (2) 确定范围

    select snamesdeptsage

    查看(555) 评论(0) 收藏 分享 管理

  • SQL

    2010-03-31 10:59:48

    SQL语句实例

    4.7定义表

    create table book

    (book_id char(6),

    name varchar(20) not null,

    hire_date datetime not null)

    go

     

    4.8默认值对象的定义

    create default today as getdate()

    go

     

    4.9绑定默认值对象

    use xscj

    exec sp_bindefault 'today','book.hire_date'

     

    例子:

    //定义数据类型birthday_date

    use xscj

    exec sp_addtype birthday_date,'datetime','null'

    go

    //定义day默认值对象

    create default day as '1960,00,00'

    //将默认值对象day绑定到birthday_date数据类型

    use xscj

    exec sp_bindefault 'day','birthday_date'

    //域完整性约束

    use xscj

    create table kc

    (课程号 char(6) not null,

    课程名 char(8) not null,

    学分 tinyint check(学分>=0 and 学分<=10) null,

    备注 text null)

    go

    constraint fk foreign key(managerid) reference employees(managerid),

    constraint fk foreign key(depmid) reference deptments(depmid),

     

     

    SQL Server数据管理

    一.条件表达式

    1.1算数操作符 四则运算符,如+”-”*”/”以及取摸运算符%”

    select price + 5 newprice

    from products

     

    1.2比较操作符=”<”<=”>”>=”!= <>”

    select customername

    from customers

    where companyarea <> ‘beijing

     

    1.3字符操作符 like 操作符 通配符%”

    selec *

    from employees

    where emplyeename like ‘back%’

     

    1.4逻辑表达式 and (与) or (或) not (非)

    select employeeid

    from employees

    where emplyeename like p%

    and daysofholiday < 3

     

    二.插入数据

    2.1使用valuse 子句插入数据

    insert into shippers (companyname, phone)

    values ('snowflake shipping', '(503)555-7233')

     

    2.2使用insert… select语句添加数据

    insert costomers

    select substring(firstname, 1, 3) + substring(lastname, 1, 2),

    lastname, firstname , title, address, city, region ,

    postalcode, country, homephone, null

    from employee

     

    三.更新数据

    update语句

    update northwind.dbo.customers ||数据库名.所有者.表名||

    set city = s.city

    from suppliers s

    where s.companyname = customers.companyname

     

    .删除数据

    delete 语句

    delete northwind.dbo.orders

    where datediffmonthshippeddategetdate())> 6

     

    SQL Server数据查询

    1.     语句格式

    selectt [all|distinct] <目标列表达式> [<目标列表达式>] …

    from <表名或视图名>[ <表名或视图名> ] …

    [ where <条件表达式> ]

    [ group by <列名1> [having <条件表达式> ] ] 注:筛选只有满足指定条件的组

    [ order by <列名2> [ asc|desc ] ];注:升序|降序

     

    二.单表查询

    2.1使用列别名改变查询结果的列标题

    select sname name'year of birth: ’ birth

    2000-sage birthday,islower(sdept) department from student

    2.2.查询满足条件的元组

    (1) 比较大小

    select snamesage

    from student

    where not sage >= 20

     

    (2) 确定范围

    select sname

  • SQL

    2010-03-31 10:56:50

    SQL语句实例

    SQL Server数据库管理

    一,创建数据库

    create database demo

    on

    primary

    (name=demo_data,

    filename='d:\program files\microsoft sql server\mssql\data\demo_data.mdf',

    size=1mb,

    maxsize=20mb,

    filegrowth=10%)

    log

    on

    (name=demo_log,

    filename='d:\program files\microsoft sql server\mssql\data\demo_data.ldf',

    size=1mb,

    maxsize=5mb,

    filegrowth=1mb)

     

    二,管理数据库

    1.1,手工扩展现有数据库

    use master

    go

    alter database demo

    modify file

    (name=demo_data,

    maxsize=10mb,

    size=5mb,

    filegrowth=20%)

    go

     

    1.2,添加附加的数据库文件

    use master

    go

    alter database demo

    add file

    (name=demo2,

    filename=' d:\program files\microsoft sql server\mssql\data\demo_data2.ndf',

    size=5mb,

    maxsize=10mb,

    filegrowth=20%)

     

    1.3,执行 sp_helpdb 系统存储过程

    exec sp_helpdb demo

    1.4修改数据库文件初始长度

    alter database demo

    modify file

    (name=exampledb2_data(文件名),size=6)

    2.1,自动收缩数据库

    exec sp_dboption 'demo','autoshrink',true

     

    2.2手动收缩数据库

    整个数据库 dbcc shrinkdatabase (demo,25)

    :语法格式为 dbcc shrinkdatabase (database_name,target_percent),[notruncate

    |truncateonly]

    某个文件语法格式: dbcc shrinkfile (file_name|file_id,target_size),[emptyfile|n…|t…]同上

     

    3.1查看数据库信息

    execute sp_helpdb demo

     

    3.2数据库自动关闭

    sp_dboption demo , autoclose , true

     

    4.1开启数据库

    开启:
    use master
    exec sp_dboption 'database_name', 'offline', 'false'

     

    4.2挂起数据库

    挂起:
    use master
    exec sp_dboption 'database_name', 'offline', 'ture'

     

    5.1分离数据库

    exec sp_detach_db demo

     

    5.2附加数据库

    exec sp_attach_db demo

     

    6.1删除数据库

    drop database database_name[,…n]可一次删除多个数据库

     

    7.1数据库的备份和还原

    SQL Server表管理

    1.1创建表

    create table department

    (deptid int identity(50,1) not null primary key,

    depatname char(10),

    desciption char(50),

    managerid int)

     

    2.1添加列

    alter table salary

    add othersalary money null

     

    2.2修改列

    alter table salary

    alter column othersalary int

    2.3删除列

    alter table salary

    drop column othersalary

     

    3删除表

    drop table 表名,表名

     

    4数据完整性

    4.1设置双主键

    alter table employee

    add constraint pk_bh primary key (employeeid,deptid)

     

    4.2在定义表时定义一个字段的默认值约束

    use xscj

    create table xs

    (学号 char(6) not null,

    姓名 char(8) not null,

    专业名 char(10) null,

    性别 bit not null,

    出生时间 smalldatetime not null,

    总学分 tinyint null,

    备注 text null,

    入学日期 datetime default getdate() ||可在定义默认约束时指定了约束名:入学日期 datetime constraint dateflt default getdate()||

    go

     

    4.3在修改表时定义一个字段的默认值约束

    use xscj

    alter table xs

    add adddate smalldatetime null

    constraint adddatedflt default getdate() with values

    4.4默认值约束的删除

    use xscj

    alter table xs

    drop constraint adddatedflt

    go

     

    4.5 //默认值对象的定义

    go

    create default zxf_default as 0

     

    4.6让定义的默认值对象应用于字段上

    use xscj

    exec sp_bindefault 'zxf_default','xs.总学分'

    go

  • 响应时间/并发用户数/吞吐量/思考时间的计算

    2010-03-26 10:26:43

    响应时间/并发用户数/吞吐量/思考时间的计算

    一、软件性能的关注点

    对一个软件做性能测试时需要关注那些性能呢?

    我们想想在软件设计、部署、使用、维护中一共有哪些角色的参与,然后再考虑这些角色各自关注的性能点是什么,作为一个软件性能测试工程师,我们又该关注什么?

    首先,开发软件的目的是为了让用户使用,我们先站在用户的角度分析一下,用户需要关注哪些性能

    对于用户来说,当点击一个按钮、链接或发出一条指令开始,到系统把结果已用户感知的形式展现出来为止,这个过程所消耗的时间是用户对这个软件性能的直观印象。也就是我们所说的响应时间,当相应时间较小时,用户体验是很好的,当然用户体验的响应时间包括个人主观因素和客观响应时间,在设计软件时,我们就需要考虑到如何更好地结合这两部分达到用户最佳的体验。如:用户在大数据量查询时,我们可以将先提取出来的数据展示给用户,在用户看的过程中继续进行数据检索,这时用户并不知道我们后台在做什么。

    用户关注的是用户操作的相应时间。

    其次,我们站在管理员的角度考虑需要关注的性能点

    1、 系统的响应时间

    2、 服务器资源使用情况是否合理

    3、 应用服务器和数据库资源使用是否合理

    4、 系统能否实现扩展

    5、 系统最多支持多少用户访问、系统最大业务处理量是多少6、 系统性能可能存在的瓶颈在哪里

    7、 更换那些设备可以提高性能

    8、 系统能否支持7×24小时的业务访问再次

    站在开发(设计)人员角度去考虑

    1、 架构设计是否合理

    2、 数据库设计是否合理

    3、 代码是否存在性能方面的问题

    4、 系统中是否有不合理的内存使用方式

    5、 系统中是否存在不合理的线程同步方式

    6、 系统中是否存在不合理的资源竞争那么站在性能测试工程师的角度,我们要关注什么呢?

    一句话,我们要要关注以上所有的性能点

    二、软件性能的几个主要术语

    1、响应时间:对请求作出响应所需要的时间

    网络传输时间:N1+N2+N3+N4

    应用服务器处理时间:A1+A3

    数据库服务器处理时间:A2

    响应时间=N1+A1+N2+A2+N3+A3+N4

    2、并发用户数的计算公式

    系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是2000个,那么这个数量,就是系统用户数

    同时在线用户数:在一定的时间范围内,最大的同时在线用户数量

    平均并发用户数的计算:

    C=nL /

    其中C是平均的并发用户数,n是平均每天访问用户数,L是一天内用户从登录到退出的平均时间(操作平均时间),T是考察时间长度(一天内多长时间有用户使用系统)

    并发用户数峰值计算:

    C^约等于C + 3*根号C 

    其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论

    3、吞吐量的计算公式

     指单位时间内系统处理用户的请求数

     从业务角度看,吞吐量可以用:请求数/秒、页面数/秒、人数/天或处理业务数/小时等单位来衡量

     从网络角度看,吞吐量可以用:字节/秒来衡量

     对于交互式应用来说,吞吐量指标反映的是服务器承受的压力,他能够说明系统的负载能力

    以不同方式表达的吞吐量可以说明不同层次的问题,例如,以字节数/秒方式可以表示数要受网络基础设施、服务器架构、应用服务器制约等方面的瓶颈;已请求数/秒的方式表示主要是受应用服务器和应用代码的制约体现出的瓶颈。

    当没有遇到性能瓶颈的时候,吞吐量与虚拟用户数之间存在一定的联系,可以采用以下公式计算:F=VU * R / T

    其中F为吞吐量,VU表示虚拟用户个数,R表示每个虚拟用户发出的请求数,T表示性能测试所用的时间

    4、性能计数器

      是描述服务器或操作系统性能的一些数据指标,如使用内存数、进程时间,在性能测试中发挥着“监控和分析”的作用,尤其是在分析统统可扩展性、进行新能瓶颈定位时有着非常关键的作用。

      资源利用率:指系统各种资源的使用情况,如cpu占用率为68%,内存占用率为55%,一般使用“资源实际使用/总的资源可用量”形成资源利用率。

    5、思考时间的计算公式

      Think Time,从业务角度来看,这个时间指用户进行操作时每个请求之间的时间间隔,而在做新能测试时,为了模拟这样的时间间隔,引入了思考时间这个概念,来更加真实的模拟用户的操作。

    在吞吐量这个公式中F=VU * R / T说明吞吐量F是VU数量、每个用户发出的请求数R和时间T的函数,而其中的R又可以用时间T和用户思考时间TS来计算:R = T / TS

    下面给出一个计算思考时间的一般步骤:

    A、首先计算出系统的并发用户数

           C=nL / T     F=R×C

    B、统计出系统平均的吞吐量

               F=VU * R / T R×C = VU * R / T

    C、统计出平均每个用户发出的请求数量

       R=u*C*T/VU

    D、根据公式计算出思考时间TS=T/

     

    用门的概念理解响应时间和吞吐量之间的关系

      性能测试的目的是检查软件的平均响应时间或者吞吐量是否符合指定的标准。

      例如,当测试前已经获知在线人数为10000,可以设定性能测试的目的是检测软件典型交易的平均响应时间是否符合小于5秒的指标值。

      例如,当测试前不知道在线人数是多少,但是已经获知该软件在一定的时间周期内(t)必须处理N笔交易,可以设定性能测试的目的是检测软件典型交易的吞吐量是否符合大于25笔交易/秒的指标值。

      但是,在第二种情况出现时,还应该考虑若软件的吞吐量符合指定的指标值时,软件典型交易的平均响应时间是否符合小于5秒的指标值。

      为什么呢?

      我们可以利用“门”的概念来理解这里面的偏差!

      首先,我们假设如下的情况:

      共有5个人;

      有1扇门;

      一个人通过这扇门需要花费1秒的时间;

      此时,这扇门的吞吐量为1人/秒。5个人通过这扇门的平均响应时间为(1+2+3+4+5)/5=3秒。

      如何才能提高人的通过效率呢?即,如何才能提高门的吞吐量呢?

      有两种方法:

      (1)减小通过门的时间;

      (2)增加门的数量

      例如,

      (1)将一个人通过门的时间减小为0.5秒,门的吞吐量变成了2人/秒;

      (2)增加一个门,门的吞吐量也变成了2人/秒

      结果是:

      (1)5个人通过改善通过时间的门的平均响应时间为(0.5+1+1.5+2+2.5)/5=1.5秒;

      (2)5个人通过两扇门的平均响应时间为(1+1+2+2+3)/5=1.8秒

      此时,你可以发现,软件开发员改进软件处理并发交易请求的方法有两个,第一种是提高单个请求的处理速率,第二种是增加处理请求的线程的数量;或者是两种方法的组合。但是,不同方法的使用并不代表吞吐量得到了提高,而同时软件典型交易的平均响应时间也获得了相同值的改善。

      因此,在性能测试以吞吐量为检测指标的时候,不光要评估吞吐量是否符合了性能指标的要求,同时也必须考虑响应时间是否符合性能指标的要求。

      假设,在测试前,规定了吞吐量为大于25笔交易/秒,平均响应时间为小于5秒,在测试后,若实际吞吐量等于27笔交易/秒,不能仅凭这个27笔交易/秒就确定该软件的性能符合要求了,还要看平均响应时间是否符合要求。这时的平均响应时间可能大于5秒。

      而,如果测试前,规定了在线人数为10000,平均响应时间为小于5秒,在测试后,仅凭实际平均响应时间等于4秒就可以判断该软件的性能符合要求。

  • WEB测试流程

    2010-03-14 23:09:35

    WEB测试流程

     

     下面是网站流程、要求及测试报告 
    一个网站基本完工后,需要通过下面三步测试才可以交活。 
    一、 制作者测试,包括美工测试页面、程序员测试功能。在做完后第一时间内有制作者本人进行测试。 
    a)页面包括首页、二级页面、三级页面的页面在各种常用分辨率下有无错位;图片上有没有错别字;各连接是否是死连接;各栏目图片与内容是否对应等 
    b) 功能 达到客户要求;数据库连接正确;各个动态生成连接正确;传递参数格式、内容正确;试填测试内容没有报错;页面显示正确 
    二、 全面测试 根据交工标准和客户要求,由专人进行全面测试 
    也是包括页面和程序两方面,而且要结合起来测,保证填充足够的内容后不会导致页面变形。另外要检查是否有错别字,文字内容是否有常识错误。 
    三、 发布测试 网站发布到主服务器之后的测试,主要是防止环境不同导致的错误 
     
    软件缺陷的原则 
    软件缺陷区别于软件bug,它是在测试过程中出现的对系统有影响的,但是在设计中没有的或者对修改后的bug测试和开发人员有不同意见等 
    软件未达到产品说明书标明的功能。 
    软件出现了产品说明书指明不会出现的错误。 
    软件功能超出产品说明书指明范围。 
    软件未达到产品说明书虽未指出但应达到的目标。 
    软件测试员认为软件难以理解、不易使用、运行速度缓慢,或者最终用户认为不好。
     
    测试的主要方面: 

    一、功能测试 

    对于网站的测试而言,每一个独立的功能模块需要单独的测试用例的设计导出,主要依据为《需求规格说明书》及《详细设计说明书》,对于应用程序模块需要设计者提供基本路径测试法的测试用例。 

    1、链接测试 
       链接是Web应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面: 

    1)测试所有链接是否按指示的那样确实链接到了该链接的页面; 

    2)测试所链接的页面是否存在; 

    3)保证Web应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL地址才能访问。 

    链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web应用系统的所有页面开发完成之后进行链接测试。 

    Xenu------主要测试链接的正确性的工具 
    可惜的是对于动态生成的页面的测试会出现一些错误。 

    2、表单测试 

    当用户给Web应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。 

    要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。 

    B/S结构实现的功能可能主要的就在这里,提交数据,处理数据等如果有固定的操作流程可以考虑自动化测试工具的录制功能,编写可重复使用的脚本代码,可以在测试、回归测试时运行以便减轻测试人员工作量。 

    我们对UM子系统中各个功能模块中的各项功能进行逐一的测试,主要测试方法为:边界值测试、等价类测试,以及异常类测试。测试中要保证每种类型都有2个以上的典型数值的输入,以确保测试输入的全面性。 

    3、Cookies测试 
       Cookies通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies访问了某一个应用系统
        时,Web服务器将发送关于用户的信息,把该信息以Cookies的形式存储在客户端计算机上,这可用来创建动态的自定义页面或者存储登陆等信息。 

    如果Web应用系统使用了Cookies,就必须检查Cookies是否能正常工作而且对这些信息已经加密。测试的内容可包括Cookies是否起作用,是否按预定的时间进行保存,刷新对Cookies有什么影响等。
     
    4、设计语言测试 

    Web设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML的版本问题外,不同的脚本语言,例如Java、JavaScript、 ActiveX、VBScript或Perl等也要进行验证。 

    5、数据库测试 

      在Web应用技术中,数据库起着重要的作用,数据库为Web应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web应用中,最常用的数据库类型是关系型数据库,可以使用SQL对信息进行处理。 

    在使用了数据库的Web应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。 

    二、性能测试 

    网站的性能测试对于网站的运行而言异常重要,但是目前对于网站的性能测试做的不够,我们在进行系统设计时也没有一个很好的基准可以参考,因而建立网站的性能测试的一整套的测试方案将是至关重要的。 
    网站的性能测试主要从三个方面进行:连接速度测试、负荷测试(Load)和压力测试(Stress), 

    连接速度测试指的是打开网页的响应速度测试。负荷测试指的是进行一些边界数据的测试,压力测试更像是恶意测试,压力测试倾向应该是致使整个系统崩溃。 

    1、连接速度测试 

      用户连接到Web应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web系统响应时间太长(例如超过5秒钟),用户就会因没有耐心等待而离开。 

      另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。 

    2、负载测试 

      负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数量,也可以是在线数据处理的数量。例如:Web应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web应用系统能否处理大量用户对同一个页面的请求? 

    3、压力测试 

      负载测试应该安排在Web系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet上,接受负载测试,其结果才是正确可信的。 

      进行压力测试是指实际破坏一个Web应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web应用系统崩溃,接着当系统重新启动时获得存取权。 

    压力测试的区域包括表单、登陆和其他信息传输页面等。 

    采用的测试工具: 

    性能测试可以采用相应的工具进行自动化测试,我们目前采用如下工具 
    ab -----Apache 的测试工具 
    OpenSTA—开发系统测试架构 

    三、接口测试 
    在很多情况下,web 站点不是孤立。Web 站点可能会与外部服务器通讯,请求数据、 

    验证数据或提交订单。 

    1、 服务器接口 
    第一个需要测试的接口是浏览器与服务器的接口。测试人员提交事务,然后查看服务器 

    记录,并验证在浏览器上看到的正好是服务器上发生的。测试人员还可以查询数据库,确认事务数据已正确保存。 

    2、 外部接口 
    有些 web 系统有外部接口。例如,网上商店可能要实时验证信用卡数据以减少欺诈行 

    为的发生。测试的时候,要使用 web 接口发送一些事务数据,分别对有效信用卡、无效信用卡和被盗信用卡进行验证。如果商店只使用 Visa 卡和 Mastercard 卡, 可以尝试使用 Discover 卡的数据。(简单的客户端脚本能够在提交事务之前对代码进行识别,例如 3 表示 American Express,4 表示 Visa,5 表示 Mastercard,6 代表Discover。)通常,测试人员需要确认软件能够处理外部服务器返回的所有可能的消息。 

    3、错误处理 
    最容易被测试人员忽略的地方是接口错误处理。通常我们试图确认系统能够处理所有错 

    误,但却无法预期系统所有可能的错误。尝试在处理过程中中断事务,看看会发生什么情况? 

    订单是否完成?尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服 

    务器的连接。在这些情况下,系统能否正确处理这些错误?是否已对信用卡进行收费?如果 

    用户自己中断事务处理,在订单已保存而用户没有返回网站确认的时候,需要由客户代表致 

    电用户进行订单确认。 

    四、可用性测试 

    可用性/易用性方面目前我们只能采用手工测试的方法进行评判,而且缺乏一个很好的评判基准进行,此一方面需要大家共同讨论。 

    1、导航测试 

      导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web应用系统是否易于导航:导航是否直观?Web系统的主要部分是否可通过主页存取?Web系统是否需要站点地图、搜索引擎或其他的导航帮助? 

      在一个页面上放太多的信息往往起到与预期相反的效果。Web应用系统的用户趋向于目的驱动,很快地扫描一个Web应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web应用系统的结构,因此,Web应用系统导航帮助要尽可能地准确。 

      导航的另一个重要方面是Web应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web应用系统里面是否还有内容,内容在什么地方。 

    Web应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。 

    2、图形测试 

      在Web应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有: 

      (1)要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。 

      (2)验证所有页面字体的风格是否一致。 

      (3)背景颜色应该与字体颜色和前景颜色相搭配。 

      (4)图片的大小和质量也是一个很重要的因素,一般采用JPG或GIF压缩。 

    3、内容测试 

      内容测试用来检验Web应用系统提供信息的正确性、准确性和相关性。 

    信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行,例如使用Microsoft Word的"拼音与语法检查"功能;信息的相关性是指是否在当前页面可以找到与当前浏览信息相关的信息列表或入口,也就是一般Web站点中的所谓"相关文章列表"。 

    4、整体界面测试 

      整体界面是指整个Web应用系统的页面结构设计,是给用户的一个整体感。例如:当用户浏览Web应用系统时是否感到舒适,是否凭直觉就知道要找的信息在什么地方?整个Web应用系统的设计风格是否一致? 

    对整体界面的测试过程,其实是一个对最终用户进行调查的过程。一般Web应用系统采取在主页上做一个调查问卷的形式,来得到最终用户的反馈信息。 

      对所有的可用性测试来说,都需要有外部人员(与Web应用系统开发没有联系或联系很少的人员)的参与,最好是最终用户的参与。 

    五、兼容性测试 

    需要验证应用程序可以在用户使用的机器上运行。如果您用户是全球范围的,需要测试各种操作系统、浏览器、视频设置和 modem 速度。最后,还要尝试各种设置的组合。 

    1、平台测试 

      市场上有很多不同的操作系统类型,最常见的有Windows、Unix、Macintosh、Linux等。Web应用系统的最终用户究竟使用哪一种操作系统,取决于用户系统的配置。这样,就可能会发生兼容性问题,同一个应用可能在某些操作系统下能正常运行,但在另外的操作系统下可能会运行失败。 

    因此,在Web系统发布之前,需要在各种操作系统下对Web系统进行兼容性测试。 

    2、浏览器测试 

      浏览器是Web客户端最核心的构件,来自不同厂商的浏览器对Java,、JavaScript、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,JavaScript是Netscape的产品,Java是Sun的产品等等。另外,框架和层次结构风格在不同的浏览器中也有不同的显示,甚至根本不显示。不同的浏览器对安全性和Java的设置也不一样。 

    测试浏览器兼容性的一个方法是创建一个兼容性矩阵。在这个矩阵中,测试不同厂商、不同版本的浏览器对某些构件和设置的适应性。 

    采用测试工具: 

    通过白盒测试或者黑盒测试导出的测试用例,采用相应的工具进行测试,可以采用OpenSTA进行测试,此测试工具可以采用不同的浏览器进行测试。 

    3.视频测试 

    页面版式在 640x400、600x800 或 1024x768 的分辨率模式下是否显示正常? 字体是否太小以至于无法浏览? 或者是太大? 文本和图片是否对齐? 

    4.Modem/连接速率测试 
    是否有这种情况,用户使用 28.8 modem下载一个页面需要 10 分钟,但测试人员在测 

    试的时候使用的是 T1 专线? 用户在下载文章或演示的时候,可能会等待比较长的时间, 

    但却不会耐心等待首页的出现。最后,需要确认图片不会太大。 

    5、打印机测试 

    用户可能会将网页打印下来。因此网页在设计的时候要考虑到打印问题,注意节约纸张和油墨。有不少用户喜欢阅读而不是盯着屏幕,因此需要验证网页打印是否正常。有时在屏幕上显示的图片和文本的对齐方式可能与打印出来的东西不一样。测试人员至少需要验证订单确认页面打印是正常的。 

    6、组合测试 
    最后需要进行组合测试。600x800 的分辨率在 MAC 机上可能不错,但是在IBM兼容 

    机上却很难看。在 IBM 机器上使用 Netscape 能正常显示,但却无法使用 Lynx 来浏览。 

    如果是内部使用的 web 站点,测试可能会轻松一些。如果公司指定使用某个类型的浏览器, 

    那么只需在该浏览器上进行测试。如果所有的人都使用 T1 专线,可能不需要测试下载施加。 

    (但需要注意的是,可能会有员工从家里拨号进入系统) 有些内部应用程序,开发部门可能 

    在系统需求中声明不支持某些系统而只支持一些那些已设置的系统。但是,理想的情况是,
     
    六、安全测试 

    Web应用系统的安全性测试区域主要有: 

    1、 目录设置 
    Web 安全的第一步就是正确设置目录。每个目录下应该有 index.html 或 main.html 页 

    面,这样就不会显示该目录下的所有内容。如果没有执行这条规则。那么选中一幅图片,单击鼠标右键,找到该图片所在的路径"…com/objects/images"。然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。但是进入下一级目录 "…com/objects" ,点击 jackpot。在该目录下有很多资料,其中有些都是已过期页面。如果该公司每个月都要更改产品价格信息,并且保存过期页面。那么只要翻看了一下这些记录,就可以估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。 

    2.登录 

      现在的Web应用系统基本采用先注册,后登陆的方式。因此,必须测试有效和无效的用户名和密码,要注意到是否大小写敏感,可以试多少次的限制,是否可以不登陆而直接浏览某个页面等。  

    3.Session 

    Web应用系统是否有超时的限制,也就是说,用户登陆后在一定时间内(例如15分钟)没有点击任何页面,是否需要重新登陆才能正常使用。 

    4.日志文件 

    为了保证Web应用系统的安全性,日志文件是至关重要的。需要测试相关信息是否写进了日志文件、是否可追踪。 

    5.加密 

    当使用了安全套接字时,还要测试加密是否正确,检查信息的完整性。 

    6.安全漏洞 

    服务器端的脚本常常构成安全漏洞,这些漏洞又常常被黑客利用。所以,还要测试没有经过授权,就不能在服务器端放置和编辑脚本的问题。 

    目前网络安全问题日益重要,特别对于有交互信息的网站及进行电子商务活动的网站尤其重要。目前我们的测试没有涵盖网站的安全性的测试,我们拟定采用工具来测定, 

    工具如下 
    SAINT------- Security Administrator’s Integrated Network Tool 
    此工具能够测出网站系统的相应的安全问题,并且能够给出安全漏洞的解决方案,不过是一些较为常见的漏洞解决方案。 

    七、代码合法性测试 
    代码合法性测试主要包括2个部分:程序代码合法性检查与显示代码合法性检查。 

    1、程序代码合法性检查 
    程序代码合法性检查主要标准为《intergrp小组编程规范》,目前采用由SCM管理员进行规范的检查,未来期望能够有相应的工具进行测试。 

    2、显示代码合法性检查 
    显示代码的合法性检查,主要分为Html、JavaScript、Css代码检查,目前采用 
    HTML代码检查------采用CSE HTML Validator进行测试 
    JavaScript、Css也可以在网上下载相应的测试工具。 

    八、 文档测试 
    l、产品说明书属性检查清单 
    1)完整.是否有遗漏和丢失,完全吗? 单独使用是否包含全部内容 
    2)准确.既定解决方案正确吗? 目标明确吗? 有没有错误? 
    3)精确、不含糊、清晰.描述是否一清二楚? 还是自说自话?容易看懂和理解吗? 
    4)一致.产品功能能描述是否自相矛盾,与其他功能有没有冲突 
    5)贴切.描述功能的陈述是否必要?有没有多余信息? 功能是否原来的客户要求? 
    6)合理.在特定的预算和进度下,以现有人力,物力和资源能否实现? 
    7)代码无关.是否坚持定义产品,而不是定义其所信赖的软件设计,架构和代码 
    8)可测试性.特性能否测试? 测试员建立验证操作的测试程序是否提供足够的信息? 
    2、 产品说明书用语检查清单 
    1)说明。 对问题的描述通常表现为粉饰没有仔细考虑的功能----可归结于前文所述的属性.从产品说明书上找出这样的用语,仔细审视它们在文中是怎样使用的.产品说明书可能会为其掩饰和开脱,也可能含糊其词----无论是哪一种情况都可视为软件缺陷. 
    2)总是,每一种,所有,没有,从不.如果看到此类绝对或肯定的,切实认定的叙述,软件测试员就可以着手设计针锋相对的案例. 
    3)当然,因此,明显,显然,必然.这些话意图诱使接受假定情况.不要中了圈套. 
    4)某些,有时,常常,通常,惯常,经常,大多,几乎.这些话太过模糊."有时"发生作用的功能无法测试. 
    5)等等,诸如此类,依此类推.以这样的词结束的功能清单无法测试.功能清单要绝对或者解释明确,以免让人迷惑,不知如何推论. 
    6)良好,迅速,廉价,高效,小,稳定.这些是不确定的说法,不可测试.如果在产品说明书中出现,就必须进一步指明含义. 
    7)已处理,已拒绝,已忽略,已消除.这些廉洁可能会隐藏大量需要说明的功能. 
    8)如果...那么...(没有否则).找出有"如果...那么..."而缺少配套的"否则"结构的陈述.想一想"如果"没有发生会怎样. 

    相关的测试工具 
    OpenSTA 
    主要做性能测试的负荷及压力测试,使用比较方便,可以编写测试脚本,也可以先行自动生成测试脚本,而后对于应用测试脚本进行测试。 
    SAINT 
    网站安全性测试,能够对于指定网站进行安全性测试,并可以提供安全问题的解决方案。 
    CSE HTML Validator 
    一个有用的对于HTML代码进行合法性检查的工具 
    Ab(Apache Bench) 
    Apache自带的对于性能测试方面的工具,功能不是很多,但是非常实用。 
    Crash-me 
    Mysql自带的测试数据库性能的工具,能够测试多种数据库的性能。

  • 软件缺陷报告组成

    2010-03-14 23:01:35

    一个完整的软件缺陷报告通常由下列几部分组成:

      缺陷的标题;

      缺陷的基本信息;

      测试的软件和硬件环境;

      测试的软件版本;

      缺陷的类型;

      缺陷的严重程度;

    缺陷的处理优先级。

    复现缺陷的操作步骤;

      缺陷的实际结果描述;

      期望的正确结果描述;

    注释文字和截取的缺陷图像。

  • Web测试

    2010-03-14 22:56:36

    Web测试方法:

    n       1页面链接检查每一个链接是否都有对应的页面,并且页面之间切换正确;

    n       2相关性检查删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。

    n       3检查按钮的功能是否正确如update, cancel, delete, save等功能是否正确。

    n       4字符串长度检查输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.

    n       5字符类型检查在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.

    n       6标点符号检查输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.

    n       7中文字符处理在可以输入中文的系统输入中文,看会否出现乱码或出错.

    n       8检查带出信息的完整性在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致

    n       9信息重复在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.

    n       10检查删除功能在一些可以一次删除多个信息的地方,不选择任何信息,”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理.

    n       11检查添加和修改是否一致检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.

    n       12检查修改重名修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.

    n       13重复提交表单一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。

    n       14检查多次使用back键的情况在有back的地方,back,回到原来页面,back,重复多次,看会否出错.

    n       15Search检查在有search功能的地方输入系统存在和不存在的内容,search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确.

    n       16输入信息位置注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方.

    n       17上传下载文件检查上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。

    n       18必填键检查应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*

    n       19快捷键检查是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。

    n       20回车键检查在输入结束后直接按回车键,看系统处理如何,会否报错。

     

     主要包括:

    n       1. 功能测试

    n         1.1.链接测试

    n         链接是Web 应用系统的一个主要特征,它是在页面之间切换和指导用户去一些不知道地址的页面的主要手段。链接测试可分为三个方面。首先,测试所有链接是否按指示的那样确实链接到了该链接的页面;其次,测试所链接的页面是否存在;最后,保证Web 应用系统上没有孤立的页面,所谓孤立页面是指没有链接指向该页面,只有知道正确的URL 地址才能访问。

    n         链接测试可以自动进行,现在已经有许多工具可以采用。链接测试必须在集成测试阶段完成,也就是说,在整个Web 应用系统的所有页面开发完成之后进行链接测试。

    n         1.2. 表单测试

    n         当用户给Web 应用系统管理员提交信息时,就需要使用表单操作,例如用户注册、登陆、信息提交等。在这种情况下,我们必须测试提交操作的完整性,以校验提交给服务器的信息的正确性。例如:用户填写的出生日期与职业是否恰当,填写的所属省份与所在城市是否匹配等。如果使用了默认值,还要检验默认值的正确性。如果表单只能接受指定的某些值,则也要进行测试。例如:只能接受某些字符,测试时可以跳过这些字符,看系统是否会报错。

    n       1.3.Cookies测试

    n         Cookies 通常用来存储用户信息和用户在某应用系统的操作,当一个用户使用Cookies 访问了某一个应用系统时,Web 服务器将发送关于用户的信息,把该信息以Cookies 的形式存储在客户端计算机上,这可用来创建动态和自定义页面或者存储登陆等信息。

    n         如果Web 应用系统使用了Cookies ,就必须检查Cookies 是否能正常工作。测试的内容可包括Cookies 是否起作用,是否按预定的时间进行保存,刷新对Cookies 有什么影响等。

    n         1.4.设计语言测试

    n         Web 设计语言版本的差异可以引起客户端或服务器端严重的问题,例如使用哪种版本的HTML 等。当在分布式环境中开发时,开发人员都不在一起,这个问题就显得尤为重要。除了HTML 的版本问题外,不同的脚本语言,例如Java JavaScript. ActiveX VBScript. Perl 等也要进行验证。

    n       1.5.数据库测试

    n         Web 应用技术中,数据库起着重要的作用,数据库为Web 应用系统的管理、运行、查询和实现用户对数据存储的请求等提供空间。在Web 应用中,最常用的数据库类型是关系型数据库,可以使用SQL 对信息进行处理。

    n         在使用了数据库的Web 应用系统中,一般情况下,可能发生两种错误,分别是数据一致性错误和输出错误。数据一致性错误主要是由于用户提交的表单信息不正确而造成的,而输出错误主要是由于网络速度或程序设计问题等引起的,针对这两种情况,可分别进行测试。

    n       2. 性能测试

    n         2.1.连接速度测试

    n         用户连接到Web 应用系统的速度根据上网方式的变化而变化,他们或许是电话拨号,或是宽带上网。当下载一个程序时,用户可以等较长的时间,但如果仅仅访问一个页面就不会这样。如果Web 系统响应时间太长(例如超过5 秒钟),用户就会因没有耐心等待而离开。

    n         另外,有些页面有超时的限制,如果响应速度太慢,用户可能还没来得及浏览内容,就需要重新登陆了。而且,连接速度太慢,还可能引起数据丢失,使用户得不到真实的页面。

    n         2.2.负载测试

    n         负载测试是为了测量Web 系统在某一负载级别上的性能,以保证Web 系统在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web 系统的用户数量,也可以是在线数据处理的数量。例如:Web 应用系统能允许多少个用户同时在线?如果超过了这个数量,会出现什么现象?Web 应用系统能否处理大量用户对同一个页面的请求?

    n        

    n       2.3.压力测试

    n         负载测试应该安排在Web 系统发布以后,在实际的网络环境中进行测试。因为一个企业内部员工,特别是项目组人员总是有限的,而一个Web 系统能同时处理的请求数量将远远超出这个限度,所以,只有放在Internet 上,接受负载测试,其结果才是正确可信的。

    n         进行压力测试是指实际破坏一个Web 应用系统,测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web 应用系统会不会崩溃,在什么情况下会崩溃。黑客常常提供错误的数据负载,直到Web 应用系统崩溃,接着当系统重新启动时获得存取权。

    n         压力测试的区域包括表单、登陆和其他信息传输页面等。

    n       3. 可用性测试

    n         3.1.导航测试

    n         导航描述了用户在一个页面内操作的方式,在不同的用户接口控制之间,例如按钮、对话框、列表和窗口等;或在不同的连接页面之间。通过考虑下列问题,可以决定一个Web 应用系统是否易于导航:导航是否直观?Web 系统的主要部分是否可通过主页存取?Web 系统是否需要站点地图、搜索引擎或其他的导航帮助?

    n         在一个页面上放太多的信息往往起到与预期相反的效果。Web 应用系统的用户趋向于目的驱动,很快地扫描一个Web 应用系统,看是否有满足自己需要的信息,如果没有,就会很快地离开。很少有用户愿意花时间去熟悉Web 应用系统的结构,因此,Web 应用系统导航帮助要尽可能地准确。

    n         导航的另一个重要方面是Web 应用系统的页面结构、导航、菜单、连接的风格是否一致。确保用户凭直觉就知道Web 应用系统里面是否还有内容,内容在什么地方。

    n         Web 应用系统的层次一旦决定,就要着手测试用户导航功能,让最终用户参与这种测试,效果将更加明显。

    n       3.2.图形测试

    n         Web 应用系统中,适当的图片和动画既能起到广告宣传的作用,又能起到美化页面的功能。一个Web 应用系统的图形可以包括图片、动画、边框、颜色、字体、背景、按钮等。图形测试的内容有:

    n         1 )要确保图形有明确的用途,图片或动画不要胡乱地堆在一起,以免浪费传输时间。Web 应用系统的图片尺寸要尽量地小,并且要能清楚地说明某件事情,一般都链接到某个具体的页面。

    n         2 )验证所有页面字体的风格是否一致。

    n         3 )背景颜色应该与字体颜色和前景颜色相搭配。

    n         4 )图片的大小和质量也是一个很重要的因素,一般采用JPG GIF 压缩。

    n       3.3.内容测试

    n         内容测试用来检验Web 应用系统提供信息的正确性、准确性和相关性。

    n         信息的正确性是指信息是可靠的还是误传的。例如,在商品价格列表中,错误的价格可能引起财政问题甚至导致法律纠纷;信息的准确性是指是否有语法或拼写错误。这种测试通常使用一些文字处理软件来进行 查看(498) 评论(0) 收藏 分享 管理

  • 哆啦A梦的由来

    2009-08-13 12:38:10

     
    资料图片:哆啦A梦的由来
  • 叮当大结局

    2009-08-13 12:26:26

     

    转载:叮当大结局

    机器猫最后一集在日本播映.   

     世界,真的不是美丽的——主角大雄突然从睡梦中惊醒,发现自己躺在病床上。原来,世界上从没有过机器猫、也没有万能口袋、也没有.....总之,主角是由于极度的自闭症被送入精神病院的病人,已经在医院住了八年,静子是主角儿时暗恋的同伴,主角所有的记忆都停留在八年前的早晨。一切都是主角的幻想......   

      

     这个结局反映了日本社会的冷漠,也表达了作者对社会的极度失望...后来,由于读者极其反感其结局(同时期日本自杀率明显UP,至少有一百多人是直接受其结局影响而对生活感到决望,《机器猫》是这些自杀者唯一美好单纯的心理慰藉),所以才决定不在动画版中使用此结局。(国内当然更看不到)在小学馆的博物馆中,珍藏着藤本弘先生的最后一页作品《野比太发条都市大冒险》藤本弘先生并没有完成最后的作品就去世了,死因是积劳成疾。

      

       机器猫的结局官方最终敲定为传闻结局:

      

      小叮当没电——某天,大雄如往常般,忘了做作业,在学校被老师骂;也如往常般被技安、阿福他们欺负。就连未来的太太静宜也答应要先嫁给别人。总之,对大雄来讲,生活就是一连串类似事件的反覆。今天跟昨天没什么两样。

      

      唯一的变化是,叮当突然变成植物机器。无论大雄怎么踢、打和骂,叮当都没有反应。大雄不知道叮当到底发生了什么事,只伤心得哭了整晚。可是,无论大雄再伤心透了,叮当也只是闻风不动地坐在柱子前。大雄伸手到口袋内试试,但口袋也豪无任何动静。最后大雄想起抽屉里的时间飞行机,就穿著睡衣飞到22世纪去找叮当的妹妹叮铃。叮铃还没完全听完说明,就被大雄催著坐上飞行机飞回20世纪。叮铃一看哥哥动也不动,马上知道是电池用完了。正想换电池时,叮铃想起一个非常重大的事。没有备用电源……大雄不懂得其中意思,只在一旁催。叮铃只好问大雄:你愿意让哥哥跟你的回忆都消失吗?原来旧型的猫机器人的耳朵里,装有备用电源,以便充电时能保持至今为止的记忆。可是……叮当没有耳朵!(这是众所皆知的吧。)

      

      大雄终于里解了事情的困难。种种回忆在大雄的脑海里奔腾大雄跟叮当曾飞到过去、未来,也曾到恐龙世界,海底世界,更在宇宙打过仗……叮铃拼命解释给大雄听。若要装新电池,叮当醒来时会失去一切与大雄曾有过的回忆。若保持现状,记忆不会消失。结果,大雄选择保持现状。此时,大雄还是小学六年级。十数年后……从海外归国的大雄,已成长为英俊迷人的青年,并就职于某家尖端科技的企业。他身边的新娘,正是宜静。

      

      当年,叮铃回到22世纪后,大雄只跟身边的人们说,叮当回到未来的世界去了。时日一久,也就没人再提叮当的事。不过,叮当其实一直被保管在大雄家的壁橱里。大雄为了修好叮当,拼命用功读书,然后国中、高中、大学,成绩逐年升腾。最后到国外求学。现在,大雄身在他自己的研究室中。他叫来平日严禁其出入研究室的妻子静宜。对她说:"你看,我要按开关了。"说完,大雄颊上情不自禁流下两串泪珠。他就是为了这一刻,苦学了十几年……为了这一刻,从一个老是忘了做作业、成绩从倒数起算比较快的笨学生,爬到今天的地位……当他开关按下后,久久一阵的静寂,静寂……终于,叮当开口了:"大雄,功课已经做完了吗。"仿佛一切又回到了当初,感动的泪水随之流下……  

    很感人的结局!愿时光能永远定格在最后那一幕!

     

     

     

  • 三角形测试用例

    2009-06-17 10:47:09

     
     
    题目:输入三个数abc分别作为三边的边长构成三角形。通过程序判定所构成的三角形是一般三角形、等腰三角形还是等边三角形时。用等价类划分方法为该程序设计测试用例。


    三角形等价类列表



    判定类型       有效等价类                                                  无效等价类
    一般三角形   ((a>0) Λ(b>0) Λ(c>0))   Λ                              (a<=0 V b<=0 V c<=0) Λ
                      (((a+b)>c) V ((a+c)>b) V ((b+c)>a)) (1)          (((a+b)<=c) V ((a+c)<=b) V ((b+c)<=a)) (2)
    等腰三角形   (1) Λ (a=b V a=c V b=c)                  (3)          (2) V (a!=b V b!=c V a!=c)           (4)
    等边三角形   (1) Λ (a=b=c )                                 (5)          (2) V (a!=b!=c)                    (6)

    根据上表组成的测试用例:

    三角形等价类测试用例



    ID 输入数据   覆盖测试用例    输出结果
             a b c  
    1      3 4 5           (1)                    一般三角形
    2      0 4 5           (2)                   非(一般)三角形
    3      3 0 5           (2)           
    4      3 4 0           (2)      
    5      1 4 5           (2)           
    6      3 8 5           (2)           
    7      3 2 1           (2)           
    8      3 3 5           (3)                    等腰三角形
    9      3 4 3  
    10    3 4 4  
    11    3 4 9           (4)                    非等腰三角形
    12    3 3 3           (5)                    等边三角形
    13   -1 0 1           (6)                    非等边三角形


  • 软件测试流程

    2009-05-26 10:24:46

    浅谈软件测试流程(上)
    2008-06-15 15:43

    2008-04-24 作者:itest 来源:cnblogs.com

    【摘要】 软件测试从哪里开始到哪里结束?中间要经过哪些环节以及各环节要注意哪些事项。本文就有关问题结合个人实际工作经验进行阐述,鉴于每个环节都可以做为一个专题来进行探讨,所以受篇幅和时间限制,本文对有关问题未做深入剖析,只做一个宏观上的介绍。

    【关键词】测试流程、需求分析、测试用例、测试计划、缺陷管理

    一、概述

    一般而言,软件测试从项目确立时就开始了,前后要经过以下一些主要环节:

    需求分析→测试计划→测试设计→测试环境搭建→测试执行→测试记录→缺陷管理→软件评估→RTM.

    在进行有关问题阐述前,我们先明确下分工,一般而言,需求分析、测试用例编写、测试环境搭建、测试执行等属于测试开发人员工作范畴,而测试执行以及缺陷提交等属于普通测试人员的工作范畴,测试负责人负责整个测试各个环节的跟踪、实施、管理等。

    说明:

    1.以上流程各环节并未包含软件测试过程的全部,如根据实际情况还可以实施一些测试计划评审、用例评审,测试培训等。在软件正式发行后,当遇到一些严重问题时,还需要进行一些后续维护测试等。

    2.以上各环节并不是独立没联系的,实际工作千变万化,各环节一些交织、重叠在所难免,比如编写测试用例的同时就可以进行测试环境的搭建工作,当然也可能由于一些需求不清楚而重新进行需求分析等。这就和我们国家提出建设有中国特色的社会主义国家一样,只所以有中国特色,那是因为国情不一样。所以在实际测试过程中也要做到具体问题具体分析,具体解决。

    二、测试流程

    需求分析

    需求分析(Requirment Analyzing)应该说是软件测试的一个重要环节,测试开发人员对这一环节的理解程度如何将直接影响到接下来有关测试工作的开展。

    可能有些人认为测试需求分析无关紧要,这种想法是很不对的。需求分析不但重要,而且至关重要!

    一般而言,需求分析包括软件功能需求分析、测试环境需求分析、测试资源需求分析等。

    其中最基本的是软件功能需求分析,测一款软件首先要知道软件能实现哪些功能以及是怎样实现的。比如一款Smartphone包括VoIP、Wi-Fi以及Bluetooth等功能。那我们就应该知道软件是怎样来实现这些功能的,为了实现这些功能需要哪些测试设备以及如何搭建相应测试环境等,否则测试就无从谈起!

    既然谈了需求分析,那么我们根据什么来分析呢?总不能凭空设想吧。

    总得说来,做测试需求分析的依据有软件需求文档、软件规格书以及开发人员的设计文档等,相信管理一些规范的公司在软件开发过程中都有这些文档。

    测试计划

    测试计划(Test Plan)一般由测试负责人来编写。

    测试计划的依据主要是项目开发计划和测试需求分析结果而制定。测试计划一般包括以下一些方面:

    1. 测试背景

    a. 软件项目介绍;
    b. 项目涉及人员(如软硬件项目负责人等)介绍以及相应联系方式等。

    2. 测试依据

    a. 软件需求文档;
    b. 软件规格书;
    c. 软件设计文档;
    d. 其他,如参考产品等。

    3. 测试资源

    a. 测试设备需求;
    b. 测试人员需求;
    c. 测试环境需求;
    d. 其他。

    4. 测试策略

    a. 采取测试方法;
    b. 搭建哪些测试环境;
    c. 采取哪些测试工具以测试管理工具;
    d. 对测试人员进行培训等。

    5. 测试日程

    a. 测试需求分析;
    b. 测试用例编写;
    c. 测试实施,根据项目计划,测试分成哪些测试阶段(如单元测试、集成测试、系统测试阶段,α、β测试阶段等),每个阶段的工作重点以及投入资源等。

    6. 其他。

    测试计划还要包括测试计划编写的日期、作者等信息,计划越详细越好了。

    计划赶不上变化,一份计划做的再好,当实际实施的时候就会发现往往很难按照原有计划开展。如在软件开发过程中资源匮乏、人员流动等都会对测试造成一定的影响。所以,这些就要求测试负责人能够从宏观上来调控了。在变化面前能够做到应对自如、处乱不惊那是最好不过了。

    浅谈软件测试流程(下)
    2008-06-15 16:34

    测试设计

    测试设计主要包括测试用例编写和测试场景设计两方面。

    一份好的测试用例对测试有很好的指导作用,能够发现很多软件问题。关于测试用例编写,请参见前面写的《也谈测试用例》一文,里面有详细阐述。

    测试场景设计主要也就是测试环境问题了。

    测试环境搭建

    不同软件产品对测试环境有着不同的要求。如C/S及B/S架构相关的软件产品,那么对不同操作系统,如Windows系列、unix、linux甚至苹果OS等,这些测试环境都是必须的。而对于一些嵌入式软件,如手机软件,如果我们想测试一下有关功能模块的耗电情况,手机待机时间等,那么我们可能就需要搭建相应的电流测试环境了。当然测试中对于如手机网络等环境都有所要求。

    测试环境很重要,符合要求的测试环境能够帮助我们准确的测出软件问题,并且做出正确的判断。

    为了测试一款软件,我们可能根据不同的需求点要使用很多不同的测试环境。有些测试环境我们是可以搭建的,有些环境我们无法搭建或者搭建成本很高。不管如何,我们的目标是测试软件问题,保证软件质量。测试环境问题,还是根据具体产品以及开发者的实际情况而采取最经济的方式吧。

    测试执行

    测试执行过程又可以分为以下阶段:

    单元测试→集成测试→系统测试→出厂测试,其中每个阶段还有回归测试等。

    从测试的角度而言,测试执行包括一个量和度的问题。也就是测试范围和测试程度的问题。 比如一个版本需要测试哪些方面?每个方面要测试到什么程度?

    从管理的角度而言,在有限的时间内,在人员有限甚至短缺的情况下,要考虑如何分工,如何合理地利用资源来开展测试。当然还要考虑以下问题:

    1. 当测试人员测试的执行不到位、敷衍了事时该如何解决?

    2. 测试效率问题,怎样提高测试效率?

    3. 根据版本的不同特点是只做验证测试还是采取冒烟测试亦或是系统全面测试?

    4. 当测试过程中遇到一些偶然性随机问题该怎样处理?

    5. 当版本中出现很多新问题时该怎样对待?测试停止标准?

    6. ……

    总之,测试执行过程中会遇到很多复杂的问题,还是那句话,具体问题具体解决!本文不做过多阐述。

    测试记录

    缺陷记录总的说来包括两方面:由谁提交和缺陷描述。

    一般而言,缺陷都是谁测试谁提交,当然有些公司可能为了保证所提交缺陷的质量,还会在提交前进行缺陷评估,以确保所提交的缺陷的准确性。

    在缺陷的描述上,至少要包括以下一些方面内容:

    序号 标题 预置条件 操作步骤 预期结果 实际结果 注释 严重程度 概率 版本 测试者 测试日期

    以上是描述一个bug时通常所要描述的内容,当然在实际提交bug时可以根据实际情况进行补充,如附上图片、log文件等。

    另外,一个版本软件测试完毕,还要根据测试情况出份测试报告,这也是所要经过的一个环节。

    缺陷管理

    缺陷管理方面,很多公司都采取缺陷管理工具来进行管理,常见缺陷管理工具有Test Director、Bugfree等。

    下图是一个bug从提出到close所经过的一些流程,其他比如keep No action\keep spec等一些状态流程都未包含在内,在此仅做示范说明。

    注:软件缺陷和bug两者在含义上有着细微差别,本文统称缺陷。

    软件评估

    这里评估指软件经过一轮又一轮测试后,确认软件无重大问题或者问题很少的情况下,对准备发给客户的软件进行评估,以确定是否能够发行给客户或投放市场。

    软件评估小组一般由项目负责人、营销人员、部门经理等组成,也可能是由客户指定的第三方人员组成。

    测试总结

    每个版本有每个版本的测试总结,每个阶段有每个阶段的测试总结,当项目完成RTM后,一般要对整个项目做个回顾总结,看有哪些做的不足的地方,有哪些经验可以对今后的测试工作做借鉴使用,等等。测试总结无严格格式、字数限制。应该说,测试总结还是很总要的。

    测试维护

    由于测试的不完全性,当软件正式release后,客户在使用过程中,难免遇到一些问题,有的甚至是严重性的问题,这就需要修改有关问题,修改后需要再次对软件进行测试、评估、发行。