发布新日志

  • 去阿里面试了等结果中

    spring 发布于 2009-02-19 19:04:49

       2月17日去阿里巴巴面试了。我应聘的是测试工程师。

      上午十点开始笔试。花了一个半小时做完了试卷。接下去两位工作人员给我面试。聊到十二点二十来分。去吃了个午饭。一点钟去见总监而后又与人力的帅哥聊了会。感觉整个过程挺顺的。也比较轻松。下午回家后五点钟接到第二天去体检的通知。

      昨天一早去体检了。现在有点紧张。还没有接到入职的电话。

     

  • 如何看懂ping命令(zz)

    qiqingyaya 发布于 2009-02-19 09:14:20

    看完ping的小秘密后有感,呵呵 !现在再把它详细的发出来分享下,也是在网上学习的,呵呵!

    如何看懂ping命令

    Ping是用来进行网络连接测试的一个程序,其对应的文件名为“Ping.exe”(在Windows XP系统下该文件存在于

    C:\Windows\System32文件夹下)。该工具的最简单的用法是: “Ping  XXX.XXX.XXX.XXX”(XXX.XXX.XXX.XXX为欲测试的IP地址),根据不同的测试目的可以带上不同的参数。

    很多朋友未必熟悉其运行结果的意义,下面简要介绍一下成功结果和失败结果的意思。

    一、“Ping”成功的结果分析

    例如输入“Ping 61.139.2.69”,显示如下信息:

    Pinging 61.139.2.69 with 32 bytes of data:

    Reply from 61.139.2.69: bytes=32 time=49ms TTL=250

    Reply from 61.139.2.69: bytes=32 time=54ms TTL=250

    Reply from 61.139.2.69: bytes=32 time=54ms TTL=250

    Reply from 61.139.2.69: bytes=32 time=54ms TTL=250

    Ping statistics for 61.139.2.69:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),

    Approximate round trip times in milli-seconds:

    Minimum = 43ms, Maximum = 44ms, Average = 43ms

    上述结果的意思为:Ping命令用32字节(这是Windows默认发送的数据包大小,如要改变,则应该在后面加上 “-L 数据包大小”,如“Ping 61.139.2.69 -l 5000”表示要测试的数据包大小为5000字节)的数据包来测试能否连接到IP地址为“61.139.2.69”的主机;下面的四行“Reply from”表示本地主机已收到从被测试的机器上返回的信息——返回32个字节用了49或54毫秒,TTL为250。

    友情提示:TTL((Time to  Live)的意思是存在时间值,通过该值可以算出数据包经过了多少个路由器,方法是:用255减去返回的TTL值.,例如本例中返回250,则应该用255来减去250,得到5。

    再下面的“Ping statistics”则表示发送了(sent)4个数据包(这是系统的缺省值,如要指定发送数据包的次数,则在后面加上“-n 次数”,如“Ping 61.139.2.69 –n 20”表示传送20次;如果希望一直Ping下去,则要在后面加上参数“-t”,此时要中断则需要按Ctrl+C),收到了(Receieved)4个,共丢失了(Lost)0个(即没有丢失),发送时间最小为_毫秒,最大_毫秒,平均时间为_毫秒。

    二、Ping助你分析网络

    1.测试本机网卡是否工作正常

    输入“Ping 127.0.0.1”应该可以出现类似于上例的提示,如果出现的是四行“Request timeout”的提示,则说明网卡工作不正常,或者是本机的网络设置有问题。

    2.检验网关配置

    用Ping域外主机IP的方法可以检验网关的配置是否正确,通过查看从网络内主机向域外主机发送IP包能否送出来判断结果。如出现4行“Request timeout”的提示说明网关设置有错,网关配置正确则会返回传输时间和TTL等信息。

    如果上网浏览网页总是收到“找不到该页”或者“该页无法显示”等提示信息,一般应检查DNS是否有问题,一则可以测试DNS服务器是否能够“Ping”通,另外还要测试DNS设置是否有错误。

    3.测试DNS服务器是否能够Ping通

    在命令行窗口中输入“Ping DNS服务器IP地址”,如果成功表明DNS服务器工作正常。例如“Ping 61.139.2.69”(这是笔者所在地的一台DNS服务器的地址)如果返回测试时间和TTL值等信息就表明正常,如果出现“Request timeout”错误,那很明显在浏览器中输入域名将不能访问网站。

    4.测试DNS服务器配置是否正确

    我们可以用Ping任一域名的方法来查看DNS服务器配置是否正确,如果可以将该域名解析成一个IP地址并返回测试信息说明配置无误,如出现“unknown Host Name”的提示,则说明DNS配置出错。

    友情提示:①返回这个信息也可能是对方的主机有问题。②另一种检验方法是:直接在浏览器地址栏中输入网站服务器的IP地址,若可以连接说明网络通畅,但输入域名时不能连接就证明是DNS服务器设置不对或者是服务器出了问题。

    5.测试某主机域名所对应的IP

    在收发电子邮件时一般会先解析域名为IP然后再连接,如果想加快收发速度,可以先将邮件服务器的域名转换为IP然后保存在本机上,例如:要测试21cn.com的邮件发送服务器的IP,则输入“Ping smtp.21cn.com”,会得到其IP地址为“202.104.32.230”,将此地址填写到邮件客户端软件的服务器设置中,如在Foxmail中,则在账户属性中的邮件服务器中填入。

    三、看懂出错提示信息

    (1)No

    Answer:这种故障表明本机有一条通向中心主机的路由,但没有收到发给该中心主机的任何信息。原因可能是:中心主机没有工作、本机或中心主机网络配置不正确、本地或中心的路由器没有工作、通信线路有故障、中心主机存在路由选择问题,等等。

    (2)Request Timed

    Out:超时错误,被测试的机器不能正常连接,原因可能是该主机此时未连接(如已关机)、或到路由器的连接有问题、或路由器不能通过,或对方主机使用了防火墙软件禁止进行Ping测试等等。

    (3)Unknown Host Name:无法解析主机名字,可能是DNS设置不对,或者对方主机不存在。

  • 如何测试一个u盘

    applejuzi 发布于 2009-01-16 21:30:58

     

     

    功能测试:

     

    1 windows xp比较流行的操作系统上是否可以识别(装了驱动后是否可以)

     

    2 在电脑上显示的盘符是否正确

     

    3 总空间,可用空间,已用空间是否显示正确

     

    4 u盘中是否可以拷入各种格式的各类文件(图片,视频,文档,网页...

     

    5 是否可以拷入拷出大文件

     

    6 正常操作拷入的文档等是否显示乱码

     

    7 拷文件的过程中是否可以取消

     

    8 拷文件的过程中拔掉u盘后,u盘是否损坏

     

    9 拷文件的过程中电脑关机后,u盘是否损坏

     

    10 u盘的开关是否起作用

     

    12 正常操作,拷入的文件是否会丢失

     

    13 空间已满是否有提示信息

     

    14 是否支持格式化

     

    15 u盘在各个状态时是否有相应的led灯提醒

     

     

     

    兼容性测试:

     

    1 windows 98,windows 2000,windows me,windows 2000 server,windows 2003

     

    server,windows xp,windows vista...是否可以识别

     

    2 usb1.0,usb2.0上是否能够识别

     

    3 在笔记本上,台式电脑,服务器上是否可以识别

     

    性能测试:

     

    1 一次性拷贝删除多个文件,u盘是否正常

     

    2 u盘连续使用比较长的时间,u盘是否正常

     

    3 u盘摔地上多次后,是否正常

     

    界面测试:

     

    1 设计是否美观大方

     

    2 图案,log是否正确显示

     

    注:在该文章的基础上总结了一下,对此表示感谢,http://www.51testing.com/?161964/action_viewspace_itemid_99925.html

  • linux下的安装包介绍

    聂霞 发布于 2008-11-20 09:28:03

    这个对于新手来说,也是比较困惑的问题,谈谈我对这个问题的认识。

    一:rpm包

    rpm包,分两种,binary rpm 跟 source rpm

    binary rpm,就是我们平时用的最多的,已经编译好的,直接安装就可以了。

    以前学linux的时候,老想通过rpm来安装软件,不过你通过rpm安装,是够简单了,但是你没有什么地方可以设置的,这就像当年一个老师说过的,比如装windows,ms的专家装和我装,没有任何的区别,因为没有任何你可以操作的地方。

    用rpm安装其实就是这样,好处当然是简单,一切安装默认。省时间,快,

    二:源码

    如果我们下载的是源码,那么这里就关系到一个编译。

    linux下都是用c开发的程序,那么用c开发的程序,如何才能让cpu认识呢,那么就需要编译器,gcc的编译器,把代码转换成机器认识的代码。cpu只认识0和1.

    当源代码编译成2进制的代码,也就是binary code ,那么你就可以安装到你的机器上了。

    如果我们下载的是binary code ,2进制的代码,这个以mysql为例,不少的文档,mysql是下载binary code ,那么你解压后,其实就可以直接用了。

    source code 是程序员写的码,
    binary code 是机器跑的码。
    source code 得经过 compile 才能成为 binary code 。

    如何分?用 file 命令看一看罗:

    tar -zxvf some.version.tar.gz
    cd some
    file *

    $ file source.file
    $ file binary.file

    RPM 有分两种:binary rpm 跟 source rpm 。
    前者是编好的 binary ,安装就可用。
    後者是还没编好的 source ,需 rebuild 之後才能安装。

    如何安装.src.rpm软件包
    有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译。这类软件包有两种安装方法

    方法一:
    1. #rpm -i your-package.src.rpm
    2. #cd /usr/src/redhat/SPECS
    3. #rpmbuild -bp your-package.specs //一个和你的软件包同名的specs文件
    4. #cd /usr/src/redhat/BUILD/your-package/ 一个和你的软件包同名的目录
    5. #./configure
    6. #make
    7. #make install

    方法二:
    1. #rpm -i you-package.src.rpm
    2. #cd /usr/src/redhat/SPECS
    3. rpmbuild -bb your-package.specs //一个和你的软件包同名的specs文件。这时,在/usr/src/redhat/RPM/i386/ (根据具体包的不同,也可能是i686,noarch等等) 在这个目录下,有一个新的rpm包,这个是编译好的二进制文件。
    4. #rpm -i new-package.rpm 即可安装完成。
  • 面试笔试系列4

    月上百合 发布于 2009-02-20 14:11:33

    我认为以下问题可以让我们新手的思绪更有条理更清晰
    面试题
    01. 为什么要在一个团队中开展软件测试工作? 

    02. 您是否了解以往所工作的企业的软件测试过程?如果了解,请试述在这个过程中都有哪些工作要做?分别由哪些不同的角色来完成这些工作? 

    03. 您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?(对于软件测试部分,可以简述) 

    04. 您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作? 

    05. 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……) 

    06. 请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。 

    07. 测试计划工作的目的是什么?测试计划工作的内容都包括什么?其中哪些是最重要的? 

    08. 您认为做好测试计划工作的关键是什么? 

    09. 您所熟悉的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。 

    10. 您认为做好测试用例设计工作的关键是什么? 

    11. 请以您以往的实际工作为例,详细的描述一次测试用例设计的完整的过程。 

    12. 您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容。 

    13. 您以往是否曾经从事过性能测试工作?如果有,请尽可能的详细描述您以往的性能测试工作的完整过程。 

    14. 您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。 

    15. 您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么? 

    16. 在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录? 

    17. 您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。 

    18. 您以往是否曾经从事过单元测试和集成测试?如果有,请谈一下这些工作的实际开展情况。 

    19. 您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的? 

    20. 您以往工作过的企业中,是否开展了软件配置管理工作?您能否描述一下这项工作的开展情况和您对这项工作的认识? 

    21. 您是否熟悉一些主流的软件工程方法论和思想,如RUP、CMM、CMMI、XP、PSP、TSP。如果熟悉,您是否可以谈一下对这些方法论和思想的认识? 

    22. 您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么? 

    23. 在您以往的测试工作中,最让您感到不满意或者不堪回首的事情是什么?您是如何来对待这些事情的? 

    24. 在即将完成这次笔试前,您是否愿意谈一些自己在以往的学习和工作中获得的工作经验和心得体会?(可以包括软件测试、过程改进、软件开发或者与此无关的其他方面) 

    笔试题
    一、判断题(每题1分,12 分,正确的√,错误的╳) 
    1.软件测试的目的是尽可能多的找出软件的缺陷。() 
    2.Beta 测试是验收测试的一种。() 
    3.验收测试是由最终用户来实施的。() 
    4.项目立项前测试人员不需要提交任何工件。() 
    5.单元测试能发现约80%的软件缺陷。() 
    6.代码评审是检查源代码是否达到模块设计的要求。() 
    7.自底向上集成需要测试员编写驱动程序。() 
    8.负载测试是验证要检验的系统的能力最高能达到什么程度。() 
    9.测试人员要坚持原则,缺陷未修复完坚决不予通过。() 
    10.代码评审员一般由测试员担任。() 
    11.我们可以人为的使得软件不存在配置问题。() 
    12.集成测试计划在需求分析阶段末提交。() 
    二、不定项选择题(每题2 分,10分) 
    1.软件验收测试的合格通过准则是:() 
    A. 软件需求分析说明书中定义的所有功能已全部实现,性能指标全部达到要求。 
    B. 所有测试项没有残余一级、二级和三级错误。 
    C. 立项审批表、需求分析文档、设计文档和编码实现一致。 
    D. 验收测试工件齐全。 
    2.软件测试计划评审会需要哪些人员参加?() 
    A.项目经理 
    B.SQA 负责人 
    C.配置负责人 
    D.测试组 
    3.下列关于alpha 测试的描述中正确的是:() 
    A.alpha 测试需要用户代表参加 
    B.alpha 测试不需要用户代表参加 
    C.alpha 测试是系统测试的一种 
    D.alpha 测试是验收测试的一种 
    4.测试设计员的职责有:() 
    A.制定测试计划 
    B.设计测试用例 
    C.设计测试过程、脚本 
    D.评估测试活动 
    5.软件实施活动的进入准则是:() 
    A.需求工件已经被基线化 
    B.详细设计工件已经被基线化 
    C.构架工件已经被基线化 
    D.项目阶段成果已经被基线化 
    三、填空题(每空1分,24 分) 
    1.软件验收测试包括、、三种类型。 
    2.系统测试的策略有功能测试、、、、易用性测 
    试、、、、、、、、 
    、、等15 种方法。 
    3.设计系统测试计划需要参考的项目文档有、和迭代计划。 
    4.对面向过程的系统采用的集成策略有、两种。 
    5.通过画因果图来写测试用例的步骤为、、、及把因果图转 
    换为状态图共五个步骤。 

    四、简答题(共37分) 
    1. 阶段评审与同行评审的区别。(4 分) 
    2 . 什么是软件测试。(3 分) 
    3 . 简述集成测试的过程。(5 分) 
    4 . 怎样做好文档测试?(4 分) 
    5. 白盒测试有那几种方法?(6 分) 
    6. 系统测试计划是否需要同行评审,为什么?(4 分) 
    7. Alpha 测试与beta 测试的区别。(4 分) 
    8 . 比较负载测试、容量测试和强度测试的区别。(6 分) 
    9 . 测试结束的标准是什么?(3 分) 


    一、填空题:(每一空格2分,共60分) 
    1、 软件实施活动的输出工件有 、 、 、 。 
    2、 代码评审主要做 、 、 、工作。 
    3、 软件实施活动中集成员的职责是、 、 、 。 
    4、 验证与确认软件实施活动主要有 、代码评审、 、 、 、SQA 
    验证。 
    5、 表明测试已经结束、 、 、。 
    6、 软件测试的目的是 、 、 、。 
    7、 软件测试主要分为 、 、 、 四类测试。 
    8、 软件测试活动有制定测试计划、 、 、 、 、 、测 
    试评估、测试结束八个步骤。 
    9、 软件测试活动的输出工件有_ 、 、 、 、 。 
    10、软件测试角色有 、 、 、 。 
    二、不定项选择题:(每题3 分,共15分) 
    1、 软件实施活动的进入准则是() 
    A、 需求工件已经被基线化 
    B、 详细设计工件已经被基线化 
    C、 构架工件已经被基线化 
    D、 项目阶段成果已经被基线化 
    2、 下面角色不属于集成计划评审的是() 
    A、 配置经理 
    B、 项目经理 
    C、 测试员 
    D、 编码员 
    3、软件测试设计活动主要有() 
    A、 工作量分析 
    B、 确定并说明测试用例 
    C、 确立并结构化测试过程 
    D、 复审并评估测试覆盖 
    4、不属于集成测试步骤的是() 
    A、 制定集成计划 
    B、 执行集成测试 
    C、 记录集成测试结果 
    D、 回归测试 
    5、属于软件测试活动的输入工件的是() 
    A、 软件工作版本 
    B、 可测试性报告 
    C、 软件需求工件 
    D、 软件项目计划 
    三、问答题:(共25 分) 
    1、 项目的集中管理在软件公司的哪一个层面?(2 分) 
    2、 请描述软件测试活动的生命周期。(8 分) 
    3、 什么是测试评估,测试评估的范围是什么?(5 分) 
    4、 阐述工作版本的定义。(2 分) 
    5 、 请画出软件测试活动的流程图。(8 分) 

    一、 判断题(每题2分,正确的“√”,错误的“╳”) 
    1 、 好的测试员不懈追求完美。( ) 
    2、 测试程序仅仅按预期方式运行就行了。( ) 
    3、 不存在质量很高但可靠性很差的产品。( ) 
    4、 软件测试员可以对产品说明书进行白盒测试。( ) 
    5、 静态白盒测试可以找出遗漏之处和问题。( ) 
    6、 总是首先设计白盒测试用例。( ) 
    7、 可以发布具有配置缺陷的软件产品。( ) 
    8、 所有软件必须进行某种程度的兼容性测试。( ) 
    9、 所有软件都有一个用户界面,因此必须测试易用性。( ) 
    10、 测试组负责软件质量。( ) 
    二、 简答题 
    1、 软件的缺陷等级应如何划分?(3 分) 
    2、 如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么?(5 分) 
    3、 你认为一个优秀的测试工程师应该具备哪些素质?(3 分) 
    4、 产品测试到什么时候就算是足够了?(2 分) 
    5、 测试计划的目的是什么?(2 分) 
    6、 为什么要进行软件测试?软件测试的目的是什么? (5 分) 
    7、 软件测试应该划分几个阶段?简述各个阶段应重点测试的点?各个阶段的含义?(5 分) 
    8、 如何做一名合格的测试人员?(3 分) 
    9、 针对缺陷采取怎样的管理措施?(5 分) 
    三、 专业词语解释(每题2 分) 
    α测试: 
    β测试: 
    驱动模块: 
    桩模块: 
    白盒测试: 
    静态测试: 
    四、 选择题(每题2分) 
    1.下面哪些属于动态分析( ) 
    A. 代码覆盖率 
    B. 模块功能检查 
    C. 系统压力测试 
    D. 程序数据流分析 
    2.下面哪些属于静态分析( ) 
    A、 代码规则检查 
    B、 序结构分析 
    C、 序复杂度分析 
    D、 内存泄漏 
    五、 设计题(10分) 
    在三角形计算中,要求三角型的三个边长:A、B 和C。当三边不可能构成三角形时提示错误,可构成三角 
    形时计算三角形周长。若是等腰三角形打印“等腰三角形”,若是等边三角形,则提示“等边三角形”。画出程 
    序流程图、控制流程图、找出基本测试路径 ,对此设计一个测试用例。 
    六、 论述题 
    1、 试叙述对一个软件项目测试的全过程。(10 分) 
    2、 简述你对测试工作的认识过程、在以后的工作的一些建议。(6 分) 
    3 、 述静态测试和动态测试的区别?(5 分) 


    1. 什么是软件测试,以及软件测试的意义? 
    2. 什么是软件测试静态分析,软件测试动态分析, 
    3. 下面那些属于静态分析() 
    A、 编码规则检查 
    B、 程序结构分析 
    C、 程序复杂度分析 
    D、 内存泄漏 
    4. 下面那些属于动态分析() 
    A、 代码覆盖率 
    B、 模块功能检查 
    C、 系统压力测试 
    D、 程序数据流分析 
    5. 从测试技术角度,正确的选择是(),给出各自的含义? 
    A、 静态测试 
    B、 黑盒测试 
    C、 动态测试 
    D、 白盒测试 
    6. 从测试阶段角度,测试正确的顺序是(),同时给出所选择的正确策略含义和被测对象是什么? 
    A、 单元测试 
    B、 集成测试 
    C、 系统测试 
    D、 确认测试 
    7. 针对缺陷采取怎样的管理措施? 
    8. 在测试生命周期,测试过程分为几个阶段,以及各个阶段的含义? 
    9. 简要写出自己在理解的基础质上所认为引入测试管理的意义 
    10. 在三角形计算中,要求三角型的三个边长:A、B 和C。当三边不可能构成三角形时提示错误, 
    可构成三角形时计算三角形周长。若是等腰三角形打印“等腰三角形”,若是等边三角形,则提示“等 
    边三角形”。画出程序流程图、控制流程图、计算圈复杂度V(g),找出基本测试路径[/font][/size]

  • 找工作感觉挺顺利的啊~~~~(主要是碰到了好机遇)

    c2000cy 发布于 2008-02-28 17:53:42Top 1 Digest 1

    马上就要结束在51testing的学习和生活了,现在开始在找工作呢。

    上周班主任给推荐了家salary公司,周一(2月25日)去面试了,做了1题英译汉和1题汉译英,还有1题智力题。感觉做的挺快的,只是字写得大概比较草吧。后来来了个MM面试官,让我用英文说了下自我介绍,又问了个英文问题,貌似“软件测试人员的要求”,我是没咋听懂,就随便回答几句话,看那MM面试官的表情好像在说“英文不咋的”,没办法啦,也就这水平呢。后来又问了些以前的工作经验,问了些黑盒测试如何做之类的问题。好像没问多久,她就让我在屋子里等她,我想可能没啥希望吧,(说实话,我本来对这家公司也没啥想法,不过在张江那里的空气就是好啊,建议51的老师以后活动可以安排到张江去,多健康啊!)。过后那个MM又领我到另一个貌似领导的办公室去(后来证实那位确实是一个啥经理的人物),那位经理看着我简历,又问了些为啥来上海之类的话,技术上问了些数据库方面的问题。说着说着他突然说和我是老乡(我是福建的),^_^我也听出他的口音像我们那边的人,只是没好意思问呢。他说我开的工资超过他们的范围,又建议让我去面试他们DBA,我听的挺心虚的,其实我数据库并没那么好,只是用了几年ORACLE。所以我开始没答应,我说我还要回去上课(因为那天正好有上课),那位经理又说那看你安排时间,再来和我们公司的DBA聊聊做数据库测试方面的问题。他说的挺诚恳的,我也不好意思拒绝,就答应他周四下午再来呢。

    今天就是周四,好累啊!!之前接到亚信科技让我早上去面试。我8点出门,坐2号线转1号线到漕宝路下,又打了车到他们公司(花了我16大洋大车呢,顶我2顿饭的钱钱呢!)。亚信科技主要是做中国移动的BOSS和BASS业务,我主要是面试他们BASS的测试工程师(我也是来了才知道,起先他们是把我扔到BOSS那边做测试,后来他们BASS项目经理看见我的简历觉得我应该是做BASS的测试)。先说说BOSS和BASS吧,BOSS是指移动的计费,营业和帐务系统;BOSS是指移动的经营分析系统.由于之前我再联通做过BASS系统,所以他们项目经理一下就看中我了,我记得他说了两次“你的项目经验很打动我”(在这里要很感谢宋老师教我如何把自己简历的修改得让人满意!)。面试流程一样也是先笔试,一共3张卷子,SQL和LINUX两个大题,还有一个大题是智力题。笔试还行,大部分都会做,就是LIUNX有些系统方面的不会做,不理它呢。大概笔试就做了30-40分钟吧,然后他们项目经理(我发现我眼力很差,居然没看出他是项目经理,还在面试当中问他是不是测试LEADER,好没面子啊)就开始和我聊天,因为大家都做过经分系统,所以有很多公共语言,聊得蛮投机的。技术也聊的蛮多的,主要是围绕数据库方面,我蛮喜欢的,其他人事,组织结构,薪酬方面也都聊得很多,我是问得巨细^_^,那个项目经理还不错,回答得也巨细。可以说是相谈甚欢啊,后来我又问他如果我来他们公司还需要准备些啥嘛,他说了些技术方面的一点补充,然后说我原来是联通(也就是所谓的局方),他说我要适应下从局方到开发方的转变,其实我很想引用陈ji老师的名言“出来混的,总有一天要还的”可是没敢说出来。(因为我之前是局方,经常“欺压”开发方;现在我自己却成了开发方,得接受局方的“欺压”。)^_^,终于说完了,他们开的薪资还行,说是很快就给我答复。一会说下周一定给我答复,一会说可能明天就答复我,^_^ 他们比我还着急呢。果然下午就打电话给我再次确认薪资,然后又说要发邮件和我确认!我算了下时间,早上基本面试了2个小时。

    下午又来到SALARY,之前答应人家了,可是觉得好累没啥精神。下午就不提了,题目也没怎么做好,面试情况也不行,而且没怎么谈测试的问题。没一会就走呢!

    好累啊,写到这吧,说不定还要去别家再面面呢!

     

  • 测试职业生涯阶段发展方向(收藏)

    huiguiziran111 发布于 2009-02-17 09:54:32

      由于国内软件测试行 业目前的发展迅速、需求旺盛,在国内的软件测试职位晋升一般要比国外快,但因行业本身太年轻,大家对软件测试中软件测试职业的发展了解不够,从而导致许多 有志在此发展的年轻人举步不前。所以下面介绍一下海外公司成熟的软件测试行业职位分布情况,我国一些在软件测试行业中处于前端的公司与之也相仿,这可以作 为软件测试职业规划的参考,给新人一个导向。51Testing软件测试网d.P6r#?1nd Pb

      第一阶段:(测试员)初级测试工程师

    8zV(~%^"G%X3H23803151Testing软件测试网+Z{:CcLi${4y s

      自身条件:初入行具备计算机专业学位或一些手工测试经验的个人。

    7IF)srD238031

    0W(X,X"} _bA238031  具体工作:执行测试用例,记录bug,并回归测试,通过qtp等测试工具录制回归测试脚本,并执行回归测试脚本。

    {^u.Q}[jE23803151Testing软件测试网P1R0p?Yo!Gn"A

      学习方向:开发测试脚本并且开始熟悉测试生存周期和测试技术

    ;t@ k zy\p?3P&A238031

    fvPYNy)At238031  第二阶段:(测试工程师)程序分析员

    *e"GCk*cz-s0VJe238031

    cFDjZ238031  自身条件:有1~2年工作经验的测试工程师或程序员。具有初步的自动化测试能力,完善自动化测试脚本。

    WM l'F,k238031

    v_;u{F$B;n5N238031  具体工作:设计和编写测试用例,编写自动测试脚本程序且担任测试编程初期的领导工作。

    d%l"To ]V!h238031

    `e7Fw9g| ^T1n238031  学习方向:拓展编程语言、操作系统、网络与数据库方面的技能 。51Testing软件测试网"d/f${0I ^I)o9k

    51Testing软件测试网]~ @ |\ F f%R

      第三阶段:(高级测试工程师)程序分析员

    |!K lI+D E*j23803151Testing软件测试网5g xMu3M

      自身条件:有3~4年经验的测试工程师或程序员。具有一定的行业业务知识,储备系统分析员的能力。51Testing软件测试网UhS7K!e_wKK

    |,ep.e_TO g238031  具体工作:帮助开发或维护测试或编程标准与过程,分析软件需求,获得测试需求。确定测试需求相应的测试方法,获得测试策略方案。参与同行的评审(软件需求,软件测试计划等),并为其它初级的测试工程师或程序员充当顾问。51Testing软件测试网q0x[z3B ew8{9L

    :f8SC7z Z238031  学习方向:继续拓展编程语言、操作系统、网络与数据库方面的技能。

    :D1m~mF2V#d23803151Testing软件测试网#P!IDi3\sBtz2^

      第四阶段:测试组负责人51Testing软件测试网 CD+n1SO7t

    ` w NW|5y]uK ~238031  自身条件:有4~6年经验的测试工程师或程序员。具有丰富的行业业务知识,具有系统分析员的能力,专长性能测试

    *g7W#Lr&D Cm%z238031

    ^;aMx;nZ:vS:G[238031  具体工作:负责管理1~3名测试工程师或程序员。集中于技能方面,担负一些进度安排和工作规模/成本估算职责。分析性能瓶颈的原因,为开发团队提供bug解决策略。51Testing软件测试网\z~6` HC+D&|,Q{p

    51Testing软件测试网m;`8?9K ^&X:D7| ^

      学习方向:性能测试,测试技能51Testing软件测试网 dw6JcgQ5~D,a5t

    51Testing软件测试网H,Lg3[v!~n

      第五阶段:(资深安全或性能测试工程师)测试/编程高级负责人51Testing软件测试网ea#Tn2BH.T

    /VG_"n6k;Z P.u238031  自身条件:有6~10年经验的测试工程师或程序员。51Testing软件测试网:i*W'~-[+R#r

    FO'h3JEvO&r`238031   具体工作:负责管理8~10名技术人员。性能测试整体方案设计,软件系统性能问题定位和性能优化,内存优化及分析数据溢出等,分析系统的安全漏洞等。 负责进度安排、工作规模/成本估算、按进度表和预算目标交付产品。负责开发项目的技术方法。为一些用户提供支持与演示。51Testing软件测试网oB1RW"w pp+J&vt

    51Testing软件测试网$\6?`C.te Y

      学习方向:开发一些特定领域的技术专长51Testing软件测试网 V%V2s1I~GH

    1~S DAJ238031  第六阶段:测试/质量保证/开发(项目)、经理

    2Mp8n7N[e)A){23803151Testing软件测试网_*iy vw#Yr!a a

      自身条件:有10多年的工作经验。

    $c?]2vQ/Z&`Gw$b`238031

    {uj S-UklX238031  具体工作:管理8名或更多的人员参加的1个或多个项目。负责这一领域(测试/质量保证/开发)内的整个开发生存周期业务。为一些用户提供交互和大量演示。负责项目成本、进度安排、计划和人员分工

    r6L VkV4?238031

    ~[%q J?5c!Z238031  第七阶段:(公司级质量总监)计划经理51Testing软件测试网cT3H6P/a(x7L1Bq

    51Testing软件测试网#Wp|_0yp*XE

      自身条件:有15年以上开发与支持(测试/质量保证)活动方面的经验。51Testing软件测试网 MXr$d1} h

    ze[5v2e238031  具体工作:管理从事若干项目的人员以及整个开发生存周期。负责把握项目方向与盈亏责任

  • QTP功能测试流程概述

    阿妮妲 发布于 2008-05-30 15:18:06


    本文主要内容是介绍QTP进行功能测试的测试流程,不包含操作流程,有兴趣的朋友可以了

    解一下。

    功能测试流程: [制定测试计划]——>[创建测试脚本]——>[增强测试脚本功能]——

    >[运行测试]——>[分析测试结果] 大致五个步骤:

    1、制定测试计划

        自动测试的测试计划是根据被测项目的具体需求,以及所使用的测试工具而制定

    的,完全用于指导测试全工程。

        QTP是一个功能测试工具,主要帮助测试人员完成软件的功能测试,,与其他测

    试工具一样,QTP不能完全取代测试人员的手工操作,但是在某个功能点上,使用QTP

    的确能够帮助测试人员做很多工作。在测试计划阶段,首先要做的就是分析被测应用

    的特点,决定应该对哪些功能点进行测试,可以考虑细化到具体页面或者具体控件。

    对于一个普通的应用程序来说,QTP应用在某些界面变化不大的回归测试中是非常有

    效的。

    2、创建测试脚本

        当测试人员浏览站点或在应用程序上操作的时候,QTP的自动录制机制能够将测

    试人员的每一个操作步骤及被操作的对象记录下来,自动生成测试脚本语句。与其他

    自动测试工具录制脚本有所不同的是,QTP除了以VBscrīpt脚本语言的方式生成脚本

    语句以外,还将被操作的对象及相应的动作按照层次和顺序保存在一个基于表格的关

    键字视图中。比如,当测试人员单击一个链接,然后选择一个CheckBox或者提交一个

    表单,这样的操作流程都会被记录在关键字视图中。

    3、增强测试脚本的功能

        录制脚本只是实现创建或者设计脚本的第一步,基本的脚本录制完毕后,测试人

    员可以根据需要增加一些扩展功能,QTP允许测试人员通过在脚本中增加或更改测试

    步骤来修正或自定义测试流程,如增加多种类型的检查点功能,既可以让QTP检查一

    下在程序的某个特定位置或对话框中是否出现了需要的文字,还可以检查一个链接是

    否返回了正确的URL地址等,还可以通过参数化功能,使用多组不同的数据驱动整个

    测试过程。

    4、运行测试

        QTP从脚本的第一行开始执行语句,运行过程中会对设置的检查点进行验证,用

    实际数据代替参数值,并给出相应的输出结构信息。测试过程中测试人员还可以调试

    自己的脚本,直到脚本完全符合要求。

    5、分析测试
        运行结束后系统会自动生成一份详细完整的测试结果报告。

  • 常见带介词的to短语归纳(很实用哦)

    阿妮妲 发布于 2008-09-09 16:48:56

     

    be / get / become used to 习惯于
    be given to
    喜欢;癖好
    be related to  
    有关系
    be addicted to
    沉溺于;对上瘾  
    be opposed to  
    反对
    devote oneself to
    献身于;专心于
    be devoted to
    致力于;忠诚于
    be admitted to
    录取;准进入
    be reduced to
    沦为 
    reduce…to…
    使沦为
    be attached to
    附属于;喜欢;依恋
    be adjusted to  
    适应
    be known to  
    所知
    be married to  
    结婚
    be sentenced to
    被判处
    be connected to  
    连在一起
    be exposed to  
    暴露于;遭受
    be compared to
    被比喻成
    compare… to…
    比作
    be engaged to
    订婚
    be / become / get accustomed to // accustomed to  
    惯于;有习惯
    be engaged to
    订婚
    get down to
    着手做
    lead to
    导致
    object to
    反对;不喜欢;不赞成
    put one’s mind to
    全神贯注于
    give rise to
    引起
    look forward to  
    盼望
    stick to  
    坚持
    pay attention to  
    注意
    attend to
    专心;注意;照料  
    see to  
    负责;注意
    contribute to
    作贡献;有助于
    make contributions to
    作贡献
    apply oneself to
    致力于
    come close to
    几乎;将近
    reply to
    回答
    add to
    增加
    add up to  
    加起来
    in addition to
    之外
    turn to
    转向;求助于
    feel up to
    能胜任于
    look up to
    尊敬
    admit to
    承认
    belong to
    属于
    take to
    喜爱;开始
    cling to
    附着
    fall to
    开始
    respond to
    回答;对作出回应
    accustom oneself to
    使自己习惯于
    amount to
    等于
    prefer… to…
    更喜欢
    set an example to
    树立榜样
    refer to
    谈到;参考;查阅
    agree to sth.
    同意某事(比较:agree to do sth.同意做某事)
    prefer… to…
    更喜欢
    take / make a trip to
    地方去
    join…to…
    连接起来
    turn a blind eye to
    视而不见
    turn a deaf ear to
    充耳不闻
    show honor to
    表示敬意  
    put an end to(bring… to an end)
    结束 
    set fire to
    放火烧……
    drink (a toast) to
    ……干杯
    propose a toast to
    提议……
    happen to…
    发生了……   
    occur to sb.
    想起;想到  
    total up to
    总计达
    be close to
    几乎;将近   
    hold to
    坚持;抓住   
    help oneself to
    随便用……
    hold on to  
    抓住;固守   
    do harm to
    ……有害处  
    do wrong to
    冤枉某人
    date back to
    追溯到
    when it comes to…
    谈到……
    come to
    来到;达到;结果为  (比较:come to do sth逐渐做某事)
    give an eye to
    着眼于  

    have an eye to doing
    打算
    the key to ……
    的答案
    describe to  
    ……描述
    treat sb. to sth.
    请某人吃……
    trust sth. to sb.
    把某物委托给某人
    pay a visit to  
    参观……
    access to
    进入;取得的方法
    be a stranger to  
    不习惯;对……陌生  
    on one’s way to
    在去某处的路上;在达成某事的过程中
    be kind to
    ……和善
    be important to
    ……重要
    be senior to   
    年龄长于……
    be equal to  
    ……相等
    be particular to ……
    所特有的(比较:be particular about ……过于讲究;挑剔)      
    be subject to
    服从;隶属;易遭\\
    be familiar to
      ……熟悉
    be similar to
    ……相似
    be open to
    ……开放
    be loyal to  
    ……忠诚
    be helpful to
    ……有益处
    be useful to
    ……有用
    be good to sb
    对某人好(比较:be good for ……有益处)
    be bad to
    ……不好
    be bad for
    (比较:对……有害处)
    be new to
    ……不习惯;对……陌生   
    as to
    关于;至于
    next to
    (否定词前)几乎;
    be due to do sth.
    预定要做某事
    next to ……
    的旁边
    due to
    由于;归因于……
    thanks to
    多亏了;由于
    owing to
    由于;因……的缘故
    in / with regard to
    关于
    in /with relation to
    关于;就……而论   
    subject to
    ……条件下;依照
    be given to
    沉溺于   
    be related to
    相关   
    get down to
    着手做
    lead to   
    着手做
    object to  / be opposed to   
    反对
    put one’s mind to
    全神贯注于   
    be equal to
    胜任   
    devote oneself to
    献身于   
    give rise to
    引起   
    look forward to
    盼望  
    pay attention to  
    注意  
    lead to
    通向     see to 负责   
    access to
    接近(某地的)方法   
    be addicted to
    沉溺于…  上瘾
    according to
    根据     
    contribute to   
    作贡献

  • 31个用来测试网站各项性能的免费工具

    lqp 发布于 2007-11-19 21:56:52

    31个用来测试网站各项性能的免费工具          来源: 网络转载

    你是否肯定你的网站完全兼容各大浏览器?是否知道多少秒可以打开你的网站? 是否可以自信地说你的网站根本就没有打不开的时候? 是否……
        虽然它看似不重要,但这些在一定程度上也对你的网站的访问量产生了影响 ( 其它一部分影响浏览量的原因及解决办法 )。这里列出了一份 31 个我最喜爱的免费在线测试工具,你可以通过这些工具来测试你的网站,并根据结果对你的网站进行修改。

        网站代码验证 没人可以细致到保证自己的网站代码都是正确的,你可以通过以下测试来验证网站代码是否正确。

        1 .WDG HTML Validator一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。( 强烈推荐 )

        2 .W3C Markup Validation Service对 HTML 和 XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

        3 .W3C CSS Validation Service用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”。

        4 .RUWF XML Syntax Checker用于查找 XML 文件的错误。

        5 .W3C Feed Validation Service用于查找 Atom 和 RSS feed 中的错误语法。( 这个我经常用到 )

        6 .W3C Link Checker用于搜寻查明你网站内的所有链接里是否有断链。( 强烈推荐 )

        7 .Juicy Studio Link Analyser测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。

       网站的使用性

        我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

        8 .Watchfire WebXACT所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。( 强烈推荐 )

        9 .ATRC Web Accessibility Checker测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

        10 .WAVE 3.0 Web Accessibility Tool高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。( 强烈推荐 )

        11 .TAW Web Accessibility Test测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

        12 .HiSoftware CynthiaSays portal采用了非常严格的规则来测试网页( 根据 section 508 和 WCAG 1.0 规则 ),生成的报告也极为详细( 详细到很难看懂 )。

        13 .HERA Accessibility testing with Style使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

        14 .Juicy Studio CSS Analyser进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

        15 .Juiciy Studio Readability Test分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不( 根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用 )

       网站的速度

        打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

        16 .Web Page Analyzer from Website Optimization一个很好的工具,它在分析完一个网页后,会为减少加载时间提出优化建议,着重优化物体的数目,图片和网站的总体大小。( 强烈推荐 )

        17 .WebSitePulse Test Tools有一系列的工具来确定网站的加载速度和主机信息。

        18 .Internet Supervision Url Check从世界各地不同的服务器来测试你的网站的加载时间,用于确定是不是各地的来访者都能顺利快速的打开你得网站。

       浏览器模拟工具

        这是一个普遍的问题,因为现在有着很多的操作系统和浏览器,你得网站必须得兼容它们,但这绝不是一件容易的事。通过下列工具,你可以了解你得网站在各种浏览器上的显示效果。

        19 .Browsershots能给出你的网站在不同浏览器下显示效果的截图,包括:Firefox 和 Internet Explorer ( Windows )、Firefox 和 Safari ( Mac OS X )、Iceweasal 和 Konqueror ( Linux ),但是结果要在 1 - 3 小时后才能出来。

        20 .IE NetRenderer实时生成你的网站在 Internet Explorer 5.5 、6.0 和 7.0 下的截图。

        21 .MobiReady Report分析使用手机访问网页的兼容性问题,会生成一份详细的报告,并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。
    搜索引擎优化 (SEO)
    一个网站,如果对搜索引擎有着比较好的友好度,一定会比较有竞争力。

        22 .UrlTrends会显示网站的访客是如何通过搜索引擎来到你的网站,还有各个流量是多少。这些数据是包括 Google, Yahoo,MSN, Alexa, AlltheWeb, Altavista和其他一些网站。( 强烈推荐 )

        23 .iWEBTOOL Backlink Checker一个很好的工具,它能找出有什么站点链接到你的站点,那些站点是什么类型的站点。

        24 .iWEBTOOL Multi-Rank Checker显示你网站的 Alexa 和 Google PageRank 数值。

        25 .Microsoft adCenter Labs: Advertising and Keyword Research Tools一个极好的工具,用于分析和预测你网站的来访者和市场。( 强烈推荐 )

        26 .Domain Tools Whois lookup一个 WHOIS 网络工具。

        27 .SEO-Browser可以让你看到在搜索引擎眼里一样的网站( 去掉所有的”美丽”配件 )。

        28 .SEO Workers SEO Analysis Tool非常有用的工具,分析了网站上的各种分类特征,包括 meta 标签、关键字密度及加载时间。( 强烈推荐 )

        29 .Seekport Seekbot可以分析网站的数据和内容,以得出搜索引擎会如何有效的解释分析的网站。

        30 .SEO Chat SEO Tools用以分析网站 Google adsense 盈利潜力,关键字密度,Meta tag 等等……

        31 .Marketleap Search Engine Marketing Tools用来分析网页,让你知道你的网站检索、设定的关键字好不好。

  • 测试总结:安装卸载测试

    lqp 发布于 2009-02-08 15:32:45

    对C/S结构的应用软件测试也进行了一年多了,是时候总结一下这些测试了。

    第一:安装测试。

    所有的应用软件都需要进行安装测试。而且也是一个很重要的测试。主要测试点回顾总结了一下。

    1:安装过程中每个选择项的测试。即勾选与不勾选,安装后是否一致。

    2:安装过程中,快捷键使用是否正常。一般都会提供键盘的快捷键的。

    3:安装过程中,取消安装是否正常。

    4:是否能安装多份,一般软件是可以的。安装多份情况下,每一个安装目录下的是否能正常使用。安装在不同的路径下或安装同一路径下。

    5:覆盖到同一目录下的安装是否正常。

    6:安装后的快捷方式使用是否正常。

    7:程序中是否存在。是否能正常使用。

    8:安装过程中,是否出现文字错误。界面是否能最大化,最小化。

    安装测试目前先写着这么多,回去看看用例再补充。

    第二:卸载测试

    1:从安装目录下的uninstall.exe卸载。

    2:从控制面板进行卸载。

    3:从程序中提供的卸载功能进行卸载。

    4:安装多份时,卸载的应该是最后一份,其它之前安装的应该仍然能正常使用。

    5:卸载中取消后,是否仍能正常使用。

    6:当前正在使用该软件,卸载应该会有提示。一般软件都是这样的处理。

    7:卸载后安装目录是否仍然存在。有的不会存在,有的会存在,这要看软件的处理方式。

    8:卸载过程中,界面与及文字的测试。

  • Linux菜鸟入门级命令大全

    跳舞的猫咪 发布于 2009-02-11 21:48:48

    1. man 对你熟悉或不熟悉的命令提供帮助解释

    eg:man ls 就可以查看ls相关的用法

    注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。

    2. ls 查看目录或者文件的属*,列举出任一目录下面的文件

    eg: ls /usr/man

    ls -l

    a.d表示目录(directory),如果是一个"-"表示是文件,如果是l则表示是一个连接文件(link)

    b.表示文件或者目录许可权限.分别用可读(r),可写(w),可运行(x)。

    3. cp 拷贝文件

    eg: cp filename1 filename2 //把filename1拷贝成filename2

    cp 1.c netseek/2.c //将1.c拷到netseek目录下命名为2.c

    4. rm 删除文件和目录

    eg: rm 1.c //将1.c这个文件删除

    5. mv 移走目录或者改文件名

    eg: mv filename1 filename2 //将filename1 改名为filename2

    mv qib.tgz ../qib.tgz //移到上一级目录

    6. cd 改变当前目录 pwd 查看当前所在目录完整路径

    eg: pwd //查看当前所在目录路径

    cd netseek //进入netseek这个目录

    cd //退出当前目录

    7. cat,more命令

    将某个文件的内容显示出来。两个命令所不同的是:cat把文件内容一直打印出来,而 more则分屏显示

    eg; cat>1.c //就可以把代码粘帖到1.c文件里,按ctrl+d 保存代码。

    cat 1.c 或more 1.c //都可以查看里面的内容。

    gcc -o 1 1.c //将1.c编译成.exe文件,我们可以用此命编译出代码。

    8.chmod 命令 权限修改 用法:chmod 一位8进制数 filename。

    eg: chmod u+x filenmame //只想给自己运行,别人只能读

    //u表示文件主人, g 表示文件文件所在组。 o 表示其他人 ;r 表可读,w 表可写,x 表可以运行

    chmod g+x filename //同组的人来执行

    9. clear,date命令

    clear:清屏,相当与DOS下的cls;date:显示当前时间。

    10. mount 加载一个硬件设备

    用法:mount [参数] 要加载的设备 载入点

    eg: mount /dev/cdrom

    cd /mnt/cdrom //进入光盘目录

    11. su 在不退出登陆的情况下,切换到另外一个人的身份

    用法: su -l 用户名(如果用户名缺省,则切换到root状态)

    eg:su -l netseek (切换到netseek这个用户,将提示输入密码)

    12.whoami,whereis,which,id

    //whoami:确认自己身份

    //whereis:查询命令所在目录以及帮助文档所在目录

    //which:查询该命令所在目录(类似whereis)

    //id:打印出自己的UID以及GID。(UID:用户身份唯一标识。GID:用户组身份唯一标识。每一个用户只能有一个唯一的UID和 GID)

    eg: whoami //显示你自已登陆的用户名

    whereis bin 显示bin所在的目录,将显示为:/usr/local/bin

    which bin

    13. grep,find

    grep:文本内容搜索;find:文件或者目录名以及权限属主等匹配搜索

    eg: grep success *    /*查找当前目录下面所有文件里面含有success字符的文件

    14. kill 可以杀死某个正在进行或者已经是dest状态的进程

    eg; ps ax

    15. passwd 可以设置口令

    16. history 用户用过的命令

    eg: history //可以显示用户过去使用的命令

    17. !! 执行最近一次的命令

    18. mkdir命令

    eg: mkdir netseek //创建netseek这个目录

    19. tar 解压命令

    eg: tar -zxvf nmap-3.45.tgz //将这个解压到nmap-3.45这个目录里

    20. finger 可以让使用者查询一些其他使用者的资料

    eg: finger //查看所用用户的使用资料

    finger root //查看root的资料
  • B/S结构测试方式

    cjmy0010 发布于 2009-02-11 17:44:33

    按照每一个软件的测试基本编写方式来写这编日志,本章只说方法不举例

    一 功能测试

       1 链接

       (1)链接到指定地址,检测其正确性 (2)链接的页面显示,检测其是否存在,显示状态 (3)查看是否存在独立页面

       2 表单

       (1)提交信息的正确性 (2)错误提示的正确性

       3 cookies

       (1)检测其加载的正确性 (2)刷新后的完整性

       4 语言

        (1)设计语言检测 (2)页面显示语言支持  这里要注意IE查看默认编码规则设置对其有影响

       5 数据库

        (1)数据输入测试 (2)数据输出测试

    二 性能测试

       1 连接速度

         这里是一个限制的固定值,系统响应时间不得超过5秒

       2 负载测试

         这里要求算出一个并发数,异常状态

       3 压力测试

        增加数据提交量,访问量(递增方式),计算出其承受值是多少

    三 UI测试

      导航 图形 内容 界面  (这一块内容简单,查看其是否正确无误便可)

    四 兼容性测试

      1 系统平台  2 浏览器

    五 安全性测试

      1 注册 2 连接超时 3 日志 4 脚本安全性

      这一部分内容,是最关键的部分,有的B/S结构的页面还有绝密源码保护功能,所以说测试除了检查其功能性之外还要检查其安全性,不然自己写的东西被别人很容易就剽窃去了,或者被黑掉了

  • 黑盒测试

    月上百合 发布于 2008-10-23 15:06:02

     黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试地,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。  黑盒测试是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。很明显,如果外部特性本身有问题或规格说明的规定有误,用墨盒测试方法是发现不了的。
      黑盒测试法注重于测试软件的功能需求,主要试图发现下列几类错误。
      功能不正确或遗漏; 
      界面错误; 
      数据库访问错误; 
      性能错误; 
      初始化和终止错误等。 
      从理论上讲,黑盒测试只有采用穷举输入测试,把所有可能的输入都作为测试情况考虑,才能查出程序中所有的错误。实际上测试情况有无穷多个,人们不仅要测试所有合法的输入,而且还要对那些不合法但可能的输入进行测试。这样看来,完全测试是不可能的,所以我们要进行有针对性的测试,通过制定测试案例指导测试的实施,保证软件测试有组织、按步骤,以及有计划地进行。黑盒测试行为必须能够加以量化,才能真正保证软件质量,而测试用例就是将测试行为具体量化的方法之一。具体的黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法等。
      等价类划分的办法是把程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。该方法是一种重要的,常用的黑盒测试用例设计方法。
      1) 划分等价类: 等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.
      有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合.利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能.
      无效等价类:与有效等价类的定义恰巧相反.
      设计测试用例时,要同时考虑这两种等价类.因为,软件不仅要能接收合理的数据,也要能经受意外的考验.这样的测试才能确保软件具有更高的可靠性. 
      2)划分等价类的方法:下面给出六条确定等价类的原则.
      ①在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类.
      ②在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类.
      ③在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类.
      ④在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.
      ⑤在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则).
      ⑥在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类.
      3)设计测试用例:在确立了等价类后,可建立等价类表,列出所有划分出的等价类:
      输入条件 有效等价类 无效等价类
      ... ... ...
      ... ... ...
      然后从划分出的等价类中按以下三个原则设计测试用例:
      ①为每一个等价类规定一个唯一的编号.
      ②设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步.直到所有的有效等价类都被覆盖为止.
      ③设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止.
      边界值分析是通过选择等价类边界的测试用例。边界值分析法不仅重视输入条件边界,而且也必须考虑输出域边界。它是对等价类划分方法的补充.
      (1)边界值分析方法的考虑:
      长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.
      使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.
      (2)基于边界值分析方法选择测试用例的原则:
      1)如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据.
      2)如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据.
      3)根据规格说明的每个输出条件,使用前面的原则1).
      4)根据规格说明的每个输出条件,应用前面的原则2).
      5)如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例.
      6)如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例.
      7)分析规格说明,找出其它可能的边界条件.
      错误推测法是基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.
      错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.
      因果图法:
      前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 
      因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况. 
      利用因果图生成测试用例的基本步骤: 
      (1) 分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符. 
      (2) 分析软件规格说明描述中的语义.找出原因与结果之间, 原因与原因之间对应的关系. 根据这些关系,画出因果图.
      (3) 由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不不可能出现. 为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件.
      (4) 把因果图转换为判定表.
      (5) 把判定表的每一列拿出来作为依据,设计测试用例.
      从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加.
      前面因果图方法中已经用到了判定表.判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确.
      判定表通常由四个部分组成.
      条件桩(Condition Stub):列出了问题得所有条件.通常认为列出得条件的次序无关紧要.
      动作桩(Action Stub):列出了问题规定可能采取的操作.这些操作的排列顺序没有约束.
      条件项(Condition Entry):列出针对它左列条件的取值.在所有可能情况下的真假值.
      动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作.
      规则:任何一个条件组合的特定取值及其相应要执行的操作.在判定表中贯穿条件项和动作项的一列就是一条规则.显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列.
      判定表的建立步骤:(根据软件规格说明)
      ①确定规则的个数.假如有n个条件.每个条件有两个取值(0,1),故有 种规则. 
      ②列出所有的条件桩和动作桩.
      ③填入条件项.
      ④填入动作项.等到初始判定表.
      ⑤简化.合并相似规则(相同动作).
      B. Beizer 指出了适合使用判定表设计测试用例的条件:
      ①规格说明以判定表形式给出,或很容易转换成判定表.
      ②条件的排列顺序不会也不影响执行哪些操作.
      ③规则的排列顺序不会也不影响执行哪些操作.
      ④每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则.
      ⑤如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要.
      正交试验设计法,就是使用已经造好了的正交表格来安排试验并进行数据分析的一种方法,目的是用最少的测试用例达到最高的测试覆盖率。 
      黑盒测试的优点
      1. 基本上不用人管着,如果程序停止运行了一般就是被测试程序crash了
      2. 设计完测试例之后,下来的工作就是爽了,当然更苦闷的是确定crash原因
      黑盒测试的缺点
      1. 结果取决于测试例的设计,测试例的设计部分来势来源于经验,OUSPG的东西很值得借鉴
      2. 没有状态转换的概念,目前一些成功的例子基本上都是针对PDU来做的,还做不到针对被测试程序的状态转换来作
      3. 就没有状态概念的测试来说,寻找和确定造成程序crash的测试例是个麻烦事情,必须把周围可能的测试例单独确认一遍。而就有状态的测试来说,就更麻烦了,尤其不是一个单独的testcase造成的问题。这些在堆的问题中表现的更为突出。
      黑盒测试(功能测试)工具的选择 
      那么,如何高效地完成功能测试?选择一款合适的功能测试工具并培训一支高素质的工具使用队伍无疑是至关重要的。尽管现阶段存在少数不采用任何功能测试工具,从事功能测试外包项目的软件服务企业。短期来看,这类企业盈利状况尚可,但长久来看,它们极有可能被自动化程度较高的软件服务企业取代。 
      目前,用于功能测试的工具软件有很多,针对不同架构软件的工具也不断推陈出新。这里重点介绍的是其中一个较为典型自动化测试工具,即Mercury公司的WinRunner。 
      WinRunner是一种用于检验应用程序能否如期运行的企业级软件功能测试工具。通过自动捕获、检测和模拟用户交互操作,WinRunner能识别出绝大多数软件功能缺陷,从而确保那些跨越了多个功能点和数据库的应用程序在发布时尽量不出现功能性故障。 
      WinRunner的特点在于: 与传统的手工测试相比,它能快速、批量地完成功能点测试; 能针对相同测试脚本,执行相同的动作,从而消除人工测试所带来的理解上的误差; 此外,它还能重复执行相同动作,测试工作中最枯燥的部分可交由机器完成; 它支持程序风格的测试脚本,一个高素质的测试工程师能借助它完成流程极为复杂的测试,通过使用通配符、宏、条件语句、循环语句等,还能较好地完成测试脚本的重用; 它针对于大多数编程语言和Windows技术,提供了较好的集成、支持环境,这对基于Windows平台的应用程序实施功能测试而言带来了极大的便利。 
      WinRunner的工作流程大致可以分为以下六个步骤: 
      1.识别应用程序的GUI 
      在WinRunner中,我们可以使用GUI Spy来识别各种GUI对象,识别后,WinRunner会将其存储到GUI Map File中。它提供两种GUI Map File模式: Global GUI Map File和GUI Map File per Test。其最大区别是后者对每个测试脚本产生一个GUI文件,它能自动建立、存储、加载,推荐初学者选用这种模式。但是,这种模式不易于描述对象的改变,其效率比较低,因此对于一个有经验的测试人员来说前者不失为一种更好的选择,它只产生一个共享的GUI文件,这使得测试脚本更容易维护,且效率更高。 
      2.建立测试脚本 
      在建立测试脚本时,一般先进行录制,然后在录制形成的脚本中手工加入需要的TSL(与C语言类似的测试脚本语言)。录制脚本有两种模式: Context Sensitive和Analog,选择依据主要在于是否对鼠标轨迹进行模拟,在需要回放时一般选用Analog。在录制过程中这两种模式可以通过F2键相互切换。 
      只要看看现代软件的规模和功能点数就可以明白,功能测试早已跨越了单靠手工敲敲键盘、点点鼠标就可以完成的阶段。而性能测试则是控制系统性能的有效手段,在软件的能力验证、能力规划、性能调优、缺陷修复等方面都发挥着重要作用。 
      3.对测试脚本除错(debug) 
      在WinRunner中有专门一个Debug Toolbar用于测试脚本除错。可以使用step、pause、breakpoint等来控制和跟踪测试脚本和查看各种变量值。 
      4.在新版应用程序执行测试脚本 
      当应用程序有新版本发布时,我们会对应用程序的各种功能包括新增功能进行测试,这时当然不可能再来重新录制和编写所有的测试脚本。我们可以使用已有的脚本,批量运行这些测试脚本测试旧的功能点是否正常工作。可以使用一个call命令来加载各测试脚本。还可在call命令中加各种TSL脚本来增加批量能力。 
      5.分析测试结果 
      分析测试结果在整个测试过程中最重要,通过分析可以发现应用程序的各种功能性缺陷。当运行完某个测试脚本后,会产生一个测试报告,从这个测试报告中我们能发现应用程序的功能性缺陷,能看到实际结果和期望结果之间的差异,以及在测试过程中产生的各类对话框等。 
      6.回报缺陷(defect) 
      在分析完测试报告后,按照测试流程要回报应用程序的各种缺陷,然后将这些缺陷发给指定人,以便进行修改和维护。 
      常用的功能测试方法
      功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。常用的测试方法如下:
      1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。
      2. 相关性检查:删除/增加一项会不会对其他项产生影响,如果产生影响,这些影响是否都正确。
      3. 检查按钮的功能是否正确:如update, cancel, delete, save等功能是否正确。
      4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度,会不会出错.
      5. 字符类型检查: 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字符类型),看系统是否检查字符类型,会否报错.
      6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键.看系统处理是否正确.
      7. 中文字符处理: 在可以输入中文的系统输入中文,看会否出现乱码或出错.
      8. 检查带出信息的完整性: 在查看信息和update信息时,查看所填写的信息是不是全部带出.,带出信息和添加的是否一致
      9. 信息重复: 在一些需要命名,且名字应该唯一的信息输入重复的名字或ID,看系统有没有处理,会否报错,重名包括是否区分大小写,以及在输入内容的前后输入空格,系统是否作出正确处理.
      10. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按”delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除,看是否正确处理.
      11. 检查添加和修改是否一致: 检查添加和修改信息的要求是否一致,例如添加要求必填的项,修改也应该必填;添加规定为整型的项,修改也必须为整型.
      12. 检查修改重名:修改时把不能重名的项改为已存在的内容,看会否处理,报错.同时,也要注意,会不会报和自己重名的错.
      13. 重复提交表单:一条已经成功提交的纪录,back后再提交,看看系统是否做了处理。
      14. 检查多次使用back键的情况: 在有back的地方,back,回到原来页面,再back,重复多次,看会否出错.
      15. search检查: 在有search功能的地方输入系统存在和不存在的内容,看search结果是否正确.如果可以输入多个search条件,可以同时添加合理和不合理的条件,看系统处理是否正确.
      16. 输入信息位置: 注意在光标停留的地方输入信息时,光标和所输入的信息会否跳到别的地方.
      17. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。
      18. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加*
      19. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace等,对一些不允许输入信息的字段,如选人,选日期对快捷方式是否也做了限制。
      20. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错.

  • 什么是测试

    kuailederen 发布于 2009-01-19 15:51:49

    最近晚上一直有轻度失眠,失眠的时候来想一个问题,什么是测试? 也就是到目前我对自己做了三年多的测试工作还不能有个准确的定位,
    很是苦恼啊 。 自己也看了大量的书,对测试的定义也多种多样,无非就是“测试是一个什么什么的流程”,“测试是检验产品是否达到目标的过程”,“测试是保证软件质量的一个环节”,更有甚者说“测试是一门技术”。我不反对以上的说法,但他们说的都不全面,都只是说出了测试某一方面的特点。
             随着在测试领域深入的接触,越来越觉得测试的学问深不可测。最近在看一美国人写的《软件工程事件的研究方法》,越来越觉得软件工程方面的理论知识对测试的重要性。例如,里面提到一点,说在需求分析阶段,最后要生成“开发用例”,然后按照开发用例来实现代码。  我们做测试的 ,只知道测试用例是测试可执行的单位,孰不知开发也需要一个开执行的单位,用来规范开发者的行为。 所以我想,开发用例一定比开发需求更详细,因为他引入了大量的开执行的技术和实现方法,所以对做测试分析起到了非常大的作用,就等于挖坑游戏,都已经告诉你有多少个坑,每个坑在什么位置,就等着你去挖开他,看看里面有没有黄金了。而我们现在做的测试,只告诉你要挖坑,有很多黄金,没有告诉你有多少个坑,当然更没有每个坑的位置,所以我们经常漏掉本该得到的黄金。
         我喜欢读书,读一本好的小说,可以让你深入情节,而读一本好的技术书,更能让你去思考。一个好的测试管理,或者称一个有效的测试管理,让你觉得整个测试过程象生产线一样流畅,自然,而这期间的每一个动作,都有针对性的理论指导,目的明确。再想想我们的测试,没有明确的需求,没有规范的管理,根本就没有什么理论的指导,问问自己,我们是在做测试吗? 我们只不过是给不合格的产品加上测试通过的结论而已。
          我也知道国内测试起步晚,需要时间。但有一点我不理解,如果真的有困难解决不了,需要时间去实现,那无可厚非,实际上是谁关心这个问题呢? 我跟同事聊过这个话题,结论是如果第二天能有1000W万的现金收入,那么老板肯定会在今天就投入成本来提高测试。很现实的问题,不是别的老板不会赚钱,而是谁的目光更长远一点的问题。
          别人的东西我们只能借鉴,因为在测试领域,还没有什么定论,如果你能实践出一套高效的标准,那么你就是这个领域的老大,别人就得跟你学。想想现在,拿别人的流程,拿别人的模板,拿别人的标准,好像也蛮适合自己的,有什么问题不明白,baidu,google一搜,好像也能解决问题,至于适合不适合自己,另当别论。那么,我们的能力在这过程中发挥了多大的作用呢?使用搜索,照搬别人的方法,或是略加改动,仅此而已。
             我只想问可不可以独立的去思考这些问题 ? 我指的这些问题,是对“测试”的定义上。
       好多想不明白的问题,是我痛苦,也有一点想明白的问题,那就是测试到底是什么。哲学上讲,一切事情都有前因后果,只是过程不同罢了。那么我们测试的前因后果和过程是什么呢?
            测试=测试对象+测试过程+测试结果
    就这么简单的一个公式。这就是我最近得出的结论。
      测试对象我想就是需求,测试过程就是一个集合了很多测试行为的过程,测试结果就是对测试数据的分析。
        欢迎大家讨论。细节内容我也思考过,有很多问题想不明白,理论知识不够。有兴趣的可以一起讨论,我们目标是寻找自己的测试理论(咱就先有想法了,其他另说)
  • 测试用例

    月上百合 发布于 2008-08-26 13:36:11

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

    测试用例(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.综合策略
    每种方法都能设计出一组有用例子,用这组例子容易发现某种类型的错误,但可能不易发现另一类型的错误。因此在实际测试中,联合使用各种测试方法,形成综合策略,通常先用黑盒法设计基本的
    测试用例,再用白盒法补充一些必要的测试用例

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

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

    首先要申明,其实这句话是十分有道理的,但我发现很多人都曲解了这句话的原意,一心要设计出发现“难于发现的缺陷”而陷入盲目的片面中去,忘记了测试的目的所在,这是十分可怕的。我倾向于将测试用例当作一个集合来认识,对它的评价也只能对测试用例的集合来进行,测试本身是一种“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 - 成功的提款VVVVV成功的提款。
    CW2.场景 2 - ATM 内没有现金VVVVI提款选项不可用,用例结束
    CW3.场景 3 - ATM 内现金不足VVVVI警告消息,返回基本流步骤 6 - 输入金额
    CW4.
  • 几道经典的SQL语句题

    lobster 发布于 2008-11-18 13:27:25

    1.Consider the following schema:

    Students (sid: integer, sname: string)

    Students_Taking_Courses (sid: integer, cid: integer, score: real)

    In the schema, (sid, cid) is the primary key for Students_Taking_Courses. Write the following queries in SQL.

     

    a.

    Find the names of all the students who have taken both course #3160 and course #2214.

     

    Solution 1

    SELECT S.sname

    FROM Students S, Students_Taking_Courses T1, Students_Taking_Courses T2

    WHERE S.sid=T1.sid AND S.sid=T2.sid AND T1.cid=3160 AND T2.cid=2214

     

    Solution 2

    (SELECT S.sname

    FROM Students S, Students_Taking_Courses T

    WHERE S.sid=T.sid AND T.cid=3160 )

    INTERSECT

    (SELECT *

    FROM Students S, Students_Taking_Courses T

    WHERE S.sid=T.sid AND T.cid=2214 )

     

    b.

    Find the names of all the students who have never taken any courses.

     

    Solution 1

    SELECT S.sname

    FROM Students S

    WHERE NOT EXISTS ( SELECT *FROM Students_Taking_Courses T

    WHERE S.sid=T.sid )

     

    Solution 2

    SELECT S.sname

    FROM Students S

    WHERE S.sid NOT IN ( SELECT T.sid FROM Students_Taking_Courses T)

     

    c.

    Find the names of all the students who have no scores below 75, and display in an alphabetical order.

     

    Solution 1

    SELECT S.sname

    FROM Students S

    WHERE NOT EXISTS ( SELECT *FROM Students_Taking_Courses T

    WHERE S.sid=T.sid AND Score <75)

    ORDER BY S.sname

     

    Solution 2

    SELECT S.sname

    FROM Students S

    WHERE S.sid NOT IN ( SELECT T.sid

    FROM Students_Taking_Courses T

    WHERE Score <75)

    ORDER BY S.sname

     

    d.

    Find the average score for all the students who have taken more than 3 courses.

     

    Solution

    SELECT S.sname, AVG(T.score) AS average

    FROM Students S, Students_Taking_Courses T

    WHERE S.sid=T.sid

    GROUP BY S.sid, S.sname

    HAVING COUNT(T.sid)>3

     

    e.

    Find the grades of all courses taken by a student whose sid is 123, and display the sid and the cid.

    Solution

    SELECT T.sid, T.cid, T.score

    FROM Students_Taking_Courses T

    WHERE T.sid = 123

     

    f.

    Find the names of all the students who are on the honor roll (average of scores greater than 90),

    and display in increasing alphabetical order by name.

    Solution

    SELECT S.sname

    FROM Students S, Students_Taking_Courses T

    WHERE S.sid=T.sid

    GROUP BY S.sid,S.sname

    HAVING AVG(T.score)>90

    ORDER BY S.sname

     

    g.

    Find the course that has been taken by the most students.

    Solution

    SELECT Temp.cid, Temp.count

    FROM (SELECT COUNT(sid) AS  count, T.cid AS cid

    FROM Students_Taking_Courses T

    GROUP BY T.cid)  Temp

    WHERE Temp.count = (SELECT MAX(Temp2.count)

    FROM  (SELECT COUNT(sid)  AS  count

    FROM Students_Taking_Courses T

    GROUP BY T.cid  ) Temp2)

     

    h.

    Find the names of all students who have failed more than one fifth of their classes (score < 70).

    Solution1

    SELECT S.sname

    FROM Students S, Students_Taking_Courses T

    WHERE T.score<70 AND S.sid=T.sid

    GROUP BY T.sid, S.sname

    HAVING count(cid) > 0.2*(SELECT COUNT(*) FROM Students_Taking_Courses T2 WHERE T2.sid=T.sid  GROUP BY T.sid)

     

    Solution2

    SELECT S.sname
    FROM Students S, Students_Taking_Courses T,Students_Taking_Courses T2
    WHERE T.score<70 AND S.sid=T.sid AND T2.sid=T.sid
    GROUP BY T.sid, S.sname
    HAVING count(T.cid) > 0.2*(COUNT(T2.cid))

    i.

    Find the average of all students taking 3160.

    Solution

    SELECT AVG(T.score) AS average

    FROM Students_Taking_Courses T

    WHERE T.cid=3160

     

    j.

    Find the names of all students making grade below 60.

    Solution

    SELECT DISTINCT S.sname

    FROM Students S, Students_Taking_Courses T

    WHERE T.score<60 AND S.sid=T.sid

     

    k.

    Find the best performance class and the worst.

    Solution for the best class

    SELECT Temp.cid, Temp.average

    FROM (SELECT AVG(T.score) AS  average, T.cid

    FROM Students_Taking_Courses T

    GROUP BY T.cid)  Temp

    WHERE Temp.average = (SELECT MAX(Temp2.average)

    FROM  (SELECT AVG(T.score)  AS  average

    FROM Students_Taking_Courses T

    GROUP BY T.cid  ) Temp2)

     

    Solution for the worst class

    SELECT Temp.cid, Temp.average

    FROM (SELECT AVG(T.score) AS  average, T.cid

    FROM Students_Taking_Courses T

    GROUP BY T.cid)  Temp

    WHERE Temp.average = (SELECT MIN(Temp2.average)

    FROM  (SELECT AVG(T.score)  AS  average

    FROM Students_Taking_Courses T

    GROUP BY T.cid  ) Temp2)

    l.

    Find the total number of the course the university has provided.

    Solution

    SELECT COUNT(DISTINCT T.cid)

    FROM Students_Taking_Courses T

     

    m.

    Find the total number of the course that a student has taken for every student, and display in increasing order by students name.

    Solution

    SELECT S.sname, COUNT(T.cid)

    FROM Students S, Students_Taking_Courses T

    WHERE S.sid=T.sid

    GROUP BY S.sid, S.sname

    ORDER BY S.sname

     

     

    附:oracle数据库下的例子:

    create table STUDENTS

    (

      SID   NUMBER not null,

      SNAME VARCHAR2(10)

    );

    alter table STUDENTS

      add constraint SIDCIDPK primary key (SID);

    create table STUDENTS_TAKING_COURSES

    (

      SID   NUMBER,

      CID   NUMBER,

      SCORE VARCHAR2(5)

    );

    insert into STUDENTS (SID, SNAME)

    values (1, 'zhushy');

    insert into STUDENTS (SID, SNAME)

    values (2, 'zhushy2');

    insert into STUDENTS (SID, SNAME)

    values (3, 'zhushy3');

    insert into STUDENTS (SID, SNAME)

    values (4, 'zhushy4');

    insert into STUDENTS (SID, SNAME)

    values (5, 'zhushy4');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (1, 1, '77');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (2, 2, '62');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (2, 3, '52');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (3, 4, '94');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (3, 5, '84');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (3, 6, '84');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (4, 7, '78');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (4, 8, '99');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (4, 9, '100');

    insert into STUDENTS_TAKING_COURSES (SID, CID, SCORE)

    values (4, 8, '64');

    commit;

  • 测试三年,你能拿到7000吗?

    lobster 发布于 2009-01-07 13:49:42

    做测试三年,你能拿到7000?

     

       新的一年到了,最近一直思考一个问题,在新的一年自己在软件测试职业发上有什么新的打算和计划呢?

       0812月刚换了一份工作,待遇很不错的。我想能找到这样的工作肯定和自己平时的工作经验积累也有一定的关系的。我在数据库、中间件、操作系统、开发技能上都是做的很不错的,想找一份像样的工作还是很容易的。那么在新的一年,如何计划呢,若想让自己的薪水破万?

       我认为一个想拿高薪水的测试工程师,应该具体下列素质,也是我在新的一年里愿意去继续提高的地方:

     

    1、测试技术测试理论

      作为一个测试人员,掌握基本的测试技术理论是必须的吧。看看测试理论的书,你也许一直在看,再去翻翻吧,常品常新。工作这么多年了,都快成专家了,不但要掌握精通测试技术理论,偶尔也要写写文章,分享一下心得,指导指导新人。

    2、测试环境部署能力

      对项目组上可能用到的数据库、中间件及应用服务器、操作系统平台(一般是Unix Linux系统)的常用的、基本的操作必须要懂的。对DB2OracleMSSQL ServerInformix等数据库,WebLogicWebSphereJboss等中间件及应用服务器,SolarisAIXRedHat

    OS系统的安装配置部署要掌握,没必要掌握这么多产品,每种产品要掌握一种吧,比如DB2+WebSphere+AIX。如果以后想做好性能测试,这些产品的性能优化、性能监控也要掌握的。

    3、开发技能、脚本编程能力

       大公司的笔试题一般会考到开发知识,JavaC语言的基本开发知识要掌握。作为一个测试人员,在工作中会常常用到shellbatjython 等脚本语言 ,特别是做自动化测试的时候。对这些脚本语言最好掌握一到两门。用好这些脚本会让你的工作更加轻松的。

    4、设计模式、架构知识、单元测试模式学习

       软件架构师的头衔很耀眼吧?作为测试工程师,你又是无可救药的技术派,多学习一下软件设计架构的知识吧,你也许会成为一位测试架构师呢。想成为这样的人,三五年的开发设计经验、三五年的测试经验是很重要的。  

    对于开发编码人员,编写程序代码是最天经地义的事情了,为了后期的可维护和可扩展,得到更简洁的减少重复的代码,重构,改善既有代码设计的重构是开发编码人员的另一项工作内容。重构的方向是设计模式,基于原来开发代码、重构代码的经验,直接选用合适的设计模式进行开发,能快速有效得到优美的代码。那么对于执行单元测试(白盒测试)的测试人员,他们为开发人员维护的程序代码编写单元测试代码,基于同样的原因,单元测试人员是否也应该考虑引入重构的概念,建立一套单元测试模式呢?对于使用特定设计模式开发的程序代码,也一定有相应的单元测试模式更有效率的保障程序代码的质量。

     

    5、重视职业规划、认识一位HR

      有时候你能做到什么程度,在于你想没想做到那样的程度,职业规划是必要的!如果安全按照职业规划发展,人生是很枯燥无味的,我们可能随时会对职业发展方向进行调整,可是如果没有职业规划,我们基于什么进行调整呢?

      认识一位HR吧,他们的专业技能,他们掌握的资源是你需要的。  我的一位朋友在做这个,我们常交流职业发展的问题,感觉她说的不错。如果你对职业发展感到困惑,对现在的待遇不满意,还想来北京发展?你可以和HR聊聊测试职业规划。

     

  • 强力推荐:SQL 50句

    m_r3326 发布于 2008-11-27 13:27:37

    Student(S#,Sname,Sage,Ssex) 学生表  
    Course(C#,Cname,T#) 课程表  
    SC(S#,C#,score) 成绩表  
    Teacher(T#,Tname) 教师表  
    问题:  
    1、查询“001”课程比“002”课程成绩高的所有学生的学号;  
      select a.S# from (select s#,score from SC where C#='001') a,(select s#,score  
      from SC where C#='002') b  
      where a.score>b.score and a.s#=b.s#;  
    2、查询平均成绩大于60分的同学的学号和平均成绩;  
        select S#,avg(score)  
        from sc  
        group by S# having avg(score) >60;  
    3、查询所有同学的学号、姓名、选课数、总成绩;  
      select Student.S#,Student.Sname,count(SC.C#),sum(score)  
      from Student left Outer join SC on Student.S#=SC.S#  
      group by Student.S#,Sname  
    4、查询姓“李”的老师的个数;  
      select count(distinct(Tname))  
      from Teacher  
      where Tname like '李%';  
    5、查询没学过“叶平”老师课的同学的学号、姓名;  
        select Student.S#,Student.Sname  
        from Student  
        where S# not in (select distinct( SC.S#) from SC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');  
    6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;  
      select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');  
    7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;  
      select S#,Sname  
      from Student  
      where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher  where Teacher.T#=Course.T# and Tname='叶平'));  
    8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;  
      Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2  
      from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;  
    9、查询所有课程成绩小于60分的同学的学号、姓名;  
      select S#,Sname  
      from Student  
      where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);  
    10、查询没有学全所有课的同学的学号、姓名;  
        select Student.S#,Student.Sname  
        from Student,SC  
        where Student.S#=SC.S# group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);  
    11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;  
        select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';  
    12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;  
        select distinct SC.S#,Sname  
        from Student,SC  
        where Student.S#=SC.S# and C# in (select C# from SC where S#='001');  
    13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;  
        update SC set score=(select avg(SC_2.score)  
        from SC SC_2  
        where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');  
    14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;  
        select S# from SC where C# in (select C# from SC where S#='1002')  
        group by S# having count(*)=(select count(*) from SC where S#='1002');  
    15、删除学习“叶平”老师课的SC表记录;  
        Delect SC  
        from course ,Teacher  
        where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';  
    16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、  
        号课的平均成绩;  
        Insert SC select S#,'002',(Select avg(score)  
        from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');  
    17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分  
        SELECT S# as 学生ID  
            ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 数据库  
            ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企业管理  
            ,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英语  
            ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩  
        FROM SC AS t  
        GROUP BY S#  
        ORDER BY avg(t.score)  
    18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分  
        SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分  
        FROM SC L ,SC AS R  
        WHERE L.C# = R.C# and  
            L.score = (SELECT MAX(IL.score)  
                          FROM SC AS IL,Student AS IM  
                          WHERE L.C# = IL.C# and IM.S#=IL.S#  
                          GROUP BY IL.C#)  
            AND  
            R.Score = (SELECT MIN(IR.score)  
                          FROM SC AS IR  
                          WHERE R.C# = IR.C#  
                      GROUP BY IR.C#  
                        );  
    19、按各科平均成绩从低到高和及格率的百分数从高到低顺序  
        SELECT t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩  
            ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数  
        FROM SC T,Course  
        where t.C#=course.C#  
        GROUP BY t.C#  
        ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC  
    20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)  
        SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企业管理平均分  
            ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企业管理及格百分数  
            ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 马克思平均分  
            ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 马克思及格百分数  
            ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分  
            ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分数  
            ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 数据库平均分  
            ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 数据库及格百分数  
      FROM SC  
    21、查询不同老师所教不同课程平均分从高到低显示  
      SELECT max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩  
        FROM SC AS T,Course AS C ,Teacher AS Z  
        where T.C#=C.C# and C.T#=Z.T#  
      GROUP BY C.C#  
      ORDER BY AVG(Score) DESC  
    22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)  
        [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩  
        SELECT  DISTINCT top 3  
          SC.S# As 学生学号,  
            Student.Sname AS 学生姓名 ,  
          T1.score AS 企业管理,  
          T2.score AS 马克思,  
          T3.score AS UML,  
          T4.score AS 数据库,  
          ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分  
          FROM Student,SC  LEFT JOIN SC AS T1  
                          ON SC.S# = T1.S# AND T1.C# = '001'  
                LEFT JOIN SC AS T2  
                          ON SC.S# = T2.S# AND T2.C# = '002'  
                LEFT JOIN SC AS T3  
                          ON SC.S# = T3.S# AND T3.C# = '003'  
                LEFT JOIN SC AS T4  
                          ON SC.S# = T4.S# AND T4.C# = '004'  
          WHERE student.S#=SC.S# and  
          ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)  
          NOT IN  
          (SELECT  
                DISTINCT  
                TOP 15 WITH TIES  
                ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)  
          FROM sc  
                LEFT JOIN sc AS T1  
                          ON sc.S# = T1.S# AND T1.C# = 'k1'  
                LEFT JOIN sc AS T2  
                          ON sc.S# = T2.S# AND T2.C# = 'k2'  
                LEFT JOIN sc AS T3  
                          ON sc.S# = T3.S# AND T3.C# = 'k3'  
                LEFT JOIN sc AS T4  
                          ON sc.S# = T4.S# AND T4.C# = 'k4'  
          ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);  
    23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]  
        SELECT SC.C# as 课程ID, Cname as 课程名称  
            ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]  
            ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]  
            ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]  
            ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]  
        FROM SC,Course  
        where SC.C#=Course.C#  
        GROUP BY SC.C#,Cname;  
    24、查询学生平均成绩及其名次  
          SELECT 1+(SELECT COUNT( distinct 平均成绩)  
                  FROM (SELECT S#,AVG(score) AS 平均成绩  
                          FROM SC  
                      GROUP BY S#  
                      ) AS T1  
                WHERE 平均成绩 > T2.平均成绩) as 名次,  
          S# as 学生学号,平均成绩  
        FROM (SELECT S#,AVG(score) 平均成绩  
                FROM SC  
            GROUP BY S#  
            ) AS T2  
        ORDER BY 平均成绩 desc;  
      
    25、查询各科成绩前三名的记录:(不考虑成绩并列情况)  
          SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数  
          FROM SC t1  
          WHERE score IN (SELECT TOP 3 score  
                  FROM SC  
                  WHERE t1.C#= C#  
                ORDER BY score DESC  
                  )  
          ORDER BY t1.C#;  
    26、查询每门课程被选修的学生数  
      select c#,count(S#) from sc group by C#;  
    27、查询出只选修了一门课程的全部学生的学号和姓名  
      select SC.S#,Student.Sname,count(C#) AS 选课数  
      from SC ,Student  
      where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;  
    28、查询男生、女生人数  
        Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';  
        Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';  
    29、查询姓“张”的学生名单  
        SELECT Sname FROM Student WHERE Sname like '张%';  
    30、查询同名同性学生名单,并统计同名人数  
      select Sname,count(*) from Student group by Sname having  count(*)>1;;  
    31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)  
        select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age  
        from student  
        where  CONVERT(char(11),DATEPART(year,Sage))='1981';  
    32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列  
        Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;  
    33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩  
        select Sname,SC.S# ,avg(score)  
        from Student,SC  
        where Student.S#=SC.S# group by SC.S#,Sname having    avg(score)>85;  
    34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数  
        Select Sname,isnull(score,0)  
        from Student,SC,Course  
        where SC.S#=Student.S# and SC.C#=Course.C# and  Course.Cname='数据库'and score <60;  
    35、查询所有学生的选课情况;  
        SELECT SC.S#,SC.C#,Sname,Cname  
        FROM SC,Student,Course  
        where SC.S#=Student.S# and SC.C#=Course.C# ;  
    36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;  
        SELECT  distinct student.S#,student.Sname,SC.C#,SC.score  
        FROM student,Sc  
        WHERE SC.score>=70 AND SC.S#=student.S#;  
    37、查询不及格的课程,并按课程号从大到小排列  
        select c# from sc where scor e <60 order by C# ;  
    38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;  
        select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';  
    39、求选了课程的学生人数  
        select count(*) from sc;  
    40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩  
        select Student.Sname,score  
        from Student,SC,Course C,Teacher  
        where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );  
    41、查询各个课程及相应的选修人数  
        select count(*) from sc group by C#;  
    42、查询不同课程成绩相同的学生的学号、课程号、学生成绩  
      select distinct  A.S#,B.score from SC A  ,SC B where A.Score=B.Score and A.C# <>B.C# ;  
    43、查询每门功成绩最好的前两名  
        SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数  
          FROM SC t1  
          WHERE score IN (SELECT TOP 2 score  
                  FROM SC  
                  WHERE t1.C#= C#  
                ORDER BY score DESC  
                  )  
          ORDER BY t1.C#;  
    44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列  
        select  C# as 课程号,count(*) as 人数  
        from  sc  
        group  by  C#  
        order  by  count(*) desc,c#  
    45、检索至少选修两门课程的学生学号  
        select  S#  
        from  sc  
        group  by  s#  
        having  count(*)  >  =  2  
    46、查询全部学生都选修的课程的课程号和课程名  
        select  C#,Cname  
        from  Course  
        where  C#  in  (select  c#  from  sc group  by  c#)  
    47、查询没学过“叶平”老师讲授的任一门课程的学生姓名  
        select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='叶平');  
    48、查询两门以上不及格课程的同学的学号及其平均成绩  
        select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;  
    49、检索“004”课程分数小于60,按分数降序排列的同学学号  
        select S# from SC where C#='004'and score <60 order by score desc;  
    50、删除“002”同学的“001”课程的成绩  
    delete from Sc where S#='001'and C#='001';  
  • QTP学习网址

    navy2008 发布于 2008-12-24 17:29:36

  • 1946/10<12345678910>