热爱测试生活

发布新日志

  • 查询经典语句

    2009-01-15 15:35:10

    SQL分类:
    DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
    DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
    DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

    首先,简要介绍基础语句:

    1、说明:创建数据库
    CREATE DATABASE database-name

    2、说明:删除数据库
    drop database dbname

    3、说明:备份sql server
    --- 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'

    --- 开始 备份
    BACKUP DATABASE pubs TO testBack

    4、说明:创建新表
    create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)

    根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old definition only

    5、说明:删除新表drop table tabname

    6、说明:增加一个列
    Alter table tabname add column col type
    注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。

    7、说明:添加主键: Alter table tabname add primary key(col)
    说明:删除主键: Alter table tabname drop primary key(col)

    8、说明:创建索引:create [unique] index idxname on tabname(col….)
    删除索引:drop index idxname
    注:索引是不可更改的,想更改必须删除重新建。

    9、说明:创建视图:create view viewname as select statement

       删除视图:drop view viewname

    10、说明:几个简单的基本的sql语句

    选择:select * from table1 where 范围
    插入:insert into table1(field1,field2) values(value1,value2)
    删除:delete from table1 where 范围
    更新:update table1 set field1=value1 where 范围
    查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
    排序:select * from table1 order by field1,field2 [desc]
    总数:select count * as totalcount from table1
    求和:select sum(field1) as sumvalue from table1
    平均:select avg(field1) as avgvalue from table1
    最大:select max(field1) as maxvalue from table1
    最小:select min(field1) as minvalue from table1

    11、说明:几个高级查询运算词

    A: UNION 运算符

    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。

    B: EXCEPT 运算符

    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。

    C: INTERSECT 运算符

    INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。
    注:使用运算词的几个查询结果行必须是一致的。

    12、说明:使用外连接
    A、left outer join:

    左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    B:right outer join:
    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。

    C:full outer join:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

    其次,大家来看一些不错的sql语句

    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
    法一:select * into b from a where 1<>1
    法二:select top 0 * into b from a

    2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from b;

    3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    insert into b(a, b, c) select d,e,f from b in ‘具体数据库’ where 条件
    例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

    4、说明:子查询(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)

    5、说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

    6、说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

    7、说明:在线视图查询(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;

    8、说明:between的用法,between限制查询数据范围时包括了边界值,not between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 数值1 and 数值2

    9、说明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

    10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

    11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....

    12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5

    13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

    14、说明:前10条记录
    select top 10 * form table1 where 范围

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except (select a from tableC)

    17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()

    18、说明:随机选择记录
    select newid()

    19、说明:删除重复记录
    Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

    20、说明:列出数据库里所有的表名
    select name from sysobjects where type='U'

    21、说明:列出表里的所有的
    select name from syscolumns where id=object_id('TableName')

    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
    select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
    显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3

    23、说明:初始化表table1
    TRUNCATE TABLE table1

    24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
      
    随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
      对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见的解决方案是建立如下所示的循环:
    Randomize
    RNumber = Int(Rnd*499) +1
     
    While Not objRec.EOF
    If objRec("ID") = RNumber THEN
    ... 这里是执行脚本 ...
    end if
    objRec.MoveNext
    Wend
     
       这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一 个数据库内就包含了成千上万条记录。这时候不就死定了?
      采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
    Randomize
    RNumber = Int(Rnd*499) + 1
     
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
     
    set ōbjRec = ObjConn.Execute(SQL)
    Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")
     
      不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
    再谈随机数
      现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random 示例扩展一下就可以用SQL应对上面两种情况了。
      为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3
     
      假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的ID 是自动生成的号码):
    SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"

      注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

     
    随机读取若干条记录,测试
    Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
    Sql server:select top n * from 表名 order by newid()
    mysqlelect * From 表名 Order By rand() Limit n
    Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试, 现在记下以备后查)
    语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...
    使用SQL语句 用...代替过长的字符串显示
    语法:
    SQL数据库:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename
    Access数据库:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;
     
    Conn.Execute说明
    Execute方法
      该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
        1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
        Set 对象变量名=连接对象.Execute("SQL 查询语言")
       Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变量就代表了该记录集对象。

        2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
        连接对象.Execute "SQL 操作性语句" [, RecordAffected][, Option]
          ·RecordAffected 为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可知道SQL语句队多少条记录进行了操作。
          ·Option 可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定该参数,可使执行更高效。

    ·BeginTrans、RollbackTrans、CommitTrans方法
      这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。
      事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
       BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过 连接对象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一 个错误信息。

  • 必须掌握的八个DOS命令

    2009-01-15 15:32:32

    一,ping    

      它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络上的机器都有唯一确定的IP地址,我们给目标IP地址发送一个数据包,对方就要返回一个同样大小的数据包,根据返回的数据包我们可以确定目标主机的存在,可以初步判断目标主机的操作系统等。下面就来看看它的一些常用的操作。先看看帮助吧,在DOS窗口中键入:ping /? 回车,。所示的帮助画面。在此,我们只掌握一些基本的很有用的参数就可以了(下同)。    

      -t 表示将不间断向目标IP发送数据包,直到我们强迫其停止。试想,如果你使用100M的宽带接入,而目标IP是56K的小猫,那么要不了多久,目标IP就因为承受不了这么多的数据而掉线,呵呵,一次攻击就这么简单的实现了。    

      -l 定义发送数据包的大小,默认为32字节,我们利用它可以最大定义到65500字节。结合上面介绍的-t参数一起使用,会有更好的效果哦。    

      -n 定义向目标IP发送数据包的次数,默认为3次。如果网络速度比较慢,3次对我们来说也浪费了不少时间,因为现在我们的目的仅仅是判断目标IP是否存在,那么就定义为一次吧。    

      说明一下,如果-t 参数和 -n参数一起使用,ping命令就以放在后面的参数为标准,比如"ping IP -t -n 3",虽然使用了-t参数,但并不是一直ping下去,而是只ping 3次。另外,ping命令不一定非得ping IP,也可以直接ping主机域名,这样就可以得到主机的IP。    

      下面我们举个例子来说明一下具体用法。    

      这里time=2表示从发出数据包到接受到返回数据包所用的时间是2秒,从这里可以判断网络连接速度的大小 。从TTL的返回值可以初步判断被ping主机的操作系统,之所以说"初步判断"是因为这个值是可以修改的。这里TTL=32表示操作系统可能是win98。 

      (小知识:如果TTL=128,则表示目标主机可能是Win2000;如果TTL=250,则目标主机可能是Unix) 

      至于利用ping命令可以快速查找局域网故障,可以快速搜索最快的QQ服务器,可以对别人进行ping攻击……这些就靠大家自己发挥了。    

    二,nbtstat    

      该命令使用TCP/IP上的NetBIOS显示协议统计和当前TCP/IP连接,使用这个命令你可以得到远程主机的NETBIOS信息,比如用户名、所属的工作组、网卡的MAC地址等。在此我们就有必要了解几个基本的参数。    

      -a 使用这个参数,只要你知道了远程主机的机器名称,就可以得到它的NETBIOS信息(下同)。    

      -A 这个参数也可以得到远程主机的NETBIOS信息,但需要你知道它的IP。 

      -n 列出本地机器的NETBIOS信息。    

      当得到了对方的IP或者机器名的时候,就可以使用nbtstat命令来进一步得到对方的信息了,这又增加了我们入侵的保险系数。    

    三,netstat 

      这是一个用来查看网络状态的命令,操作简便功能强大。    

      -a 查看本地机器的所有开放端口,可以有效发现和预防木马,可以知道机器所开的服务等信息,如图4。    

      这里可以看出本地机器开放有FTP服务、Telnet服务、邮件服务、WEB服务等。用法:netstat -a IP。 

      -r 列出当前的路由信息,告诉我们本地机器的网关、子网掩码等信息。用法:netstat -r IP。 
    四,tracert 

      跟踪路由信息,使用此命令可以查出数据从本地机器传输到目标主机所经过的所有途径,这对我们了解网络布局和结构很有帮助。如图5。    

      这里说明数据从本地机器传输到192.168.0.1的机器上,中间没有经过任何中转,说明这两台机器是在同一段局域网内。用法:tracert IP。    

    五,net    

      这个命令是网络命令中最重要的一个,必须透彻掌握它的每一个子命令的用法,因为它的功能实在是太强大了,这简直就是 微软为我们提供的最好的入侵工具。首先让我们来看一看它都有那些子命令,键入net /?回车如图6。 

      在这里,我们重点掌握几个入侵常用的子命令。    

      net view    

      使用此命令查看远程主机的所以共享资源。命令格式为net view \IP。   

      net use 

      把远程主机的某个共享资源影射为本地盘符,图形界面方便使用,呵呵。命令格式为net use x: \IP\sharename。上面一个表示把192.168.0.5IP的共享名为magic的目录影射为本地的Z盘。下面表示和192.168.0.7建立IPC$连接(net use \IP\IPC$ "password" /user:"name"),    

      建立了IPC$连接后,呵呵,就可以上传文件了:copy nc.exe \192.168.0.7\admin$,表示把本地目录下的nc.exe传到远程主机,结合后面要介绍到的其他DOS命令就可以实现入侵了。    

      net start 

      使用它来启动远程主机上的服务。当你和远程主机建立连接后,如果发现它的什么服务没有启动,而你又想利用此服务怎么办?就使用这个命令来启动吧。用法:net start servername,如图9,成功启动了telnet服务。    

      net stop 

      入侵后发现远程主机的某个服务碍手碍脚,怎么办?利用这个命令停掉就ok了,用法和net start同。    

      net user 

      查看和帐户有关的情况,包括新建帐户、删除帐户、查看特定帐户、激活帐户、帐户禁用等。这对我们入侵是很有利的,最重要的,它为我们克隆帐户提供了前提。键入不带参数的net user,可以查看所有用户,包括已经禁用的。下面分别讲解。 

      1,net user abcd 1234 /add,新建一个用户名为abcd,密码为1234的帐户,默认为user组成员。 

      2,net user abcd /del,将用户名为abcd的用户删除。 

      3,net user abcd /active:no,将用户名为abcd的用户禁用。 

      4,net user abcd /active:yes,激活用户名为abcd的用户。 

      5,net user abcd,查看用户名为abcd的用户的情况   

      net localgroup 

      查看所有和用户组有关的信息和进行相关操作。键入不带参数的net localgroup即列出当前所有的用户组。在入侵过程中,我们一般利用它来把某个帐户提升为administrator组帐户,这样我们利用这个帐户就可以控制整个远程主机了。用法:net localgroup groupname username /add。    

      现在我们把刚才新建的用户abcd加到administrator组里去了,这时候abcd用户已经是超级管理员了,呵呵,你可以再使用net user abcd来查看他的状态,和图10进行比较就可以看出来。但这样太明显了,网管一看用户情况就能漏出破绽,所以这种方法只能对付菜鸟网管,但我们还得知道。现在的手段都是利用其他工具和手段克隆一个让网管看不出来的超级管理员,这是后话。有兴趣的朋友可以参照《黑客防线》第30期上的《由浅入深解析隆帐户》一文。    

      net time 

      这个命令可以查看远程主机当前的时间。如果你的目标只是进入到远程主机里面,那么也许就用不到这个命令了。但简单的入侵成功了,难道只是看看吗?我们需要进一步渗透。这就连远程主机当前的时间都需要知道,因为利用时间和其他手段(后面会讲到)可以实现某个命令和程序的定时启动,为我们进一步入侵打好基础。用法:net time \IP。    

    六,at 

    这个命令的作用是安排在特定日期或时间执行某个特定的命令和程序(知道net time的重要了吧?)。当我们知道了远程主机的当前时间,就可以利用此命令让其在以后的某个时间(比如2分钟后)执行某个程序和命令。用法:at time command \computer。    

      表示在6点55分时,让名称为a-01的计算机开启telnet服务(这里net start telnet即为开启telnet服务的命令)。    
    七,ftp    

      大家对这个命令应该比较熟悉了吧?网络上开放的ftp的主机很多,其中很大一部分是匿名的,也就是说任何人都可以登陆上去。现在如果你扫到了一台开放ftp服务的主机(一般都是开了21端口的机器),如果你还不会使用ftp的命令怎么办?下面就给出基本的ftp命令使用方法。 

      首先在命令行键入ftp回车,出现ftp的提示符,这时候可以键入"help"来查看帮助(任何DOS命令都可以使用此方法查看其帮助)。    

      大家可能看到了,这么多命令该怎么用?其实也用不到那么多,掌握几个基本的就够了。    

      首先是登陆过程,这就要用到open了,直接在ftp的提示符下输入"open 主机IP ftp端口"回车即可,一般端口默认都是21,可以不写。接着就是输入合法的用户名和密码进行登陆了,这里以匿名ftp为例介绍。    

      用户名和密码都是ftp,密码是不显示的。当提示**** logged in时,就说明登陆成功。这里因为是匿名登陆,所以用户显示为Anonymous。    

      接下来就要介绍具体命令的使用方法了。    

      dir 跟DOS命令一样,用于查看服务器的文件,直接敲上dir回车,就可以看到此ftp服务器上的文件。 

      cd 进入某个文件夹。 

      get 下载文件到本地机器。 

      put 上传文件到远程服务器。这就要看远程ftp服务器是否给了你可写的权限了,如果可以,呵呵,该怎么 利用就不多说了,大家就自由发挥去吧。 

      delete 删除远程ftp服务器上的文件。这也必须保证你有可写的权限。 

      bye 退出当前连接。 

      quit 同上。 
       

    八,telnet 

      功能强大的远程登陆命令,几乎所有的入侵者都喜欢用它,屡试不爽。为什么?它操作简单,如同使用自己的机器一样,只要你熟悉DOS命令,在成功以administrator身份连接了远程机器后,就可以用它来干你想干的一切了。下面介绍一下使用方法,首先键入telnet回车,再键入help查看其帮助信息。    

      然后在提示符下键入open IP回车,这时就出现了登陆窗口,让你输入合法的用户名和密码,这里输入任何密码都是不显示的。    

      当输入用户名和密码都正确后就成功建立了telnet连接,这时候你就在远程主机上具有了和此用户一样的权限,利用DOS命令就可以实现你想干的事情了。这里我使用的超级管理员权限登陆的。   

      到这里为止,网络DOS命令的介绍就告一段落了,这里介绍的目的只是给菜鸟网管一个印象,让其知道熟悉和掌握网络DOS命令的重要性。其实和网络有关的DOS命令还远不止这些,这里只是抛砖引玉,希望能对广大菜鸟网管有所帮助。学好DOS对当好网管有很大的帮助,特别的熟练掌握了一些网络的DOS命令。 

      另外大家应该清楚,任何人要想进入系统,必须得有一个合法的用户名和密码(输入法漏洞差不多绝迹了吧),哪怕你拿到帐户的只有一个很小的权限,你也可以利用它来达到最后的目的。所以坚决消灭空口令,给自己的帐户加上一个强壮的密码,是最好的防御弱口令入侵的方法。 

      最后,由衷的说一句,培养良好的安全意识才是最重要的。

    =========================================
    开始→运行→命令集锦
    winver---------检查Windows版本 
    wmimgmt.msc----打开windows管理体系结构(WMI) 
    wupdmgr--------windows更新程序 
    wscrīpt--------windows脚本宿主设置 
    write----------写字板 
    winmsd---------系统信息 
    wiaacmgr-------扫描仪和照相机向导 
    winchat--------XP自带局域网聊天 

    mem.exe--------显示内存使用情况 
    Msconfig.exe---系统配置实用程序 
    mplayer2-------简易widnows media player 
    mspaint--------画图板 
    mstsc----------远程桌面连接 
    mplayer2-------媒体播放机 
    magnify--------放大镜实用程序 
    mmc------------打开控制台 
    mobsync--------同步命令 

    dxdiag---------检查DirectX信息 
    drwtsn32------ 系统医生 
    devmgmt.msc--- 设备管理器 
    dfrg.msc-------磁盘碎片整理程序 
    diskmgmt.msc---磁盘管理实用程序 
    dcomcnfg-------打开系统组件服务 
    ddeshare-------打开DDE共享设置 
    dvdplay--------DVD播放器 

    net stop messenger-----停止信使服务 
    net start messenger----开始信使服务 
    notepad--------打开记事本 
    nslookup-------网络管理的工具向导 
    ntbackup-------系统备份和还原 
    narrator-------屏幕"讲述人" 
    ntmsmgr.msc----移动存储管理器 
    ntmsoprq.msc---移动存储管理员操作请求 
    netstat -an----(TC)命令检查接口 

    syncapp--------创建一个公文包 
    sysedit--------系统配置编辑器 
    sigverif-------文件签名验证程序 
    sndrec32-------录音机 
    shrpubw--------创建共享文件夹 
    secpol.msc-----本地安全策略 
    syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码 
    services.msc---本地服务设置 
    Sndvol32-------音量控制程序 
    sfc.exe--------系统文件检查器 
    sfc /scannow---windows文件保护 

    tsshutdn-------60秒倒计时关机命令 
    tourstart------xp简介(安装完成后出现的漫游xp程序) 
    taskmgr--------任务管理器 

    eventvwr-------事件查看器 
    eudcedit-------造字程序 
    explorer-------打开资源管理器 


    packager-------对象包装程序 
    perfmon.msc----计算机性能监测程序 
    progman--------程序管理器 

    regedit.exe----注册表 
    rsop.msc-------组策略结果集 
    regedt32-------注册表编辑器 
    rononce -p ----15秒关机 
    regsvr32 /u *.dll----停止dll文件运行 
    regsvr32 /u zipfldr.dll------取消ZIP支持 

    cmd.exe--------CMD命令提示符 
    chkdsk.exe-----Chkdsk磁盘检查 
    certmgr.msc----证书管理实用程序 
    calc-----------启动计算器 
    charmap--------启动字符映射表 
    cliconfg-------SQL SERVER 客户端网络实用程序 
    Clipbrd--------剪贴板查看器 
    conf-----------启动netmeeting 
    compmgmt.msc---计算机管理 
    cleanmgr-------垃圾整理 
    ciadv.msc------索引服务程序 

    osk------------打开屏幕键盘 
    odbcad32-------ODBC数据源管理器 
    oobe/msoobe /a----检查XP是否激活 
    lusrmgr.msc----本机用户和组 
    logoff---------注销命令 


    iexpress-------木马捆绑工具,系统自带 

    Nslookup-------IP地址侦测器 

    fsmgmt.msc-----共享文件夹管理器 

    utilman--------辅助工具管理器 

    gpedit.msc-----组策略
  • 关于测试的一些技巧和经验

    2009-01-13 15:06:05

    在制定测试计划的时候,就要考虑到测试的风险,并抉择要执行哪些测试,并放弃哪些测试;测试计划的评审应该让开发人员参与;测试模型的制作应该尽可能贴近用户,或者站在用户的使用立场上来观测软件,此时应该能发现更多的问题。

     由于测试发现问题,在解决问题后还要重新测试,因此测试的时间可能会比实际更长一些

     识别和注意少数重要的方面,而忽略多数次要的方面,有时候少数的问题足以致命,这些问题将是软件测试结果中重要性最高的错误。

     错误的定位有时是很难的,要找出必然发生的前因后果,而不至于因为描述错误而误导开发人员。有时候确实存在错误不能重建的问题。解决办法之一是在错误报告中给予说明。

     对错误的描述,应该是准确、完整而简练。因为描述的问题或者不完整的描述会引起开发人员的误解,其后果是可以想见的。

     有时有经验的测试人员凭借直觉就可以发现一些问题,这可称为“错误猜测”。

     测试人员容易犯2种错误:一是测试人员发生判断错误,将本没有错误的系统行为报告为错误,或者将错误指定了过高的严重级别,或者过高估计了问题的严重性,这样会引起开发人员的不信任,产生一种象“狼来了”一样的效果;二是测试人员将错误的严重性或优先级定得过低,从而产生“测试逃逸”,这样会造成产品质量的风险。以上两种错误应该尽量避免
  • 测试用例设计

    2009-01-13 15:04:58

    测试需求收集完毕后,开始测试设计。测试用例是什么?测试用例就是一个文档,描述输入、动作、或者时间和一个期望的结果,其目的是确定应用程序的某个特性是否正常的工作。设计测试用例需要考虑以下问题:

    测试用例的基本格式

    软件测试用例的基本要素包括测试用例编号、测试标题、重要级别、测试输入、操作步骤、预期结果,下面逐一介绍。

    用例编号: 测试用例的编号有一定的规则,比如系统测试用例的编号这样定义规则: PROJECT1-ST-001 ,命名规则是项目名称+测试阶段类型(系统测试阶段)+编号。定义测试用例编号,便于查找测试用例,便于测试用例的跟踪。

    测试标题: 对测试用例的描述,测试用例标题应该清楚表达测试用例的用途。比如测试用户登录时输入错误密码时,软件的响应情况

    重要级别: 定义测试用例的优先级别,可以笼统的分为两个级别。一般来说,如果软件需求的优先级为,那么针对该需求的测试用例优先级也为;反之亦然,

    测试输入: 提供测试执行中的各种输入条件。根据需求中的输入条件,确定测试用例的输入。测试用例的输入对软件需求当中的输入有很大的依赖性,如果软件需求中没有很好的定义需求的输入,那么测试用例设计中会遇到很大的障碍。

    操作步骤: 提供测试执行过程的步骤。对于复杂的测试用例,测试用例的输入需要分为几个步骤完成,这部分内容在操作步骤中详细列出。

    预期结果: 提供测试执行的预期结果,预期结果应该根据软件需求中的输出得出。如果在实际测试过程中,得到的实际测试结果与预期结果不符,那么测试不通过;反之则测试通过。

    软件测试用例的设计主要从上述 6 个域考虑,结合相应的软件需求文档,在掌握一定测试用例设计方法的基础上,可以设计出比较全面、合理的测试用例。具体的测试用例设计方法可以参见相关的测试书籍,白盒测试方法和黑盒测试方法在绝大多数的软件测试书籍中都有详细的介绍,这里不作赘述。

    重用同类型项目的测试用例

    如果我看得远,那是因为我站在巨人的肩上 --牛顿。

    一般来说,每个软件公司的项目可以分为固定的几大类。可以按业务类型划分,比如 ERP 软件、产品数据管理软件、通信软件、地理信息系统软件等等;可以按软件结构来划分,比如 B/S 架构的软件、 C/S 架构的软件、嵌入式软件等等。参考同类别软件的测试用例,会有很大的借鉴意义。如果,公司中有同类别的软件系统,千万别忘记把相关的测试用例拿来参考。如果,系统非常接近,甚至经过对测试用例简单修改就可以应用到当前被测试的软件。拿来主义可以极大的开阔测试用例设计思路,也可以节省大量的测试用例设计时间。

    利用已有的软件 Checklist

    在上面一个小节中,按照不同的规则划分了不同的软件类型。每种类型的软件都有一定的测试规范,比如, WEB 软件系统在系统测试过程中,会有一系列的范式,比如针对 Cookie 就会有很多测试点。在设计测试用例的时候,不妨到网上去搜索相关的 Checklist ,不过国内外的网站很少有这方面的资料,即便有,也不是特别系统。可以先找一份粗糙的 Checklist ,然后,在设计测试用例的时候不断的去完善它,以作为下次测试用例设计的基础。

    加强测试用例的评审

    测试用例设计完毕后,最好能够增加评审过程。同行评审是 CMM3 级的一个 KPA ,如果因为公司没有通过 CMM3 级,就不开展同行评审是不恰当的。测试用例应该由产品相关的软件测试人员和软件开发人员评审,提交评审意见,然后根据评审意见更新测试用例。如果认真操作这个环节,测试用例中的很多问题都会暴露出来,比如用例设计错误、用例设计遗漏、用例设计冗余、用例设计不充分等等;如果同行评审不充分,那么,在测试执行的过程中,上述本应在评审阶段发现的测试用例相关问题,会给测试执行带来大麻烦,甚至导致测试执行挂起。

    定义测试用例的执行顺序
       
    在测试用例执行过程中,你会发现每个测试用例都对测试环境有特殊的要求,或者对测试环境有特殊的影响。因此,定义测试用例的执行顺序,对测试的执行效率影响非常大。比如某些异常测试用例会导致服务器频繁重新启动,服务器的每次重新启动都会消耗大量的时间,导致这部分测试用例执行也消耗很多的时间。那么在编排测试用例执行顺序的时候,应该考虑把这部分测试用例放在最后执行,如果在测试进度很紧张的情况下,如果优先执行这部分消耗时间的异常测试用例,那么在测试执行时间过了大半的时候,测试用例执行的进度依然是缓慢的,这会影响到测试人员的心情,进而导致匆忙地测试后面的测试用例,这样测试用例的漏测、误测就不可避免,严重影响了软件测试效果和进度。因而,合理地定义测试用例的执行顺序是很有必要的。
      
    测试用例执行
      
    测试用例设计完毕后,接下来的工作是测试执行,测试执行中应该注意以下几个问题:
      
    搭建软件测试环境,执行测试用例
      
    测试用例执行过程中,搭建测试环境是第一步。一般来说,软件产品提交测试后,开发人员应该提交一份产品安装指导书,在指导书中详细指明软件产品运行的软硬件环境,比如要求操作系统系统是 Windows 2000 pack4 版本,数据库是 Sql Server 2000 等等,此外,应该给出被测试软件产品的详细安装指导书,包括安装的操作步骤、相关配置文件的配置方法等等。对于复杂的软件产品,尤其是软件项目,如果没有安装指导书作为参考,在搭建测试环境过程中会遇到种种问题。
      
    如果开发人员拒绝提供相关的安装指导书,搭建测试中遇到问题的时候,测试人员可以要求开发人员协助,这时候,一定要把开发人员解决问题的方法记录下来,避免同样的问题再次请教开发人员,这样会招致开发人员的反感,也降低了开发人员对测试人员的认可程度。
      
    测试执行过程应注意的问题
      
    测试环境搭建之后,根据定义的测试用例执行顺序,逐个执行测试用例。在测试执行中需要注意以下几个问题:
      
    全方位的观察测试用例执行结果: 测试执行过程中,当测试的实际输出结果与测试用例中的预期输出结果一致的时候,是否可以认为测试用例执行成功了?答案是否定的,即便实际测试结果与测试的预期结果一致,也要查看软件产品的操作日志、系统运行日志和系统资源使用情况,来判断测试用例是否执行成功了。全方位观察软件产品的输出可以发现很多隐蔽的问题。以前,我在测试嵌入式系统软件的时候,执行某测试用例后,测试用例的实际输出与预期输出完全一致,不过在查询 CPU 占用率地时候,发现 CPU 占用率高达 90 %,后来经过分析,软件运行的时候启动了若干个 1ms 的定时器,大量的消耗的 CPU 资源,后来通过把定时器调整到 10ms CPU 的占用率降为 7 %。如果观察点单一,这个严重消耗资源的问题就无从发现了。
      
    加强测试过程记录: 测试执行过程中,一定要加强测试过程记录。如果测试执行步骤与测试用例中描述的有差异,一定要记录下来,作为日后更新测试用例的依据;如果软件产品提供了日志功能,比如有软件运行日志、用户操作日志,一定在每个测试用例执行后记录相关的日志文件,作为测试过程记录,一旦日后发现问题,开发人员可以通过这些测试记录方便的定位问题。而不用测试人员重新搭建测试环境,为开发人员重现问题。
      
    及时确认发现的问题: 测试执行过程中,如果确认发现了软件的缺陷,那么可以毫不犹豫的提交问题报告单。如果发现了可疑问题,又无法定位是否为软件缺陷,那么一定要保留现场,然后知会相关开发人员到现场定位问题。如果开发人员在短时间内可以确认是否为软件缺陷,测试人员给予配合;如果开发人员定位问题需要花费很长的时间,测试人员千万不要因此耽误自己宝贵的测试执行时间,可以让开发人员记录重新问题的测试环境配置,然后,回到自己的开发环境上重现问题,继续定位问题。
      
    与开发人员良好的沟通: 测试执行过程中,当你提交了问题报告单,可能被开发人员无情驳回,拒绝修改。这时候,只能对开发人员晓之以理,做到有理、有据,有说服力。首先,要定义软件缺陷的标准原则,这个原则应该是开发人员和测试人员都认可的,如果没有共同认可的原则,那么开发人员与测试人员对问题的争执就不可避免了。此外,测试人员打算说服开发人员之前,考虑是否能够先说服自己,在保证可以说服自己的前提下,再开始与开发人员交流。
      
    及时更新测试用例
      
    测试执行过程中,应该注意及时更新测试用例。往往在测试执行过程中,才发现遗漏了一些测试用例,这时候应该及时的补充;往往也会发现有些测试用例在具体的执行过程中根本无法操作,这时候应该删除这部分用例;也会发现若干个冗余的测试用例完全可以由某一个测试用例替代,那么删除冗余的测试用例。
      
    总之,测试执行的过程中及时地更新测试用例是很好的习惯。不要打算在测试执行结束后,统一更新测试用例,如果这样,往往会遗漏很多本应该更新的测试用例。
      
    提交一份优秀的问题报告单
      
    软件测试提交的问题报告单和测试日报一样,都是软件测试人员的工作输出,是测试人员绩效的集中体现。因此,提交一份优秀的问题报告单是很重要的。软件测试报告单最关键的域就是问题描述,这是开发人员重现问题,定位问题的依据。问题描述应该包括以下几部分内容:软件配置、硬件配置、测试用例输入、操作步骤、输出、当时输出设备的相关输出信息和相关的日志等。
      
    软件配置: 包括操作系统类型版本和补丁版本、当前被测试软件的版本和补丁版本、相关支撑软件,比如数据库软件的版本和补丁版本等。
      
    硬件配置: 计算机的配置情况,主要包括 CPU 、内存和硬盘的相关参数,其它硬件参数根据测试用例的实际情况添加。如果测试中使用网络,那么网络的组网情况,网络的容量、流量等情况。硬件配置情况与被测试产品类型密切相关,需要根据当时的情况,准确翔实的记录硬件配置情况。
      
    测试用例输入 \ 操作步骤 \ 输出: 这部分内容可以根据测试用例的描述和测试用例的实际执行情况如实填写。
      
    输出设备的相关输出信息: 输出设备包括计算机显示器、打印机、磁带等等输出设备,如果是显示器可以采用抓屏的方式获取当时的截图,其他的输出设备可以采用其它方法获取相关的输出,在问题报告单中提供描述。
      
    日志信息: 规范的软件产品都会提供软件的运行日志和用户、管理员的操作日志,测试人员应该把测试用例执行后的软件产品运行日志和操作日志作为附件,提交到问题报告单中。
      
    根据被测试软件产品的不同,需要在问题描述中增加相应的描述内容,这需要具体问题具体分析。
      
    测试结果分析
      
    软件测试执行结束后,测试活动还没有结束。测试结果分析是必不可少的重要环节,编筐编篓,全在收口,测试结果的分析对下一轮测试工作的开展有很大的借鉴意义。前面的测试准备工作中,建议测试人员走读缺陷跟踪库,查阅其他测试人员发现的软件缺陷。测试结束后,也应该分析自己发现的软件缺陷,对发现的缺陷分类,你会发现自己提交的问题只有固定的几个类别;然后,再把一起完成测试执行工作的其他测试人员发现的问题也汇总起来,你会发现,你所提交问题的类别与他们有差异。这很正常,人的思维是有局限性,在测试的过程中,每个测试人员都有自己思考问题的盲区和测试执行的盲区,有效的自我分析和分析其他测试人员,你会发现自己的盲区,有针对性的分析盲区,必定会在下一轮测试用避免盲区。

  • 应该考虑进行何种测试

    2009-01-13 15:03:49

    黑盒测试(Black box testing)  ____不考虑内部设计和代码,根据需求和功能进行测试

    白盒测试 (White box testing) ── 根据应用软件的代码的内部逻辑,按照代码的语句、分支、路径和条件进行测试。

    部件测试 (Unit testing) ——最小范围的测试,针对特定的函数和代码模块进行测试。因为需要了解程序的设计和代码的细节才能进行,所以部件测试一般是程序员。而不是由测试人员来做。除非应用软件的结构设计良好,而且代码也写得清楚,否则部件测试并非易事。也许需要开发测试驱动模块或测试工具。

    递增的综合测试(incremental integration testing)——不断进行的测试过程,每增加一个新的功能模块,都进行测试。这要求一个应用软件在最终完成之前,各功能模块要相对独立,或者已根据需要开发出测试驱动软件。这种测试可由程序员或测试人员进行。

    综合测试(integration testing)——对应用软件的各个部分进行组合测试,来检查各功能模块在一起工作是否正常,“部件“可以是代码模块、独立的应用程序、也可以是网络中的客户/服务器应用软件。这种测试特别使用客户/服务器环境和分布式系统

    功能测试(functional testing)——对一个应用软件的功能模块进行黑盒测试。这种测试应当由测试人员进行。但这并不意味着程序员在推出软件之前不进行代码检查。(这一原则适用于所有的测试阶段。)

    系统测试 —— 针对全部需求说明进行黑盒测试,包括系统中所有的部件

    端到端测试 (end-to-end testing) ── 类似于系统测试,但测试范围更“宏观”一些。模仿实际应用环境,对整个应用软件进行使用测试。例如与数据库进行交互作业、使用网络通信、与其他硬件、应用程序和系统之间的相互作用是否满足要求。

    健全测试 (sanity testing) ── 是一种典型的初始测试。判断一个新的软件版本的运行是否正常,是否值得对它作进一步的测试。例如,如果一个新的软件每 5 分钟就破坏系统、大大降低系统的运行速度、或者破坏数据库,那么这样的软件就算不上是“健全”的,不值得在目前状态下进行进一步的测试。

    回归测试 (regression testing) ── 每当软件经过了整理、修改、或者其环境发生变化,都重复进行测试。很难说需要进行多少次回归测试,特别是是到了开发周期的最后阶段。进行此种测试,特别适于使用自动测试工具。

    认同测试 (acceptance testing) ── 基于说明书的、由最终用户或顾客来进行的测试。或者由最终用户/顾客来进行一段有限时间的使用。

    负荷试验 (load testing) ── 在大负荷条件下对应用软件进行测试。例如测试一个网站在不同负荷情况下的状况,以确定在什么情况下系统响应速度下降或是出现故障。

    压力测试 (stress testing) ── 经常可以与“负荷测试”或“性能测试”相互代替。这种测试是用来检查系统在下列条件下的情况:在非正常的巨大负荷下、某些动作和输入大量重复、输入大数、对数据库进行非常复杂的查询,等等。

    性能测试 (performance testing) ── 经常可以与“压力测试”或“负荷测试”相互代替。理想的“性能测试”(也包括其他任何类型的测试) 都应在质量保障和测试计划的文档终予以规定。

    可用性测试 (usability testing) ── 是专为“对用户友好”的特性进行测试。这是一种主观的感觉,取决于最终用户或顾客。可以进行用户会见、检查、对用户会议录像、或者使用其他技术。程序员和测试人员通常不参加可用性测试。

    安装/卸载测试 (install/uninstall testing) ── 对安装/卸载进行测试 (包括全部、部分、升级操作)

    恢复测试 (recovery testing) ── 在系统崩溃、硬件故障、或者其他灾难发生之后,重新恢复系统的情况。

    安全测试 (security testing) ── 测试系统在应付非授权的内部/外部访问、故意的损坏时的防护情况。这需要精密复杂的测试技术。 

    兼容性测试 (compatability testing) ── 测试在特殊的硬件/软件/操作系统/网络环境下的软件表现。

    认同测试 (acceptance testing) ── 看顾客是否对软件满意。

    比较测试 (comparison testing) ── 与竞争产品进行比较,以找出弱点和优势。

     α 测试 (alpha testing) ── 在开发一个应用软件即将完成时所进行的测试。此时还允许有较小的设计修改。通常由最终用户或其他人进行这种测试,而不是由程序员和测试人员来进行。

     β 测试 (beta testing) ── 当开发和测试已基本完成,需要在正式发行之前最后寻找毛病而进行的测试。通常由最终用户或其他人进行这种测试,而不是由程序员和测试人员来进行。

  • 软件评测师学习笔记之一-黑盒测试

    2009-01-13 15:02:34

    黑盒测试
    一. 黑盒测试概述(2.10 黑盒测试)
    1
    .定义
    也称功能测试,它是通过测试来检测每个功能是否都能正常使用
    把程序看成一个黑盒子,完全不考虑程序内部结构和内部特性,着眼于程序外部结构,不考虑内部逻辑结构
    在程序接口进行测试,只检查程序功能是否按照需求说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息
    主要针对软件界面和软件功能进行测试
    2
    .试图发现的错误类型
    功能不正确或遗漏
    界面错误(输入能否正确的接受?能否输出正确的结果)
    数据库访问错误(如数据结构定义错误或外部信息(如数据文件)访问错误)
    性能错误
    初始化和终止错误
    3
    .黑盒测试用例设计方法
    1 等价类划分法:把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类的其他值
    2 边界值分析法:通过选择等价类边界的测试用例。不仅重视输入条件边界,而且也必须考虑输出域边界
    3 错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例的方法
    4 因果图法:从用自然语言书写的程序规格说明的描述中找出因(输入条件)和果(输入或程序状态的改变),可以通过因果图转换成判定表
    5 判定表驱动法:利用判定表进行测试用例的设计
    6 正交试验设计法:使用已设计好的正交表格来安排试验,并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率
    7 功能图法:用功能图形象地表示程序的功能说明,并机械地生成功能图的测试用例。功能图模型由状态迁移图和逻辑功能模型构成
    二. 黑盒测试用例设计方法
    1
    .等价类划分法
    1)划分基础:需求规格说明书中输入、输出要求
    2)等价类:某个输入域的子集合;分为有效等价类和无效等价类
    有效等价类:指对于程序规格说明书来说是合理的、有意义的输入数据构成的集合。利用有效等价类可以检验程序是否实现了规格说明书中的功能和性能
    无效等价类:与有效等价的定义恰巧相反
    3)划分等价类原则(6条)
    序号 输入条件(数据) 划分等价类
    规定了取值范围值的个数 一个有效等价类两个无效等价类
    规定了输入值的集合规定了必须如何的条件 一个有效等价类一个无效等价类
    是一个布尔量 一个有效等价类一个无效等价类
    输入数据的一组值(n个),并且程序对每一个输入值分别进行处理 n个有效等价类一个无效等价类
    规定必须遵守的规则 一个有效等价类(符合规则)若干个无效等价类
    在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类
        
    4 列出等价类表
    在确定了等价类之后,建立等价类表,列出所有划分出的等价类
    输入条件 有效等价类 无效等类
    …… …… ……
    5 确定测试用例步骤
    第一步:为每个等价类规定一个惟一的编号
    第二步:设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步骤,最后使得所有有效等价类均被测试用例所覆盖
    第三步:设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步骤,最后使得所有有效等价类均被测试用例所覆盖
    小结:采用等价类划分方法设计测试用例,按照划分等价类、列出等价列表、确定测试用例三个步骤完成,目标是把可能的测试用例组合缩减到仍然足以满足软件测试需求为止。
    2
    .边界值分析法
    1 边界类型
    边界条件:可以在产品说明书中有定义或者在使用软件过程中确定
    次边界条件:在软件内部,也称为内部边界条件
    其他边界条件:如输入信息为空(对于此类问题应建立单独的等价类空间)、非法、错误、不正确和垃圾数据
    2)边界值的选择方法(遵循原则)
    序号 输入条件(数据) 输入边界值数据
    规定了取值范围 刚刚达到这个范围刚刚超越这个范围
    规定值的个数 最大个数、比最大个数大1最小个数、比最小个数少1
    根据规格说明书的每个输出条件,使用 原则12
    输入或输出是个有序集合 集合的第一个、最后一个元素
    程序中使用一个内部数据结构 内部数据结构边界上的值
    分析规格说明,找出其他可能的边界
    3)例子:
    允许文本输入1255个字符:测试用例-12552540256
    程序读写软盘:测试用例-文件很小、等于软盘容量限制之内、空、超过
    程序允许在一张纸上打印多个页面:测试用例-只打印一页,规定最大页,0页,大于允许最大页数
    3
    .错误推测法
    基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据它们选择测试用例
    4
    .因果图法
      
    侧重于输入条件的各种组合,各个输入情况之间的相互制约关系
    1 因果图设计方法
    从用自然语言书写的程序规格说明的描述中找出因果,通过因果图转换成判定表
    2 因果图导出测试用例步骤
    第一步:分析程序规格说明的描述中,哪些是原因,哪些是结果。原在因常常是输入条件或是输入条件的等价类,结果是输出条件
    第二步:分析程序规格说明的描述中语义的内容,并将其表示成连接各个原因与各个结果的因果图
    第三步:标明约束条件
    第四步:把因果图转换成判定表
    第五步:为判定表中每一列表示的情况设计测试用例
    3 因果图基本图形符号
    通常在因果图中,用Ci 表示原因,Ei表示结果,各结点表示状态,可取值0(状态不出现) 1(某状态出现)
    恒等:若原因出现,则结果出现;若原因不出现,则结果不出现
    非(~):若原因出现,则结果不出现;若原因不出现,则结果出现
    或(V):若几个原因中有一个出现,则结果出现;若几个原因都不出现,则结果不出现;
    与():若几个原因都出现,结果才出现;若其中有一个原因不出现,则结果不出现
    4 因果图的约束符号
    从输入(原因)考虑四种约束
    l E
    (互斥):表示两个原因不会同时成立,两个中最多有一个可能成立
    l I
    (包含):表示三个原因中至少有一个必须成立
    l O
    (惟一):表示两个原因中必须有一个,且仅有一个成立
    l R
    (要求):表示两个原因,a出现时,b也必须出现,a出现时,b不可能不出现
    从输出(结果)考虑一种约束
    l M
    (屏蔽):两个结果,a1时,b必须是0,当a0时,b值不定

    2005-4-19
    5
    .判定表驱动法
    1 判定表:是分析和表达多逻辑条件下执行不同操作的情况的工具
    2 判定表组成
    条件桩:列出了问题的所有条件
    动作桩:列出了问题规定可能采取的操作
    条件项:列出针对它所列条件的取值,在所有可能情况下的真假值
    动作项:列出在条件项的各种取值情况下应该采取的动作
    规则:任何一个条件组合的特定取值及其相应要执行的操作
    注:判定表中贯穿条件项和动作项的一列就是一条规则;
    3 判定表的建立(步骤)
    第一步:确定规则的个数。假如有n个条件,每个条件有两个取值(0,1),故有2n种规则
    第二步:列出所有的条件桩和动作桩
    第三步:填入条件项
    第四步:填入动作项。制定初始判定表
    第五步:简化。合并相似规则或者相同动作
    4 适合使用判定表设计测试用例的条件
    规格说明以判定表的形式给出,或很容易转换成判定表
    条件的排列顺序不影响执行哪些操作
  • UI测试和测试规则

    2009-01-13 15:01:27

    界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。目前界面的设计引起软件设计人员的重视的程度还远远不够,直到最近网页制作的兴起,才受到专家的青睐。而且设计良好的界面由于需要具有艺术美的天赋而遭拒绝。
    目前流行的界面风格有三种方式:多窗体、单窗体以及资源管理器风格,无论那种风格,以下规则是应该被重视的。

          1
    :易用性:
        
    按钮名称应该易懂,用词准确,屏弃没楞两可的字眼,要与同一界面上的其他按钮易于区分,能望文知意最好。理想的情况是用户不用查阅帮助就能知道该界面的功能并进行相关的正确操作。

        
    易用性细则:
         1):
    完成相同或相近功能的按钮用Frame框起来,常用按钮要支持快捷方式。
         2):
    完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离。
         3):
    按功能将界面划分局域块,用Frame框括起来,并要有功能说明或标题。
         4):
    界面要支持键盘自动浏览按钮功能,即按Tab键的自动切换功能。
         5):
    界面上首先应输入的和重要信息的控件在Tab顺序中应当靠前,位置也应放在窗口上较醒目的位置。
         6):
    同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示。
         7):
    分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab
         8):
    默认按钮要支持Enter及选操作,即按Enter后自动执行默认按钮对应操作。
         9):
    可写控件检测到非法输入后应给出说明并能自动获得焦点。
         10):Tab
    键的顺序与控件排列顺序要一直,目前流行总体从上到下,同时行间从左到右的方式。
         11):
    复选框和选项框按选择几率的高底而先后排列。
         12):
    复选框和选项框要有默认选项,并支持Tab选择。
         13):
    选项数相同时多用选项框而不用下拉列表框。
         14):
    界面空间较小时使用下拉框而不用选项框。
         15):
    选项数叫少时使用选项框,相反使用下拉列表框。
         16):
    专业性强的软件要使用相关的专业术语,通用性界面则提倡使用通用性词眼。
         2
    规范性:
        
    通常界面设计都按Windows界面的规范来设计,即包含菜单条、工具栏、工具厢、状态栏、滚动条、右键快捷菜单的标准格式,可以说:界面遵循规范化的程度越高,则易用性相应的就越好。小型软件一般不提供工具厢。

        
    规范性细则:
         1):
    常用菜单要有命令快捷方式。
         2):
    完成相同或相近功能的菜单用横线隔开放在同一位置。
         3):
    菜单前的图标能直观的代表要完成的操作。
         4):
    菜单深度一般要求最多控制在三层以内。
         5):
    工具栏要求可以根据用户的要求自己选择定制。
         6):
    相同或相近功能的工具栏放在一起。
         7):
    工具栏中的每一个按钮要有及时提示信息。
         8):
    一条工具栏的长度最长不能超出屏幕宽度。
         9):
    工具栏的图标能直观的代表要完成的操作。
         10):
    系统常用的工具栏设置默认放置位置。
         11):
    工具栏太多时可以考虑使用工具厢。
         12):
    工具厢要具有可增减性,由用户自己根据需求定制。
         13):
    工具厢的默认总宽度不要超过屏幕宽度的1/5
         14):
    状态条要能显示用户切实需要的信息,常用的有:
    目前的操作、系统状态、用户位置、用户信息、提示信息、错误信息等,如果某一操作需要的时间较长,还应该显示进度条和进程提示。
         15)
    :滚动条的长度要根据显示信息的长度或宽度能及时变换,以利于用户了解显示信息的位置和百分比。
         16)
    :状态条的高度以放置五好字为宜,滚动条的宽度比状态条的略窄。
         17)
    :菜单和工具条要有清楚的界限;菜单要求凸出显示,这样在移走工具条时仍有立体感。
         18)
    :菜单和状态条中通常使用5号字体。工具条一般比菜单要宽,但不要宽的太多,否则看起来很不协调。
         19):
    右键快捷菜单采用与菜单相同的准则。

         3
    :帮助设施:
        
    系统应该提供详尽而可靠的帮助文档,在用户使用产生迷惑时可以自己寻求解决方法。

        
    帮助设施细则:
         1)
    :帮助文档中的性能介绍与说明要与系统性能配套一致。(我们的系统帮助文档都是系统的祖先时期的说明,让人困惑)
         2)
    :打包新系统时,对作了修改的地方在帮助文档中要做相应的修改。
         3)
    :操作时要提供及时调用系统帮助的功能。常用F1
         4)
    :在界面上调用帮助时应该能够及时定位到与该操作相对的帮助位置。也就是说帮助要有即时针对性。
         5)
    :最好提供目前流行的联机帮助格式或HTML帮助格式。
         6)
    :用户可以用关键词在帮助索引中搜索所要的帮助,当然也应该提供帮助主题词。
         7)
    :如果没有提供书面的帮助文档的话,最好有打印帮助的功能。
         8 )
    :在帮助中应该提供我们的技术支持方式,一旦用户难以自己解决可以方便的寻求新的帮助方式。

         4
    :合理性:
        
    屏幕对角线相交的位置是用户直视的地方,正上方四分之一处为易吸引用户注意力的位置,在放置窗体时要注意利用这两个位置。

        
    合理性细则:
         1)
    :父窗体或主窗体的中心位置应该在对角线焦点附近。
         2)
    :子窗体位置应该在主窗体的左上角或正中。
         3)
    :多个子窗体弹出时应该依次向右下方偏移,以显示窗体出标题为宜。
         4)
    :重要的命令按钮与使用较频繁的按钮要放在界面上注目的位置。
         5)
    :错误使用容易引起界面退出或关闭的按钮不应该放在易点位置。横排开头或最后与竖排最后为易点位置。
         6)
    :与正在进行的操作无关的按钮应该加以屏蔽(Windows中用灰色显示,没法使用该按钮)
         7)
    :对可能造成数据无法恢复的操作必须提供确认信息,给用户放弃选择的机会。
         8)
    :非法的输入或操作应有足够的提示说明。
         9):
    对运行过程中出现问题而引起错误的地方要有提示,让用户明白错误出处,避免形成无限期的等待。
         10):
    提示、警告、或错误说明应该清楚、明了、恰当。
         5
    :美观与协调性:
        
    界面应该大小适合美学观点,感觉协调舒适,能在有效的范围内吸引用户的注意力。

        
    美观与协调性细则:
         1):
    长宽接近黄金点比例,切忌长宽比例失调、或宽度超过长度。
         2):
    布局要合理,不宜过于密集,也不能过于空旷,合理的利用空间。
         3):
    按钮大小基本相近,忌用太长的名称,免得占用过多的界面位置。
         4):
    按钮的大小要与界面的大小和空间要协调。
         5):
    避免空旷的界面上放置很大的按钮。
         6)
    :放置完控件后界面不应有很大的空缺位置。
         7):
    字体的大小要与界面的大小比例协调, 通常使用的字体中宋体9-12较为美观,很少使用超过12号的字体。
         8):
    前景与背景色搭配合理协调,反差不宜太大,最好少用深色,如大红、大绿等。常用色考虑使用Windows界面色调。
         9):
    如果使用其他颜色,主色要柔和,具有亲和力与磁力,坚决杜绝刺目的颜色。
         10):
    大型系统常用的主色有"#E1E1E1""#EFEFEF""#C0C0C0"等。
         11):
    界面风格要保持一致,字的大小、颜色、字体要相同,除非是需要艺术处理或有特殊要求的地方。
         12):
    如果窗体支持最小化和最大化或放大时,窗体上的控件也要随着窗体而缩放;切忌只放大窗体而忽略控件的缩放。
         13)
    :对于含有按钮的界面一般不应该支持缩放,即右上角只有关闭功能。
         14):
    通常父窗体支持缩放时,子窗体没有必要缩放。
         15)
    :如果能给用户提供自定义界面风格则更好,由用户自己选择颜色、字体等。

         6
    :菜单位置:
        
    菜单是界面上最重要的元素,菜单位置按照按功能来组织。

        
    菜单设测试细则:
         1)
    :菜单通常采用常用--主要--次要--工具--帮助的位置排列,符合流行的Windows风格。
         2):
    常用的有文件编辑查看等,几乎每个系统都有这些选项,当然要根据不同的系统有所取舍。
         3):
    下拉菜单要根据菜单选项的含义进行分组,并切按照一定的规则进行排列,用横线隔开。
         4):
    一组菜单的使用有先后要求或有向导作用时,应该按先后次序排列。
         5):
    没有顺序要求的菜单项按使用频率和重要性排列,常用的放在开头, 不常用的靠后放置;重要的放在开头,次要的放在后边。
         6):
    如果菜单选项较多,应该采用加长菜单的长度而减少深度的原则排列。
         7):
    菜单深度一般要求最多控制在三层以内。
         8):
    对常用的菜单要有快捷命令方式,组合原则见8
         9):
    对与进行的操作无关的菜单要用屏蔽的方式加以处理,如果采用动态加载方式——即只有需要的菜单才显示——最好。
         10)
    :菜单前的图标不宜太大,与字高保持一直最好。
         11):
    主菜单的宽度要接近,字数不应多于四个,每个菜单的字数能相同最好。
         12)
    :主菜单数目不应太多,最好为单排布置。

Open Toolbar