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

发布新日志

  • Windows系统服务备份与保护

    2008-05-13 09:45:51

    Windows系统服务备份与保护

    2007-10-28 信息来源:电脑学习网
    视力保护色: 杏仁黄  秋叶褐  胭脂红  芥末绿  天蓝  雪青  灰  银河白(默认色)  【 】【打印本页】【关闭窗口
        在对系统服务进行配置管理以前,对其进行备份是相当重要的,一旦出现错误可以马上恢复到正常状态。这里,我们介绍直接备份注册表中与服务相关的内容。  

      1. 备份系统服务  

      在对系统服务进行配置管理以前,对其进行备份是相当重要的,一旦出现错误可以马上恢复到正常状态。这里,我们介绍直接备份注册表中与服务相关的内容。  

      (1)运行注册表编辑器,依次展开注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services。  

      (2)单击“文件→导出”菜单命令,在出现的对话框中,单击“所选分支”选项,将此分支下的注册表内容导出并保存为一个REG文件。如果需要恢复系统服务,可以直接双击该REG文件导入注册表。  

      2.灾难保护  

      如果由于你的误操作,不慎禁用了某一个重要的服务,导致Windows无法启动,因此,你也无法重新启动相应的服务,这就造成了一个恶性循环。在这种情况下,我们只能使用系统控制台来进行手动恢复。在系统控制台中,我们可以随意启动任何服务或控制服务的启动类型。  

      将Windows XP安装光盘放入光驱中,然后在BIOS中将光驱启动设置为优先。启动电脑进入“欢迎使用安装程序”界面时,依照提示,按下R键进入Windows XP“故障恢复控制台”界面。选择需要修复的系统,并键入系统管理员密码。  

      在命令提示符状态下,我们需要用到“Enable”和“Disable”命令。其中,Enable的命令格式为“enable [service_name] [startup_type]”;Disable的命令格式为“disable [service_name]”。在这里,[service_name]是希望启用/禁用的服务或设备名称,[startup_type]则是启动的类型,表示了不同的启动类型。可用的类型包括有Service_disabled、Service_boot_start、Service_system_start、Service_auto_start、Service_demand_start。  

      下面我们以禁用Windows XP中的系统帮助为例,先将该服务的启动类型设置为禁用,然后重新启用它。  

      (1)进入“故障恢复控制台”界面,运行“listsvc”命令查看各种服务的运行状态,在这里,我们可以看到系统帮助服务是启动的,输入“disable helpsvc”命令并回车,即可将系统帮助服务禁用。  

      (2)如果需要重新启动该服务并设置该服务随系统自动运行,可以输入“enable helpsvc service_boot_start”命令回车即可
     
  • D快捷键

    2008-04-07 15:13:27

    ●代码模板:      CTRL+J 
    ●代码整块移动 : CTRL+SHIFT+I(右移) CTRL+SHIFT+U(左移)
    ●选中窗体 :     先选中任一控件,SHIFT+鼠标左键
    ●将鼠标指向变量名、单元名、类名,再用 CTRL+鼠标左键 可找到相应的说明
    ●在过程、函数、事件内部, SHIFT+CTRL+向上的方向键  可跳跃到相应的过程、函数、事件的定义 
    ●相反,在过程、函数、事件的定义处,SHIFT+CTRL+向下的方向键 可跳跃到具体过程、函数、事件内部
    ●CTRL+ SHIFT + C:编写申明或者补上函数.
      如:
    程序代码 程序代码
     procedure TT.A(AA: string);  //函数申明
      安下:CTRL+ SHIFT + C后,会写上
      procedure TT.A(AA: string);
      begin
      end;

    ●SHIFT+CTRL+E 显示 EXPLORER ,我觉的这个比较好 
    ●用crtl+d就可以做到代码排列,比这个要方便多了,当然里面还有其它的功能这里添加
    ●shift +f12 快速查找窗体并打开
    ●f11 属性
    ●f9运行
    ●crtl+f9 编译
    ●crtl + shift + n (n=1,2,3,4......)定义书签 
    ●crtl + n (n=1,2,3,4......)跳到书签n  

    引用内容 引用内容
    下面的快捷键大部分在Delphi 7.0的菜单中找不到,其中有一些还是非常有用的。



    ●Ctrl+PageUp      将光标移至本屏的第一行,屏幕不滚动。
    ●Ctrl+PageDown    将光标移至本屏的最后一行,屏幕不滚动。
    ●Ctrl+↓          向下滚动屏幕,光标跟随滚动不出本屏。
    ●Ctrl+↑          向上滚动屏幕,光标跟随滚动不出本屏。
    ●Ctrl+Home         将光标移至文件头。
    ●Ctrl+End            将光标移至文件尾。
    ●Ctrl+B                Buffer List窗口。
    ●Ctrl+I                 同Tab键。
    ●Ctrl+M                同Enter键。
    ●Ctrl+N                同Enter键,但光标位置保持不变。
    ●Ctrl+T                删除光标右边的一个单词。
    ●Ctrl+Y                删除光标所在行。

    ●Ctrl+Shift+G     插入GUID。
    ●Ctrl+Shift+J     弹出Delphi语句提示窗口,选择所需语句将自动完成一条语句。
    ●Ctrl+Shift+T     在光标行加入To-Do注释。
    ●Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本。

    ●Ctrl+F3          Call Stack窗口。
    ●Ctrl+F4          等于File菜单中的Close项。

    ●Ctrl+鼠标转轮    加速滚屏。

    ●Shift+F8         调试时弹出CPU窗口。
    ●Shift+F10        等于鼠标右键(Windows快捷键)。

    ●Alt+F4           关闭所有编辑框中打开的源程序文件,但不关闭项目。
    ●CTRL+Z 还原(Undo) 
    ●CTRL+ENTER 定位到单元文件
    ●Ctrl+Alt+c  注释块
    ●Ctrl+Alt+u  取消注释块

    ●Shitf+箭头 选择 
    如果同时按住Alt +Shitf+箭头, 再进行选择, 则是一种区域选择, 而不是行选择, 粘贴的
    时候也就是插入粘贴了. 
    ●F8 STEP OVER (步进式调试不进入子过程)
    ●F7 TRACE INTO (步进式调试同时追踪进入子过程)
    ●F11,F12 切换EDITOR,INSPECTOR,FORM DESIGNER. 
    ●CTRL+ALT+F11 弹出工程管理器 
    ●怎样跳格呢? 其实也是有办法的, 就是CTRL+K,I向后, CTRL+K,U向前. 
    ●有时候反复输入什么东西是不是很繁? CTRL+SHIFT+R录制键盘宏, 比如我经常做的就是: 
    下箭头-下箭头-HOME-回车-CTRL+V, 再键入一次CTRL+SHIFT+R录制完成, 之后您可以使用
    CTRL+SHIFT+P, 重复宏,还是省了一些事的. 

    另外还有一些快捷都是很少用到的, 我一时也想不起来, 您要是有兴趣就在帮助索引中输入 "Classic keystroke mapping", 自己查看吧. 

    http://www.shinian10.com/article.asp?id=209

     

     1.SHIFT+鼠标左键    先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样)
    2.Shift+F8          调试时弹出CPU窗口。
    3.Shift+F10         等于鼠标右键(Windows快捷键)。
    4.Shitf+箭头        选择
    5.shift +F12        快速查找窗体并打开
    6.F7               (步进式调试同时追踪进入子过程)
    7.F8               (步进式调试不进入子过程)
    8.F9                运行
    9.F12               切换EDITOR,form
    10.Alt+F4           关闭所有编辑框中打开的源程序文件,但不关闭项目
    11.ALT+鼠标左键      可以块选代码,用来删除对齐的重复代码非常有用
    12.Ctrl+F9          编译
    13.Ctrl+shift+N(n=1,2,3,4......)  定义书签
    14.Ctrl+n(n=1,2,3,4......)跳到书签n
    15.CTRL +SHIFT+N    在书签N处,再按一次 取消书签
    16.Ctrl+PageUp      将光标移至本屏的第一行,屏幕不滚动
    17.Ctrl+PageDown    将光标移至本屏的最后一行,屏幕不滚动
    18.Ctrl+↓          向下滚动屏幕,光标跟随滚动不出本屏
    19.Ctrl+↑          向上滚动屏幕,光标跟随滚动不出本屏
    20.Ctrl+Home        将光标移至文件头
    21.Ctrl+End         将光标移至文件尾
    22.Ctrl+B           Buffer List窗口
    23.Ctrl+I           同Tab键
    24.CTRL+J           (弹出Delphi语句提示窗口,选择所需语句将自动完成一条语句)代码模板
    25.Ctrl+M           同Enter键。
    26.Ctrl+N           同Enter键,但光标位置保持不变
    27.Ctrl+T           删除光标右边的一个单词
    28.Ctrl+Y           删除光标所在行
    29.CTRL+C           复制
    30.CTRL+V           粘贴
    31.CTRL+X           剪切
    32.CTRL+Z           还原(Undo)
    33.CTRL+S           保存
    34.Ctrl+F           查找
    35.Ctrl+L           继续查找
    36.Ctrl+r           替换
    37.CTRL+ENTER       定位到单元文件
    38.Ctrl+F3          弹出Call Stack窗口
    39.Ctrl+F4          等于File菜单中的Close项
    40.Ctrl+Backspace   后退删除一个词,直到遇到一个分割符
    41.Ctrl+鼠标转轮    加速滚屏
    42.Ctrl+O+U         切换选择块的大小写(注意松开O后再按U,Ctrl保持按下)
    43.Ctrl+K+O         切换选择块为小写(注意松开K后再按O,Ctrl保持按下)
    44.Ctrl+K+N         切换选择块为大写(注意松开K后再按N,Ctrl保持按下)
    45.Ctrl+Shift+G     插入GUID
    46.Ctrl+Shift+T     在光标行加入To-Do注释
    47.Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本
    48.CTRL+SHIFT+C     编写申明或者补上函数,绝好!!!
    49.CTRL+SHIFT+E     显示EXPLORER
    50.Ctrl+Tab         在Inspector中切换Properties页和Events页
    51.CTRL+SHIFT+U     代码整块左移2个空格位置
    52.CTRL+SHIFT+I     代码整块右移2个空格位置
    53.CTRL+SHIFT+↑    在过程、函数、事件内部, 可跳跃到相应的过程、函数、事
                        件的定义(在interface和implementation之间来回切换)
    54.CTRL+SHIFT+↓    在过程、函数、事件的定义处, 可跳跃到具体过程、函数、事件内部(同上)
    55.Tab              在object inspector窗口按tab键将光标移动到属性名区,然后键入属性名的开头
                        字母可快速定位到该属性
    56.Ctrl+Alt         按着Ctrl+Alt之后,可用鼠标选择一个矩形块中的代码,
                        并可比它进行复制,粘贴
    57.Shift+↓、↑、→、← 以1像素单位更改所选控件大小
    58.Ctrl+↓、↑、→、←以1像素单位更改所选控件位置
    59.Ctrl+E           快速选择(呵呵,试试吧,很好玩的) 
    http://www.moon-soft.com/program/bbs/readelite902320.htm

     

  • 句柄

    2008-03-31 12:00:37

     
    句柄并没有什么神奇之处,不管哪种句柄,实际都是一个整数。它标识一种资源,如窗口、位图等等。就象你找一个人,必须知道它的地址一样,如果你要操作一种资源,必须先获得句柄。
        
    “取窗口句柄()”并不是只能取出窗口的句柄,所有窗口控件,如编辑框、标签等都可以用本命令取出自己的句柄,如:

         编辑框1.取窗口句柄()
         标签1.取窗口句柄()
    控件的句柄同样,不知你明白了没有?我个人理解是任何控件都有它自身的特有属性,句柄也就指它的特有属性(包括共性)。好像人有男女之分,要找男人一定是找有特有性别的人,也就是能区分不是女人的特性的人。

    “句柄”(handle)
          handle的本意是把柄,把手的意思。是你与操作系统打交道的
    东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生
    证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)
    享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能
    到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,
    你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。
    而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以
    句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,
    但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是
    对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的.
  • 无法看到asp页面问题解决

    2007-07-19 12:34:43

    解决IIS目录权限问题 原文

    NND,困惑了N久的问题,今天终于找到答案了,最郁闷的是同样的硬件的机器,同一版本的系统,竟然有这样不同的结果!

    以下为转的文章,记录一下:


    错误类型一:
    Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
    [Microsoft][ODBC Microsoft Access Driver] 不能更新。数据库或对象为只读。
    错误类型二:
    Microsoft OLE DB Provider for ODBC Drivers 错误 ''80004005''
    [Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 ''Temporary (volatile) Jet DSN for process 0x728 Thread 0x854 DBC 0x276fb44 Jet''。
    -------------------------------------------------------------------

            当你使用ASP连接数据库时可能会出现这种情况,为什么呢?因为您数据库文件所在的目录权限对特定的用户没有开启足够的权限,你只能进行只读访问,一般出现这种情况的文件系统为NTFS,那怎么解决呢?
            首先,你找到数据库所在目录,也可以是上层目录,然后设置文件夹 安全 属性,最简单的是把everyone的权限设置成完全即可,那对于这个问题,应该使哪个对象的权限设置成完全呢?答案是 IUSER_您的机器名 。这个是哪个对象?这个是Internet来宾用户,有兴趣的读者可以查阅相关资料。至此,问题解决,你可以再运行一下看看是否解决了问题。

            附:对于Windows XP的用户,也许你会茫然于更改文件夹的安全属性。因为在默认情况下,Windows XP使用了简单文件共享方法,所以,当你点 属性 的时候是看不到 安全 选项卡的。具体操作如下:

            我的电脑-->文件夹选项-->查看-->取消
    使用简单文件共享(推荐) 的勾选 即可。你查看一下你要更改文件夹的属性,是不是多了一个 安全 选项卡呢?

     

    活动窗口出现“80004005 - 无法使用“(未知)”;文件已在使用中”错误

    当您使用 Microsoft Access 数据库并试图在 Web 浏览器中或以“动态数据”模式查看动态页时,会出现此错误。此错误信息的另一形式为“80004005 - Microsoft Jet 数据库引擎无法打开文件(未知)”。

    可能的原因是存在权限问题。有关更多信息,请参见权限问题答疑。具体的原因和解决方案如下:

    • Internet Information Server 所使用的帐户(通常是 IUSR)对于某个基于文件的数据库或包含该文件的文件夹可能没有正确的 Windows 权限。请在用户管理器中检查该 IIS 帐户 (IUSR) 的权限。
    • 您可能没有创建或销毁临时文件所需的权限。请检查对该文件和文件夹的权限。确保您具有创建或销毁任何临时文件所需的权限。临时文件通常创建在数据库所在的文件夹中,但也可能创建到其它文件夹(如 /Winnt)中。
    • 在 Windows 2000 中,可能需要为 Access 数据库 DSN 更改超时值。若要更改超时值,请选择“开始”>“设置”>“控制面板”>“管理工具”>“数据源 (ODBC)”。单击“系统”选项卡,突出显示正确的 DSN,然后单击“配置”按钮。单击“选项”按钮并将“页超时”值更改为 5000

    如果仍然有问题,请参见下面的 Microsoft 知识库文章:

    xp更改权限的应为:
    我的电脑-->工具-->文件夹选项-->查看-->取消 使用简单文件共享(推荐) 的勾选 即可。

    解决方法:(权限问题)

      文件夹属性里的安全选项卡把 ISUR_annayin改为完全控制的权限

    不过接下拉出现的是“provider 0x80004005 未指定的错误”错误

    解决方法:(ODBC数据库)

    在项目数据源所在的目录下Connections中(C:\Inetpub\wwwroot\...\Connections)的welcome_DSN.asp文件以记事本方法打开

    <%
    ' FileName="Connection_odbc_conn_dsn.htm"
    ' Type="ADO"
    ' DesigntimeType="ADO"
    ' HTTP="false"
    ' Catalog=""
    ' Schema=""
    Dim MM_welcome_DSN_STRING
    MM_welcome_DSN_STRING = "dsn=eshop;"
    %>
    把MM_welcome_DSN_STRING = "dsn=eshop;"改成
    MM_welcome_DSN_STRING = "dsn=eshop;uid=;pwd=;"

    即可


     

  • 在Windows XP家庭版安装IIS[注意]

    2007-07-18 22:43:02

    原文


    (1) 打开 C:\Windows\INF\SYSOC.INF  
    (2) 在 [Components] 中,找到这一行
    iis=iis.dll,OcEntry,iis.inf,hide,7
    (3)将它改为
    iis=iis2.dll,OcEntry,iis2.inf,,7
    这是因为当我改变iis.dll时,ms caching机制就会把它修复;我可以把iis.dll改名,并且迅速建立一个隐藏的iis.dll目录来阻止它被还原,但是这样太麻烦,不如在设置里把改为iis2.dll来得方便。
    (4) 从win2k Adv Server CD抓取iis.dl_和iis.in_。这种方法对W98、FP等都有效,因此我想在这里也是可以的。进入DOS命令状态,键入
    EXPAND IIS.DL_ IIS2.DLL
    EXPAND IIS.IN_ IIS2.INF
    再把IIS2.INF拷到C:\WINDOWS\INF中,把IIS2.DLL拷到C:\WINDOWS\SYSTEM32\SETUP中。
    (5) 现在到控制面板选“添加/删除程序”,现在有 IIS 选项,终于能安装了,好耶! - 只可惜我不能从XPpro CD里面安装。((
    接下来照默认值安装(因为我只要其中的IIS Web 服务器)。
    (6) 安装过程中,系统会提示你需要哪些文件。它们可以从 MS XP Home CD 、Adv Server CD 、C:\WINNT\SYSTEM32\INETSRV、C:\Windows\I386 等得到(它会告诉你文件名,你只要打开文件搜索就可以找到了,也许光盘中有你需要的全部文件)。
    (7) 装完以后,你可以在控制面板的管理工具中设置IIS了。
    我按照某个 index.html 所述的方法配置 IIS ,不行 ((
    我在 inetpub 文件夹上点右键,试着操作共享文件夹,不行 ((
    于是,我打开事件查看器,找到了上述操作中的错误。现在进入 IIS ,在Directory Security选项中,点 Edit ,Browse,选中笔记本上的设置文件。
    (9) 太好了,终于见到了 http://localhost 的欢迎页面。

    这样就可以在家庭版中测试自己的论坛了哦!!希望能帮到大家!!

     

    这个好像不完全行,厄。。。那个IIS可以看到了,但是不能选中,奇怪的是它也不是灰色,看着不能安装郁闷呢

    另外一个

    2.WinXP如何安装IIS?
    WinXP安装IIS比较麻烦,据我本人见过的有2种专业版本,一种是可以像Windows2000一样正常的安装IIS;另一种,在添加/删除Windows组件是看不到IIS安装项,它的详细步骤如下:
    1)首先,请点击这里从本网站下载驱动程序,236K:[Download]
    2)解压缩后,可以得到两个文件。假设你的XP系统安装在E:\Windows目录。
    3)把iis.inf复制到E:\Windows\inf目录。
    4)把iis.dll复制到E:\Windows\system32\setup目录。
    5)然后点击这里下载ADMXPROX.DL_文件:[Download],把它存在任意的路径,只要安装时能找到它。
    6)然后插上WinXP的安装盘,就可以像Win2000一样安装了,步骤如上。
    ·如果安装以后,打开Internet 服务管理器看到的是空空如也,无法连接计算机的话,你只好换一张XP的安装盘了,重新安装XP系统。

    这个好像不太顶用

     

  • Ghost教程

    2007-07-10 16:26:28

     

    Ghost教程

    凡是学过IT的人都知道Ghost是做什么的?就是做硬盘镜像文件的.主要用于硬盘数据的备份和恢复.
    让对我们做软件测试有什么用呢.主要是制作和恢复一个测试环境用的.这样会让我们的测试更加方便.

    ghost安装非常简单,只要将下ghost.exe复制到硬盘或软盘即可执行,注意由于操作需要鼠标,建议您最好将鼠标驱动程序夫子到和ghost.exe在一个目录下,这样方便使用(不使用鼠标请使用tab健)。
       启动程序。(在dos下请先运行鼠标驱动程序,再运行ghost.exe)
    画面操作说明
    ghost复制、备份可分为硬盘(disk)和磁盘分区(partition)两种。

    其中:
    disk —表示硬盘功能选项
        partition —表示磁盘分区功能选项
        check —表示检查功能选项



    磁碟功能分为三种:
    硬盘功能分为三种:
    1.disk to disk 硬盘复制
    2.disk to image 硬盘备份
    3.disk from image 备份还原
    注意:
    注意:若要使用硬盘功能,你必须有两个硬盘以上,才能实现硬盘功能;所有被还原的硬盘或磁碟,原有资料将完全丢失。(请慎重使用,把重要的文件或资料体腔备份以防不测)
    1.disk to disk 硬盘复制
    (1)先来选择源硬盘 source drive的位置;
    (2)选择目的的硬盘 destination drive的位置;
    鼠标移动可按tab键。


    (这是硬盘的分区显示,两个以上才能进行复制)



    (3)在磁盘复制或备份时,可依据使用要求设定分区大小;



    (4)选定后按“ok”,出现确认选择“yes”即开始执行复制。
    2. disk to image 硬盘备份


    (1) 选择来源硬盘source drive的位置;

    (2) 选择备份档案储存的位置;






    (3) 按“ok”后,出现确认选择“yes”即开始执行备份。
    3. disk from image 备份还原

    (1) 选择还原档案;
    (2) 选择要还原的硬盘 destination drive;
    (3) 在做硬盘还原(复制)进,可依据使用要求设定分区大小;
    (4) 按“ok”后,出现确认选择“yes”即开始执行还原。
    partition——磁盘分区功能选项



    功能分为三种:
        1、partition to partitiont
                   (复制分区)
        2、partition to image
                 ( 备份分区)
        3、partition from  image
                 (还原分区)
    1、partition to partitiont (复制分区)
    复制分区的方法很简单,手先选择来源区,再选择目地区,确定就可以了,与磁盘之间的复制方法基本一样。
    2、partition to image (备份分区)

          注意:若要使用备份分区功能,(如要备份c盘)必须有两个分区以上,要保证d盘有足够的空间存储档案备份。
    (1)选择要备份的硬盘;

    (2)选择要备份的硬盘分区,如c盘,这通常存放操作系统与应用程序;



    (3)选择备份档案存放的路径与文件名(创建)。不能放在选择备份的分区;
    (4)回车确定后,出现以下提示框,有三种选择;



    1 、    no  :备份时,基本不压缩资料(速度快,占用空间较大)
    2 、    fast  :一般少量压缩(速度一般,建议使用)
    3 、    hight  :最高比例压缩(可以压缩至最小,但备份/还原时间较长)
    (5)确认,“yes”执行。

    3、partition from image (还原分区)
    (1)选择要还原的备份档案;

    (2)选择要还原的硬盘;
    (3)选择要还原的硬盘分区;

    (4)选择“yes”执行。

    check
    此功能是检查磁碟或备份档案因fat、硬碟坏轨等是否会造成备份或还原失败。
     
    对于SATA硬盘
    Ghost对sata硬盘支持不是很好.
    要在bios中设定才可以使用.
    一个SATA硬盘挂在SATA1接口,一个CDROM挂在PRIMARY IDE接口(设为主盘):
       a) 开机进入BIOS设定,在MAIN菜单中选中IDE Configuration
       b) 将Onboard IDE Operate Mode改为Compatible Mode
       c) 在[Enhanced Mode Support On]中选择[Primary P-ATA+S-ATA]
       d) 重启进入BIOS后,你会发现在MAIN菜单中只有4个IDE设备了,[Primary IDE MASTER]为[CDROM],[Primary IDE Slave]为[NONE],[Secondary IDE Master]为[IDE DISK](你的硬盘的型号),[[Secondary IDE Slave]为[NONE]
       e) 用光盘启动进入DOS后,运行GHOST就可以了

    ? ? 2、 一个SATA硬盘挂在SATA1接口,一个CDROM挂在SECONDARY IDE接口:
    只要将上面第三步中的[Primary P-ATA+S-ATA]改为[Secondary P-ATA+S-ATA],就可以了,此时系统会将SATA1和SATA2设备当作[Primary IDE Master]和[Primary IDE Slave]。

    ? ? 3、 如果你使用了支持SATA的主板,但没有使用SATA设备时,有些主板BIOS还是默认打开了SATA通道的,此时要使用GHOST来备份系统也会导致黑屏,所以我们也需要在BIOS里面设置一下,来屏蔽掉SATA通道,还是在第一种情况下的第三步中,将[Primary P-ATA+S-ATA]改为[P-ATA Ports Only],此时系统将屏蔽掉SATA设备,你可以将它做为普通的没有SATA设备的主板使用了。

    ? ? 以上是本人使用SATA设备和GHOST时的一些小经验的总结,希望对大家有用。

    ? ? 其它型号的主板也是同样的设置,不过里面的选项可就没有ASUS的丰富了


    在965主板上可以使用achi

    dos上只支持二个ide通道
     

    原文

  • 51Testing软件测试网精选文章推荐

    2007-06-15 09:31:02

    51Testing软件测试网精选文章推荐

    人的差异在于业余时间(转贴)
     
    科学大师爱因斯坦说过这样一句话:“人的差异在于业余时间”。我们总认为,人与人不同,这里面有环境、有机缘、有能力、也有性格的差异。怎么在于“业余时间”呢?业余时间对我们每个人意味着休息和充电。

      2000年8月20日《新华周末》报道,中国人民大学教授王琪延博士带领他的课题组对全国城市居民的生活时间进行抽样调查发现,我国城市居民一周平均每日工作时间为5小时1分,个人生活必需时间10小时42分,家务劳动时间2小时21分,闲暇时间6小时6分。四类活动时间分别占总时间的21%、44%、10%、25%。每一天,城市人就是这样度过。10年来,人的闲暇时间增加了69分钟,闲暇时间占人生命的1/3。而我国居民在电视机前每天是3小时38分,打发掉自己一半的闲暇时光。日本、美国人每天看电视的时间分别为1小时37分和2小时14分。

      调查结果还显示,本科以上高学历者的终生工作时间是低学历者的4倍,收入是其7倍以上。学历越高,越重视终生学习,平均日学习时间为61分钟。

      每个人的业余时间有多少?业余时间如何用?这里大有讲究。当你业余时间比较多时,而且把如此多的业余时间用于打牌、跳舞、闲扯、看电视时,你的收入就像翘翘板,这一头就会低下去。反之收入就会高起来。收入是社会对你的报酬,也是一个人的价值物化形式。当你的收入渐渐趋于牛市或熊市时,你的生活方式和生活内容也就趋于变化,你的理想和追求与人就大大不同了,这时你自觉不自觉地与他人出现了差异。“人的差异在于业余时间”。这也许是爱因斯坦关于人与时间的又一种表述方式,也是一种深刻的耐人寻味的表述方式。


      列宁说过,不会休息,就不会工作。现在该是赋予它时代的新义了。步入信息化社会,拥抱知识经济时代,也必然地要求我们压缩以至挤占业余时间。市场竞争无孔不入。在业余时间,我们都能嗅到一股知识和金钱的气息。曾被美国《时代周刊》评为全球“数字英雄”的搜狐总裁张朝阳博士说:“我就是平凡人,我没有发现自己与别人有什么大的不同。如果说有不同,那就是我每天平均除了7个小时睡觉外,其他时间都在工作(思考)”。

      据说,成功地研究了第三种血细胞(现称血小板)及其他成就的加拿大医学教育家奥斯勒,为了从繁忙的工作中挤出时间读书,他为自己定下一个制度,睡觉之前必须读15分钟的书。不管忙碌到多晚进卧室,就是清晨两三点钟,他也一定要读15分钟的书才入睡。这个制度他整整坚持了半个世纪之久,共读了8235万字、1098本书,医学专家成了文学研究家。奥斯勒赋予业余时间以生命的神奇。

      你要显示存在的价值吗?你要与人有所差异吗?那么,用好你的业余时间吧!




    出处:心擎网
  • 用户注册和密码修改测试点

    2007-06-12 17:36:36

    原文

    一.用户注册

            只从用户名和密码角度写了几个要考虑的测试点,如果需求中明确规定了安全问题,Email,出生日期,地址,性别等等一系列的格式和字符要求,那就都要写用例测了~

            以等价类划分和边界值法来分析
            1.填写符合要求的数据注册: 用户名字和密码都为最大长度 (边界值分析,取上点)
            2.填写符合要求的数据注册 :用户名字和密码都为最小长度 (边界值分析,取上点)
            3.填写符合要求的数据注册:用户名字和密码都是非最大和最小长度的数据(边界值分析,取内点)
            4.必填项分别为空注册          
            5.用户名长度大于要求注册1位(边界值分析,取离点)
            6.用户名长度小于要求注册1位(边界值分析,取离点)
            7.密码长度大于要求注册1位(边界值分析,取离点)
            8.密码长度小于要求注册1位(边界值分析,取离点)
            9.用户名是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了,如含有空格,#等,看需求是否允许吧~)
            10.密码是不符合要求的字符注册(这个可以划分几个无效的等价类,一般写一两个就行了)
            11.两次输入密码不一致(如果注册时候要输入两次密码,那么这个是必须的)
            12.重新注册存在的用户
            13.改变存在的用户的用户名和密码的大小写,来注册。(有的需求是区分大小写,有的不区分)
            14.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号显示


    二.修改密码
            当然具体情况具体分析哈~不能一概而论~
            实际测试中可能只用到其中几条而已,比如银行卡密码的修改,就不用考虑英文和非法字符,更不用考虑那些TAP之类的快捷键.
            而有的需要根据需求具体分析了,比如连续出错多少次出现的提示,和一些软件修改密码要求一定时间内有一定的修改次数限制等等。

            1.不输入旧密码,直接改密码
            2.输入错误旧密码
            3.不输入确认新密码
            4.不输入新密码
            5.新密码和确认新密码不一致
            6.新密码中有空格
            7.新密码为空
            8.新密码为符合要求的最多字符
            9.新密码为符合要求的最少字符
            10.新密码为符合要求的非最多和最少字符
            11.新密码为最多字符-1
            12.新密码为最少字符+1
            13.新密码为最多字符+1
            14.新密码为最少字符-1
            15.新密码为非允许字符(如有的密码要求必须是英文和数字组成,那么要试汉字和符号等)
            16.看是否支持tap和enter键等;密码是否可以复制粘贴;密码是否以* 之类的加秘符号
            17.看密码是否区分大小写,新密码中英文小写,确认密码中英文大写.
            18.新密码与旧密码一样能否修改成功.


            有个朋友问我,注册的时候测试了密码长度,修改的时候为什么还要测试.
            我在这里举个我亲身经历的例子,以前我玩一个游戏,叫恋爱盒子,在游戏里我把密码改成了xuewufengtian,后来怎么也上不去了.因为资料填写不全无法找回密码.后来我在一次注册过程中发现,注册的时候密码长度最长是10位,这时我灵机一动,用了原来的用户名和xuewufengt的密码就进去了. 这表明,修改密码时候的最大长度和注册及登陆的时候密码最大长度有可能是不一致的.

  • 软件测试工程师薪资调查(转)

    2007-05-16 14:11:15

    因修正错误而存在——软件测试工程师

      
    所属门派:IT业
      “假如存在没有任何错误的程序,那么世界也会不复存在。”
       因错误而存在,因修正错误而存在,这就是软件测试工程师的存在之道。虽然测试不是解决错误的根本举措,但却是必须的手段。
            软件测试工程师(Software
    Testing Engineer)的主要工作职责是,理解产品的功能要求,并对其进行测试,检查软件有没有错误(Bug),决定软件是否具有稳定性(Robustness),写出相应的测试规范和测试案例。
            简而言之,软件测试工程师在一家软件企业中担当的是“质量管理”角色,及时纠错及时更正,确保产品的正常运作。据有关调查数据表明,目前国内许多软件企业内部的测试人员和开发人员之比在1:5,与国外软件业1:1的比例还相去甚远。


      门派技能:
      软件测试工程师主要职责为:
      1、负责项目/产品的测试工作,分析产品需求,建立测试环境和计划,保证产品质量以及测试工作的顺利进行;
      2、按照软件工程规范和项目管理流程,实施、管理和知道软件开发不同阶段的各种测试,并提交测试报告。测试的计划安排包括人员安排、进度、使用的软硬件环境、测试的流程等;
      3、提交测试报告,并撰写用户说明书;
      4、参与软件
    测试技术和规范的改进和制定。


      入门资质:
      一般需要至少专科学历,一到两年测试工作经验。要熟悉软件的测试技术、方法、流程、测试文档,若想进一步提升,还要熟悉
    自动化测试的流程、管理及深层开发(包括测试框架等);了解若干主流测试工具,如功能测试工具winrunner、quicktestpro,性能测试工具LoadRunner,配置管理工具TestDirecter, Visiual Source Safe等;熟悉一些主流的软件工程方法论和思想,如RUP、CMM、CMMI、XP、PSP、TSP;了解软件工程,软件生命周期模型基础,了解软件配置管理;能够根据不同企业的产品特点,要求了解相应的开发测试方法。对于资深的软件测试人员,有些企业还要求其本身有自主开发测试工具的能力。
      由于需要与开发人员及时沟通,因此作为一个出色的软件测试工程师,还需要有良好的沟通技巧以及优秀的言语表达能力,具备良好的团队合作精神。


      入门经:
      缜密的逻辑思维能力为了应对软件使用者千差万别的使用习惯和软件在使用过程中出现的各种现象,软件测试工程师应该具有逆向思维能力,能够以用户的角度出发,捕获一切可能性,对细节有不同寻常的关注能力。此外,软件测试工程师还要有穷追到底的精神,并且要善于沟通和撰写各类专业报告。
      出色的沟通能力要成为优秀的软件测试工程师,要具备出色的沟通能力和表达能力,既能够和技术开发人员沟通无碍,又能用简洁明了的话语向客户、管理者等这些非技术人员阐述系统在哪些方面还有缺失有待改进。在同开发人员的沟通过程中,要注意沟通技巧,提高沟通效率,和开发人员保持良好的人际关系。当测试人员发现软件有问题时,不仅需要跟开发人员沟通,找到问题出在哪儿,阐述自己挑错的理由,有时候甚至要提出解决方案,直接参与前期需求和代码的修改。一个优秀的软件测试工程师能够适时地站在各自的立场上考虑、解释并解决问题,从而尽量避免冲突和对抗。
      全面的技术能力作为软件测试工程师,虽然无须精通各种语言各类技术,但必须全面理解被测软件系统,明白该使用何种工具进行测试。要做到这一点一般需要有一定的编程经验,这些经验可以加深对软件开发过程的理解。
      耐得住性子 软件测试工作是枯燥的,甚至重复性的,有时需要花费惊人的时间去分离、识别和分派一个错误,因此需要测试人员能静得下心耐得住性子。这个工作不容许有丝毫的心浮气躁。同时,逻辑严密但不乏重复成分的测试工作也容易使人倦怠,因此需要一定的自我督促能力。
      规范测试流程公司不正规的测试流程,不标准的测试方法,将使软件测试人员终日陷入碌碌无为的点击按钮的不良状态中。


      晋阶易筋经:
      初级测试工程师
      入门级,具有一些手工测试经验,开发测试脚本并开始熟悉测试生存周期和测试技术;
      测试工程师
      能够独立编写自动测试脚本程序并担任测试编程初期的领导工作,进一步拓展编程语言、
    操作系统、网络与数据库方面的技能;
      高级测试工程师
      帮助开发或维护测试或编程标准与过程,负责同级的评审,并能够指导初级的测试工程师;
      Team Leader
      一般具有5年左右工作经验,负责管理一个小团队。负责进度安排、工作规模/成本估算、按进度表和预算目标交付产品,负责开发项目的技术方法,能够为用户提供支持与演示;
      测试经理
      能够担当测试领域内的整个开发生存周期业务,能够为用户提供交互和大量演示,负责项目成本、进度安排、计划和人员分工;
      计划经理
      具有多年纯熟的开发与支持(测试/质量保证)活动方面的经验,管理从事若干项目的人员以及整个开发生存周期,负责把握项目方向与盈亏责任。


      秘传“薪”经:
      薪资黄金点
      软件测试工程师在IT行业中越来越受到重视,其薪资也节节高升。
            测试工程师的起薪从2000~5000元/月不等,若有四年工作经验的话,薪资在8000元/月左右,具体视不同地域、不同性质企业、测试工程师的不同能力而定。一般工作5~8年的软件测试工程师的薪资是刚出道时的新手的一倍,而10年以上工作经验的软件测试工程师薪资却走了下坡路,和5~8年的从业者持平甚至有些企业开出了略低的薪资,看来这行的折旧率较高。
      软件测试行业的从业者7成左右都拥有本科学历,本科学历的从业者的薪资约为大专学历从业者的1.33倍左右,而硕士学历的从业者薪资起点明显高于本科学历从业者,约为后者的1.49倍。一般外语能力精通者的薪资为平均薪资的1.29倍左右,熟练者为平均薪资的1.09倍,值得注意的是,深圳、杭州和大连的外语能力精通者的薪资均超出平均薪资不少,其中杭州的外语能力精通者的薪资是平均薪资的1.79倍。
      以3.5年左右从业工作经验的软件测试工程师的各地薪资情况来看:
      深圳地区的平均年薪是全国各城市最高的,超出7万元,其中外商独资欧美企业的年薪为7.8万元,国营企业的年薪紧随其后,超过了7.3万元,合资/合作非欧美企业的年薪较低,约为6万。
      北京地区该职位的平均年薪逾5.8万元;其中外商独资企业的年薪为全国之最,将近8.5万元,而其余各类型企业的年薪都在5~6万元左右。
      广州地区该职位的平均年薪约为4.5万元;其中外商独资欧美企业的年薪最高,达到了7万元;合资/合作欧美企业也能拿到6.2万元的平均年薪,合资/合作非欧美企业就较逊色,年薪不到4万元。
      上海地区软件测试工程师的平均年薪为6.3万元,欧美独资和欧美合资的薪资不相上下,分别为7.9万和7.7万元。国营企业略高于平均线,达到6.5万元,其余各类企业则都表现平平。
      杭州地区该职位的平均年薪达到了5.5万元;其中外商独资欧美企业和合资/合资欧美企业的年薪相当,均为6.9万元,国营企业的薪资也颇吸引人,超过了5.9万元,民营/私企和合资/合作非欧美企业的年薪均不到5万元。
      大连地区该职位的平均年薪为3.8万元;其中外商独资企业和合资/合作欧美企业的年薪均超过了4.7万元;国营企业的软件测试工程师的年薪也近4万元左右,而民营/私企和合资/合作非欧美企业的年薪则相对较低。


      福利
      上海地区的软件测试工程师享有的带薪年假是全国各地最多的,一年中平均有10天,北京、广州、大连均为8天,杭州和深圳相对较少,为6天。
      以上这些地区在软件测试的培训方面都做得不错,基本上均有6成以上的从业者可享受到公司提供的培训计划,但上海的软件工程师的培训比例不到5成。杭州和深圳两地的培训是全国各地区最出色的,逼近8成。
      深圳、上海均有2成的从业者可享受房贴或者补充住房公积金,大连和北京则有3成以上的从业者可享受公司的房贴或者补充住房公积金,广州更是达到了4成以上,而杭州此项福利的比例较低,仅为1成。

  • 协议基础(持续更新)转载

    2007-05-10 11:14:13

     Internet的工作原理

    Internet是由一些通讯介质,如光纤、微波、电缆、普通电话线等,将各种类型的计算机联系在一起,并统一采用TCP/IP协议(传输控制协议/网际互联协议) 标准,而互相联通、共享信息资源的计算机体系。Internet是一个跨越不同国家、地区和区域的计算机网相互联结,彼此通讯的集合。对于Internet用户来说,这些网好像就是一个天衣无缝的整体。下面谈谈Internet是如何工作,并维护这种整体性的。

    计算机网是由许多计算机组成的,要在两个网上的计算机之间传输数据,必须做两件事情:保证数据传输到目的地的正确地址和保证数据迅速可靠地传输的措施,强调这两点是因为数据在传输过程中很容易传错或丢失。

    Internet使用一种专门的计算机语言(协议)以保证数据能够安全可靠地到达指定的目的地。这种语言分为两部分,即TCP(Transfer Control Protocol,传输控制协议)和TP (Internet Protocol,网络连接协议),通常将他们放在一起,用TCP/IP表示(关于这些协议将在下节中具体介绍)。

    当一个Internet用户给其他机器发送一个文本时,TCP将该文本分解成若干个小数据包,再加上一些特定的信息(可以类比为运输货物的装箱单),以便接收方的机器可以判断传输是正确无误的,由IP在数据包上标上有关地址信息。连续不断的TCP/IP数据包可以经由不同的路由到达同一个地点。有个专门的机器,即路由器,位于网络的交叉点上,它决定数据包的最佳传输途径,以便有效的分散Internet的各种业务量载荷,避免系统某一部分过于繁忙而发生“堵塞”。当TCP/IP数据包到达目的地后,计算机将去掉TP的地址标志,利用TCP的“装箱单”检查数据在传输过程中是否有损失,在此基础上并将各数据包重新组合成原文本文件。如果接收方发现有损坏的数据包,则要求发送端重新发送被损坏的数据包。

    要讲网络协议,首先就地提到是开放系统互联参考模型(OSI Referenec Model),即我们通常所说的网络互联的七层框架,它是国际标准组织(International Organization for Standization)于1977年提出的标准,又称为ISO/IEC 7498或X.200建议。值得注意的是,OSI并没有提供一个可以实现的方法,它不是一个标准而只是一个制定标准时使用的概念性的框架,更不是一个网络协议。

      OSI分为七层,其名字和功能分别如下:

    1、物理层(Physical Layer):主要功能为定义了网络的物理结构,传输的电磁标准,Bit流的编码及网络的时间原则,如分时复用及分频复用。决定了网络连接类型(端到端或多端连接)及物理拓扑结构。说的通俗一些,这一层主要负责实际的信号传输。

    2、据链路层(Data Link Review):在两个主机上建立数据链路连接,向物理层传输数据信号,并对信号进行处理使之无差错并合理的传输。

    3、网络层(Network Layer):主要负责路由,选择合适的路径,进行阻塞控制等功能。

    4、传输层(Transfer Layer):最关键的一层,向拥护提供可靠的端到端(End-to-End)服务,它屏蔽了下层的数据通信细节,让用户及应用程序不需要考虑实际的通信方法。

    5、会话层(Session Layer):主要负责两个会话进程之间的通信,即两个会话层实体之间的信息交换,管理数据的交换。

    6、表示层(Presentation Layer):处理通信信号的表示方法,进行不同的格式之间的翻译,并负责数据的加密解密,数据的压缩与恢复。

    7、应用层(Application Layer):保持应用程序之间建立连接所需要的数据记录,为用户服务。
    在工作中,每一层会给上一层传输来的数据加上一个信息头(header),然后向下层发出,然后通过物理介质传输到对方主机,对方主机每一层再对数据进行处理,把信息头取掉,最后还原成实际的数据。本质上,主机的通信是层与层之间的通信,而在物理上是从上向下最后通过物理信道到对方主机再从下向上传输。

      在实际应用中,最重要的是TCP/IP(Transport Control Protocol/Internet Protocol)协议,它是目前最流行的商业化的协议,相对于OSI,它是当前的工业标准或“事实的标准”,在1974年由Kahn提出的。它分为四个层次:应用层(与OSI的应用层对应),传输层(与OSI的传输层对应),互联层(与OSI的网络层对应),主机-网络层(与OSI的数据链路层和物理层对应)。TCP/IP协议主要用于广域网,在一些局域网中也有应用,比如在windows 9x和netware网中可以使用,但是在功能和速度方面还有差距,本来TCP/IP的设计目标就和IPX/SPX不一样。在设置TCP/IP协议的时候,主要有ip地址和子网掩码,网关(Gateway:在通信中提供网络协议之间的转换,适用于不同协议主机之间的信息交换),域名解析服务器(NDS: Domain Name System,即把你输入的网址转换为数字型的ip地址)和NetBIOS等等。

      上面说到了IPX/SPX(Internetwork Packet Exchange/Sequenced Packet exchange)协议,现在解释一下这种应用很广的网络协议。您一定在局域网里享受过快速的网络游戏吧,您可知道,这都是IPX/SPX的功劳。IPX/SPX是基于施乐的XEROX’S Network System(XNS)协议,而SPX是基于施乐的XEROX’S SPP(Sequenced Packet Protocol:顺序包协议)协议,它们都是由novell公司开发出来应用于局域网的一种高速协议。它和TCP/IP的一个显著不同就是它不使用ip地址,而是使用网卡的物理地址即(MAC)地址。它也和TCP/IP协议一样不能和OSI完全对应。只包含了OSI中传输层和网络层的部分。在实际使用中,它基本不需要什么设置,装上就可以使用了。由于其在网络普及初期发挥了巨大的作用,所以得到了很多厂商的支持,包括microsoft(但是后来它开发出来了自己的兼容Novell’IPX/SPX的IPX/SPX协议)等,到现在很多软件和硬件也均支持这种协议。

      相对于前面两种路由协议(路由,可以理解为在网络上两点间路径的选择)在日常应用中,还有两种非路由协议需要我们了解,它们是:NetBIOS(Network Basic Input/OutputSystem)和NetBEUI(NetBIOS Extended User Interface)。NetBIOS由microsoft和IBM开发,是会话层的协议,它建立允许不同计算机上的应用程序通过网络传输的连接会话。它是为只需要与别的在同一个网络上的计算机会话这一目的话设计的。在win9x&me中,当你在IPX/SPX中选定“希望在IPX/SPX启用NetBIOS”后,在TCP/IP的设置中可以选定“通过TCP/IP启用NetBIOS”。而NetBEUI则是IBM为自己作为网络传输站的网络产品设计的。它是NetBIOS的一个扩充版本,定义了没有被NetBIOS定义的祯类型,它能在中小规模的单网上传输数据。它可以在win9x&me中直接安装。在一些网络游戏中有可能需要这两种协议,如果你遇到不能玩的情况,可以试试装上它两,说不定能解你的燃眉之急。

      以上介绍了目前应用最广的网络协议,其余的当然还有很多别的协议,比如DNA,SNA,APPLETALK等等,它们也很复杂。但是对于入门的网友来说,掌握了以上几种协议可以让您初步了解什么是网络协议和其工作原理,让您的工作更加高效,为以后深入学习打好了基础。希望我的文章能起到抛砖引玉的作用,对大家有所帮助。,对大家有所帮助。

    1、网络的ISO模型

    OSI模型各层协议

    第七层 应用层

    TELNETFTPTFTPSMTPSNMPHTTPBOOTPDHCP

    第六层 表示层

    文本:ASCIIEBCDIC

    图形:TIFFJPEGGIFPICT

    声音:MIDIMPEGQUICKTIME

    第五层 会话层

    NFSSQLRPCX-WINDOWSASPAPPTALK会话协议)、SCP

    第四层 传输层

    TCP/IP----TCPUDPNOVELL---IPX

    第三层 网络层

    IPIPX

    第二层 数据链路层

    以太网、IEEE802.3、令牌环、IEEE802.5HDLCPPP

    第一层 物理层

    10BASE T10BASE TXV.35RS-232

     

    2、一些基本协议

    TCP/IP(Transmission Control Protocol/Internet Protocol),即传输控制协议/互联网络协议是Internet最基本的协议,简单地说,就是由底层的IP协议和TCP协议组成的。

        

    HTTP(Hyper Text Transfer Protocol),即超文本传输协议是一种Internet上最常见的协议,用于传输超文本标记语言(HTML--Hyper Text Markup Language)写的文件,也就是我们通常说的网页,通过这个协议,我们可以浏览网络上的各种信息,在浏览器上看到丰富多彩的文字与图片。

     

    UDP(UserDatagramProtocol),即用户数据报协议,主要用来支持那些需要在计算机之间传输数据的网络应用。它是面向非连接的,是不可靠的(有如我们到邮局去寄信,对方不一定能收到)。

     

    TCP(Transmission Control Protocol),即传输控制协议,是Internet最基本的协议 。它是面向连接的,是可靠的(有如我们打电话,必须先连通之后才能通话,此时相会通话时可靠的)。

     

    FTP(File Transfer Protocol),即文件传输协议,使得主机间可以共享文件。它提供文件的共享、支持间接使用远程计算机、使用户不因各类主机文件存储器系统的差异而受影响、可靠且有效的传输数据。

     

    TELNET(TCP/IP Terminal Emulation Protocol),TCP/IP 环境下的终端仿真协议,通过 TCP 建立服务器与客户机之间的连接。 连接之后, TELNET 服务器与客户机进入协商阶段(决定可选项),选定双方都支持连接操作,每个连接系统可以协商新可选项或重协商旧可选项(在任何时候)。通常 TELNET 任一端尽量执行所有可选项以实现系统最大化性能。

     

    SMTP(Simple Mail Transfer Protocol),即电子邮件传输的协议。 SMTP 是建模在 FTP 文件传输服务上的一种有效可靠的邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。 SMTP 重要特性之一是其能跨越网络传输邮件,即"SMTP 邮件中继"

     

    POP3(Post Office Protocol),即邮局协议第3, 它允许工作站动态访问服务器上的邮件,目前已发展到第三版,称为 POP3 POP3 允许工作站检索邮件服务器上的邮件。POP3 传输的是数据消息,这些消息可以是指令,也可以是应答。

     

    LDAP(Lightweighted Directory Access Protocol),即轻量级目录访问协议。


     OSI七层协议讲解

    分高层协议和低层协议:

    A:高层协议:定义网络数据的格式以及网络应用

    七、应用层------数据        

    /*为用户的各种程序提供各种网络服务------浏览器            

    EG:HTTP,FTP,TELNET,SMTP等。

    六、表示层

    /*将不同的数据格式转换成一种通用的格式,能够被不同的系统识别------通用的数据格式 

    EG:ASCII,JPEG,MPEG,WAV等。

    五、会话层

    /*会话的建立,管理和终止通信主机的对话,为表示层提供服务。------对话和交谈

    EG:访问次序的安排

    B、低层协议:定义数据如何传输到目的地

    四、传输层------段

    /*在二台主机之间建立端到端的连接,以及如何实现可靠的传输。-------流量控制和可

    EG:TCP协议,UDP协议,面向连接和面向无连接协议

    三、网络层-----数据包

    /*主机之间的连接,路径选择以及基于IP的寻址------路径选择,路由以及IP寻址

    EG:三层交换机,路由器工作在此层,IP,SPX

    二、数据链路层------帧

    /*提供数据在物理链路的传输,物理寻址,网络拓扑,错误检测。------帖和介质访问控制

    EG:二层交换机,网桥属于此层设备,MAC

    一、物理层------比特流

    /*高低电平,数据传输速率,传输距离,物理连接器等。------信号和介质

    EG:HUB,中继器以及传输线路都属于此层

    /**

    UDP:用户数据报协议(user Datagram Protocol)

    /*用户数据报协议(UDP)是ISO参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。UDP协议基本上是IP协议与上层协议的接口。UDP协议适用商品分辩运行在同一设备上的多个应用程序。

    TCP:传输控制协议(Transmission Control Protocol)

    /*传输入控制协议TCP是TCP/IP协议栈中的传输层协议,它通过序列确认以及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。与IP协议相结合,TCP组成了因特网协议的核心)

    IP/IPv4:网际协议(IP/IPv4 Internet Protocol)

    /*网际协议(IP)是一个网络层协议,它包含寻址信息和控制信息,可使数据包在网络中路由。IP协议是TCP/IP协议族中的主要网络层协议,与TCP协议结合组成整个因特网协议的核心协议。IP协议同样都适用于LAN和WAN通信。

    网络文件系统(NFS)

    简单网络管理协议(SNMP)

    域名系统(DNS)

    简单文件传输系统(TFTP)

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=542260

     

    OSI七层网络模型与TCP/IP四层网络模型

    一、OSI网络分层参考模型

      网络协议设计者不应当设计一个单一、巨大的协议来为所有形式的通信规定完整的细节,而应把通信问题划分成多个小问题,然后为每一个小问题设计一个单独的协议。这样做使得每个协议的设计、分析、时限和测试比较容易。协议划分的一个主要原则是确保目标系统有效且效率高。为了提高效率,每个协议只应该注意没有被其他协议处理过的那部分通信问题;为了主协议的实现更加有效,协议之间应该能够共享特定的数据结构;同时这些协议的组合应该能处理所有可能的硬件错误以及其它异常情况。为了保证这些协议工作的协同性,应当将协议设计和开发成完整的、协作的协议系列(即协议族),而不是孤立地开发每个协议。
      在网络历史的早期,国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)共同出版了开放系统互联的七层参考模型。一台计算机操作系统中的网络过程包括从应用请求(在协议栈的顶部)到网络介质(底部) ,OSI参考模型把功能分成七个分立的层次。图2.1表示了OSI分层模型。

      ┌─────┐
      │ 应用层 │←第七层
      ├─────┤
      │ 表示层 │
      ├─────┤
      │ 会话层 │
      ├─────┤
      │ 传输层 │
      ├─────┤
      │ 网络层 │
      ├─────┤
      │数据链路层│
      ├─────┤
      │ 物理层 │←第一层
      └─────┘
      图2.1 OSI七层参考模型

      OSI模型的七层分别进行以下的操作:

      第一层:物理层
      第一层负责最后将信息编码成电流脉冲或其它信号用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态和时钟要求、数据编码和数据传输用的连接器。如最常用的RS-232规范、10BASE-T的曼彻斯特编码以及RJ-45就属于第一层。所有比物理层高的层都通过事先定义好的接口而与它通话。如以太网的附属单元接口(AUI),一个DB-15连接器可被用来连接层一和层二。

      第二层:数据链路层
      数据链路层通过物理网络链路提供可靠的数据传输。不同的数据链路层定义了不同的网络和协议特征,其中包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。物理编址(相对应的是网络编址)定义了设备在数据链路层的编址方式;网络拓扑结构定义了设备的物理连接方式,如总线拓扑结构和环拓扑结构;错误校验向发生传输错误的上层协议告警;数据帧序列重新整理并传输除序列以外的帧;流控可能延缓数据的传输,以使接收设备不会因为在某一时刻接收到超过其处理能力的信息流而崩溃。数据链路层实际上由两个独立的部分组成,介质存取控制(Media Access Control,MAC)和逻辑链路控制层(Logical Link Control,LLC)。MAC描述在共享介质环境中如何进行站的调度、发生和接收数据。MAC确保信息跨链路的可靠传输,对数据传输进行同步,识别错误和控制数据的流向。一般地讲,MAC只在共享介质环境中才是重要的,只有在共享介质环境中多个节点才能连接到同一传输介质上。IEEE MAC规则定义了地址,以标识数据链路层中的多个设备。逻辑链路控制子层管理单一网络链路上的设备间的通信,IEEE 802.2标准定义了LLC。LLC支持无连接服务和面向连接的服务。在数据链路层的信息帧中定义了许多域。这些域使得多种高层协议可以共享一个物理数据链路。

      第三层:网络层
      网络层负责在源和终点之间建立连接。它一般包括网络寻径,还可能包括流量控制、错误检查等。相同MAC标准的不同网段之间的数据传输一般只涉及到数据链路层,而不同的MAC标准之间的数据传输都涉及到网络层。例如IP路由器工作在网络层,因而可以实现多种网络间的互联。

      第四层:传输层
      传输层向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。传输控制协议(TCP)是提供可靠数据传输的TCP/IP协议族中的传输层协议。

      第五层:会话层
      会话层建立、管理和终止表示层与实体之间的通信会话。通信会话包括发生在不同网络应用层之间的服务请求和服务应答,这些请求与应答通过会话层的协议实现。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。

      第六层:表示层
      表示层提供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息可以被另一个系统应用层识别。表示层的编码和转化模式包括公用数据表示格式、性能转化表示格式、公用数据压缩模式和公用数据加密模式。
      公用数据表示格式就是标准的图像、声音和视频格式。通过使用这些标准格式,不同类型的计算机系统可以相互交换数据;转化模式通过使用不同的文本和数据表示,在系统间交换信息,例如ASCII(American Standard Code for Information Interchange,美国标准信息交换码);标准数据压缩模式确保原始设备上被压缩的数据可以在目标设备上正确的解压;加密模式确保原始设备上加密的数据可以在目标设备上正确地解密。
      表示层协议一般不与特殊的协议栈关联,如QuickTime是Applet计算机的视频和音频的标准,MPEG是ISO的视频压缩与编码标准。常见的图形图像格式PCX、GIF、JPEG是不同的静态图像压缩和编码标准。

      第七层:应用层
      应用层是最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件直接相互作用的。注意,应用层并非由计算机上运行的实际应用软件组成,而是由向应用程序提供访问网络资源的API(Application Program Interface,应用程序接口)组成,这类应用软件程序超出了OSI模型的范畴。应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。因为可能丢失通信伙伴,应用层必须为传输数据的应用子程序定义通信伙伴的标识和可用性。定义资源可用性时,应用层为了请求通信而必须判定是否有足够的网络资源。在同步通信中,所有应用程序之间的通信都需要应用层的协同操作。
      OSI的应用层协议包括文件的传输、访问及管理协议(FTAM) ,以及文件虚拟终端协议(VIP)和公用管理系统信息(CMIP)等。

    二、TCP/IP分层模型

      TCP/IP分层模型(TCP/IP Layening Model)被称作因特网分层模型(Internet Layering Model)、因特网参考模型(Internet Reference Model)。图2.2表示了TCP/IP分层模型的四层。
      ┌────────┐┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
      │        ││D│F│W│F│H│G│T│I│S│U│ │
      │        ││N│I│H│T│T│O│E│R│M│S│其│
      │第四层,应用层 ││S│N│O│P│T│P│L│C│T│E│ │
      │        ││ │G│I│ │P│H│N│ │P│N│ │
      │        ││ │E│S│ │ │E│E│ │ │E│它│
      │        ││ │R│ │ │ │R│T│ │ │T│ │
      └────────┘└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘
      ┌────────┐┌─────────┬───────────┐
      │第三层,传输层 ││   TCP   │    UDP    │
      └────────┘└─────────┴───────────┘
      ┌────────┐┌─────┬────┬──────────┐
      │        ││     │ICMP│          │
      │第二层,网间层 ││     └────┘          │
      │        ││       IP            │
      └────────┘└─────────────────────┘
      ┌────────┐┌─────────┬───────────┐
      │第一层,网络接口││ARP/RARP │    其它     │
      └────────┘└─────────┴───────────┘
          图2.2 TCP/IP四层参考模型

      TCP/IP协议被组织成四个概念层,其中有三层对应于ISO参考模型中的相应层。ICP/IP协议族并不包含物理层和数据链路层,因此它不能独立完成整个计算机网络系统的功能,必须与许多其他的协议协同工作。

      TCP/IP分层模型的四个协议层分别完成以下的功能:

      第一层:网络接口层
      网络接口层包括用于协作IP数据在已有网络介质上传输的协议。实际上TCP/IP标准并不定义与ISO数据链路层和物理层相对应的功能。相反,它定义像地址解析协议(Address Resolution Protocol,ARP)这样的协议,提供TCP/IP协议的数据结构和实际物理硬件之间的接口。

      第二层:网间层
      网间层对应于OSI七层参考模型的网络层。本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。

      第三层:传输层
      传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。

      第四层:应用层
      应用层对应于OSI七层参考模型的应用层和表达层。因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等,这也是本书将要讨论的重点

    此转载文章版权归网络大典(www.networkdictionary.com)所有

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    OSI网络结构的七层模型

      (OSI Network Architecture 7 Layers Model)

      开放式系统互联模型(OSI)是1984年由国际标准化组织(ISO)提出的一个参考模型。作为一个概念性框架,它是不同制造商的设备和应用软件在网络中进行通信的标准。现在此模型已成为计算机间和网络间进行通信的主要结构模型。目前使用的大多数网络通信协议的结构都是基于 OSI 模型的。OSI 将通信过程定义为七层,即将连网计算机间传输信息的任务划分为七个更小、更易于处理的任务组。每一个任务或任务组则被分配到各个 OSI 层。每一层都是独立存在的,因此分配到各层的任务能够独立地执行。这样使得变更其中某层提供的方案时不影响其他层。

      OSI 七层模型的每一层都具有清晰的特征。基本来说,第七至第四层处理数据源和数据目的地之间的端到端通信,而第三至第一层处理网络设备间的通信。另外,OSI 模型的七层也可以划分为两组:上层(层7、层6和层5)和下层(层4、层3、层2和层1)。OSI 模型的上层处理应用程序问题,并且通常只应用在软件上。最高层,即应用层是与终端用户最接近的。OSI 模型的下层是处理数据传输的。物理层和数据链路层应用在硬件和软件上。最底层,即物理层是与物理网络媒介(比如说,电线)最接近的,并且负责在媒介上发送数据。

      各层的具体描述如下:

      第七层:应用层

    • 定义了用于在网络中进行通信和数据传输的接口 - 用户程式;
    • 提供标准服务,比如虚拟终端、文件以及任务的传输和处理;

      第六层:表示层

    • 掩盖不同系统间的数据格式的不同性;
    • 指定独立结构的数据传输格式;
    • 数据的编码和解码;加密和解密;压缩和解压缩

      第五层:会话层

    • 管理用户会话和对话;
    • 控制用户间逻辑连接的建立和挂断;
    • 报告上一层发生的错误

      第四层:传输层

    • 管理网络中端到端的信息传送;
    • 通过错误纠正和流控制机制提供可靠且有序的数据包传送;
    • 提供面向无连接的数据包的传送;

      第三层:网络层

    • 定义网络设备间如何传输数据;
    • 根据唯一的网络设备地址路由数据包;
    • 提供流和拥塞控制以防止网络资源的损耗

      第二层:数据链路层

    • 定义操作通信连接的程序;
    • 封装数据包为数据帧;
    • 监测和纠正数据包传输错误

      第一层:物理层

    • 定义通过网络设备发送数据的物理方式;
    • 作为网络媒介和设备间的接口;
    • 定义光学、电气以及机械特性。

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

    计算机网络中的通信图解

    图 1 - 1 计算机网络中的通信图解

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

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

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

    各层数据封装结构

    图 1 - 2 各层数据封装结构

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

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

      一个 OSI 层与另一层之间的通信是利用第二层提供的服务完成的。相邻层提供的服务帮助一 OSI 层与另一计算机系统的对应层进行通信。一个 OSI 模型的特定层通常是与另外三个 OSI 层联系:与之直接相邻的上一层和下一层,还有目标联网计算机系统的对应层。例如,计算机 A 的数据链路层应与其网络层,物理层以及计算机 B 的数据链路层进行通信。下面的图表可以解释这个例子 :

    对应层间的数据通信

    图 1 - 3 对应层间的数据通信

     

    相关页面地址

     

  • [转]基本应用层的TCP/IP协议介绍 (HTTP/FTP/POP/SMTP)

    2007-05-10 10:13:09

    基本应用层的TCP/IP协议介绍 (HTTP/FTP/POP/SMTP)

    来源:http://www.networkdictionary.com/chinese/protocols/tcpip.php

     

    HTTP:超文本传输协议

    更详细的HTTP协议头信息参考我blog之前的文章。

    HTTP:超文本传输协议
      HTTP:Hypertext Transfer Protocol

      超文本传输协议(HTTP)是应用层协议,由于其简捷、快速的方式,适用于分布式和合作式超媒体信息系统。自 1990 年起, HTTP 就已经被应用于 WWW 全球信息服务系统。

      HTTP 允许使用自由答复的方法表明请求目的,它建立在统一资源识别器(URI)提供的参考原则下,作为一个地址(URL)或名字(URN),用以标志采用哪种方法,它用类似于网络邮件和多用途网际邮件扩充协议(MIME)的格式传递消息。

      HTTP 也可用作普通协议,实现用户代理与连接其它 Internet 服务(如 SMTP 、 NNTP 、 FTP 、 GOPHER 及 WAIS )的代理服务器或网关之间的通信,允许基本的超媒体访问各种应用提供的资源,同时简化了用户代理系统的实施。

      HTTP 是一种请求 / 响应式的协议。一个客户机与服务器建立连接后,发送一个请求给服务器,请求的格式是:统一资源标识符(URI)、协议版本号,后面是类似 MIME 的信息,包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式是:一个状态行包括信息的协议版本号、一个成功或错误的代码,后面也是类似 MIME 的信息,包括服务器信息、实体信息和可能的内容。

      HTTP 的第一版本 HTTP/0.9 是一种简单的用于网络间原始数据传输的协议。而由 RFC 1945 定义的 HTTP/1.0 ,在原 HTTP/0.9 的基础上,有了进一步的改进,允许消息以类 MIME 信息格式存在,包括请求 / 响应范式中的已传输数据和修饰符等方面的信息。但是, HTTP/1.0 没有充分考虑到分层代理服务器、高速缓冲存储器、持久连接需求或虚拟主机等方面的效能。相比之下, HTTP/1.1 要求更加严格以确保服务的可靠性。关于安全增强版的 HTTP (即S-HTTP),将在相关文件中再作介绍。


    协议结构

       HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。 请求报文格式如下:

    请求行 通用信息头 请求头 实体头 报文主体

      请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。SP 是分隔符。除了在最后的 CRLF 序列中 CF 和 LF 是必需的之外,其他都可以不要。有关通用信息头,请求头和实体头方面的具体内容可以参照相关文件。

      应报文格式如下:


    状态行 通用信息头 响应头 实体头 报文主体

      状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。有关通用信息头,响应头和实体头方面的具体内容可以参照相关文件。

    相关协议 WWW、FTP、STMP、NNTP、Gopher、WAIS、DNSS-HTTP
    组织来源 HTTP 定义在 IETF (http://www.ietf.org) 的 RFC 1945和2616中。
    相关链接 http://www.javvin.com/protocol/rfc1945.pdf :Hypertext Transfer Protocol – HTTP 1.0
    http://www.javvin.com/protocol/rfc2616.pdf :Hypertext Transfer Protocol – HTTP 1.1

     

     

    FTP:文件传输协议

    FTP:文件传输协议
      (FTP:File Transfer Protocol)


      文件传输协议(FTP)使得主机间可以共享文件。 FTP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。控制连接使用类似 TELNET 协议在主机间交换命令和消息。

      FTP 的主要功能如下:

    • 提供文件的共享(计算机程序 / 数据);
    • 支持间接使用远程计算机;
    • 使用户不因各类主机文件存储器系统的差异而受影响;
    • 可靠且有效的传输数据。

      FTP ,尽管可以直接被终端用户使用,但其应用主要还是通过程序实现。

      FTP 控制帧即指 TELNET 交换信息,包含 TELNET 命令和选项。然而,大多数 FTP 控制帧是简单的 ASCII 文本,可以分为 FTP 命令或 FTP 消息。 FTP 消息是对 FTP 命令的响应,它由带有解释文本的应答代码构成。


    协议结构


    命令 描述
    ABOR 中断数据连接程序
    ACCT <account> 系统特权帐号
    ALLO <bytes> 为服务器上的文件存储器分配字节
    APPE <filename> 添加文件到服务器同名文件
    CDUP <dir path> 改变服务器上的父目录
    CWD <dir path> 改变服务器上的工作目录
    DELE <filename> 删除服务器上的指定文件
    HELP <command> 返回指定命令信息
    LIST <name> 如果是文件名列出文件信息,如果是目录则列出文件列表
    MODE <mode> 传输模式(S=流模式,B=块模式,C=压缩模式)
    MKD <directory> 在服务器上建立指定目录
    NLST <directory> 列出指定目录内容
    NOOP 无动作,除了来自服务器上的承认
    PASS <password> 系统登录密码
    PASV 请求服务器等待数据连接
    PORT <address> IP 地址和两字节的端口 ID
    PWD 显示当前工作目录
    QUIT 从 FTP 服务器上退出登录
    REIN 重新初始化登录状态连接
    REST <offset> 由特定偏移量重启文件传递
    RETR <filename> 从服务器上找回(复制)文件
    RMD <directory> 在服务器上删除指定目录
    RNFR <old path> 对旧路径重命名
    RNTO <new path> 对新路径重命名
    SITE <params> 由服务器提供的站点特殊参数
    SMNT <pathname> 挂载指定文件结构
    STAT <directory> 在当前程序或目录上返回信息
    STOR <filename> 储存(复制)文件到服务器上
    STOU <filename> 储存文件到服务器名称上
    STRU <type> 数据结构(F=文件,R=记录,P=页面)
    SYST 返回服务器使用的操作系统
    TYPE <data type> 数据类型(A=ASCII,E=EBCDIC,I=binary)
    USER <username>> 系统登录的用户名


    标准 FTP 信息如下:


    响应代码 解释说明
    110 新文件指示器上的重启标记
    120 服务器准备就绪的时间(分钟数)
    125 打开数据连接,开始传输
    150 打开连接
    200 成功
    202 命令没有执行
    211 系统状态回复
    212 目录状态回复
    213 文件状态回复
    214 帮助信息回复
    215 系统类型回复
    220 服务就绪
    221 退出网络
    225 打开数据连接
    226 结束数据连接
    227 进入被动模式(IP 地址、ID 端口)
    230 登录因特网
    250 文件行为完成
    257 路径名建立
    331 要求密码
    332 要求帐号
    350 文件行为暂停
    421 服务关闭
    425 无法打开数据连接
    426 结束连接
    450 文件不可用
    451 遇到本地错误
    452 磁盘空间不足
    500 无效命令
    501 错误参数
    502 命令没有执行
    503 错误指令序列
    504 无效命令参数
    530 未登录网络
    532 存储文件需要帐号
    550 文件不可用
    551 不知道的页类型
    552 超过存储分配
    553 文件名不允许


    相关协议 TELNET
    组织来源 FTP 由 IETF(http://www.ietf.org)在 RFC 959 中,并由2228、2640 和 2773 重新更新。
    相关链接 http://www.javvin.com/protocol/rfc959.pdf :File Transfer Protocol(FTP)


     

    POP & POP3:邮局协议(邮局协议第3版)

    POP & POP3:邮局协议(邮局协议第3版)
      POP & POP3:Post Office Protocol

      POP 协议允许工作站动态访问服务器上的邮件,目前已发展到第三版,称为 POP3 。 POP3 允许工作站检索邮件服务器上的邮件。 POP3 传输的是数据消息,这些消息可以是指令,也可以是应答。

      创建一个分布式电子邮件系統有多种不同的技术支持和途径: POP (邮局协议)、 DMSP (分层式电子邮件系统协议)和 IMAP (因特网信息访问协议)。其中, POP 协议创建最早因此也最为人们了解; DMSP 具有较好的支持“无连接”操作的性能,但其很大程度上仅限于单个应用程序(PCMAIL ); IMAP 提供了 POP 和 DMSP 的扩展集并提供对远程邮件访问的三种支持方式:离线、在线和无连接。  

      POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上,一般是 PC 机或 MAC 。一旦邮件发送到 PC 机或 MAC 上,邮件服务器上的邮件将会被删除。  

      POP3 并不支持对服务器上邮件进行扩展操作,此过程由更高级的 IMAP4 完成。 POP3 使用 TCP 作为传输协议。


    协议结构

      POP3 是发送在客户机和服务器间的 ASCII 信息。POP3 命令摘要:

    命令 描述
    USER 用户名
    PASS 用户密码
    STAT 服务器上的邮件信息
    RETR 获取的信息数
    DELE 删除的信息数
    LIST 显示的信息数
    TOP <messageID> <nombredelignes> 从头开始(包含协议头)打印X行信息
    QUIT 退出POP3服务器

    可选POP3命令:

    APOP name digest                             AUTHORIZATION 状态有效;

    TOP msg n                                    TRANSACTION 状态有效;

    UIDL [msg]

    POP3 Replies:

      + OK

      - ERR。


    相关协议 SMTPIMAP4TCPPOP
    组织来源 POP3 由 IETF(www.ietf.org)定义在 RFC 1939中。
    相关链接 http://www.javvin.com/protocol/rfc1939.pdf:Post Office Protocol – Version 3

     

    SMTP:简单邮件传输协议

    SMTP:简单邮件传输协议
      (SMTP:Simple Mail Transfer Protocol)

      SMTP 是一种提供可靠且有效电子邮件传输的协议。 SMTP 是建模在 FTP 文件传输服务上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知。

      SMTP 独立于特定的传输子系统,且只需要可靠有序的数据流信道支持。 SMTP 重要特性之一是其能跨越网络传输邮件,即“ SMTP 邮件中继”。通常,一个网络可以由公用互联网上 TCP 可相互访问的主机、防火墙分隔的 TCP/IP 网络上 TCP 可相互访问的主机,及其它 LAN/WAN 中的主机利用非 TCP 传输层协议组成。使用 SMTP ,可实现相同网络上处理机之间的邮件传输,也可通过中继器或网关实现某处理机与其它网络之间的邮件传输。

      在这种方式下,邮件的发送可能经过从发送端到接收端路径上的大量中间中继器或网关主机。域名服务系统(DNS)的邮件交换服务器可以用来识别出传输邮件的下一跳 IP 地址。


    协议结构

      SMTP 命令是发送于 SMTP 主机之间的 ASCII 信息,可能命令如下所示:

    命令 描述
    DATA 开始信息写作
    EXPN <string> 在指定邮件表中返回名称
    HELO <domain> 返回邮件服务器身份
    HELP <command> 返回指定命令中的信息
    MAIL FROM <host> 在主机上初始化一个邮件会话
    NOOP 除服务器响应确认以外,没有引起任何反应
    QUIT 终止邮件会话
    RCPT TO <user> 指明谁收到邮件
    RSET 重设邮件连接
    SAML FROM <host> 发送邮件到用户终端和邮箱
    SEND FROM <host> 发送邮件到用户终端
    SOML FROM <host> 发送邮件到用户终端或邮箱
    TURN 接收端和发送端交换角色
    VRFY <user> 校验用户身份

    相关协议 POP3IMAP4TCPPOPFTP
    组织来源 SMTP 由 IETF(www.ietf.org)定义在 RFC2821中。
    相关链接 http://www.javvin.com/protocol/rfc2821.pdf:Simple Mail Transfer Protocol



    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=845209


    [收藏到我的网摘]   heiyeluren发表于 2006年06月28日 11:35:00

    相关文章:


    特别推荐:
  • 揭开Socket编程的面纱(转载)

    2007-04-26 10:00:59

    TCP/IPUDPSocket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:
    A9~^c!NPGuest
    yI$F0c5i"R.J$VGuest
    1.         什么是TCP/IPUDP
    @*X8?6eI*~1_Guest
    2.         Socket在哪里呢?QSC休闲博客1WI;`^K9f6T
    3.         Socket是什么呢?
    ~\-C??tiGuest
    4.         你会使用它们吗?QSC休闲博客7tx9Kt `m&w

    -e-z y6Y4e ijCGuest
    什么是TCP/IPUDP

             TCP/IPTransmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。
    _n@%ePZ7rGuest
             UDPUser Data Protocol,用户数据报协议)是与TCP相对应的协议。它是属于TCP/IP协议族中的一种。
    ktGMheGuest
            这里有一张图,表明了这些协议的关系。
    J6sUX(J b,b-zGuest
    T2A\9L2H'oZGuest                                                                               
    b_Ypcy/`GuestQSC休闲博客mWp lc7I*I
                                                                            图1

           TCP/IP协议族包括运输层、网络层、链路层。现在你知道TCP/IPUDP的关系了吧。QSC休闲博客b^_Y Hc2`c
    Socket在哪里呢?
    2G wpt9w*l6W\mGuest
           在图1中,我们没有看到Socket的影子,那么它到底在哪里呢?还是用图来说话,一目了然。


    /g m[w(lGuestQSC休闲博客8d|[ p)g:mO
    2

           原来Socket在这里。QSC休闲博客p9o2T!t9v'hrL
    Socket是什么呢?QSC休闲博客 BO^Nt
           Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。QSC休闲博客 gG g+C K
    你会使用它们吗?QSC休闲博客N{r gJ/D V w
           前人已经给我们做了好多的事了,网络间的通信也就简单了许多,但毕竟还是有挺多工作要做的。以前听到Socket编程,觉得它是比较高深的编程知识,但是只要弄清Socket编程的工作原理,神秘的面纱也就揭开了。QSC休闲博客v@hn%v&^8t
           一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。    生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。

          

    3

           先从服务器端说起。服务器端先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。在这时如果有个客户端初始化一个Socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。QSC休闲博客.z:N*p4P*lOD g
           在这里我就举个简单的例子,我们走的是TCP协议这条路(见图2)。例子用MFC编写,运行的界面如下:

    QSC休闲博客`1^"i$A)E{+\L
    QSC休闲博客7k:K yvuW'S}N
    4

    QSC休闲博客E(k'@(gnf
    QSC休闲博客 @'q wp0v&m4^
    5

           在客户端输入服务器端的IP地址和发送的数据,然后按发送按钮,服务器端接收到数据,然后回应客户端。客户端读取回应的数据,显示在界面上。QSC休闲博客%v xu;q!PL ?
           下面是接收数据和发送数据的函数:

    int    Receive(SOCKET fd,char *szText,int len)

    {QSC休闲博客@+L^\3IKN
           int cnt;QSC休闲博客V5^'|-L5J8x"LB
           int rc;
    )uXp?.SJGuest
           cnt=len;

           while(cnt>0)
    d \`$D%|)X7ruest
           {
    @%WnLsiGuest
                  rc=recv(fd,szText,cnt,0);QSC休闲博客+^@jWW(Y
                  if(rc==SOCKET_ERROR)
    Hg9d+F rs N$NGuest
                  {
    .Qu!G7oY7h6t+mGuest
                         return -1;QSC休闲博客X2Q+K0V-QDh|~
                 }

                 if(rc==0)

                         return len-cnt;

                  szText+=rc;

                  cnt-=rc;

           }

           return len;

    }QSC休闲博客G@:u.\u;o
    QSC休闲博客~[u"[U5I+hC7c'H
    int Send(SOCKET fd,char *szText,int len)QSC休闲博客8J,c!q&{ t+L y
    {

           int cnt;

           int rc;

           cnt=len;

           while(cnt>0)

           {

                  rc=send(fd,szText,cnt,0);

                  if(rc==SOCKET_ERROR)

                  {

                         return -1;

                  }

                  if(rc==0)

                         return len-cnt;

                  szText+=rc;

                  cnt-=rc;

           }

           return len;

    }

    服务器端:

           在服务器端,主要是启动Socket和监听线程。

    #define DEFAULT_PORT      2000

    void CServerDlg::OnStart()

    {

           sockaddr_in local;

           DWORD dwThreadID = 0;

          

           local.sin_family=AF_INET;

           //设置的端口为DEFAULT_PORT

           local.sin_port=htons(DEFAULT_PORT);

           //IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。

           local.sin_addr.S_un.S_addr=INADDR_ANY;

     

           //初始化Socket

           m_Listening = socket(AF_INET,SOCK_STREAM,0);

           if(m_Listening == INVALID_SOCKET)

           {

                  return ;

           }

           //将本地地址绑定到所创建的套接字上

           if(bind(m_Listening,(LPSOCKADDR)&local,sizeof(local)) == SOCKET_ERROR )

           {

                  closesocket(m_Listening);

                  return ;

           }

           //创建监听线程,这样也能响应界面上操作。

           m_hListenThread = ::CreateThread(NULL,0,ListenThread,this,0,&dwThreadID);

           m_StartBtn.EnableWindow(FALSE);

           m_StopBtn.EnableWindow(TRUE);

    }QSC休闲博客7Dp})a8YM*wWm/u
    QSC休闲博客7gO CBJK j6w
    监听线程函数:
    6}^ ?,M!_Guest
    DWORD WINAPI CServerDlg::ListenThread(LPVOID lpparam)
    ] S"fe&W&G QL*NGuest
    {

           CServerDlg* pDlg = (CServerDlg*)lpparam;

           if(pDlg == NULL)

                  return 0;

     

           SOCKET  Listening = pDlg->m_Listening;

           //开始监听是否有客户端连接。

           if(listen(Listening,40) == SOCKET_ERROR)

           {

                  return 0;

           }

           char szBuf[MAX_PATH];

           //初始化

           memset(szBuf,0,MAX_PATH);

           while(1)

           {

                  SOCKET ConnectSocket;

                  sockaddr_in    ClientAddr;

                  int                  nLen = sizeof(sockaddr);

                  //阻塞直到有客户端连接,不然多浪费CPU资源。

                  ConnectSocket = accept(Listening,(sockaddr*)&ClientAddr,&nLen);

                  //都到客户端的IP地址。

                  char *pAddrname = inet_ntoa(ClientAddr.sin_addr);

                  pDlg->Receive(ConnectSocket,szBuf,100);

                  //界面上显示请求数据。

                  pDlg->SetRequestText(szBuf);

                  strcat(szBuf," :我是老猫,收到(");

                  strcat(szBuf,pAddrname);

                  strcat(szBuf,"");

                  //向客户端发送回应数据

                  pDlg->Send(ConnectSocket,szBuf,100);

           }

           return 0;

    }

           服务器端一直在监听是否有客户端连接,如有连接,处理客户端的请求,给出回应,然后继续监听。

    客户端:

           客户端的发送函数:

    #define DEFAULT_PORT      2000

    void CClientDlg::OnSend()

    {

           DWORD dwIP = 0;      

           TCHAR szText[MAX_PATH];

           memset(szText,0,MAX_PATH);

           m_IP.GetWindowText(szText,MAX_PATH);

           //把字符串形式的IP地址转成IN_ADDR结构需要的形式。

           dwIP = inet_addr(szText);

           m_RequestEdit.GetWindowText(szText,MAX_PATH);

     

           sockaddr_in local;

           SOCKET socketTmp;

           //必须是AF_INET,表示该socketInternet域中进行通信

           local.sin_family=AF_INET;

           //端口号

           local.sin_port=htons(DEFAULT_PORT);

           //服务器的IP地址。

           local.sin_addr.S_un.S_addr=dwIP;

          

           ////初始化Socket

           socketTmp=socket(AF_INET,SOCK_STREAM,0);

           //连接服务器

           if(connect(socketTmp,(LPSOCKADDR)&local,sizeof(local)) < 0)

           {

                  closesocket(socketTmp);

                  MessageBox("连接服务器失败。");

                  return ;

           }

           //发送请求,为简单只发100字节,在服务器端也规定100字节。

           Send(socketTmp,szText,100);

           //读取服务器端返回的数据。

           memset(szText,0,MAX_PATH);

           //接收服务器端的回应。

           Receive(socketTmp,szText,100);

     

           TCHAR szMessage[MAX_PATH];

           memset(szMessage,0,MAX_PATH);

           strcat(szMessage,szText);

           //界面上显示回应数据。

           m_ReplyBtn.SetWindowText(szMessage);

           closesocket(socketTmp);

    }

           客户端就一个函数完成了一次通信。在这里IP地址为何用127.0.0.1呢?使用这个IP地址,服务器端和客户端就能运行在同一台机器上,这样调试方便多了。当然你可以在你朋友的机器上运行Server程序(本人在局域网中测试过),在自己的机器上运行Client程序,当然输入的IP地址就该是你朋友机器的IP地址了。QSC休闲博客yG-KZ,|1Q1O-_2R6I
           简单的理论和实践都说了,现在Socket编程不神秘了吧?希望对你有些帮助。  

  • VBScript

    2007-04-24 15:40:56

    VBscrīpt只是一种脚本语言,只是它的语法和VB是一样的,所以叫VBscrīpt
    独立的脚本语言什么都做不了,仅当其存在于某个宿主环境中时才能起作用,所以基本上脚本语言都没有自己的输入输出语句,它们只定义了语法。
    换句话说,脚本语言是用来控制宿主环境的已有功能的。宿主环境决定了脚本语言的作用。
    比如在服务器端环境下,VBscrīpt可以用response对象,用来输出Html到页面,有request对象,用来获取网页数据。
    在客户端浏览器环境下,VBscrīpt可以用document.write来向页面写入数据。
    这里的response或者document对象都是宿主环境提供的,和VBscrīpt本身一点关系都没有,它们同样可以用于其他的脚本语言,比如javascrīpt。

    而VB是一种编译型语言,它没有宿主环境的概念,和C++,C#是属于同一个范畴的。

  • 一些学习资料及工具下载地址(转载)

    2007-04-20 10:02:17

    一些学习资料及工具下载地址,包括数据结构,Oracle,JAVA, QTP,LoadRunner等(新加LINUX教程)
    一些资料,希望对大家有用。

    用迅雷下载,复制地址新建任务即可,速度还可以。

    数据结构视频教程

    数据结构C语言版 清华大学严蔚敏 主讲,很经典的教程,共48集
    http://202.197.144.235/hubce/newspace/teach0709/kc/1221data/1.asf
    http://202.197.144.235/hubce/newspace/teach0709/kc/1221data/2.asf
    。。。。。。。。。。。。。。。。中间自己加
    http://202.197.144.235/hubce/new ... /kc/1221data/48.asf
    oracle9i视频教程


    DBA9i中文视频远程班全套课程由著名OCP讲师杨老师主讲,全程标准 Oracle大学授课环境,结合工程实例进行 精辟的讲解,同时配合实验调试,针对学员疑点进行深入分析,给学员营造了一个身临其境远程学习环境。

    1.http://mov.vipbook.net/SoftDown.asp?ID=12921

    2.http://mov.vipbook.net/SoftDown.asp?ID=12922

    3.http://mov.vipbook.net/SoftDown.asp?ID=12923

    4.http://mov.vipbook.net/SoftDown.asp?ID=12924

    5,http://mov.vipbook.net/SoftDown.asp?ID=12925

    6,http://mov.vipbook.net/SoftDown.asp?ID=12926

    7,http://mov.vipbook.net/SoftDown.asp?ID=12927

    8,http://mov.vipbook.net/SoftDown.asp?ID=12928

    9,http://mov.vipbook.net/SoftDown.asp?ID=12929
    10,http://mov.vipbook.net/SoftDown.asp?ID=12930
    J2EE.For.Developers.教学光盘
    很详细的讲解教程,不过个头蛮大的。
    老外讲课啊,全英文的,呵呵,对英语是个考验啊
    用迅雷点击右键下载
    J2EE.For.Developers.教学光盘cd1
    thunder://QUFmdHA6Ly82MS4xNTIuMTk4LjE1L2oyZWW9zNGnueLFzC9bSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzF0uSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzGNkMS5bVmVyeUNELmNvbV0uaXNvWlo=

    J2EE.For.Developers.教学光盘cd2
    thunder://QUFmdHA6Ly82MS4xNTIuMTk4LjE1L2oyZWW9zNGnueLFzC9bSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzF0uSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzGNkMi5bVmVyeUNELmNvbV0uaXNvWlo=
    J2EE.For.Developers.教学光盘cd3
    thunder://QUFmdHA6Ly82MS4xNTIuMTk4LjE1L2oyZWW9zNGnueLFzC9bSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzF0uSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzGNkMy5bVmVyeUNELmNvbV0uaXNvWlo=
    J2EE.For.Developers.教学光盘cd4
    thunder://QUFmdHA6Ly82MS4xNTIuMTk4LjE1L2oyZWW9zNGnueLFzC9bSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzF0uSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzGNkNC5bVmVyeUNELmNvbV0uaXNvWlo=
    J2EE.For.Developers.教学光盘cd5
    thunder://QUFmdHA6Ly82MS4xNTIuMTk4LjE1L2oyZWW9zNGnueLFzC9bSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzF0uSjJFRS5Gb3IuRGV2ZWxvcGVycy69zNGnueLFzGNkNS5bVmVyeUNELmNvbV0uaXNvWlo=


    LoadRuner 8.1 安装文件下载

      http://www.tuningking.com/download/LR_8.1.iso

    QTP 8.2安装文件下载

    http://www.17testing.com/download/QTPV8.2.rar




    Linux的视频教程24集

    用迅雷下载

    http://tvu.yxtc.net/hbj/px/use_Linux/1/01/01.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/02/02.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/03/s03.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/04/04.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/05/05.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/07/07.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/06/s06.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/08/08.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/09/09.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/10/10.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/11/s11.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/1/12/12.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/13/13.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/14/14.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/15/15.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/16/16.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/17/17.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/18/18.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/19/19.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/20/20.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/21/21.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/22/22.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/23/23.asf

    http://tvu.yxtc.net/hbj/px/use_Linux/2/23/24.asf
  • 测试用例具体用法续

    2007-03-28 12:02:44

    六、测试用例设计的误区
    (来源:关河测试网)

    ·能发现到目前为止没有发现的缺陷的用例是好的用例;

        首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“V&V”的活动,测试 需要保证以下两点:

         程序做了它应该做的事情
        程序没有做它不该做的事情
        因此,作为测试实施依据的测试用例,必须要能完整覆盖测试需求,而不应该针对单个的测试用例去评判好坏。

    ·测试用例应该详细记录所有的操作信息,使一个没有接触过系统的人员也能进行测试;

        不知道国内有没有公司真正做到这点,或者说,不知道有国内没有公司能够将每个测试用例都写得如此详细。在我的测试经历中,对测试用例描述的详细和复杂程度 也曾有过很多的彷徨。写得太简单吧,除了自己没人能够执行,写得太详细吧,消耗在测试用例维护(别忘了,测试用例是动态的,一旦测试环境、需求、设计、实 现发生了变化,测试用例都需要相应发生变化)上的时间实在是太惊人,在目前国内大部分软件公司的测试资源都不足的情况下,恐怕很难实现。但我偏偏就能遇到 一些这样的老总或者是项目负责人,甚至是测试工程师本身,全然不顾实际的资源情况,一定要写出“没有接触过系统的人员也能进行测试”的用例。

        在讨论这个问题之前,我们可以先考虑一下测试的目的。测试的目的是尽可能发现程序中存在的缺陷,测试活动本身也可以被看作是一个Project,也需要在 给定的资源条件下尽可能达成目标,根据我个人的经验,大部分的国内软件公司在测试方面配备的资源都是不足够的,因此我们必须在测试计划阶段明确测试的目 标,一切围绕测试的目标进行。

        除了资源上的约束外,测试用例的详细程度也需要根据需要确定。如果测试用例的执行者、测试用例设计者、测试活动相关人对系统了解都很深刻,那测试用例就没有必要太详细了,文档的作用本来就在于沟通,只要能达到沟通的目的就OK。在我担任测试经理的项目中,在测试计划阶段,一般给予测试设计30% - 40%左右的时间,测试设计工程师能够根据项目的需要自行确定用例的详细程度,在测试用例的评审阶段由参与评审的相关人对其把关。

    ·测试用例设计是一劳永逸的事情;

        这句话摆在这里,我想没有一个人会认可,但在实际情况中,却经常能发现这种想法的影子。我曾经参与过一个项目,软件需求和设计已经变更了多次,但测试用例 却没有任何修改。导致的直接结果是新加入的测试工程师在执行测试用例时不知所措,间接的后果是测试用例成了废纸一堆,开发人员在多次被无效的缺陷报告打扰 后,对测试人员不屑一顾。

        这个例子可能有些极端,但测试用例与需求和设计不同步的情况在实际开发过程中确是屡见不鲜的,测试用例文档是“活的”文档,这一点应该被测试工程师牢记。

    ·测试用例不应该包含实际的数据;

        测试用例是“一组输入、执行条件、预期结果”、毫无疑问地应该包括清晰的输入数据和预期输出,没有测试数据的用例最多只具有指导性的意义,不具有可执行 性。当然,测试用例中包含输入数据会带来维护、与测试环境同步之类的问题,关于这一点,《Effective Software Test》一书中提供了详细的测试用例、测试数据的维护方法,可以参考。

    ·测试用例中不需要明显的验证手段;

        我见过很多测试工程师编写的测试用例中,“预期输出”仅描述为程序的可见行为,其实,“预期结果”的含义并不只是程序的可见行为。例如,对一个订货系统, 输入订货数据,点击“确定”按钮后,系统提示“订货成功”,这样是不是一个完整的用例呢?是不是系统输出的“订货成功”就应该作为我们唯一的验证手段呢? 显然不是。订货是否成功还需要查看相应的数据记录是否更新,因此,在这样的一个用例中,还应该包含对测试结果的显式的验证手段:在数据库中执行查询语句进行查询,看查询结果是否与预期的一致。

    七、从用例中生成测试用例


        用于功能性测试的测试用例来源于测试目标的用例。应该为每个用例场景编制测试用例。用例场景要通过描述流经用例的路径来确定,这个流经过程要从用例开始到结束遍历其中所有基本流和备选流。

         例如,下图中经过用例的每条不同路径都反映了基本流和备选流,都用箭头来表示。基本流用直黑线来表示,是经过用例的最简单的路径。每个备选流自基本流开始,之后,备选流会在某个特定条件下执行。备选流可能会重新加入基本流中(备选流 1 和 3),还可能起源于另一个备选流(备选流 2),或者终止用例而不再重新加入某个流(备选流 2 和 4)。


    用例的事件流示例

    遵循上图中每个经过用例的可能路径,可以确定不同的用例场景。从基本流开始,再将基本流和备选流结合起来,可以确定以下用例场景:

    场景 1 基本流
    场景 2 基本流 备选流 1
    场景 3 基本流 备选流 1 备选流 2
    场景 4 基本流 备选流 3
    场景 5 基本流 备选流 3 备选流 1
    场景 6 基本流 备选流 3 备选流 1 备选流 2
    场景 7 基本流 备选流 4
    场景 8 基本流 备选流 3 备选流 4

    注:为方便起见,场景 5、6 和 8 只描述了备选流 3 指示的循环执行一次的情况。

    生成每个场景的测试用例是通过确定某个特定条件来完成的,这个特定条件将导致特定用例场景的执行。

    例如,假定上图描述的用例对备选流 3 规定如下:

    “如果在上述步骤 2‘输入提款金额’中输入的美元量超出当前帐户余额,则出现此事件流。系统将显示一则警告消息,之后重新加入基本流,再次执行上述步骤 2‘输入提款金额’,此时银行客户可以输入新的提款金额。”

    据此,可以开始确定需要用来执行备选流 3 的测试用例:

    测试用例ID 场景 条件 预期结果
    TC x 场景 4 步骤 2 - 提款金额 > 帐户余额 在步骤 2 处重新加入基本流
    TC y 场景 4 步骤 2 - 提款金额 < 帐户余额 不执行备选流 3,执行基本流
    TC z 场景 4 步骤 2 - 提款金额 = 帐户余额 不执行备选流 3,执行基本流

    注:由于没有提供其他信息,以上显示的测试用例都非常简单。测试用例很少如此简单。

    下面是一个由用例生成测试用例的更符合实际情况的示例。


    示例:

    一台 ATM 机器的主角和用例。

    下表包含了上图中提款用例的基本流和某些备用流:

    本用例的开端是 ATM 处于准备就绪状态。
    1. 准备提款 - 客户将银行卡插入 ATM 机的读卡机。
       
    2. 验证银行卡 - ATM 机从银行卡的磁条中读取帐户代码,并检查它是否属于可以接收的银行卡。
       
    3. 输入 PIN - ATM 要求客户输入 PIN 码(4 位)
       
    4. 验证帐户代码和 PIN - 验证帐户代码和 PIN 以确定该帐户是否有效以及所输入的 PIN 对该帐户来说是否正确。对于此事件流,帐户是有效的而且 PIN 对此帐户来说正确无误。
       
    5. ATM 选项 - ATM 显示在本机上可用的各种选项。在此事件流中,银行客户通常选择“提款”。
       
    6. 输入金额 - 要从 ATM 中提取的金额。对于此事件流,客户需选择预设的金额(10 美元、20 美元、50 美元或 100 美元)。
       
    7. 授权 - ATM 通过将卡 ID、PIN、金额以及帐户信息作为一笔交易发送给银行系统来启动验证过程。对于此事件流,银行系统处于联机状态,而且对授权请求给予答复,批准完成提款过程,并且据此更新帐户余额。
       
    8. 出钞 - 提供现金。
       
    9. 返回银行卡 - 银行卡被返还。
       
    10. 收据 - 打印收据并提供给客户。ATM 还相应地更新内部记录。

    用例结束时 ATM 又回到准备就绪状态。
     

    备选流 1 - 银行卡无效 在基本流步骤 2 中 - 验证银行卡,如果卡是无效的,则卡被退回,同时会通知相关消息。
    备选流 2 - ATM 内没有现金 在基本流步骤 5 中 - ATM 选项,如果 ATM 内没有现金,则“提款”选项将无法使用。
    备选流 3 - ATM 内现金不足 在基本流步骤 6 中- 输入金额,如果 ATM 机内金额少于请求提取的金额,则将显示一则适当的消息,并且在步骤 6 - 输入金额处重新加入基本流。
    备选流 4 - PIN 有误 在基本流步骤 4 中- 验证帐户和 PIN,客户有三次机会输入 PIN。

    如果 PIN 输入有误,ATM 将显示适当的消息;如果还存在输入机会,则此事件流在步骤 3 - 输入 PIN 处重新加入基本流。

    如果最后一次尝试输入的 PIN 码仍然错误,则该卡将被 ATM 机保留,同时 ATM 返回到准备就绪状态,本用例终止。
    备选流 5 - 帐户不存在 在基本流步骤 4 中 - 验证帐户和 PIN,如果银行系统返回的代码表明找不到该帐户或禁止从该帐户中提款,则 ATM 显示适当的消息并且在步骤 9 - 返回银行卡处重新加入基本流。
    备选流 6 - 帐面金额不足 在基本流步骤 7 - 授权中,银行系统返回代码表明帐户余额少于在基本流步骤 6 - 输入金额内输入的金额,则 ATM 显示适当的消息并且在步骤 6 - 输入金额处重新加入基本流。
    备选流 7 - 达到每日最大的提款金额 在基本流步骤 7 - 授权中,银行系统返回的代码表明包括本提款请求在内,客户已经或将超过在 24 小时内允许提取的最多金额,则 ATM 显示适当的消息并在步骤 6 - 输入金额上重新加入基本流。
    备选流 x - 记录错误 如果在基本流步骤 10 - 收据中,记录无法更新,则 ATM 进入“安全模式”,在此模式下所有功能都将暂停使用。同时向银行系统发送一条适当的警报信息表明 ATM 已经暂停工作。
    备选流 y - 退出 客户可随时决定终止交易(退出)。交易终止,银行卡随之退出。
    备选流 z - “翘起” ATM 包含大量的传感器,用以监控各种功能,如电源检测器、不同的门和出入口处的测压器以及动作检测器等。在任一时刻,如果某个传感器被激活,则警报信号将发送给警方而且 ATM 进入“安全模式”,在此模式下所有功能都暂停使用,直到采取适当的重启/重新初始化的措施。


    在第一次迭代中,根据迭代计划,我们需要核实提款用例已经正确地实施。此时尚未实施整个用例,只实施了下面的事件流:

    • 基本流 - 提取预设金额(10 美元、20 美元、50 美元、100 美元)
    • 备选流 2 - ATM 内没有现金
    • 备选流 3 - ATM 内现金不足
    • 备选流 4 - PIN 有误
    • 备选流 5 - 帐户不存在/帐户类型有误
    • 备选流 6 - 帐面金额不足

    可以从这个用例生成下列场景

    场景 1 - 成功的提款 基本流
    场景 2 - ATM 内没有现金 基本流 备选流 2
    场景 3 - ATM 内现金不足 基本流 备选流 3
    场景 4 - PIN 有误(还有输入机会) 基本流 备选流 4
    场景 5 - PIN 有误(不再有输入机会) 基本流 备选流 4
    场景 6 - 帐户不存在/帐户类型有误 基本流 备选流 5
    场景 7 - 帐户余额不足 基本流 备选流 6

    注:为方便起见,备选流 3 和 6(场景 3 和 7)内的循环以及循环组合未纳入上表。

        对于这 7 个场景中的每一个场景都需要确定测试用例。可以采用矩阵或决策表来确定和管理测试用例。下面显示了一种通用格式,其中各行代表各个测试用例,而各列则代表测试用例的信息。本示例中,对于每个测试用例,存在一个测试用例 ID、条件(或说明)、测试用例中涉及的所有数据元素(作为输入或已经存在于数据库中)以及预期结果。

        通过从确定执行用例场景所需的数据元素入手构建矩阵。然后,对于每个场景,至少要确定包含执行场景所需的适当条件的测试用例。例如,在下面的矩阵中,V(有效)用于表明这个条件必须是 VALID(有效的)才可执行基本流,而 I(无效)用于表明这种条件下将激活所需备选流。下表中使用的“n/a”(不适用)表明这个条件不适用于测试用例。

    TC(测试用例)ID 号 场景/条件 PIN

     

    帐号

     

    输入的金额

    (或选择的金额)

     

    帐面金额

     

    ATM 内的金额

     

    预期结果
    CW1. 场景 1 - 成功的提款 V V V V V 成功的提款。
    CW2. 场景 2 - ATM 内没有现金 V V V V I 提款选项不可用,用例结束
    CW3. 场景 3 - ATM 内现金不足 V V V V I 警告消息,返回基本流步骤 6 - 输入金额
    CW4. 场景 4 - PIN 有误(还有不止一次输入机会)

     

    V n/a V V 警告消息,返回基本流步骤 4,输入 PIN
    CW5. 场景 4 - PIN 有误(还有一次输入机会)

     

    V n/a V V 警告消息,返回基本流步骤 4,输入 PIN
    CW6. 场景 4 - PIN 有误(不再有输入机会)

     

    V n/a V V 警告消息,卡予保留,用例结束

        在上面的矩阵中,六个测试用例执行了四个场景。对于基本流,上述测试用例 CW1 称为正面测试用例。它一直沿着用例的基本流路径执行,未发生任何偏差。基本流的全面测试必须包括负面测试用例,以确保只有在符合条件的情况下才执行基本流。这些负面测试用例由 CW2 至 6 表示(阴影单元格表明这种条件下需要执行备选流)。虽然 CW2 至 6 对于基本流而言都是负面测试用例,但它们相对于备选流 2 至 4 而言是正面测试用例。而且对于这些备选流中的每一个而言,至少存在一个负面测试用例(CW1 - 基本流)。   

        每个场景只具有一个正面测试用例和负面测试用例是不充分的,场景 4 正是这样的一个示例。要全面地测试场景 4 - PIN 有误,至少需要三个正面测试用例(以激活场景 4):

    • 输入了错误的 PIN,但仍存在输入机会,此备选流重新加入基本流中的步骤 3 - 输入 PIN。
    • 输入了错误的 PIN,而且不再有输入机会,则此备选流将保留银行卡并终止用例。
    • 最后一次输入时输入了“正确”的 PIN。备选流在步骤 5 - 输入金额处重新加入基本流。

        注:在上面的矩阵中,无需为条件(数据)输入任何实际的值。以这种方式创建测试用例矩阵的一个优点在于容易看到测试的是什么条件。由于只需要查看 V 和 I(或此处采用的阴影单元格),这种方式还易于判断是否已经确定了充足的测试用例。从上表中可发现存在几个条件不具备阴影单元格,这表明测试用例还不完全,如场景 6 - 不存在的帐户/帐户类型有误和场景 7 - 帐户余额不足就缺少测试用例。

        一旦确定了所有的测试用例,则应对这些用例进行复审和验证以确保其准确且适度,并取消多余或等效的测试用例。

        测试用例一经认可,就可以确定实际数据值(在测试用例实施矩阵中)并且设定测试数据

    TC(测试用例)ID 号 场景/条件 PIN

     

    帐号

     

    输入的金额

    (或选择的金额)

     

    帐面金额

     

    ATM 内的金额

     

    预期结果
    CW1. 场景 1 - 成功的提款 4987 809 - 498 50.00 500.00 2,000 成功的提款。帐户余额被更新为 450.00
    CW2. 场景 2 - ATM 内没有现金 4987 809 - 498 100.00 500.00 0.00 提款选项不可用,用例结束
    CW3. 场景 3 - ATM 内现金不足 4987 809 - 498 100.00 500.00 70.00 警告消息,返回基本流步骤 6 - 输入金额
    CW4. 场景 4 - PIN 有误(还有不止一次输入机会) 4978 

     

    809 - 498 n/a 500.00 2,000 警告消息,返回基本流步骤 4,输入 PIN
    CW5. 场景 4 - PIN 有误(还有一次输入机会) 4978

     

    809 - 498 n/a 500.00 2,000 警告消息,返回基本流步骤 4,输入 PIN
    CW6. 场景 4 - PIN 有误(不再有输入机会) 4978 

     

    809 - 498 n/a 500.00 2,000 警告消息,卡予保留,用例结束

        以上测试用例只是在本次迭代中需要用来验证提款用例的一部分测试用例。需要的其他测试用例包括:

    • 场景 6 - 帐户不存在/帐户类型有误:未找到帐户或帐户不可用
    • 场景 6 - 帐户不存在/帐户类型有误:禁止从该帐户中提款
    • 场景 7 - 帐户余额不足:请求的金额超出帐面金额

    在将来的迭代中,当实施其他事件流时,在下列情况下将需要测试用例:

    • 无效卡(所持卡为挂失卡、被盗卡、非承兑银行发卡、磁条损坏等)
    • 无法读卡(读卡机堵塞、脱机或出现故障)
    • 帐户已消户、冻结或由于其他方面原因而无法使用
    • ATM 内的现金不足或不能提供所请求的金额(与 CW3 不同,在 CW3 中只是一种币值不足,而不是所有币值都不足)
    • 无法联系银行系统以获得认可
    • 银行网络离线或交易过程中断电

    在确定功能性测试用例时,确保满足下列条件:

    • 已经为每个用例场景确定了充足的正面和负面测试用例。 
    • 测试用例可以处理用例所实施的所有业务规则,确保对于业务规则,无论是在内部、外部还是在边界条件/值上都存在测试用例。
    • 测试用例可以处理所有事件或动作排序(如在涉及模型的序列图中确定的内容),还应能处理用户界面对象状态或条件。
    • 测试用例可以处理为用例所指定的任何特殊需求,如最佳/最差性能,有时这些特殊需求会与用例执行过程中的最小/最大负载或数据容量组合在一起。

    八、从补充规约中生成测试用例

        并不是所有的测试目标需求都将在用例中有所反映。非功能性需求(如性能、安全性和访问控制)以及配置要求等将会说明测试目标的其他行为或特征。补充规约是为其他行为生成测试用例的主要来源。

        关于如何生成这些其他测试用例的指南说明如下:

    • 为性能测试生成测试用例
    • 为安全性/访问控制测试生成测试用例
    • 为配置测试生成测试用例
    • 为安装测试生成测试用例
    • 为其他非功能性测试生成测试用例

    为性能测试生成测试用例

        性能测试用例的主要输入是补充规约,补充规约中包含了非功能性需求(请参见工件:补充规约)。为性能测试生成测试用例时,请使用下列指南:

    • 对于补充规约内阐明性能标准的各条说明都应确保至少要确定一个测试用例。性能标准通常表示为时间/事务、事务量/用户或百分数的形式。
    • 对每个关键用例,都应确保至少要确定一个测试用例。关键用例是在上述说明中和/或在工作量分析文档中确定的、必须采用性能评测方法来评估的用例(请参见工件:工作量分析文档)。

        与功能性测试的测试用例类似,通常对于每个用例/需求都会存在不止一个测试用例。常见的情况是:存在一个低于性能阈值的测试用例、一个处于阈值上的测试用例,还有一个测试用例高于阈值。

    除了以上性能标准以外,确保已确定影响响应时间的特定条件,包括:

    • 数据库的大小 - 存在多少个记录?
    • 工作量 - 同时执行操作的最终用户的数量和类型,以及要同时执行的事务的数量和类型
    • 环境特征(硬件、网件以及软件配置)

    将用于性能测试的测试用例记录在类似于功能测试所使用的矩阵中。

    以下是各种性能测试的一些示例:

    对于负载测试:

    TC(测试用例)ID 号 工作量 条件

     

    预期结果
    PCW1.

    1

    (单个 ATM)

    完成提款交易

    全部交易(不依赖于主角的时间)在 20 秒之内完成
    PCW2.

    2

    (1,000 个同时运行的 ATM)

    完成提款交易

    全部交易(不依赖于主角的时间)在 30 秒之内完成
    PCW3.

    3

    (10.000 个同时运行的 ATM)

    完成提款交易

    全部交易(不依赖于主角的时间)在 50 秒之内完成

    对于强度测试:

    TC(测试用例)ID 号 工作量 条件

     

    预期结果
    SCW1.

    2

    (1,000 个同时运行的 ATM)

    数据库锁定 - 2 个 ATM 请求同一帐户

    ATM 请求排成队列
    SCW2.

    2

    (1,000 个同时运行的 ATM)

    无法实现银行系统的通信

    交易排成队列或超时
    SCW3.

    2

    (1,000 个同时运行的 ATM)

    在交易过程中,银行系统通信被终止

    显示警告消息

    为安全性/访问控制测试生成测试用例

    主角和用例一同说明系统外部用户与系统所执行的动作之间的交互,以便为特定主角生成测试结果。复杂系统包含许多主角,所以我们编制测试用例时必须确保只有指定执行用例的主角可以进行此操作,这一点非常关键。在基于主角类型的用例事件流存在差别时,尤其如此。

    例如,在 ATM 用例中,如果主角“银行客户”的卡和帐户有的属于拥有这个 ATM 机的银行,有的是竞争银行的银行卡(和帐户),或是企图使用该 ATM 不支持的银行卡,则将对该主角“银行客户”执行不同的用例事件流。

    对于功能性测试用例,请同样遵循上面列举的指南。

    关于安全性和访问控制测试用例的示例:

    TC(测试用例)ID 号 条件

    (V 表明卡有效)

    读卡机

    (V 表明读卡机工作正常)

    银行的网络 预期结果
    ACW1. 在银行网络之内 V V V 所有用例都可用
    ACW2. 银行网络之外 V V I 只有提款用例可用
    ACW3. 无法读卡 I V V 警告消息,卡被退出
    ACW4. 因被盗,卡已挂失 I V V 警告消息,卡予保留
    ACW5. 卡已过期 I V V 警告消息,卡予保留

    为配置测试生成测试用例

    在典型的分布式系统中,允许存在许多种受支持的硬件和软件组合。为了核实测试目标在不同的配置情况下(如不同的操作系统、浏览器或 CPU 的速度)能否正常工作或执行,应该对此进行测试。此外,测试还应涵盖构件的组合,以便检测在不同构件的交互中产生的缺陷。例如,确保由应用程序安装的 DDL 版本不会与另一个应用程序需要的相同 DDL 的版本发生冲突。

    采用下列指南来生成用于配置测试的测试用例:

    • 确保对每个关键配置,应至少存在一个测试用例可用于对其进行确定。这是通过确定测试目标的环境所要求的硬件和软件配置以及确定这些配置的优先级来完成的。应确保最先测试最常见的配置,包括:
      • 打印机支持
      • 网络连接 - 局域网和广域网
      • 服务器配置 - 服务器驱动程序、服务器硬件
      • 台式机和/或服务器上安装的其他软件
      • 所有已安装软件的软件版本
    • 确保对于每个可能有问题的配置至少存在一个测试用例。这些配置可能包括:
      • 具有最低性能的硬件。
      • 历史上存在兼容性问题的共驻内存的软件。
      • 通过最慢的 LAN/WAN 连接访问服务器的客户机。
      • 资源不足(缓慢的 CPU 速度、最小的内存或分辨率,磁盘空间不足等等)

    为安装测试生成测试用例

        安装测试需要核实测试目标可以在所有可能的安装情况下安装。安装情况可以指首次安装测试目标,或是在装有较早版本的机器上安装测试目标的某个较新的版本或工作版本。安装测试还应确保在遇到异常情况时(如磁盘空间不足),测试目标的执行情况仍可接受。

        测试用例应包含以下各种软件的安装情况:

    • 分发介质,例如磁盘、CD-ROM 或文件服务器。
    • 首次安装。
    • 完全安装。
    • 自定义安装。
    • 升级安装。

        客户机服务器软件的安装程序具备一组特定的测试用例。不同于基于主机的系统,服务器和客户机上的安装程序是有所不同的。因而,安装测试应执行构成测试目标的所有构件的安装,包括客户机、中间层以及服务器,这一点至关重要。

    为其他非功能性测试生成测试用例

         理论上,应找到所有必需的输入来生成测试用例模型、设计模型以及补充规约工件的测试用例。不过,如果此时您需要补充已有的输入,那也不足为奇。

    示例如下:

    • 操作测试(用以检验在某次故障发生后以及在下一次故障发生前“较长时间”内软件的运行情况)的测试用例。
    • 对性能瓶颈、系统容量或测试目标的强度承受能力进行调查的测试用例。

         大多数情况下,您可以通过先前所确定的测试用例生成的某些测试用例来构建其变体或聚合关系体,借此来查找测试用例。


     

    九、为单元测试生成测试用例

        单元测试要求既测试单元的内部结构同时还要测试其行为特征。测试内部结构要求了解实施单元的方式,基于这种了解的测试被称为白盒测试。对单元行为特征的测试侧重于从外部可观察的单元行为,而不需要了解或考虑其实施方式。基于这种方法的测试称为黑盒测试。基于这两种方法所生成的测试用例的说明如下。

    白盒测试

        理论上,应通过代码测试每一条可能的路径。在所有这些非常简单的单元内实现这样的目标是不切实际或几乎是不可能的。作为最基本的测试,应将每个决定到决定路径(DD 路径)测试至少一次,这样可确保将所有语句至少执行一次。决定通常是指 if 语句,而 DD 路径是两个决定之间的路径。

        要达到这种程度的测试覆盖,建议您在选择测试数据时应使每个决定都可以用每种可能的方法来评估。为达到上述目标,测试用例应确保:

        每个布尔表达式的求值结果为 true 和 false。例如,表达式 (a<3) OR (b>4) 的求值结果为 true/false 的四种组合
    每一个无限循环至少要执行零次、一次和一次以上。
    可使用代码覆盖工具来确定白盒测试未测试到的代码。在进行白盒测试的同时应进行可靠性测试。

    示例:

        假设您对类 Set of Integers 中的 member 函数执行结构测试。该测试在二进制搜索的帮助下,将检查该集合是否包含了某个指定的整数。

    成员 (member) 函数以及相应的流程图。虚线箭头指示出如何通过采用两个测试用例将所有语句至少执行一次。

        理论上,对于彻底测试的某个操作,测试用例应遍历代码内路径的所有组合情况。在 member 函数的 while-loop 中存在三个可选择的路径。测试用例可以多次遍历该循环,或是根本就不遍历。如果测试用例根本就没有遍历循环,则在代码中只能找到一条路径。如果遍历循环一次,您将发现有三条路径。如果遍历两次,则您将发现存在六条路径,如此类推。因而,路径的总数应该是:1+3+6+12+24+48+...,在实际情况中,这个路径组合总数根本无法无法处理。这就是为什么必须选择所有这些路径的子集的原因。本示例中,可以采用两个测试用例来执行所有的语句。其中一个测试用例中,您可以选择 Set of Integers = {1,5,7,8,11},而且测试数据 t = 3。在另一个测试用例中,您可以选择 Set of Integers = {1,5,7,8,11},且 t = 8。

    黑盒测试

        黑盒测试的目的是为了在不了解单元将如何实施指定行为的情况下,对指定行为进行验证。黑盒测试侧重并依赖于单元的输入和输出。

        等价类划分是一种用来减少所需测试数量的技术。对于每一个操作都应确定参数和对象状态的等价类。等价类是一组值的集合,对这组值来说,对象的行为应类似。例如,一个集合可有三个等价类:空、若干元素以及满。

        可使用代码覆盖工具来确定白盒测试未测试到的代码。在进行黑盒测试的同时应进行可靠性测试。

        接下来的两个小节说明了如何通过选择特定参数的测试数据来确定测试用例。

        基于输入参数的测试用例
        输入参数是由某个操作使用的参数。对于以下每个输入条件,都应通过使用每个操作的输入参数来编制测试用例: 

        每个等价类的正常值。
         每个等价类的边界值。
         等价类之外的值。
        非法值。
        请记住要将对象状态视作输入参数。例如:如果在对集合这个对象测试添加操作,您必须使用集合内所有等价类的值来测试添加操作。所有等价类的值指的是:充满元素的集合、有若干元素的集合、以及空集合。

         基于输出参数的测试用例
        输出参数是某个操作所改变的参数。某个参数既可以是输入参数也可以是输出参数。根据以下每个条件选择输入,以便获得输出。

        每个等价类的正常值。
        每个等价类的边界值。
        等价类之外的值。
        非法值。
        请记住将对象状态视为输出参数。例如,假设您对某个列表测试删除操作,您必须选择输入值以便执行操作之后,列表为充满状态、具有若干元素或为空(采用它的所有等价类的值进行测试)。

        如果对象受状态控制(根据对象的状态产生不同的反应),您应利用状态矩阵,如下图所示:

        用于测试的状态矩阵。您可以在此矩阵的基础上测试激励和状态的所有组合。

    十、为产品验收测试生成测试用例
        产品验收测试是部署软件前的最后测试操作。

  • 测试用例具体用法(一)(转载)

    2007-03-28 11:59:36

    测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。

        测试用例目前没有经典的定义。比较通常的说法是:指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。

        不同类别的软件,测试用例是不同的。不同于诸如系统、工具、控制、游戏软件,管理软件的用户需求更加不统一,变化更大、更快。笔者主要从事企业管理软件的测试。因此我们的做法是把测试数据和测试脚本从测试用例中划分出来。测试用例更趋于是针对软件产品的功能、业务规则和业务处理所设计的测试方案。对软件的每个特定功能或运行操作路径的测试构成了一个个测试用例。

        随着中国软件业的日益壮大和逐步走向成熟,软件测试也在不断发展。从最初的由软件编程人员兼职测试到软件公司组建独立专职测试部门。测试工作也从简单测试演变为包括:编制测试计划、编写测试用例、准备测试数据、编写测试脚本、实施测试、测试评估等多项内容的正规测试。测试方式则由单纯手工测试发展为手工、自动兼之,并有向第三方专业测试公司发展的趋势。

        要使最终用户对软件感到满意,最有力的举措就是对最终用户的期望加以明确阐述,以便对这些期望进行核实并确认其有效性。测试用例反映了要核实的需求。然而,核实这些需求可能通过不同的方式并由不同的测试员来实施。例如,执行软件以便验证它的功能和性能,这项操作可能由某个测试员采用自动测试技术来实现;计算机系统的关机步骤可通过手工测试和观察来完成;不过,市场占有率和销售数据(以及产品需求),只能通过评测产品和竞争销售数据来完成。

        既然可能无法(或不必负责)核实所有的需求,那么是否能为测试挑选最适合或最关键的需求则关系到项目的成败。选中要核实的需求将是对成本、风险和对该需求进行核实的必要性这三者权衡考虑的结果。

        确定测试用例之所以很重要,原因有以下几方面。

        测试用例构成成了设计和制定测试过程的基础。
    测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,您对产品质量和测试流程也就越有信心。
    判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。类似下面这样的说明:“95 % 的关键测试用例已得以执行和验证”,远比“我们已完成 95 % 的测试”更有意义。
    测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。
    测试设计和开发的类型
    以及所需的资源主要都受控于测试用例。
    通常测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。最佳方案是为每个测试需求至少编制两个测试用例:

    ·一个测试用例用于证明该需求已经满足,通常称作正面测试用例;
    ·另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。


    一、测试用例是软件测试的核心

        软件测试的重要性是毋庸置疑的。但如何以最少的人力、资源投入,在最短的时间内完成测试,发现软件系统的缺陷,保证软件的优良品质,则是软件公司探索和追求的目标。每个软件产品或软件开发项目都需要有一套优秀的测试方案和测试方法。

        影响软件测试的因素很多,例如软件本身的复杂程度、开发人员(包括分析、设计、编程和测试的人员)的素质、测试方法和技术的运用等等。因为有些因素是客观存在的,无法避免。有些因素则是波动的、不稳定的,例如开发队伍是流动的,有经验的走了,新人不断补充进来;一个具体的人工作也受情绪等影响,等等。如何保障软件测试质量的稳定?有了测试用例,无论是谁来测试,参照测试用例实施,都能保障测试的质量。可以把人为因素的影响减少到最小。即便最初的测试用例考虑不周全,随着测试的进行和软件版本更新,也将日趋完善。

        因此测试用例的设计和编制是软件测试活动中最重要的。测试用例是测试工作的指导,是软件测试的必须遵守的准则。更是软件测试质量稳定的根本保障。

    二、编制测试用例

        着重介绍一些编制测试用例的具体做法。

    1、测试用例文档

        编写测试用例文档应有文档模板,须符合内部的规范要求。测试用例文档将受制于测试用例管理软件的约束。
    软件产品或软件开发项目的测试用例一般以该产品的软件模块或子系统
    为单位,形成一个测试用例文档,但并不是绝对的。

        测试用例文档由简介和测试用例两部分组成。简介部分编制了测试目的、测试范围、定义术语、参考文档、概述等。测试用例部分逐一列示各测试用例。每个具体测试用例都将包括下列详细信息:用例编号、用例名称、测试等级、入口准则、验证步骤、期望结果(含判断标准)、出口准则、注释等。以上内容涵盖了测试用例的基本元素:测试索引,测试环境,测试输入,测试操作,预期结果,评价标准。

    2、测试用例的设置

        我们早期的测试用例是按功能设置用例。后来引进了路径分析法,按路径设置用例。目前演变为按功能、路径混合模式设置用例。

        按功能测试是最简捷的,按用例规约遍历测试每一功能。

        对于复杂操作的程序模块,其各功能的实施是相互影响、紧密相关、环环相扣的,可以演变出数量繁多的变化。没有严密的逻辑分析,产生遗漏是在所难免。路径分析是一个很好的方法,其最大的优点是在于可以避免漏测试。

        但路径分析法也有局限性。在一个非常简单字典维护模块就存在十余条路径。一个复杂的模块会有几十到上百条路径是不足为奇的。笔者以为这是路径分析比较合适的使用规模。若一个子系统有十余个或更多的模块,这些模块相互有关联。再采用路径分析法,其路径数量成几何级增长,达5位数或更多,就无法使用了。那么子系统模块间的测试路径或测试用例还是要靠传统方法来解决。这是按功能、路径混合模式设置用例的由来。

    3、设计测试用例

        测试用例可以分为基本事件、备选事件和异常事件。设计基本事件的用例,应该参照用例规约(或设计规格说明书),根据关联的功能、操作按路径分析法设计测试用例。而对孤立的功能则直接按功能设计测试用例。基本事件的测试用例应包含所有需要实现的需求功能,覆盖率达100%。

    设计备选事件和异常事件的用例,则要复杂和困难得多。例如,字典的代码是唯一的,不允许重复。测试需要验证:字典新增程序中已存在有关字典代码的约束,若出现代码重复必须报错,并且报错文字正确。往往在设计编码阶段形成的文档对备选事件和异常事件分析描述不够详尽。而测试本身则要求验证全部非基本事件,并同时尽量发现其中的软件缺陷

    可以采用软件测试常用的基本方法:等价类划分法、边界值分析法、错误推测法、因果图法、逻辑覆盖法等设计测试用例。视软件的不同性质采用不同的方法。如何灵活运用各种基本方法来设计完整的测试用例,并最终实现暴露隐藏的缺陷,全凭测试设计人员的丰富经验和精心设计。

    三、测试用例在软件测试中的作用

    1、指导测试的实施

        测试用例主要适用于集成测试、系统测试和回归测试。在实施测试时测试用例作为测试的标准,测试人员一定要按照测试用例严格按用例项目和测试步骤逐一实施测试。并对测试情况记录在测试用例管理软件中,以便自动生成测试结果文档。

        根据测试用例的测试等级,集成测试应测试那些用例,系统测试和回归测试又该测试那些用例,在设计测试用例时都已作明确规定,实施测试时测试人员不能随意作变动。

    2、规划测试数据的准备

        在我们的实践中测试数据是与测试用例分离的。按照测试用例配套准备一组或若干组测试原始数据,以及标准测试结果。尤其象测试报表之类数据集的正确性,按照测试用例规划准备测试数据是十分必须的。
    除正常数据之外,还必须根据测试用例设计大量边缘数据和错误数据。

    3、编写测试脚本的"设计规格说明书"

        为提高测试效率,软件测试已大力发展自动测试。自动测试的中心任务是编写测试脚本。如果说软件工程中软件编程必须有设计规格说明书,那么测试脚本的设计规格说明书就是测试用例。

    4、评估测试结果的度量基准

        完成测试实施后需要对测试结果进行评估,并且编制测试报告。判断软件测试是否完成、衡量测试质量需要一些量化的结果。例:测试覆盖率是多少、测试合格率是多少、重要测试合格率是多少,等等。以前统计基准是软件模块或功能点,显得过于粗糙。采用测试用例作度量基准更加准确、有效。

    5、分析缺陷的标准

       通过收集缺陷,对比测试用例和缺陷数据库,分析确证是漏测还是缺陷复现。漏测反映了测试用例的不完善,应立即补充相应测试用例,最终达到逐步完善软件质量。而已有相应测试用例,则反映实施测试或变更处理存在问题。

    四、相关问题

    1、测试用例的评审

        测试用例是软件测试的准则,但它并不是一经编制完成就成为准则。测试用例在设计编制过程中要组织同级互查。完成编制后应组织专家评审,需获得通过才可以使用。评审委员会可由项目负责人、测试、编程、分析设计等有关人员组成,也可邀请客户代表参加。

    2、测试用例的修改更新

        测试用例在形成文档后也还需要不断完善。主要来自三方面的缘故:第一、在测试过程中发现设计测试用例时考虑不周,需要完善;第二、在软件交付使用后反馈的软件缺陷,而缺陷又是因测试用例存在漏洞造成;第三、软件自身的新增功能以及软件版本的更新,测试用例也必须配套修改更新。

    一般小的修改完善可在原测试用例文档上修改,但文档要有更改记录。软件的版本升级更新,测试用例一般也应随之编制升级更新版本。

    3、测试用例的管理软件

    运用测试用例还需配备测试用例管理软件。它的主要功能有三个:第一、能将测试用例文档的关键内容,如编号、名称等等自动导入管理数据库,形成与测试用例文档完全对应的记录;第二、可供测试实施时及时输入测试情况;第三、最终实现自动生成测试结果文档,包含各测试度量值,测试覆盖表和测试通过或不通过的测试用例清单列表。

    有了管理软件,测试人员无论是编写每日的测试工作日志、还是出软件测试报告,都会变得轻而易举。

    五、测试用例的设计

    (一)白盒技术

        白合测试是结构测试结构测试,所以被测对象基本上是源程序,以程序的内部逻辑为基础设计测试用例。
    1、逻辑覆盖
        程序内部的逻辑覆盖程度,当程序中有循环时,覆盖每条路径是不可能的,要设计使覆盖程度较高的或覆盖最有代表性的路径的测试用例。下面根据图7-1所示的程序,分别讨论几种常用的覆盖技术。
    (1)语句覆盖。
        为了个提高发现错误的可能性,在测试时应该执行到程序中的每一个语句。语句覆盖是指设计足够的测试用例,使被测试程序中每个语句至少执行一次。
    如图7-1是一个被测试程序流程图:


    (2)判定覆盖。
        判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次“真”值和“假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖也称分支覆盖。
    (3)条件覆盖。
        条件覆盖是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。
    (4)判定/条件测试。
        该覆盖标准指设计足够的测试用例,使得判定表达式的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次。
    (5)条件组合覆盖。
        条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次。
    (6)路径覆盖。
        路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径。
        在实际的逻辑覆盖测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例,以达到路径覆盖测试标准。
    2.循环覆盖
    3.基本路径测试


    (二)黑盒技术

    1.等价类划分
    (1)划分等价类。
    ①如果某个输入条件规定了取值范围或值的个数。则可确定一个合理的等价类(输入值或数在此范围内)和两个不合理等价类(输入值或个数小于这个范围的最小值或大于这个范围的最大值)。
    ②如果规定了输入数据的一组值,而且程序对不同的输入值做不同的处理,则每个允许输入值是一个合理等价类,此处还有一个不合理等价类(任何一个不允许的输入值)。
    ③如果规定了输入数据必须遵循的规则,可确定一个合理等价类(符合规则)和若干个不合理等价类(从各种不同角度违反规则)。
    ④如果已划分的等价类中各元素在程序中的处理方式不同,则应将此等价类进一步划分为更小的等价类。
    (2)确定测试用例。
    ①为每一个等价类编号。
    ②设计一个测试用例,使其尽可能多地覆盖尚未被覆盖过的合理等价类。重复这步,直到所有合理等价类被测试用例覆盖。
    ③设计一个测试用例,使其只覆盖一个不合理等价类。
    2.边界值分析
        使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表,而是将测试边界情况作为重点目标,选取正好等于、刚刚大于或刚刚小于边界值的测试数据。
    (1)如果输入条件规定了值的范围,可以选择正好等于边界值的数据作为合理的测试用例,同时还要选择刚好越过边界值的数据作为不合理的测试用例。如输入值的范围是[1,100],可取0,1,100,101等值作为测试数据。
    (2)如果输入条件指出了输入数据的个数,则按最大个数、最小个数、比最小个数少1、比最大个数多1等情况分别设计测试用例。如,一个输入文件
    可包括1--255个记录,则分别设计有1个记录、255个记录,以及0个记录的输入文件的测试用例。
    (3)对每个输出条件分别按照以上原则(1)或(2)确定输出值的边界情况。如,一个学生成绩管理系统规定,只能查询95--98级大学生的各科成绩,可以设计测试用例,使得查询范围内的某一届或四届学生的学生成绩,还需设计查询94级、99级学生成绩的测试用例(不合理输出等价类)。
        由于输出值的边界不与输入值的边界相对应,所以要检查输出值的边界不一定可能,要产生超出输出值之外的结果也不一定能做到,但必要时还需试一试。
    (4)如果程序的规格说明给出的输入或输出域是个有序集合(如顺序文件、线形表、链表等),则应选取集合的第一个元素和最后一个元素作为测试用例。
    3.错误推测
        在测试程序时,人们可能根据经验或直觉推测程序中可能存在的各种错误,从而有针对性地编写检查这些错误的测试用例,这就是错误推测法。
    4.因果图
        等价类划分和边界值方法分析方法都只是孤立地考虑各个输入数据的测试功能,而没有考虑多个输入数据的组合引起的错误。
    5.综合策略
        每种方法都能设计出一组有用例子,用这组例子容易发现某种类型的错误,但可能不易发现另一类型的错误。因此在实际测试中,联合使用各种测试方法,形成综合策略,通常先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。

  • 设计功能和界面测试用例(转载)

    2007-03-28 11:55:07

    设计功能和界面测试用例


    1.1 文本框、按钮等控件测试

    1.1.1 文本框的测试

    如何对文本框进行测试

     a,输入正常的字母或数字。
     b,输入已存在的文件的名称;
     c,输入超长字符。例如在“名称”框中输入超过允许边界个数的字符,假设最多255个字符,尝试输入 256个字符,检查程序能否正确处理;
     d,输入默认值,空白,空格;
     e,若只允许输入字母,尝试输入数字;反之;尝试输入字母;
     f,利用复制,粘贴等操作强制输入程序不允许的输入数据;
     g,输入特殊字符集,例如,NUL及\n等;
     h,输入超过文本框长度的字符或文本,检查所输入的内容是否正常显示;
     i,输入不符合格式的数据,检查程序是否正常校验,如,程序要求输入年月日格式为yy/mm/dd,实际输入yyyy/mm/dd,程序应该给出错误提示

    在测试过程中所用到的测试方法:

     1,输入非法数据;
     2,输入默认值;
     3,输入特殊字符集;
     4,输入使缓冲区溢出的数据;
     5,输入相同的文件名;
    命令按钮控件的测试

    测试方法:

     a,点击按钮正确响应操作。如,单击确定,正确执行操作;单击取消,退出窗口;
     b,对非法的输入或操作给出足够的提示说明,如,输入月工作天数为32时,单击”确定“后系统应提示:天数不能大于31;
     c,对可能造成数据无法恢复的操作必须给出确认信息,给用户放弃选择的机会;
    单选按钮控件的测试

    测试方法:

     a,一组单选按钮不能同时选中,只能选中一个。
     b,逐一执行每个单选按钮的功能。分别选择了“男”“女”后,保存到数据库的数据应该相应的分别为“男”“女”;
     c,一组执行同一功能的单选按钮在初始状态时必须有一个被默认选中,不能同时为空;
    up-down控件文本框的测试

    测试方法:

     a,直接输入数字或用上下箭头控制,如,在“数目”中直接输入10,或者单击向上的箭头,使数目变为10;
     b,利用上下箭头控制数字的自动循环,如,当最多数字为253时,单击向上箭头,数目自动变为1;反之亦适用;
     c,直接输入超边界值,系统应该提示重新输入;
     d,输入默认值,空白。如,“插入”数目为默认值,点击“确定”;或,删除默认值,使内容为空,单击“确定”进行测试;
     e,输入字符。此时系统应提示输入有误。
    组合列表框的测试

    测试方法:

     a,条目内容正确,其详细条目内容可以根据需求说明确定;
     b,逐一执行列表框中每个条目的功能;
     c,检查能否向组合列表框输入数据;
    复选框的测试

    测试方法:

     a,多个复选框可以被同时选中;
     b,多个复选框可以被部分选中;
     c,多个复选框可以都不被选中;
     d,逐一执行每个复选框的功能;
    列表框控件的测试

    测试方法:

     a,条目内容正确;同组合列表框类似,根据需求说明书确定列表的各项内容正确,没有丢失或错误;
     b,列表框的内容较多时要使用滚动条;
     c,列表框允许多选时,要分别检查shift选中条目,按ctrl选中条目和直接用鼠标选中多项条目的情况;
    滚动条控件的测试

    要注意一下几点:

     a,滚动条的长度根据显示信息的长度或宽度及时变换,这样有利于用户了解显示信息的位置和百分比,如,word中浏览100页文档,浏览到50页时,滚动条位置应处于中间;
     b,拖动滚动条,检查屏幕刷新情况,并查看是否有乱码;
     c,单击滚动条;
     d,用滚轮控制滚动条;
     e,滚动条的上下按钮。
    各种控件在窗体中混和使用时的测试

     a,控件间的相互作用;
     b,tab键的顺序,一般是从上到下,从左到右;
     c,热键的使用,逐一测试;
     d,enter键和esc键的使用;
    在测试中,应遵循由简入繁的原则,先进行单个控件功能的测试,确保实现无误后,再进行多个控件的的功能组合的测试。

    ps:密码输入框测试时要特别注意进行字母大写输入的测试。

    查找替换操作
     案例演示:打开word中的"替换"对话框
     测试本功能有通过测试和失败测试两种情况
     通过测试:

     1,输入内容直接查找,或查找全部
     2,在组合框中寻找已经查找过的内容,再次查找并确认文档的内容正确,如,已经查找过"测试用例",再次进入不用重新输入查找内容,直接在文档中搜寻就可以.

    失败测试:
     1,输入过长或过短的查询字符串.如,假设查询的字符串长度为1到255,那么输入0,1,2,256,255和254进行测试;
     2,输入特殊字符集,如,在word中.^g代表图片,^代表分栏符,可以输入这类特殊字符测试;

    替换测试大体相同.
     关于编辑操作窗口的功能测试的用例:
     1,关闭查找替换窗口.不执行任何操作,直接退出;
     2,附件和选项测试.假如,设定"精确搜寻","向后"搜索等附件选项等等来测试;
     3,控件间的相互作用.如,搜寻内容为空时,按钮"搜寻全部","搜寻","全部替换","替换"都为灰色.
     4,热键, Tab键.回车键的使用.

    插入操作
     1,插入文件
     测试的情况
     a,插入文件;
     b,插入图像;
     c,在文档中插入文档本身;
     d,移除插入的源文件;
     e,更换插入的源文件的内容;

    2,链接文件
     测试方法:
     a,插入链接文件;
     b,在文档中链接文档本身;
     c,移除插入的源文件;
     d,更换插入的源文件的内容.

    3,插入对象
     要测试的内容
     a,插入程序允许的对象,如,在word中插入excel工作表;
     b,修改所插入对象的内容.插入的对象仍能正确显示;
     c,卸载生成插入对象的程序,如,在word中插入excel工作表后卸载excel,工作表仍正常使用.

    编辑操作
     编辑操作包括剪切,复制,粘贴操作.

    测试剪切操作的方法
     a,对文本,文本框,图文框进行剪切;
     b,剪切图像
     c,文本图像混合剪切
     复制操作方法与剪切类似.

    测试时,主要是对粘贴操作的测试,方法是:
     a,粘贴剪切的文本,文本框及图文框;
     b,粘贴所剪切的图像;
     c,剪切后,在不同的程序中粘贴
     d,多次粘贴同一内容,如,剪切后,在程序中连续粘贴3次;
     e,利用粘贴操作强制输入程序所不允许输入的数据.

    界面测试用例的设计方法
     1,窗体
     测试窗体的方法:
     a,窗体大小,大小要合适,控件布局合理;
     b,移动窗体.快速或慢速移动窗体,背景及窗体本身刷新必须正确;
     c,缩放窗体,窗体上的控件应随窗体的大小变化而变化;
     d,显示分辨率.必须在不同的分辨率的情况下测试程序的显示是否正常;
     进行测试时还要注意状态栏是否显示正确;工具栏的图标执行操作是否有效,是否与菜单懒中图标显示一致;错误信息内容是否正确,无错别字,且明确等等;

    2,控件
     测试方法:
     a,窗体或控件的字体和大小要一致;
     b,注意全角,半角混合
     c,无中英文混合.

    菜单

    进行测试时要注意
     a,选择菜单是否可以正常工作,并与实际执行内容一致;
     b,是否有错别字:
     c,快捷键是否重复;
     d,热键是否重复;
     e,快捷键与热键操作是否有效
     f,是否存在中英文混合
     g,菜单要与语境相关,如,不同权限的用户登陆一个应用程序,不同级别的用户可以看到不同级别的菜单并使用不同级别的功能;
     h,鼠标右键快捷菜单

    特殊属性
     1,安装界面应有公司介绍或产品介绍,有公司的图标
     2,主界面及大多数界面最好有公司图标
     3,选择"帮助"->"关于"命令,应 看见相关版权和产品信息

     

    感觉这篇文章有些乱,仅供参考。

  • 软件测试基本方法

    2007-03-27 11:07:12

    动态黑盒测试

            不深入代码细节的软件测试方法。常被称为行为测试,因为测试的是软件在使用过程中的实际行为。

            首先,从产品说明书获知测试对象的软件的输入和应该得到的输出。
         
            接下来,开始定义测试案例。 测试案例:指进行实验用的输入,以及测试软件用的程序。
              
            选择测试案例是软件测试员最重要的任务。不正确的选择可能导致测试量过大或者过小,甚至测试目标不对。准确评估风险,把不可穷近的可能性减少到可以控制的范围是成功的诀窍。

      测试基本方法:通过测试 vs  失败测试
     
            通过测试:确认软件至少能做什么,而不考验其能力。

            失败测试:纯粹为了破坏软件而设计和执行的测试案例,也称为迫使出错测试。蓄意攻击软件的薄弱环节。
          
            在设计和执行测试案例时,总是首先进行通过测试。在破坏性试验之前看看软件基本功能是否实现是很重要的,否则在正常使用软件时就会奇怪为什么有那么多的软件缺陷。
           常见的测试案例就是设法迫使软件出现错误提示信息。产品说明书可能会给出这样的功能要求,针对这个问题的测试可能是通过测试也可能是失败测试。可能两者都是。不用去刻意区分,重要的是找到软件缺陷!

       选择测试案例:等价分配

            等价分配:是指分步骤地把过多(无限)的测试案例减小到同样有效的小范围的过程。也称等价划分。

            等价分配技术提供了一个选择哪些数值、舍弃哪些数值的系统方法。

            等价类别或者等价区间是指测试相同目标或者暴露相同软件缺陷的一组测试案例。在寻找等价区间时,想办法把软件的相似输入、输出、操作分成组。这些组就是等价区间。
            等价分配的目的是把可能的测试案例组合缩减到仍然足以测试软件的控制范围。因为选择了不完全测试,就要冒一定的风险。如果为了减少测试案例的数量过度进行等价分配,测试的风险就会增加。另外,等价区间的划分没有一定的标准,只要足以覆盖测试对象就行了。

       数据测试

            软件由数据(包括键盘输入、鼠标单击、磁盘文件、打印输出等等)和程序(可执行的流程、转换、逻辑和运算)两个最基本的要素组成。

            对数据进行软件测试,就是在检查用户输入的信息、返回结果以及中间计算结果是否正确。主要根据下列原则来进行等价分配,以合理减少测试案例:边界条件、次边界条件和无效数据。

            1. 边界条件测试

            程序在处理大量中间数值时都是对的,但是可能在边界处出现错误。比如数组的[0]元素的处理。想要在Basic中定义一个10个元素的数组,如果使用 Dim data(10) As Integer ,则定义的是一个11个元素的数组,在赋初值时再使用 For i =1 to 10 ...来赋值,就会产生权限,因为程序忘记了处理i=0的0号元素。
            边界条件是指软件计划的操作界限所在的边缘条件。

            数据类型:数值、字符、位置、数量、速度、地址、尺寸等,都会包含确定的边界。
            应考虑的特征:第一个/最后一个、开始/完成、空/满、最慢/最快、相邻/最远、最小值/最大值、超过/在内、最短/最长、最早/最迟、最高/最低。这些都是可能出现的边界条件。

           根据边界来选择等价分配中包含的数据。然而,仅仅测试边界线上的数据点往往不够充分。提出边界条件时,一定要测试临近边界的合法数据,即测试最后一个可能合法的数据,以及刚超过边界的非法数据。以下例子说明一下如何考虑所有可能的边界:


    --------------------------------------------------------------------------------
                    如果文本输入域允许输入1-255个字符。
                    尝试:输入1个字符和255个字符(合法区间),也可以加入254个字符作为合法测试。
                                输入0个字符和256个字符作为非法区间。

    --------------------------------------------------------------------------------
                   如果程序读写软盘
                   尝试:保存一个尺寸极小,甚至只有一项的文件。
                               然后保存一个很大的——刚好在软盘容量限制之内的文件。
                               保存空文件。
                               保存尺寸大于软盘容量的文件。

    --------------------------------------------------------------------------------


                   如果程序允许在一张纸上打印多个页面
                   尝试:只打印一页
                               打印允许的最多页面
                               打印0页
                               多于所允许的页面(如果可能的话)

    --------------------------------------------------------------------------------


    --------------------------------------------------------------------------------
               
            2.  次边界条件测试

            上面所讲的是普通的边界条件,在产品说明书中有定义,或者在软件的过程中确定。但有些边界在软件内部,最终用户几乎看不到,但是软件测试仍有必要检查,这样的边界条件成为次边界条件或者内部边界条件。寻找这样的边界条件,不要求软件测试员成为程序员或者具有阅读源代码的能力,但是确实要求大体了解软件的工作方式。2的乘方和ASCII表是这样的两个例子:

    --------------------------------------------------------------------------------
            2的乘方
            术语
    范围或值

            位bit
             0或1

            双位doublebit
             0~15

            字节Byte
             0~255

            字word
             0~65,535或者0~4,294,967,295

            千K
             1,024

            兆M
             1,048,576

            亿
             1,073,741,824

            万亿
             1,099,511,627,776


            计算机和软件的基础是二进制数。因此二的乘方是作为边界条件的重要数据。如:在通讯软件中,带宽或者传输信息的能力总是受限制,因此软件工程师会尽一切努力在通讯字符串中压缩更多数据。其中一个方法就是把信息压缩到尽可能小的单元中,发送这些小单元中最常用的信息,在必要时再扩展为大一些的单元。假设某种通讯协议支持256条命令。软件将发送编码为一个双位数据的最常用的15条命令;如果用到第16到256之间的命令,软件就转而发送编码为更长字节的命令。这样,软件就会根据双位/字节边界执行专门的计算和不同的操作。

            在建立等价区间的时候,要考虑是否需要包含2的乘方边界条件。例如:软件接受1~1000范围内的数字,那么合法区间除了1和1000,也许还有2和999之外,还应该有临近2的乘方次边界:14,15,16以及254,255和256。


    --------------------------------------------------------------------------------
            ASCII表

            ASCII码表并不是结构良好的连续表。数字0~9对应48~57;斜杠字符(/)在0的前面,冒号(在9的后面;大写字母A~Z对应65~90;小写字母对应97~122。这些情况都代表次边界条件。
            如果测试进行文本输入或文本转换的软件,在定义数据区间包含哪些值时,参考一下ASCII表是相当明智的。例如:测试的文本框只接受用户输入字符A~Z和a~z,就应该在非法区间中包含ASCII表中这些字符前后的值——@,',[,{。

    --------------------------------------------------------------------------------


    --------------------------------------------------------------------------------

        3. 默认值测试(默认、空白、空值、零值和无)

            好的软件会处理这种情况,常用的方法:一是将输入内容默认为合法边界内的最小值,或者合法区间内某个合理值;二是返回错误提示信息。
            这些值在软件中通常需要进行特殊处理。因此应当建立单独的等价区间。在这种默认下,如果用户输入0或-1作为非法值,就可以执行不同的软件处理过程。


    --------------------------------------------------------------------------------

        4.  破坏测试(非法、错误、不正确和垃圾数据)

            数据测试的这一类型是失败测试的对象。这类测试没有实际规则,只是设法破坏软件。不按软件的要求行事,发挥创造力吧!


    --------------------------------------------------------------------------------

         状态测试

            状态测试是通过不同的状态验证程序的逻辑流程。软件测试员必须测试软件的状态及其转换。软件状态是指软件当前所处的情况或者模式。软件通过代码进入某一个流程分支,触发一些数据位,设置某些变量,读取某些变量,从而转入一个新的状态。

            同数据测试一样,状态测试运用等价分配技术选择状态和分支。因为选择不完全测试,所以要承担一定的风险,但是通过合理选择减少危险。

            1.  建立状态转移图
                   
            使用:方框和箭头;圆圈(泡泡)和箭头。
            应包含的项目:
                - 软件可能进入的每一种独立状态。
                        如果不能断定是否独立,先认为是;以后一旦发现不是,随时剔除。
                - 从一种状态转入另一种状态所需的输入和条件。
                        状态变化和存在的原因,就是我们要寻找的对象。
                - 进入或退出某种状态时的设置条件及输出结果。
                       包括显示的菜单和按钮、设置的标志位、产生的打印输出、执行的运算等等。
            由于是黑盒测试,因而只需从用户的角度建立状态图即可。

            2.  减少要测试的状态及转换的数量
           
            测试每一种路线的组合,走遍所有分支是不可能的事情。大量的可能性也需要减少到可以操作的测试案例集合。方法有以下5种:
                - 每种状态至少访问一次。
                        无论用什么方法,每种状态都必须测试。
                - 测试看起来最常见最普遍的状态转换
                - 测试状态之间最不常用的分支。
                        这些分支是最容易被产品设计者和程序员忽视的。
                - 测试所有错误状态机器返回值。
                        错误是否得到正确的处理、错误提示信息是否正确、修复错误时是否正确恢复软件等
                - 测试随机状态转换。

            3.  进行具体的测试——定义测试案例

             测试状态及其转换包括检查所有的状态变量——与进入和退出状态相关的静态条件、信息、值、功能等等。如:窗口外观、窗口尺寸定义(固定/上次使用时的尺寸)、显示的菜单、默认设定值、文档的名称等。状态无论是否可见,都必须进行状态确定。       状态变量也许不可见,但是很重要,一个常见的例子时文档涂改标志(以此判断退出时是否询问保存)。

       失败状态测试

            状态测试的失败测试的案例,主要是竞争条件、重复、压迫和重负。

            1.  竞争条件和时序错乱

            设计多任务操作系统不是很难,设计充分利用多任务能力的软件才是艰巨的任务。在真正的多任务环境中软件设计绝对不能想当然,必须处理随时被中断的情况,能够与其他任何软件在系统中同时运行,并且共享内存、磁盘、通信设备以及其他硬件资源。
            这样的结果,就是导致竞争条件问题;软件未预料到的中断发生,时序就会发生错乱。
            竞争条件测试难以设计,最好是首先仔细查看状态转换图中的每一个状态,以找出哪些外部影响会中断该状态。考虑要使用数据如果没有准备好,或者在用到时发生了变化,状态会怎样。数条弧线或者直线同时相连的情形如何。

            一下是要面临竞争条件的典型情形:
                - 两个不同的程序同时保存或打开同一个文档。
                - 共享同一台打印机、通信端口或者其他外围设备。
                - 当软件处于读取或者修改状态时按键或者单击鼠标。
                - 同时关闭或者启动软件的多个实例。
                - 同时使用不同的程序方位一个共同数据库。

            2.  重复、压迫和重负

            这三个测试的目标是处理那些连程序员都没有想到的恶劣条件下产生的问题的能力。

             - 重复测试

             重复测试是不断执行同样的操作。最简单的是不停地启动和关闭程序,或者反复读写数据或者选择同一个操作。这种测试的主要目的是看内存是否不足。如果内存被分配进行某项操作,但操作完成时没有完全释放,就会产生一个常见的软件问题。

            - 压迫测试

             压迫测试是使软件在不够理想的条件下运行——内存小、磁盘空间少、CPU速度慢、调制解调器速率低等等。观察软件对外部资源的要求和依赖程度。压迫测试就是将支持降到最低限度,目的在于尽可能的限制软件的必要条件。

            - 重负测试

            重负测试和压迫测试相反。压迫测试是尽量限制软件,而重负测试是尽量提供条件任其发挥。让软件处理尽可能大的数据文件。最大限度的发掘软件的能力,让它不堪重负。比如:软件对打印机或通信端口进行操作,就把能连的都连上;服务器可以处理几千个模拟连接,就按他说的做。
            不要忘了,时间也是一种重负测试。

            重复、压迫和重负测试应联合使用,同时进行。

            需要注意的是:
            一,项目管理员和小组程序员可能不完全接受软件测试员这样打破软件的做法。但是软件测试员的任务就是确保软件在这样恶劣的条件下正常工作,否则就报告软件缺陷。如何以最佳方式报告软件缺陷,使其得到严肃对待和修复,也是一门学问。
            二,无数次重复和上千次的连接对于手工操作是不可能的。因而需要借助自动化测试工具来实现。

       其他黑盒测试方法

            1.  像无经验的用户那样做

            输入意想不到的数据;中途变卦而退回去执行其他操作;单击不应该单击的东西……

            2.  在已经找到软件缺陷的地方再找找

            原因有二:一是软件缺陷的集中性。如果发现在不同的特性中找出了大量上边界条件软件缺陷,那么就应该对所有特性着重上边界条件。对某个存在的缺陷,应当投入一些案例来保证这个问题不是普遍存在的。二是程序员往往倾向于只修改报告出来的软件缺陷,不多也不少。比如报告启动-终止-再启动255次导致冲突,程序员可能只修复了这个问题。重新测试时,一定要重新执行同样的测试256次以上。

            3.  凭借经验、直觉和预感

            记录哪些技术有效,哪些不行。尝试不同的途径。如果认为有可疑之处,就要仔细探究。按照预感行事,直至证实这是错误为止。
            经验是人们对错误行为的称谓。

  • 你必须学会的几个常用网络测试命令

    2007-03-08 10:09:39Digest 3

    如果你是一个网络维护人员,那么肯定要经常处理网络故障,了解和掌握下面几个命令将会有助于您更快地检测到网络故障所在,从而节省时间,提高效率。

      Ping

      Ping是测试网络联接状况以及信息包发送和接收状况非常有用的工具,是网络测试最

      常用的命令。Ping向目标主机(地址)发送一个回送请求数据包,要求目标主机收到请求后给予答复,从而判断网络的响应时间和本机是否与目标主机(地址)联通。

      如果执行Ping不成功,则可以预测故障出现在以下几个方面:网线故障,网络适配器配置不正确,IP地址不正确。如果执行Ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,Ping成功只能保证本机与目标主机间存在一条连通的物理路径。

      命令格式:

      ping IP地址或主机名 [-t] [-a] [-n count] [-l size]

      参数含义:

      -t不停地向目标主机发送数据;

      -a 以IP地址格式来显示目标主机的网络地址 ;

      -n count 指定要Ping多少次,具体次数由count来指定 ;

      -l size 指定发送到目标主机的数据包的大小。

      例如当您的机器不能访问Internet,首先您想确认是否是本地局域网的故障。假定局域网的代理服务器IP地址为202.168.0.1,您可以使用Ping避免202.168.0.1命令查看本机是否和代理服务器联通。又如,测试本机的网卡是否正确安装的常用命令是ping 127.0.0.1。

      Tracert

      Tracert命令用来显示数据包到达目标主机所经过的路径,并显示到达每个节点的时间。命令功能同Ping类似,但它所获得的信息要比Ping命令详细得多,它把数据包所走的全部路径、节点的IP以及花费的时间都显示出来。该命令比较适用于大型网络。

      命令格式:

      tracert IP地址或主机名 [-d][-h maximumhops][-j host_list] [-w timeout]

      参数含义:

      -d 不解析目标主机的名字;

      -h maximum_hops 指定搜索到目标地址的最大跳跃数;

      -j host_list 按照主机列表中的地址释放源路由;

      -w timeout 指定超时时间间隔,程序默认的时间单位是毫秒。

      例如大家想要了解自己的计算机与目标主机
    www.cce.com.cn之间详细的传输路径信息,可以在MS-DOS方式输入tracertwww.cce.com.cn。

      如果我们在Tracert命令后面加上一些参数,还可以检测到其他更详细的信息,例如使用参数-d,可以指定程序在跟踪主机的路径信息时,同时也解析目标主机的域名。

      Netstat

      Netstat命令可以帮助网络管理员了解网络的整体使用情况。它可以显示当前正在活动的网络连接的详细信息,例如显示网络连接、路由表和网络接口信息,可以统计目前总共有哪些网络连接正在运行。

      利用命令参数,命令可以显示所有协议的使用状态,这些协议包括TCP协议、UDP协议以及IP协议等,另外还可以选择特定的协议并查看其具体信息,还能显示所有主机的端口号以及当前主机的详细路由信息。

      命令格式:

      netstat [-r] [-s] [-n] [-a]

      参数含义:

      -r 显示本机路由表的内容;

      -s 显示每个协议的使用状态(包括TCP协议、UDP协议、IP协议);

      -n 以数字表格形式显示地址和端口;

      -a 显示所有主机的端口号。

      Winipcfg

      Winipcfg命令以窗口的形式显示IP协议的具体配置信息,命令可以显示网络适配器的物理地址、主机的IP地址、子网掩码以及默认网关等,还可以查看主机名、DNS服务器、节点类型等相关信息。其中网络适配器的物理地址在检测网络错误时非常有用。

      命令格式:

      winipcfg [/?] [/all]

      参数含义:

      /all 显示所有的有关IP地址的配置信息;

      /batch [file] 将命令结果写入指定文件;

      /renew_ all 重试所有网络适配器;

      /release_all 释放所有网络适配器;

      /renew N 复位网络适配器 N;

      /release N 释放网络适配器 N。

      在Microsoft的Windows 95及其以后的操作系统中,都可以运行以上命令。
  • 软件测试中的网站测试技术要领

    2007-03-07 15:08:39Digest 1

    基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战。基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。

      本文从功能、性能、可用性、客户端兼容性、安全性等方面讨论了基于Web的系统测试方法。

      随着Internet和Intranet/Extranet的快速增长,Web已经对商业、工业、银行、财政、教育、政府和娱乐及我们的工作和生活产生了深远的影响。许多传统的信息和数据库系统正在被移植到互联网上,电子商务迅速增长,早已超过了国界。范围广泛的、复杂的分布式应用正在Web环境中出现。Web的流行和无所不在,是因为它能提供支持所有类型内容连接的信息发布,容易为最终用户存取。

      Yogesh Deshpande和Steve Hansen在1998年就提出了Web工程的概念。Web工程作为一门新兴的学科,提倡使用一个过程和系统的方法来开发高质量的基于Web的系统。它"使用合理的、科学的工程和管理原则,用严密的和系统的方法来开发、发布和维护基于Web的系统"。目前,对于web工程的研究主要是在国外开展的,国内还刚刚起步。

      在基于Web的系统开发中,如果缺乏严格的过程,我们在开发、发布、实施和维护Web的过程中,可能就会碰到一些严重的问题,失败的可能性很大。而且,随着基于Web的系统变得越来越复杂,一个项目的失败将可能导致很多问题。当这种情况发生时,我们对Web和Internet的信心可能会无法挽救地动摇,从而引起Web危机。并且,Web危机可能会比软件开发人员所面对的软件危机更加严重、更加广泛。

      在Web工程过程中,基于Web系统的测试、确认和验收是一项重要而富有挑战性的工作。基于Web的系统测试与传统的软件测试不同,它不但需要检查和验证是否按照设计的要求运行,而且还要测试系统在不同用户的浏览器端的显示是否合适。重要的是,还要从最终用户的角度进行安全性和可用性测试。然而,Internet和Web媒体的不可预见性使测试基于Web的系统变得困难。因此,我们必须为测试和评估复杂的基于Web的系统研究新的方法和技术。

      一般软件的发布周期以月或以年计算,而Web应用的发布周期以天计算甚至以小时计算。Web测试人员必须处理更短的发布周期,测试人员和测试管理人员面临着从测试传统的C/S结构和框架环境到测试快速改变的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、Javascrīpt、 ActiveX、VBscrīpt或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,、Javascrīpt、 ActiveX、 plug-ins或不同的HTML规格有不同的支持。例如,ActiveX是Microsoft的产品,是为Internet Explorer而设计的,Javascrīpt是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、Javascrīpt、Css代码检查,目前采用

      HTML代码检查------采用CSE HTML Validator进行测试

      Javascrīpt、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自带的测试数据库性能的工具,能够测试多种数据库的性能。

221/212>
Open Toolbar