发布新日志

  • selenium2.0关于python的常用函数

    2015-02-12 14:24:20

    selenium2.0关于python的常用函数(二)

     (2013-05-15 14:05:19)
    标签: 

    杂谈

    分类: selenium
    新建实例driver = webdriver.Chrome()
    1.获取当前页面的Url函数
    方法:current_url
    实例:
    driver.current_url

    2.获取元素坐标

    方法:location

    解释:首先查找到你要获取元素的,然后调用location方法

    实例:

    driver.find_element_by_xpath("//*[@id='tablechart']/tbody/tr[14]/td[9]").location

    3.表单的提交

    方法:submit

    解释:查找到表单(from)直接调用submit即可

    实例:

    driver.find_element_by_id("form1").submit()

    4.获取CSS的属性值

    方法:value_of_css_property(css_name)
    实例:
    driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")
    5.获取元素的属性值
    方法:get_attribute(element_name)
    实例:
    driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")
    6.判断元素是否被选中
    方法:is_selected()
    实例:
    driver.find_element_by_id("form1").is_selected()
    7.返回元素的大小
    方法:size
    实例:
    driver.find_element_by_id("iptPassword").size
    返回值:{'width': 250, 'height': 30}
    8.判断元素是否显示
    方法:is_displayed()
    实例:
    driver.find_element_by_id("iptPassword").is_displayed()
    9.判断元素是否被使用
    方法:is_enabled()
    实例:
    driver.find_element_by_id("iptPassword").is_enabled()
    10.获取元素的文本值
    方法:text
    实例:driver.find_element_by_id("iptUsername").text
    11.元素赋值
    方法:send_keys(*values)
    实例:
    driver.find_element_by_id("iptUsername").send_keys('admin')
    注意如果是函数需要增加转义符u,eg.
    driver.find_element_by_id("iptUsername").send_keys(u'青春')
    12.返回元素的tagName
    方法:tag_name
    实例:
    driver.find_element_by_id("iptUsername").tag_name
    13.删除浏览器所以的cookies
    方法:delete_all_cookies()
    实例:
    driver.delete_all_cookies()
    14.删除指定的cookie
    方法:delete_cookie(name)
    实例:deriver.delete_cookie("my_cookie_name")
    15.关闭浏览器
    方法:close()
    实例:driver.close()
    16.关闭浏览器并且推出驱动程序
    方法:quit()
    实例:driver.quit()
    17.返回上一页
    方法:back()
    实例:driver.back()
    18.设置等待超时
    方法:implicitly_wait(wait_time)
    实例:driver.implicitly_wait(30)
    19.浏览器窗口最大化
    方法:maximize_window()
    实例:driver.maximize_window()
    20.查看浏览器的名字
    方法:name
    实例:drvier.name
  • selenium2.0关于python的常用函数

    2015-02-12 14:24:20

    selenium2.0关于python的常用函数(二)

     (2013-05-15 14:05:19)
    标签: 

    杂谈

    分类: selenium
    新建实例driver = webdriver.Chrome()
    1.获取当前页面的Url函数
    方法:current_url
    实例:
    driver.current_url

    2.获取元素坐标

    方法:location

    解释:首先查找到你要获取元素的,然后调用location方法

    实例:

    driver.find_element_by_xpath("//*[@id='tablechart']/tbody/tr[14]/td[9]").location

    3.表单的提交

    方法:submit

    解释:查找到表单(from)直接调用submit即可

    实例:

    driver.find_element_by_id("form1").submit()

    4.获取CSS的属性值

    方法:value_of_css_property(css_name)
    实例:
    driver.find_element_by_css_selector("input.btn").value_of_css_property("input.btn")
    5.获取元素的属性值
    方法:get_attribute(element_name)
    实例:
    driver.find_element_by_id("sellaiyuan").get_attribute("sellaiyuan")
    6.判断元素是否被选中
    方法:is_selected()
    实例:
    driver.find_element_by_id("form1").is_selected()
    7.返回元素的大小
    方法:size
    实例:
    driver.find_element_by_id("iptPassword").size
    返回值:{'width': 250, 'height': 30}
    8.判断元素是否显示
    方法:is_displayed()
    实例:
    driver.find_element_by_id("iptPassword").is_displayed()
    9.判断元素是否被使用
    方法:is_enabled()
    实例:
    driver.find_element_by_id("iptPassword").is_enabled()
    10.获取元素的文本值
    方法:text
    实例:driver.find_element_by_id("iptUsername").text
    11.元素赋值
    方法:send_keys(*values)
    实例:
    driver.find_element_by_id("iptUsername").send_keys('admin')
    注意如果是函数需要增加转义符u,eg.
    driver.find_element_by_id("iptUsername").send_keys(u'青春')
    12.返回元素的tagName
    方法:tag_name
    实例:
    driver.find_element_by_id("iptUsername").tag_name
    13.删除浏览器所以的cookies
    方法:delete_all_cookies()
    实例:
    driver.delete_all_cookies()
    14.删除指定的cookie
    方法:delete_cookie(name)
    实例:deriver.delete_cookie("my_cookie_name")
    15.关闭浏览器
    方法:close()
    实例:driver.close()
    16.关闭浏览器并且推出驱动程序
    方法:quit()
    实例:driver.quit()
    17.返回上一页
    方法:back()
    实例:driver.back()
    18.设置等待超时
    方法:implicitly_wait(wait_time)
    实例:driver.implicitly_wait(30)
    19.浏览器窗口最大化
    方法:maximize_window()
    实例:driver.maximize_window()
    20.查看浏览器的名字
    方法:name
    实例:drvier.name
  • 【转载】软件测试全景图

    2013-10-17 11:46:23


    1.测试指导思想除能力成熟度模型(CMM/CMMI)外,其他指导思想还有极限变成思想、PDCA、软件工程、ISO等,这其中以软件工程、ISO、CMM思想为主流;
    2.测试驱动——很多时候
    测试的开发、管理都根据软件测试结果来进行的,尤其是大型项目,测试的管理往往就是以测试的bug依据进行开展;
    3.阶段的划分在此按照传统的瀑布模型进行划分,每个阶段划分相对比较清晰,实际开发过程中不尽如此,如极限编程思想就是以测试为主导的迭代的过程。

  • 测试课程设置

    2011-08-11 11:29:05

    阶段
    课程
    课时
    课程目标
    第一阶段
    测试基础
    3
    了解测试的基本概念,理解软件测试的目的以及软件的生命周期
    测试过程
    4
    掌握单元测试、集成测试、系统测试等测试过程,了解测试的基本工作
    软件质量
    14
    了解ISO9000和CMM/CMMI,理解并掌握质量模型,理解质量铁三角
    测试方法
    7
    了解白盒测试和黑盒测试等测试方法
    需求管理
    7
    理解需求管理相关知识,完成实例项目的需求跟踪矩阵,阅读项目开发文档,理解软件开发的整个过程
    通用测试用例
    3
    掌握测试用例写作的格式和思路
    缺陷管理
    4
    理解缺陷管理相关知识,能进行缺陷提交和简单分析
    QC/TP
    14
    掌握缺陷管理工具QC/TP的使用,能用QC/TP完成整个用例写作和缺陷跟踪过程
    测试覆盖率
    3
    掌握覆盖率的概念以及分析方法
    单元测试
    11
    掌握单元测试的概念以及分析方法,能进行桩函数、驱动函数的编写,通过项目实例,掌握Cppunit和覆盖率工具的使用
    集成测试
    7
    掌握集成测试的概念以及分析方法,能进行测试代码编写,并完成实例项目的集成测试
    系统测试
    14
    掌握系统测试的概念以及分析方法,了解各种系统测试类型和质量模型间关系,并完成实例项目的系统测试执行
    配置管理
    3
    掌握配置管理相关工作内容
    SVN
    4
    掌握配置管理工具SVN的使用
    Linux
    14
    掌握Linux测试环境的搭建和使用
    ORACLE
    14
    掌握数据库管理系统ORACLE的使用
    第二阶段
    测试用例设计方法
    33
    通过实例和实践掌握常用的黑盒和白盒测试用例设计方法
    项目介绍
    7
    了解实战项目的业务和背景
    需求评审
    7
    阅读并分析实战项目的需求
    系统测试计划
    7
    掌握系统测试计划写作要点,进行实战项目的系统测试计划写作,制定测试策略
    系统测试用例
    28
    进行测试设计和分析,完成实战项目的系统测试用例设计
    系统测试执行
    28
    完成实战项目的系统测试执行,完成测试报告
    项目总结
    7
    进行项目总结,完成项目总结报告
    第三阶段
    QTP/ITP
    42
    掌握自动化测试工具QTP/ITP并进行实践
    LoadRunner
    42
    掌握性能测试工具LoadRunner并进行实践
    Linux Shell
    14
    掌握自动化测试脚本Shell编程
    第四阶段
    项目实践(计划)
    7
    进行实践项目的测试计划写作
    项目实践(方案)
    7
    进行实践项目的测试方案写作
    项目实践(用例)
    14
    进行实践项目的测试用例设计
    项目实践(执行)
    14
    进行实践项目的测试执行,以及自动化测试执行、性能测试执行
    职业发展
    时间管理
    4
    穿插在各阶段
    有效沟通
    4
    简历写作\面试技巧
    7
    团队合作
    4
    职业规划
    4
    模拟面试
    赠送
    第二阶段结束
    总计
    406
     
  • 测试设计中需要考虑的22种测试类型

    2011-08-10 17:58:35

    黑盒测试:不基于内部设计和代码的任何知识,而是基于需求和功能性。

      白盒测试:基于一个应用代码的内部逻辑知识,测试是基于覆盖全部代码、分支、路径、条件。

      单元测试:最微小规模的测试;以测试某个功能或代码块。典型地由程序员而非测试员来做,因为它需要知道内部程序设计和编码的细节知识。这个工作不容易作好,除非应用系统有一个设计很好的体系结构; 还可能需要开发测试驱动器模块或测试套具。

      累积综合测试:当一个新功能增加后,对应用系统所做的连续测试。它要求应用系统的不同形态的功能能够足够独立以可以在全部系统完成前能分别工作,或当需要时那些测试驱动器已被开发出来; 这种测试可由程序员或测试员来做。

      集成测试:一个应用系统的各个部件的联合测试,以决定他们能否在一起共同工作。部件可以是代码块、独立的应用、网络上的客户端或服务器端程序。这种类型的测试尤其与客户服务器和分布式系统有关。

      功能测试:用于测试应用系统的功能需求的黑盒测试方法。这类测试应由测试员做,这并不意味着程序员在发布前不必检查他们的代码能否工作(自然他能用于测试的各个阶段)。

      系统测试:基于系统整体需求说明书的黑盒类测试;应覆盖系统所有联合的部件。

      端到端测试:类似于系统测试;测试级的“宏大”的端点;涉及整个应用系统环境在一个现实世界使用时的模拟情形的所有测试。例如与数据库对话,用网络通讯,或与外部硬件、应用系统或适当的系统对话。

      健全测试:典型地是指一个初始化的测试工作,以决定一个新的软件版本测试是否足以执行下一步大的测试努力。例如,如果一个新版软件每5分钟与系统冲突,使系统陷于泥潭,说明该软件不够“健全”,目前不具备进一步测试的条件。

      衰竭测试:软件或环境的修复或更正后的“再测试”。可能很难确定需要多少遍再次测试。尤其在接近开发周期结束时。自动测试工具对这类测试尤其有用。

      接受测试:基于客户或最终用户的规格书的最终测试,或基于用户一段时间的使用后,看软件是否满足客户要求。

      负载测试:测试一个应用在重负荷下的表现,例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败。

      强迫测试:在交替进行负荷和性能测试时常用的术语。也用于描述象在异乎寻常的重载下的系统功能测试之类的测试,如某个动作或输入大量的重复,大量数据的输入,对一个数据库系统大量的复杂查询等。

      性能测试:在交替进行负荷和强迫测试时常用的术语。理想的“性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。

      可用性测试:对“用户友好性”的测试。显然这是主观的,且将取决于目标最终用户或客户。用户面谈、调查、用户对话的录象和其他一些技术都可使用。程序员和测试员通常都不宜作可用性测试员。

      安装/卸载测试:对软件的全部、部分或升级安装/卸载处理过程的测试。

      恢复测试:测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。

      安全测试:测试系统在防止非授权的内部或外部用户的访问或故意破坏等情况时怎么样。这可能需要复杂的测试技术。

      兼容测试:测试软件在一个特定的硬件/软件/操作系统/网络等环境下的性能如何。

      比较测试:与竞争伙伴的产品的比较测试,如软件的弱点、优点或实力。

      Alpha 测试:在系统开发接近完成时对应用系统的测试;测试后,仍然会有少量的设计变更。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。

      Beta 测试:当开发和测试根本完成时所做的测试,而最终的错误和问题需要在最终发行前找到。这种测试一般由最终用户或其他人员员完成,不能由程序员或测试员完成。

  • LoadRunner监控Linux与Windows方法

    2011-08-10 17:45:40

    一、监控windows系统:

    1、监视连接前的准备工作

    1)进入被监视windows系统,开启以下二个服务Remote Procedure Call(RPC) 和Remote Registry Service (开始—)运行 中输入services.msc,开启对应服务即可)。

    2)在被监视的WINDOWS机器上:右击我的电脑,选择管理->共享文件夹->共享 在这里面要有C$这个共享文件夹 (要是没有自己手动加上)。

    3)在安装LR的机器上,开始—》运行,输入 \\被监视机器IP\C$ 然后输入管理员帐号和密码,如果能看到被监视机器的C盘了,就说明你得到了那台机器的管理员权限,可以使用LR去连接了。(LR要连接WINDOWS机器进行监视要有管理员帐号和密码才行。)

    问题:在执行步骤3)时,输入 \\被监视机器IP\C$,出现不能以administrator身份访问被监控系统(若采用这种方式用LR对其监控的话,会提示:“找不到网络路径”)的情况,现象就是用户名输入框是灰色的,并且默认用户是guest。

    解决办法:这是安全策略的设置问题(管理工具 -> 本地安全策略 -> 安全选项 ->“网络访问:本地帐户的共享和安全模式”)。默认情况下,XP的访问方式是“仅来宾”的方式,如果你访问它,当然就固定为Guest来访问,而guest账户没有监控的权限,所以要把访问方式改为“经典”模式,这样就可以以administrator的身份登陆了。修改后,再次执行步骤3),输入管理员用户名和密码,就可以访问被监控机器C盘了。

    若这样都不行的话(可能是其它问题引起的),那只好采取别的方法了。在服务器的机子上,通过windows自带的“性能日志和警报”下的“计数器日志”中新增加一个监控日志(管理工具—)性能—)性能日志和警报),配置好日志,也能监控服务器的cpu、memory、disk等计数器。当然,这种方法就不是用LR来监控了。

    2、用LR监视windows的步骤

    在controller 中,Windows Resources窗口中右击鼠标选择Add Measurements,添加被监控windows的IP地址,选择所属系统,然后选择需要监控的指标就可以开始监控了。

    二、监控linux

    1 准备工作

    可以通过两种方法验证服务器上是否配置了rstatd守护程序:

    ①使用rup命令,它用于报告计算机的各种统计信息,其中就包括rstatd的配置信息。使用命令rup 10.130.61.203,此处10.130.61.203是要监视的linux/Unix服务器的Ip,如果该命令返回相关的统计信息。则表示已经配置并且激活了rstatd守护进程;若未返回有意义的统计信息,或者出现一条错误报告,则表示rstatd守护进程尚未被配置或有问题。

    ②使用find命令

    #find / -name rpc.rstatd,该命令用于查找系统中是否存在rpc.rstatd文件,如果没有,说明系统没有安装rstatd守护程序。

    如果服务器上没有安装rstatd程序(一般来说LINUX都没有安装),需要下载一个包才有这个服务,包名字是rpc.rstatd-4.0.1.tar.gz. 这是一个源码,需要编译,下载并安装rstatd(可以在[url]http://sourceforge.net/projects/[/url]rstatd<wbr>这个地址下载)

    下载后,开始安装,安装步骤如下:

    tar -xzvf rpc.rstatd-4.0.1.tar.gz

      cd rpc.rstatd-4.0.1/

      ./configure —配置操作

      make —进行编译

      make install —开始安装

      rpc.rstatd —启动rstatd进程

    2)安装完成后配置rstatd 目标守护进程xinetd,它的主配置文件是/etc/xinetd.conf,它里面内容是一些如下的基本信息:

    # xinetd.conf
    # Copyright (c) 1998-2001 SuSE GmbH Nuernberg, Germany.
    # Copyright (c) 2002 SuSE Linux AG, Nuernberg, Germany.
    defaults
    {
    log_type = FILE /var/log/xinetd.log
    log_on_success = HOST EXIT DURATION
    log_on_failure = HOST ATTEMPT
    #only_from = localhost
    instances = 30
    cps = 50 10
    # The specification of an interface is interesting, if we are on a firewall.
    # For example, if you only want to provide services from an internal
    # network interface, you may specify your internal interfaces IP-Address.
    # interface = 127.0.0.1
    }
    includedir /etc/xinetd.d

    我们这里需要修改的是/etc/xinetd.d/下的三个conf文件 rlogin,rsh,rexec这三个配置文件,打这三个文件里的disable = yes都改成 disable = no ( disabled 用在默认的 {} 中 禁止服务)或是把# default: off都设置成 on 这个的意思就是在xinetd启动的时候默认都启动上面的三个服务!

    说明:我自己在配置时,没有disable = yes这项,我就将# default: off改为:default: on,重启后(cd /etc/init.d/ ./xinetd restart)通过netstat -an |grep 514查看,没有返回。然后,我就手动在三个文件中最后一行加入disable = no,再重启xinetd,再使用netstat -an |grep 514查看,得到tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN结果,表明rsh服务器已经启动。

    只要保证Linux机器上的进程里有rstatd和xinetd这二个服务就可以用LR去监视了。

    两点小的技巧:

    ①检查是否启动: rsh server 监听的TCP 是514。

    [root@mg04 root]# netstat -an |grep 514

    tcp 0 0 0.0.0.0:514 0.0.0.0:* LISTEN

    如果能看到514在监听说明rsh服务器已经启动。

    ②检查是否启动: rstatd

    输入命令: rpcinfo -p

    如果能看到类似如下信息:

    程序 版本 协议 端口

    100001 5 udp 937 rstatd

    100001 4 udp 937 rstatd

    100001 3 udp 937 rstatd

    100001 2 udp 937 rstatd

    100001 1 udp 937 rstatd

    那就说明rstatd服务启动了,(当然这里也可以用ps ax代替)

    ③重起xinetd方法:

    在suse linux如下操作:

    cd /etc/init.d

    ./xinetd restart

    看到网上有的地方说使用如下命令:

    # service xinetd reload

    # /sbin/service xinetd rstart

    不知道是在什么系统用的。

    ④安装rsh,和rsh-server两个服务包方法

    a. 卸载rsh

    # rpm –q rsh----------查看版本号

    # rpm -e 版本号---------卸载该版本。

    b.安装

    # rpm –ivh rsh-0.17-14.i386.rpm rsh-server-0.17-14.i386.rpm

    ⑤在启动rpc.rstatd时,会报错“Cannot register service: RPC: Unable to receive;errno = Ction refused”。

    解决方法如下:

    # /etc/init.d ./portmap start

    # /etc/init.d ./nfs start

    然后再次启动rpc.rstatd就好了。

    最后,在controller中,将UNIX resources拖放到右边窗口里面,右击鼠标选择Add Measurements,添加被监控linux的IP地址,然后选择需要监控的指标就可以了。

    三、监控UNIX

    lr监控UNIX,UNIX先启动一rstatd服务

    以下是在IBM AIX系统中启动rstatd服务的方法:

    1、 使用telnet以root用户的身份登录入AIX系统

    2、 在命令行提示符下输入:vi/etc/inetd.conf

    3、 查找rstatd,找到

    #rstatd sunrpc_udp udp wait root /usr/sbin/rpc.rstatd rstatd 100001 1-3

    4、将#去掉51Testing软件测试网

    5、:wq保存修改结果

    6、命令提示符下输入:refresh –s inetd 重新启动服务。

    这样使用loadrunner就可以监视AIX系统的性能情况了。

    注:在HP UNIX系统上编辑完inetd.conf后,重启inetd服务需要输入inetd -c

    UNIX上也可以用rup命令查看rstatd程序是否被配置并激活

    若rstatd程序已经运行,重启时,先查看进程ps -ef |grep inet,然后杀掉进程,再refresh –s inetd进行重启。

  • s1

    2011-08-04 11:57:24

    Any day will do?哪一天都可以?


    Any messages for me?有我的留言吗?


    Are you by yourself?你一个人来吗?


    All right with you?你没有问题吧?


    Are you free tomorrow?明天有空吗?


    Are you kidding me?你在跟我开玩笑吧?


    As soon as possible!尽可能快!


    Back in a moment!马上回来!


    Believe it or not!信不信由你!


    Better luck next time!下次会更好!


    Boy will be boys本性难移!


    Come to the point!有话直说!


    Do you accept credit card?收不收行用卡?


    Does it keep long?可以保存吗?


    Don't be so fussy!别挑剔了!


    Don't count to me!别指望我!


    Don't fall for it!不要上当!


    Don't get me wrong!你搞错了!


    Don't give me that!少来这套!


    Don't let me down!别让我失望!


    Don't lose your head!别乐昏了头!


    Don't over do it!别做过头了!


    Don't sit there daydreaming!别闲着做白日梦!


    Don't stand on ceremony!别太拘束!


    Drop me a line!要写信给我!


    Easy come easy go!来得容易去得也快!


    First come first served!先到先得!


    Get a move on!快点吧!


    Get off my back!不要嘲笑我!


    Give him the works!给他点教训!


    Give me a break!饶了我吧!


    Give me a hand!帮我一个忙!


    Great minds think alike!英雄所见略同!


    I'll treat you to lunch。午餐我请你!


    In one ear,out the other ear。一耳进,一耳出!


    I'm spaced-out!我开小差了!


    I beg your pardon!请你再说一遍!


    I can't afford that!我付不起!


    I can't follow you!我不懂你说的!


    I can't help it!我情不自禁!


    I couldn't reach him!我联络不上他!


    I cross my heart!我发誓是真的!


    I don't mean it!我不是故意的!


    I feel very miserable!我好沮丧!


    I have no choice!我别无选择了!


    I watch my money!视财如命!


    I'll be in touch!保持联络!


    I'll check it out!我去看看!


    I'll show you around!我带你四处逛逛!


    I'll see to it!我会留意的!


    I'm crazy for you!我为你疯狂!


    You make me jump!你下了我一跳!


    Make up your mind。作个决定吧!


    Make yourself at home!就当在家一样!


    My mouth is watering!我要流口水了!


    Never heard of it!没听说过!


    Nice talking to you!很高兴和你聊天!


    No doubt about it!勿庸置疑!


    No pain no gain!不经一事,不长一智!


    None of your business!要你管?


    There is nothing on your business!这没你的事!


    Now you are really talking!说得对!


    Please don't rush me!请不要吹促我!


    Please keep me informed!请一定要通知我!


    She looks blue today。她今天很忧郁!


    She is under the weather。她心情不好!


    So far,so good。过得去。


    Speaking of the devil!一说曹操,曹操就到!


    Stay away from me!离我远一点!


    Stay on the ball!集中注意力!


    That makes no difference。不都一样吗?


    That's a touchy issue!这是个辣手得问题!


    That's always the case!习以为常!


    That's going too far!这太离谱了!


    That's more like that!这才象话嘛!


    The answer is zero!白忙了!


    The dice is cast!已成定局了!


    The same as usual!一如既往!


    The walls have ears!隔墙有耳!


    There you go again!你又来了!


    Time is running out!没有时间了!


    We better get going!最好马上就走

  • 四级软件测试工程师考试大纲

    2011-02-16 13:00:07

    ◆ 基本要求:
      1.熟悉软件质量、软件测试及软件质量保证的基础知识;
      2.掌握代码检查、走查与评审的基本方法和技术;
      3.掌握白盒测试和黑盒测试的测试用例的设计原则和方法;
      4.掌握单元测试和集成测试的基本策略和方法;
      5.了解系统测试、性能测试和可靠性测试的基本概念和方法;
      6.了解面向对象软件和WEB应用软件测试的基本概念和方法;
      7.掌握软件测试过程管理的基本知识和管理方法;
      8.熟悉软件测试的标准和文档;
      9.掌握QESuite软件测试过程管理平台和QESat/C++软件分析和工具的使用方法。
      ◆ 考试内容:
      一、软件测试的基本概念
      1.软件质量的概念。
      2.软件测试的目标和原则。
      3.软件测试的心理学。
      4.软件测试的经济学。
      5.软件质量保证。
      二、软件测试的类型及其在软件开发过程中的地位
      1.软件开发阶段。
      2.规划阶段的测试。
      3.设计阶段的测试。
      4.编码阶段的测试。
      5.验收和维护阶段的测试。
      三、代码检查、走查与评审
      1.桌面检查。
      2.代码走查。
      3.代码检查。
      4.同行评审。
      四、覆盖率(白盒)测试
      1.覆盖率测试。
      2.逻辑结构的覆盖率测试。
      3.路径覆盖率测试。
      4.数据流测试。
      5.程序变异测试。
      6.基于覆盖的测试用例选择。
      五、功能(黑盒)测试
      1.边界值测试。
      2.等价类测试。
      3.基于因果图的测试。
      4.基于决策表的测试。
      5.基于状态图的测试。
      6.基于场景的测试。
      7.比较测试。
      六、单元测试和集成测试
      1.单元测试的目标和模型。
      2.单元测试策略。
      3.单元测试分析。
      4.单元测试的测试用例设计原则。
      5.集成测试基本概念。
      6.集成测试策略。
      7.集成测试分析。
      8.集成测试用例设计原则。
      七、系统测试
      1.系统测试概念。
      2.系统测试方法。
      3.系统测试的实施。
      八、软件性能测试和可靠性测试
      1.软件性能的概念。
      2.性能测试的执行。
      3.软件可靠性的概念。
      4.可靠性预计。
      5.可靠性分析方法。
      6.软件可靠性测试的执行。
      九、面向对象软件的测试
      1.面向对象软件测试的问题。
      2.面向对象软件测试模型。
      3.面向对象软件的测试策略。
      4.面向对象软件的单元测试。
      5.面向对象软件的集成测试。
      6.面向对象软件的系统测试。
      十、Web应用测试
      1.应用服务器的分类和特征。
      2.Web应用系统的特点。
      3.Web应用系统的测试策略。
      4.Web应用系统测试技术。
      5.Web应用系统安全测试。
      十一、其他测试
      1.兼容性测试。
      2.易用性测试。
      3.GUI测试。
      4.构件测试。
      5.极限测试。
      6.文档测试。
      十二、软件测试过程和管理
      1.软件测试过程概念。
      2.测试组织管理。
      3.测试计划的制定。
      4.测试步骤的确定。
      5.测试环境管理。
      6.软件测试风险分析和成本管理。
      7.测试文档管理。
      8.测试的复用与维护。
      十三、软件测试自动化
      1.测试自动化的原理、方法。
      2.测试用例自动生成。
      3.测试执行自动化。
      4.测试结果比较自动化。
      5.测试工具的分类和选择。
      6.测试工具的主流产品介绍。
      十四、软件测试的标准和文档
      1.软件测试的标准。
      2.软件测试的文档。
      十五、软件测试实践
      1.软件测试过程管理。
      (1)软件测试过程管理概念。
      (2)测试的设计。
      (3)测试的准备。
      (4)测试的执行。
      (5)软件问题报告和软件问题生命周期。
      (6)测试的总结。
      (7)QESuite软件测试过程管理平台。
      2.白盒测试实践。
      (1)被测程序说明。
      (2)静态分析。
      (3)被测程序的插装和动态测试。
      (4)QESAT/C++白盒测试工具。
  • 2011年度软考软件测评师测试技术辅导汇总

    2011-02-16 12:35:00

  • 2011软件水平考试软件测评师测试技术辅导

    2011-02-16 12:22:42

    软件功能测试用例的书写方式 软件测试

      功能性测试用例

      1. 测试的来源,即测试的需求

      测试用例的主要来源有:

      1) 需求说明”及相关文档

      2)相关的设计说明(概要设计,详细设计等)

      3)与开发组交流对需求理解的 记录(可以是开发人员的一个解释)

      4)已经基本成型的UI(可以有针对性地补充一些用例)

      简而言之,所有你能得到的项目文档,都尽量拿到。 从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。

      2. 用例的组织方式

      不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。

      用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组 织在一起。

      在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未 执行”的用例的状态,共3种状态。

      即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通 过”。将同一状态的用例组织在一起。

      至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。

      3. 用例与其他材料的关联方式,即如何解决用例跟踪的问题 测试用例面临的比较大的风险有:

      需求的变更、设计的修改、需求的错误和遗漏等等。

      由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的 变更势必引起测试用例的变更。

      如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功 能点和测试用例间的关联关系。

      这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增 加了新的功能点。

      重要和困难的是,不手头的资料和信息一定要是最新的。

    软件测试用例的设计-提高测试覆盖率 软件测试

      说到测试用例的设计,我想每个有过测试经历的测试工程师都会认为很简单,不就是:按需求或概要设计,得到软件功能划分图,然后据此按每个功能,采用等价类划分、临界值、因果图等方法来设计用例就行了。

      但事实上撇开测试数据的设计不谈,仅就测试项来说,我们发现,对同一个项目,有经验的测试人员,在写用例或测试时总会有更多的测试考虑点,从而发现更多的问题;而有些测试人员测试用例的撰写却只有那么三板斧,表面看好象已经把页面所有信息的测试都考虑到了,实际上却还是遗漏了大量测试覆盖点,导致其测试出来的程序总是比较脆弱。

      究其原因,我觉得还是测试用例的撰写水平不到位,更确切地说是测试用例的覆盖度太低。说实话我认为系统测试用例真正做到100%覆盖是很难的。难道说按设计中的功能划分,每个功能都写到了这个用例就覆盖完整了?错,这还远远不够。因为我们知道还有大量的内部处理、转换、业务逻辑、相互影响的关系等都是需求或设计中所不会点明的。而这些一方面需要靠测试人员对项目本身的了解,另一方面要靠测试人员的经验,来一一找到这些隐藏点并予以测试,才能真正地保证我们的测试覆盖度。

      所以本文抛开具体的测试数据设计方法,主要从测试覆盖度的角度来介绍用例设计时,如何才能考虑地更周全,如何才能将隐藏的测试项一一找出,从而使我们的测试更全面更完整。

      想法虽然美好,可是毕竟每个测试的项目都是各不相同,针对不同项目我们的经验也会告诉给我们不同的想法,这些想法通常很感性,很难用严密的逻辑理论来把它升华。因此本文的内容仍是很简陋且不成熟,只是希望能以本文为砖,引起大家的思考,一起来补充完善,以使我们的测试用例设计水平不断提高。

    测试用例的切面设计

      所谓测试切面设计,其实就是测试用例大项的划分。测试用例划分的经典方法是瀑布模型,也就是从上到下,逐渐细分,大模块包括小模块,小模块包括更小的模块。但仅仅如此是不够的,我们还要从更多的角度切入系统,从不同的角度把系统切分成一块一块的,来进行测试,从而确保测试大项的完整性。

      1、功能点切面

      这是最常见的切面,通常我们认为页面上的一个按钮就是一个功能点。然后我们可以根据功能的复杂程度,按每个功能;或一个功能点分多页;或多个功能点合成一页来进行用例的撰写。

      2、特定切面

      除此以外,还有一种特定切面的划分方法,也是用例撰写时经常会用到的。所谓的特定切面,就是忽略掉表面上的功能点,而关注测试对象的某一个面。比如我们的内部管理系统提供了销售录入导入、注册录入导入等功能,从菜单划分上对应了七八个功能点。但这些功能处理后台有个共同的处理项就是授权记录的生成,这时我们就可以把“授权记录生成”单独拿出来做一个测试项,而在其它测试项中涉及这一部分的用例就不必再一一撰写。此外象一些界面共通的操作用例单独写成一页,也是一种特定切面。所以如果说将用例按功能点划分是一种纵向划分法,那么特定切面就是从横向的角度分析所得到的切面。在普通功能点划分上再根据实际情况设计特定切面,可以使我们的用例阅读性、理解性、操作性更强。

      3、隐含切面

      这类用例是最容易被忽略的。它往往不是明显的某个功能项,可能是功能项后台的隐含处理,也可能是多个功能项之间的关联处理,甚至可能是在某种特定情形下的处理。这都需要测试人员通过对软件的学习了解,来进行挖掘。

      (1)、后台功能

      常见的如一些定时自动启动的服务;以及某种特定情况下自动执行的操作等。它们在界面上往往是不体现的,但许多在需求设计中还是会提到,也有一些比较细小的功能可能会被忽略,就需要测试人员根据对项目的了解程度来进行挖掘。所以说一个熟悉项目的和一个不熟悉的测试人员,写出来的用例就完全是两个层次的。

      (2)、完整业务流程的测试

      我们都知道测试用例的设计是从点、线、面三个层次去考虑的。完整的一个功能项是线,其中的某个按钮是点,多个相关功能结合成完整业务流就是面。从实际来看这类用例往往被我们忽略。

      事实上目前公司的软件本来都是业务型应用软件,将各种功能从业务流中切割出来单独写用例,肯定也会有涉及到整体流程的情况。若不加以区分,将细节与全局搅在一起,不仅思路混乱,也容易考虑不周。因此在系统测试阶段,建议用例设计要有分有合,针对具体功能的就只围着这个功能转:而在业务流程测试项中,再完全从整体的业务流角度出发去考虑用例,这样不仅不容易产生疏漏,用例阅读与执行也更清楚。

    (3)、某种特定情况下的系统运行

      这类用例的设计往往与系统实际业务情况密不可分。比如财务软件,通常需要在月尾一天、月头一天、年尾一天、年头一天,对所有相关功能中的日期处理进行测试;又比如WIN 2000环境开发测试的系统,要测试在98、XP、2003等操作系统下是否能运行自如;再有如存在大量动态图片视频等的网页,在普通网速下的展现速度等等。总之就是要尽可能从实际应用的角度出发考虑,来进行测试补充。

      (4)、其它相关系统

      即指在当前项目中直接使用的其它成果,包括公司自有的系统模块、组件、函数;以及购买或免费得到的一些功能组件。对这些内容需要预先与开发组长等讨论清楚,是否需要测试。若时间紧张或其它原因决定不测的,应在测试计划中说明。若需要测试的,则具体可根据实际情况来设计,可以是通过系统某个功能的测试来涉及,此时就不需要单独划分测试项;若相对比较独立的,也可以通过单独的测试项来对其专门进行测试。

      (5)、除功能测试外的其它测试类型

      包括可靠性、安全性、恢复性、配置安装测试等等,这些测试类型都是一个单独的测试项。

      所谓好的开始是成功的一半,保证测试项划分的完整、合理、正确,会直接影响到本次测试的成效。通常建议该阶段工作要花1-2天的时间来考虑,并要在测试过程中随着对软件的深入了解,不断进行调整补充。可千万不要认为把分析设计中的功能模型图搬搬过来就可以了。

    做好测试计划和测试用例的工作的关键是什么? 软件测试

      软件测试每周一问:测试的流程中,测试计划是对整个测试活动的安排,而测试用例则是测试执行的指导,但是,现在仍然有很多的测试人员没有认识到测试计划和测试用例的重要性,在项目时间比较紧张的情况下,计划和用例往往成了形式上的东西,甚至有些测试人员脱离用例,完全凭借自己的经验在执行测试活动,对此,你有什么样的看法?

      会员godn_1981的精彩回答:

      这个问题问的非常好,也确实是很多人有过切肤之痛的问题,对我来说,我也一直在苦苦追寻这个问题的答案,现在我不能说完全找到了,只能说把自己的心得分享一下,希望大家的测试计划和测试用例不再是一个摆设。

      (一) 先说测试计划吧

      诚如magic_zhu所言,现在很多测试人员没意识到测试计划的重要性,很多时候测试计划成为一纸空文,其根本原因在于测试计划缺乏可执行性,也正是因为测试计划缺乏可执行性,导致下一次写计划的时候非常草率,甚至不写,就算写了也是一个花架子应付领导,这样形成了一个恶性循环,久而久之,测试计划纯属一个摆设,我们很多从业者不写测试计划,其理由是反正写了也不能按照计划执行,这种理由真的很荒唐可笑,这是典型的因噎废食,因为你的计划执行性差就不写?这样只能使测试更加失去控制,使你的测试过程彻底无计划,无目标,变成一个放任主流的状态,完全没有受控性。这样的产品质量保证显然是空谈。

      我觉得这个问题的解决方案不是不写,而是想办法写得更好,更有实效性,执行性。这个是问题的关键。

      一个好的测试计划是用来计划测试的,指导整个测试过程。所以一个好的测试计划一定是可以指导测试的,就是对整个测试过程中的人力,时间,资源,策略,范围的一个说明。

      作为一个测试计划来讲,核心的三个要素是时间,资源,范围。(这句话摘自微软的软件测试培训材料),时间就是什么时候做以及要花多久做,资源就是你要调用的人力、机器等资源,范围是你要测试的东西以及测试重点。

      除以上提到的3项之外,还有比较重要的项目有策略(具体就是怎么测)、风险控制(一旦有问题采取什么应急措施)等项目

    要把一个计划做得很有实用性,按照笔者的经验,要注意以下几个方面:

      a. 上面提到的三要素不能少

      b. 测试策略一定要交待清楚,就是大概怎么测试

      c. 需要其他人员(部门)协调的,要交待清楚

      d. 在估计测试所需的时间、人力及其它资源时,尽量做到客观、准确、留有余地,特别是估计开发时间和debug时间,以及要对自己的执行用例速度,回归速度心里有数

      e. 测试计划中每个阶段要明确表明,并且测试阶段的输入、输出文档要清楚

      f. 测试计划中的时间段不宜太长(最好以day为单位),太长就比较模糊,不好度量,不好check

      g. 一定要有风险控制,要不然计划缺乏可执行性

      h. 计划写完之后不是装在兜里,要组织PM和Dev进行评审

      i. 要不断更新计划,记住:每个计划都是动态的,不是一成不变的

      (二) 再说测试用例

      和测试计划一样,测试用例很多时候也沦为形式,这是软件测试的可悲之处,软件测试的依据就是测试用例,如果用例弃之不用,你凭什么做好测试?这个很可笑。但是实际测试过程中很多时候测试用例并没用到实处,笔者认为还是用例实用性问题,有的时候用例洋洋洒洒数万字,到回归测试的时候根本用不上,至于如何选择回归测试用例,我曾经写过另一篇文章,欢迎查阅。

      下面我就个人体会谈谈做好测试用例的关键。

      首先,在做用例之前,要做两件事情。

      第一, 透彻了解程序(需求和架构)。

      第二, 做一个正式的测试设计(最好文档化)。然后再开始写用例。一般写用例的步骤和建房子一样,先搭框架,然后填材料,填材料的时候,主要根据需求做相关的设计,具体的设计方法就是那几种(郑老的书上写的很清楚)

      一般来说,设计一个比较实用的测试用例,注意如下几个方面:

      a. 选用好的用例管理工具(这个很重要,千万不要用word,excel)

      b. 用例一定要及时更新(补充新的想法,删除过时的需求)

      c. 做好用例分级

      d. 做好用例评审,写用例之前可以征询相关人员的意见

      e. 可以考虑结对编写,这个是不错的主意

      f. 要全面,包括功能、性能、兼容性、安全性、易用性、容错性等等

      g. 注意把握适当的颗粒度

    软件测试流程之测试用例的设计与测试执行流程 软件测试

      高效设计测试用例培训结束了,在上机练习的过程中,给他们穿插了sougo输入法的项目测试。之所以选择 sougo输入法,是因为大家对它比较熟悉,不用再熟悉其业务了。而且sougo输入法从1.0.14到现在的4.0有多个版本。每个版本更新前都会有当前版本更新的bug列表,和新增功能点列表。特别适合我们模拟实际的测试过程。这次我们测试使用TD从需求管理到缺陷管理的整个测试过程的管理。经过大家的努力和配合,我们采取边做测试边总结的方法,最后总结出测试工作中的工作流程,下面就是总结出的测试流程,大家看到后多多交流。

      一、需求分析:

      1、列出测试需求(根据需求规格说明书、帮助文档、软件的demo版,利用测试大纲法,以每个窗体为对象,每个窗体里面的控件为单位列出测试功能点。)

      2、需求等级划分,依据需求内容的重要程度划分为:高、中、低等。

      3、划分需求类型,(功能性、易用性、兼容性等)。

      4、评审需求(软件不熟悉的情况下采取以集体的形式整体讨论的方法评审需求或设立专人负责评审)。

      5、需求列入TestDirector(评审后的结果在TestDirector要有体现)。

      二、用例设计:

      1、根据功能点确定人员分工,具体的功能点分配给具体的组员。

      2、测试用例的编写,借助功能演示demo、前一阶段所编写的测试功能点等编写测试用例。

      3、要求组员对自己负责的功能点选择具体的设计测试用例的方法。

      一般选择方法顺序:在考虑好被测试软件本身的特性后,一般首先边界值挑选最具有代表性的数据;然后使用等价类进一步补充;如果要考虑各功能的输入输出关系可以使用因果图、判定表法;但如果输入太多,可以使用正交排列法选择减少测试用例,并且是测试数据均匀分布。这些理性方法都使用完后,在测试执行阶段,可以使用随机测试法或者错误猜测方法进一步丰富你的测试用例。

      4、针对所设计的用例对软件的功能点(以及其他类型的需求)进行需求覆盖。

      我们列测试需求的最主要目的,就是为了完成对需求的覆盖,所以这个是对每一个设计测试用例的人员的基本要求。

      5、用例评审,优化用例的数量确保用例的质量(设定专人评审)。

      6、评审后写入TestDirector中。

      7、挑选冒烟测试用例(抽取用例总数的10%~20%左右进行冒烟测试来反映基本功能)。

    三、测试执行:

      测试执行工作应尽量做到详细,依据测试计划里面的测试的整体安排,但是因为根据实际工作进度要做适当调整。一般情况是当天晚上前安排好明天的具体工作,具体任务可以以测试用例的数量来衡量。测试组长的几个重要工作步骤:

      1、确认人力以及硬件资源是否到位,测试开启时间是否和测试整体计划相一致。

      2、按照测试计划着手准备具体的测试工作。

      3、在TD中,Test Lab里面设置以天为单位安排组员当天的应完成的用例,以及利用TD分析功能总结当天执行用例的情况。

      4、指导组员工作,解决组员工作遇到的疑难问题

      5、做好审查工作,监督组员工作

      6、做好全组当天执行情况的总结

      用例执行通过情况、发现bug数量、以及在各个模块中的分布情况等

      7、将当天任务的执行情况书面化呈报上级领导

      阶段任务完成后书写整个阶段的测试总结报告衡量当前版本软件的质量以及相关的发布问题。

      四、下一版本的工作安排:

      根据软件更新功能的多少分为两种情况:

      1、一种是软件更新功能较少(新增加功能点是前一版本总功能的%5以内),执行回归测试,根据新的功能点增加相关的需求和测试用例,确定新的功能点安排相关人员执行新加的测试用例;

      2、另外一种情况是软件的新增更能点较多,则按照新的系统测试执行,首先进行冒烟测试,通过后进行详细的系统测试,测试过程中重点测试上一版本出现的缺陷(返测)、新增功能以及修改缺陷新增功能所影响到的模块。

      新本版出现,总体按照测试执行阶段的测试工作流程进行测试同时注意特殊问题特殊处理。

      五、提交缺陷(bug)

      提交的缺陷需要测试部门专门人审查,通过审查后的缺陷,提交的TD中。主要审查下面几个方面:

      1、发现的问题是否是缺陷(bug)

      2、是否是重复的缺陷(bug)

      3、缺陷(bug)程度的优先级是否合理

      4、缺陷(bug)修复情况

      看到很多有关测试流程以及测试用例设计的书籍,只是零散的测试知识,但是没有可操作性。希望上面列出的测试用例设计以及测试执行每个阶段的工作的步骤,有利于你更快更有效的进行软件测试工作。

    从软件测试用例看测试的问题及变化 软件测试

      对于一个测试人员来说测试用例的设计与编写是一项必须掌握的能力。但有效的设计和熟练的编写却是一个十分复杂的技术,它需要你对整个软件不管从业务还是功能上都有一个明晰的把握。如何系统、结构的对用例加以规范将直接影响到其后的测试效率和效果,同时测试用例也将用来控制软件的整体执行覆盖,对最后的测试结果给出一种量化的评估标准。

      一、问题:

      许多测试类的书籍都有大幅篇章介绍用例的设计方法,如等价类划分,边界值,错误推断,因果图,判定表等。但实际应用中这些理论却不能给我们很明确的行为指导,尤其是业务复杂,关联模块紧密,输入标准和输出结果间路径众多时,完全的遵循这些方法只能让我们在心理上得到一种满足,而无法真正有效的提高测试效率,并且我们也没有足够的时间和资源编写完备的用例。通常我们只能依靠以前项目的用例编写经验(或习惯),希望能在这一个项目中更加规范,但多数情况下我们规范的只是“书写的规范”,在用例设计上以前存在的问题现在依旧。

      当好不容易用例基本完成,我们却发现面对随之而来的众多地区特性和新增需求,测试用例突然处于一种十分尴尬的境地:

      * 从此几乎很少被执行

      * 已经与程序的实现发生了冲突(界面变动,功能变动)

      * 执行用例发现的bug很少

      * 根本没有时间为新的功能需求增补用例

      * 有时间补充,但用例结构越来越乱

      * 特性的用例与通性用例之间联系不明确(以新增需求为主线列出所有涉及到的更改,但特性与通行之间的数据或业务联系在用例中逐渐淡化)

      知道怎样执行这个用例,但它要说明什么呢?(多数用例给我们的感觉是只见树木,不见森林,只说明某一功能的实现,无法串起)

      通过上面的一系列问题可以看到,似乎测试用例给我们带来的问题远多于益处,也正是因为在实际过程中遇到的问题积累,导致我们有很充分的理由忽视或拒绝用例的应用。

      但没有用例或简略用例的编写我们又会舒服很多么?不言自明,谁也不想倒退发展。

     二、原因:

      事实上我们在测试用例编写和设计上遇到的一系列问题只是一种表面的呈现,究其原因我认为有如下几点:

      1、没有适合的规范

      “适合的规范”或称“本地化的规范”。这是我们在测试过程中遇到的第一个问题,通常也是很容易习惯且淡忘的。我们拥有相当多的流程文档、指导步骤和书本上的定义,但它适合我们当前的项目么?

      每一个测试工程师在进入这个职业的初期都会了解一些测试上的概念和术语,进入公司或项目组后也会进一步学习相应的文档,例如怎样规范编写,怎样定义bug级别,软件实现的主要业务等。但当测试经理开始给我们分配某一模块的用例编写时,又有多少人知道该怎样去写,怎样写算是好?

      在测试论坛中常能看到介绍用例编写方法的帖子,而迷茫于怎样应用到实践的回复也不为少数。为何我们无法在公司和项目组内找到明确且适合的规范?于是我们只得选择从书本或之前的用例中复制,不管是结构还是方式都依赖于以往的经验,我并不是说这样就是错误的,但不能总结成文的经验无法给予测试更多帮助。我们有太多经验,但却没有形成适合的规范。

      2、功能与业务的分离

      我们知道怎样列举一个输入框的用例,但却很少考虑说明这个输入框是用来做什么的,如果仔细分析不难发现,用例中这种功能与业务的分离越来越普遍也越来越明显。

      边界值、等价类划分、因果图,这些用例方法是一种高度提纯的方法,本身就很偏向于功能及代码,所以怎样编写业务的用例我们就从理论上失去了参考。

      复杂的业务会贯穿于整个软件,涉及众多功能点,里面组合的分支更不可胜数。测试用例务求简洁、明确,这一点也与业务“格格不入”。功能用例依赖程序界面,业务描述依赖需求文档。于是我们更偏向于根据已实现的界面编写功能用例,列举出众多的边界值、等价类。流程的操作只有凭借经验和理解,这时测试出的bug是最多的,但我们却无法使这个bug对应到一个用例中(点击一个按钮报出的错误有时原因并不在这个按钮或按钮所在的窗体),只能自己添加note向开发人员指出可能出错的源头。正因为我们没有很好的积累业务上的用例,才使得我们感到执行用例时发现的bug不多。

      用例结构的划分一定程度上也造成了功能和业务的分离,依照界面模块建立文件夹,并在其中新建不同用例,这使得用例从结构上就很难联通起来。

      3、测试未能跟上变化

      变化!想象一下,当我们越来越多的听到开发人员在那里高呼“拥抱变化”“敏捷开发”的时候,测试又有什么举措呢?当地区特性,软件版本越来越多的时候,测试是否在积极响应呢?变化是我们面临的最大挑战,我认为测试未能跟上变化是造成测试过程中遇到种种问题和矛盾的主要原因。

      对需求和程序的变化测试人员的感受是非常深的,测试总是跟在需求和开发后面跑,使得所有风险都压在自己身上。不断压缩的时间和资源使我们只能放弃那些“不必要”的工作:尽快投入测试,尽快发现bug,而非从整体把握软件的质量情况,统筹策略。

      疲于应对的直接影响就是程序质量无法准确度量,进度无法控制,风险无法预估。用例与程序脱节,新增用例混乱和缺少。长此以往我们只得放弃修改、增补用例,甚至放弃之前积累的所有成果。用例变为程序变更的记录摘要,没有测试数据的保留,测试步骤和重点无法体现,新加功能与原来的程序逐渐“脱离”,可能还会出现相互违背的情况,但这我们却无法及时发现。

      永远是变化决定我们的下一步工作,这也是混乱的开始

    三、可能的解决办法:

      上面的问题也许在成熟的公司和项目组内很少遇到,而遇到问题的也需根据不同的情况单独考虑。分析错误并不能给我们带来成功,而成功的特质也不会尽为相同。所以在这里我希望以探讨的方式提出一些可能的解决办法,不拘泥形式,以结果来确定,最适合的就是最好的。

      1、测试驱动开发,用例指导结果,数据记录变化

      “测试驱动开发”(TDD)是一个比较新的概念,在网上可以看到很多介绍文章,它主要讨论如何让开发的代码更奏效(Work)更洁净(Clean),“测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码”。可以看到,TDD是建立在“代码”级别的驱动,但目前我们需要探讨的问题是怎样在黑盒测试中做到“测试驱动开发”。

      首先我们需要纠正一个态度,很多人认为黑盒测试的技术含量不高,可思考可拓展的内容不多,主要的工作就是用鼠标在那里瞎点,于是很多“高级”的技术方法都试图与黑盒测试划清界限。但测试人员发现的bug有80%以上都是黑盒测试发现的,手工操作软件仍是目前检验软件质量最有效的一种方法。

      如何在黑盒测试中做到测试驱动开发?我认为可以从用例级别做起,以业务用例指导实现的结果。

      开发人员通常比较关注技术,对于业务上的理解容易忽视并出现偏差,而需求文档又不会很全面的指出应该实现怎样的结果,这就使得从业务到功能出现一个“阅读上的障碍”,如果最后发现程序错了还需返工,这样耗费的人力物力就非常大了。测试人员和最终用户不用过分关心软件实现的细节,所以以业务用例驱动开发,就是一个比较好的方法。给出一个明确的预期结果,指导开发人员如何界定是否达成目标,同样这也需要运用测试中的各种方法,列举出业务流程里数据的等价类和边界值。

      业务用例的构造要先于程序实现,与需求和开发人员沟通一致,并以此作为一个基准,保证程序实现不会出错,还能对整个软件的进度和质量有一个很好的估计和度量。业务用例可以不关注程序的界面,但一定要有数据的支持。这就是测试主导变化的另一点“数据记录变化”。

      我们不仅要应对变化,还要记录变化,使测试用例成为对程序持续性的监控,数据可以作为最基本、最简单的支持。当一个业务很复杂时可以拆分成段(业务段与程序中以窗体或页面的划分是不一样的),使用典型的用例方法列出实际输入和预期结果。我们希望数据能做到通用和共享,最理想的情况就是建立一个“数据库”,每个业务用例都从“数据库”中取得输入数据和预期结果,这个数据只是针对业务入口和出口的,当程序内部设计变更时,保留的数据不会因此而作废。举一个例子,例如我的程序要从某种文件中读取数据并计算结果,一段时间后程序内部字段增加了,如果是以保存的文件附件方式提供数据,则现在程序很可能就打不开这个文件了。使用“数据库”指导测试人员可以在变化的程序里直接针对业务输入,而不关心程序内部结构。

      再进一步的话“数据库”就开始涉及到程序内部的接口,属于单元和集成测试,这需要开发人员的配合。

      2、为用例标明时间(版本)和优先级

      为测试用例标明时间或版本可以起到一种基准的作用,标明项目进度过程中的每一个阶段,使用例直接和需求基线、软件版本对应。同样这需要规范流程,也是对变更的一种确认和控制。或者可以为用例增加一个状态,指明这个用例目前是否与程序冲突,当程序变更时改变用例的状态,并更新用例版本。

      为测试用例标明优先级可以指出软件的测试重点、用例编写的重点,减少用例回归的时间,增加重点用例执行的次数,帮助项目组新人尽快了解需求,在自动化测试的初期也可以参考这个优先级录制脚本。

      3、功能用例与业务用例分开组织

      为业务用例单独开辟出一种分类,将功能用例与业务用例分开组织,按照不同关注点列举执行路径。业务用例应在开发前或同期编写,帮助测试人员和开发人员明确业务,了解正确流程和错误流程。功能用例更依赖于程序界面的描述,但功能用例并不等于使用说明。对某些模块的等价类、边界值测试会发现很多严重的bug,也许与业务无关,但用户往往很容易这样操作(例如登录名,你是否考虑到很长的名字,或者用户的键盘有问题,总是敲入n多空格在里面,这与业务无关,但程序将会怎样处理?)。

      4、审核用例,结对编写

      测试组长或经理对用例进行审核可以做到用例的补充和校对,但一般情况下是很难做到的,我们可以采用另一种方法,就是结对编写测试用例(前提是你有两个以上的测试人员),内部审核。

      测试用例不是自己编写自己执行,它需要其他测试人员都能读懂且明白目标所指。结对编写可以尽量减少个人的“偏好习惯”,同时也能拓展思维,加强测试重点的确认,小组内部达到统一。一定程度上结对编写也可以减少组长或经理对用例的管理负担,提高组员的参与积极性。

      四、发展

      上面的这些解决方法只是一种建议,具体如何实施到项目中还需根据情况而定。同时即使我们正在积极的寻求改变,我们还是会碰到无数的新问题和新苦恼,也许会比以前更为众多,这是我们必须付出的。

      可以看到测试的发展方向很多很广,即使传统的黑盒测试并不是毫无新意,高级的测人员必须同时在测试技巧和专业领域方面都有很高的“修为”。测试工作怎样更适合我们而发展,将给予我们更多的思考。

    使用NModel自动生成测试用例 软件测试

      在前面的网站自动化系统里面,大概聊了下如何结合Selenium生成的代码和VSTT创建一个简单的自动化系统。虽然在文章网站测试自动化系统—基于Selenium和VSTT、数据驱动测试、在测试代码中硬编码测试数据里,我讲了一些封装代码以及测试数据的技巧,规避后续开发过程中,程序员修改代码时,对测试程序带来的影响。但是每次程序员做出大的改动的时候,测试人员还是要修改大量的测试代码,更糟糕的是,每次大的改动,又涉及到测试覆盖是否足够的问题。为了规避类似的风险,以及帮助测试人员创建尽量多的测试用例,有些人提出了模型驱动测试的概念。

      模型驱动测试的想法和飞机的风洞测试差不多,即根据功能需求说明书,对要测试的程序先建立一个模型,然后有另外一个程序分析这个模型,产生测试用例。就好比为了验证新飞机的气动布局,不可能建一个全比例的飞机,去测试它的布局是否合理;而是建立一个小的飞机模型,模型的气动布局和整机的布局是一致的。飞机模型建好以后,才放到风洞里面测试一下。

      市面上已经有几个做模型驱动测试的工具了,这里我用的是NModel,本来想拿SpecExplorer尝一下鲜的,但最后发现这个想法太贵了—需要安装了Visual Studio 2010才能使用“免费”的SpecExplorer。你可以在这个网页里下载 NModel:

      http://nmodel.codeplex.com/

      在NModel中,测试人员使用C#创建程序的模型,模型创建的原理是:

      1.程序是用来处理数据的,数据也可以称作状态(State);

      2.用户通过程序提供的操作界面来处理数据,操作界面也可以称作动作(Action);

      3.数据的更动 又反过来影响一些动作是否可以执行。

      比如说,使用Word的时候,刚启动程序时是没有任何数据的,这个时候有些动作,例如“保存”是禁用的。当用户通过“新建”这个动作创建了一个新文件(数据),这个新文件反过来激活“保存”动作。

      因此当测试人员建模时,他要做的工作就是将程序的动作和状态抽象出来,并且描述动作和状态相互影响的过程。

      来看一个例子,假如现在要测试一个用户登录程序,登录界面就是一个输入用户名和密码的文本框,而程序支持的用户有两种:管理员和授权用户。

    先来做第一步,将动作和状态抽象出来,程序的状态应该包括:

      1.程序状态:运行状态和未运行状态。

      2.用户类型:管理员和授权用户。

      3.密码:正确的密码和错误的密码。

      4.登录状态:成功登录和登录失败。

      动作应该包括:

      1.登录:即用户在界面上输入用户名和密码。

      2.注销。

      第二步,编写C#?程序建模。

      状态已经抽象出来了,在NModel里面,抽象出来的状态一般是用枚举值表示的。

      MILY: 'Courier New'">public enum ModeState { Initializing, Running }

      public enum User { Authenticated, Administrator }

      public enum Password { Correct, Incorrect }

      public enum LoginStatus { Success, Failure }

      接下来模拟动作:

      [Feature("Login")]

      public static class Login

      {

      public static Map ActiveLoginRequests = Map.EmptyMap;

      [Requirement("Send username and password to the server to log in.")]

      [Action]

      public static void Login_Start(User user, Password password)

      {

      if (password == Password.Correct)

      ActiveLoginRequests = ActiveLoginRequests.Add(user, LoginStatus.Success);

      else

      ActiveLoginRequests = ActiveLoginRequests.Add(user, LoginStatus.Failure);

      }

      public static bool Login_StartEnabled()

      {

      return WebSiteModel.State == ModeState.Running;

      }

      public static bool Login_StartEnabled(User user)

      {

      return !ActiveLoginRequests.ContainsKey(user) &&

      !WebSiteModel.UsersLoggedIn.Contains(user);

      }

      [Requirement("It should be possible to log out from any page")]

      [Action]

      public static void Logout(User user)

      {

      WebSiteModel.UsersLoggedIn = WebSiteModel.UsersLoggedIn.Remove(user);

      }

      public static bool LogoutEnabled()

      {

      return WebSiteModel.State == ModeState.Running;

      }

      public static bool LogoutEnabled(User user)

      {

      return WebSiteModel.UsersLoggedIn.Contains(user);

      }

      }

      上面的代码稍微解释一下,标注了[Action]的函数,就是抽象出来的程序所支持的动作,例如Logout;而在动作函数名后面加上Enabled的函数,是NModel用来判定指定的动作是否可以执行,例如LogoutEnabled函数。

    Feature属性,我们现在不讲,NModel用这个属性来标识一个大的功能。

      另外要注意的是,在NModel里面,集合Set、Map是不可变的,即创建好了以后,就不能从里面删除和添加新元素了。每一次修改都会创建一个新的Set、Map实例。所以你会看到类似下面的用法:

      ActiveLoginRequests = ActiveLoginRequests.Add(user, LoginStatus.Success);

      最后,你需要采用一个工厂模式的方式,告诉NModel分析哪一个Feature,创建测试用例

      public class WebSiteModel

      {

      public static ModeState State = ModeState.Initializing;

      public static ModelProgram CreateLoginModel()

      {

      return new LibraryModelProgram(typeof(WebSiteModel).Assembly,

      "TrainMode", new Set("Login"));

      }

      [Action]

      public static void Initialize()

      {

      State = ModeState.Running;

      }

      public static bool InitializeEnabled() { return State == ModeState.Initializing; }

      public static Set UsersLoggedIn = Set.EmptySet;

      }

      编译通过以后,先用NModel提供的图形化模型验证工具查看一下生成的模型是否正确。NModel自带的mpv.exe是用来验证模型的,但是 mpv.exe使用到一个图形布局程序GLEE需要单独下载,下载后,将Microsoft.GLEE.*.dll拷贝到NModel的bin文件夹里,就可以执行mpv.exe了。

      使用下面的命令查看生成的模型:

      "d:\Program Files\NModel\bin\mpv.exe" /r:TrainMode.dll TrainMode.WebSiteModel.CreateLoginModel

      生成的模型应该如下图所示:

      

      下图是放大后的结果:

    2011软件水平考试软件测评师测试技术辅导 

      如果查看模型以后,觉得没有问题,就可以生成测试用例了,这里先生成手工的测试用例,下一篇再介绍如何生成自动化的测试用例。

    "d:\Program Files\NModel\bin\otg.exe" /r:TrainMode.dll /f:scenario.txt TrainMode.WebSiteModel.CreateLoginModel

      下面是生成的测试用例:

      TestSuite(

      TestCase(

      Initialize(),

      Login_Start(User("Authenticated"), Password("Correct")),

      Login_Start(User("Administrator"), Password("Incorrect")),

      Logout(User("Authenticated"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Administrator"), Password("Correct")),

      Login_Start(User("Authenticated"), Password("Correct")),

      Logout(User("Administrator")),

      Logout(User("Authenticated"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Administrator"), Password("Incorrect")),

      Login_Start(User("Authenticated"), Password("Incorrect"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Authenticated"), Password("Incorrect")),

      Login_Start(User("Administrator"), Password("Correct")),

      Logout(User("Administrator"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Administrator"), Password("Incorrect")),

      Login_Start(User("Authenticated"), Password("Correct"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Administrator"), Password("Correct")),

      Login_Start(User("Authenticated"), Password("Incorrect"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Administrator"), Password("Correct")),

      Logout(User("Administrator")),

      Login_Start(User("Authenticated"), Password("Correct"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Authenticated"), Password("Correct")),

      Logout(User("Authenticated")),

      Login_Start(User("Administrator"), Password("Correct"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Administrator"), Password("Correct")),

      Logout(User("Administrator")),

      Login_Start(User("Authenticated"), Password("Incorrect"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Authenticated"), Password("Correct")),

      Login_Start(User("Administrator"), Password("Correct")),

      Logout(User("Authenticated")),

      Logout(User("Administrator"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Authenticated"), Password("Incorrect")),

      Login_Start(User("Administrator"), Password("Incorrect"))

      ),

      TestCase(

      Initialize(),

      Login_Start(User("Authenticated"), Password("Correct")),

      Logout(User("Authenticated")),

      Login_Start(User("Administrator"), Password("Incorrect"))

      )

      )

    LoadRunner中参数化中参数迭代规则详解

      Each Occurrence

      每次遇到参数就进行更新。

      多次使用同一参数,而且没有什么关联,例如随机数。

      Each Iteration

      每次迭代时发生更新。 如果参数出现几次,虚拟用户用同一个数值。

      适用同一个关联的参数。

      Once

      所有的地方都用同一个数值,包括所以的迭代。

      文件类型参数分派方法

      Sequential

      按照顺序访问。

    MILY: StoneSerif; FONT-SIZE: 12pt" lang=EN-US>

    更新方式

    Sequential

    例子

    1.

    Each Iteration

    所有用户每次迭代同时取下一个数值。

    All the Vusers use Kim in the first iteration, David in the second iteration, Michael inthe third iteration, etc.

    2.

    Each Occurrence

    所有用户每次遇到同时取下一个数值,即使在同一个迭代。

    All the Vusers use Kim in the first occurrence, David in the second occurrence,Michael in the third occurrence, etc.

    3.

    Once

    所有用户第一次迭代时同时取第一个值,该用户所有的子迭代值不变。

    If you specified Once, all Vusers take Kim for all iterations.

    First Name

    Kim

    David

    Michael

    Jane

    Ron

    Alice

    Ken

    Julie

      没有足够的值,从第一行开始重新取值。

    Random:每个虚拟用户开始运行时安排随机的数值。

    更新方式

    Random

    1.

    Each Iteration

    每次迭代时,随机从数据表中取数。

    2.

    Each Occurrence

    每次遇到随机取一个数值,即使在同一个迭代。

    3.

    Once

    第一次迭代时随机取值,改用户所有的子迭代值不变。

      Unique

      The Unique method assigns a unique sequential value to the parameter for

      each Vuser.

    更新方式

    Unique

    例子

    1.

    Each Iteration

    每个用户每次迭代时,虚拟用户取下一个不同的数值。

    If you specified Each Iteration, for a test run of 3 iterations, the first Vuser takes Kim in the first iteration,David in the second, and Michael in the third. The second Vuser takes Jane, Ron, and Alice. The third Vuser,Ken, Julie, and Fred.

    2.

    Each Occurrence

    每个虚拟用户每次遇到取一个新的不同的数值,即使在同一个迭代。

    lr自己决定。

    3.

    Once

    每个第一次迭代时取不同值,该用户所有的子迭代值不变。

    If you specified Once, the first Vuser takes Kim for all iterations

    the second Vuser takes David for all iterations, etc.

      数据必须足够,例如20个虚拟用户,5次迭代,至少要有100个数据。

    性能测试工具Loadrunner中日志参数的设置与使用

      一、Run-Time Setting日志参数的设置

      在loadrunner 的vuser菜单下的Run-Time Setting的General的LOG选项中可以对在执行脚本时Loadrunner对日志 的操作行为进行定义,下面我们在逐一介绍:

      1、 Enable logging启用日志记录

      如果选中该选项Loadrunner在执行脚本时,进行日志的记录,否则不记录日志

      2、 Send messages only when an error occurs 仅在出错时发送消息

      也称为 JIT (实时)消息传递,仅当错误发生时才写入日志,选择该选项后则可以设置高级选项,指明日志缓存的大小,loadrunner默认的日志到小为1k

      3、 Always send messages

      始终发送消息

      4、 Standard log

      标准日志:创建在脚本执行期间发送的函数和消息的标准日志,供调试时使用。

      对于大型负载测试 场景、优化会话或配置文件禁用此选项。

      如果日志记录级别设置为“标准”,当把脚本添加到场景、会话步骤或配置文件

      中时,日志记录模式将被自动设置为“Send messages only when an error occurs”。但是,如果日志记录模式被禁用或者设置为“扩展”,则将脚本添加到场景、会话步骤或配置文件中将不会影响其日志记录设置。

      5、 Extended log-----Parameter substitution

      参数替换:选择此选项可以记录指定给脚本的所有参数及其相应的值

      当脚本进行参数化、插入事务、关联等优化后,在执行脚本过程中,参数化的值、事务所耗时间、关联函数取出的变量值均会在日志中输出,这个选项对调试脚本查看参数化取值、关联取值是否正确有着重要的作用

      6、 Extended log-----Data returned by server

      选择此选项可以记录服务器返回的所有数据。

      Loadrunner会将所有对服务器发出请求后的response情况记录在日志中,从这个日志中可以查看到服务器对请求的回应是否正确,在使用关联取值时往往需要到该日志中查看需要关联的值,从而确认所取数据左右边界。

    7、 Extended log-----Advanced trace 高级跟踪

      选择此选项可以记录 Vuser 在会话期间发送的所有函数和消息。

      调试 Vuser 脚本时,该选项非常有用。

      二、日志函数的使用

      Loadrunner提供了一下几个message函数:

      1、lr_message

      int lr_message (const char * format, exp1, exp2,...expn.);

      中文解释:lr_message函数将信息发送到日志文件和输入窗口。在VuGen中运行时,输入文件为output.txt。

      例如:

      char* abort="aborting";

      lr_message ("login failed: %s", abort);

      在日志中将会看到:login failed: aborting

      2、lr_log_message

      int lr_log_message (const char * format, exp1, exp2,...expn.);

      中文解释:lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序),而不是发送到输出窗口。通过向日志文件发送错误消息或其他 信息性消息,可以将该函数用于调试。

      3、lr_error_message

      int lr_error_message (const char *format, exp1, exp2,...expn. );

      中文解释:lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。

      如果Run-time settings > General > Miscellaneous >Continue on error未被选中,当脚本执行到此处时将终止执行,这个函数所输出的错误级别较高的信息,所以一般情况下如果使用该函数时选中Continue on error

      4、lr_output_message

    Loadrunner中若干message函数的使用方法详解

      Loadrunner提供了若干message函数,以在脚本回放中和脚本运行中,对外输入信息,主要的函数有:

      【lr_message】

      int lr_message (const char *format, exp1, exp2,...expn.);

      中文解释:lr_message函数将信息发送到日志文件和输入窗口。在VuGen中运行时,输入文件为output.txt。

      【lr_log_message】

      int lr_log_message (const char *format, exp1, exp2,...expn.);

      中文解释:lr_log_message函数将消息发送到Vuser或代理日志文件(取决于应用程序),而不是发送到输出窗口。通过向日志文件

      发送错误消息或其他信息性消息,可以将该函数用于调试。

      【lr_error_message】

      int lr_error_message (const char *format, exp1, exp2,...expn. );

      中文解释:lr_error_message函数将错误消息发送到输出窗口和Vuser日志文件。要发送不是特定错误消息的特殊通知,请使用lr_output_message。

      【lr_output_message】

      int lr_output_message (const char *format, exp1, exp2,...expn.);

      中文解释:lr_output_message函数将带有脚本部分的行号的消息发送到输出窗口和日志文件。

      【lr_vuser_status_message】

      int lr_vuser_status_message (const char *format);

      中文解释:lr_vuser_status_message函数向控制器或优化模块控制台的vuser窗口的“状态”区域发送字符串。它还将该字符串发送

      到vuser日志。从VuGen运行时,消息被发送到output.txt。

    如何在LoadRunner中监控oracle数据库

      环境相关信息概述:

      LoadRunner 9.0

      Sitescope 9.0

      Windows 2003

      Oracle database 10g

      1. 使用LR自带的监控引擎

      1.1.在LR的controller上安装oracle客户端

      这一步就不用说了,安装直接Setup,安装就OK了。

      1,安装完后,先配置一下Net Configuration Assistant。记住配置的服务名。

      配置成功会显示:正在连接...测试成功。

      2,用sqlplus连接一下,看是否可以连接成功,打开sqlplus输入oracle用户名密码和主机字符串。

      查看是否登录成功

    1.2.添加oracle计数器

      3,登录成功后,打开LR的controller.,在可用图中选择oracle,点击add measurements,再点击Advanced,如下所示:

    2011软件水平考试软件测评师测试技术辅导  

      这里我们用LR native monitors。

      4,在Monitored Server Machines区域,添加oracle服务器所在的IP。

      5,再在Resource Measurements on:IP区域点击添加,弹出对话框如下:

       2011软件水平考试软件测评师测试技术辅导

      6,输入相应的信息,这里的orcl就是前面在Net Configuration Assistant配置的服务名。

      7,点击OK,这里我们应该可以看到可以添加oracle的计数器了,如下所示:

      

      2. 使用Sitescope引擎

    不需要配置Net Configuration Assistant。

      1,在第一个图choose monitor engine中选择sitescope,然后在在Monitored Server Machines区域点击Add如下所示:

       2011软件水平考试软件测评师测试技术辅导

      在这里可以选择本地或者其他机器的sitescope,如果sitescope启用了account的验证,也要写上相应的用户名密码。

      2,在Resource Measurements on:IP区域点击添加,弹出对话框如下:

       2011软件水平考试软件测评师测试技术辅导

      3,输入信息如图。点击OK,如下:   2011软件水平考试软件测评师测试技术辅导

      至此就可以监控oracle了。

    软件测试工作量估算之功能点估算法

      从上个世纪70年代开始,一些软件企业就开始引入“功能点分析算法”,来评估软件功能的规模,然后便可以对软件开发的成本和工期,进行精确的度量,也可以对开发团队的生产率进行考核评估。半个世纪以来,很多种不同的功能点算法模型被建立起来,Mk II功能点算法是其中一种比较常用的模型。

      随着淘宝网站的高速发展,淘宝开发团队规模也不断增大,于是必然要面对管理问题。人数的增多必然带来管理层级的增多,这样很容易出现管理结构的臃肿,管理成本增高。如果我们引入一种简单而且科学的工作度量模型,让每个人每个团队的工作质量和效率用数字来说话,便可以促进管理结构的扁平,简化管理过程,每个管理者可以管理更多的人,并且对下属的工作了如指掌。

      功能点算法就是为了解决如何度量工作效率的问题,而工作质量主要是依靠分析各种Bug数据,我们在别的文章里讨论。

      首先我们讲一下MVC模型,这是目前WEB开发的一种非常流行的软件架构模式。它把WEB应用程序定义为3个部分,每个部分负责完成特定的任务:

      Model 模型

      View 视图

      Controller 控制器

      Model主要与数据库交互,把数据表转换成对象,并且实现基本的数据读写逻辑,比如在淘宝网,商品就是一个Model。View负责实现界面的设计,我们浏览网页看到的WEB界面控件,比如按钮、文本框、GRID都是在View中定义的,设计View主要是用Html和JS。用户在View层进行的各种操作(比如点击按钮),就会启动Controller里的函数,主要的业务逻辑代码,都写在Controller里了,其实也就是对各种Model进行增删改查,比如购买一个商品。

      关于MVC的更多详细说明请参考维基百科。

      接下来我们介绍MkII功能点算法,淘宝测试选择MkII的主要原因是,它的算法和MVC模式非常的吻合,可以说是黄金搭档。

      MkII功能点算法是这样:先要给各个功能模块划分逻辑事务,然后针对每个逻辑事务,分析输入DET(Data Element Type)和输出DET的数量,以及关联的实体类型数量,再根据一个算法公式,计算出功能点指数:

      功能点=输入DET×0.58+实体类型×1.66+输出DET×0.26

      逻辑事务指用户在WEB应用程序中的原子操作。很多开发团队都会设计UseCase,一般来说一个UC对应一个逻辑事务。注意:逻辑事务一定是记录用户行为的,而不是程序内部的处理逻辑。不过在实际的分析中,我们发现逻辑事务的个数,往往要大于UC的个数,这是正常的,主要因为很多UC包含的信息很多。

     我们用淘宝的“购买商品”来举例说明怎么划分逻辑事务,先来看购买商品的页面:

      

      在这个页面中,左边一块是显示商品的简要信息,这是一个逻辑事务:“查看商品信息”,右边最上面一个收货地址的radio button,也是一个:“展示我所有的收货地址”,右边下面一组文本输入框加一个按钮,是一个:“为当前商品创建一个订单”。

      在MVC中,逻辑事务对应Controller,每个逻辑事务都可以在Controller里面找到一个public函数。

      再讲一下输入DET和输出DET。比如刚才的“为当前商品创建一个订单”这个事务,页面上输入信息的控件,都是输入DET,比如文本框、按钮,都是输入DET。这个事务大约有10个输入DET:“收货地址”、“购买数量”、“运送方式”等等。输出DET指应用程序给用户提供的所有的提示信息,以文字提示的方式知会用户。比如“购买成功”、“您没有绑定支付宝,不能购买”、“商品库存不足,无法购买”、“购买数量必须输入整数”等等。这个事务的输出DET数量大约是20个。

      在MVC中,输入DET和输出DET对应View。每个输入DET和输出DET都能在View中找到对应控件。

      最后讲引用实体,在创建订单事务里,引用的实体有很多。订单成功后要扣减商品库存,因此商品算1个;订单本身是1个;订单需要同步生成支付宝交易,支付宝算1个;还有物流记录算1个,等等,大约是5个实体以上。

      在MVC中,引用实体对应Model。

      到此为止这个逻辑事务的数据收集完整,代入公式计算得出结果:

      10×0.58+5×1.66+20×0.26=19.3

      当然这只是一个DEMO,数字都是估算的,实际情况肯定比这个要复杂,算出的功能点指数就会多一些。需要注意的是,使用MkII算法计算出的功能点指数,只是一个数值,代表应用程序的功能规模,和我们平时听到开发说的“我修改了一个功能点”,概念上是不同的。所以我们用“功能点指数”这个概念,不过为了沟通起来方便,还是简化成“功能点”了。

      MkII功能点算法是非常适合于淘宝这样的互联网公司的。不过由于WEB应用程序的交互日趋复杂,JS被大量使用,因此在实践中,如何划分逻辑事务,如何统计输入输出,还需要进一步的研究。

  • 功能测试用例的书写方式

    2011-02-16 12:20:50

    软件功能测试用例的书写方式 软件测试

      功能性测试用例

      1. 测试的来源,即测试的需求

      测试用例的主要来源有:

      1) 需求说明”及相关文档

      2)相关的设计说明(概要设计,详细设计等)

      3)与开发组交流对需求理解的 记录(可以是开发人员的一个解释)

      4)已经基本成型的UI(可以有针对性地补充一些用例)

      简而言之,所有你能得到的项目文档,都尽量拿到。 从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。

      2. 用例的组织方式

      不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。

      用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组 织在一起。

      在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未 执行”的用例的状态,共3种状态。

      即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通 过”。将同一状态的用例组织在一起。

      至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。

      3. 用例与其他材料的关联方式,即如何解决用例跟踪的问题 测试用例面临的比较大的风险有:

      需求的变更、设计的修改、需求的错误和遗漏等等。

      由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的 变更势必引起测试用例的变更。

      如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功 能点和测试用例间的关联关系。

      这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增 加了新的功能点。

      重要和困难的是,不手头的资料和信息一定要是最新的。

      4. 一个好的用例的表述要点,即用例中应当包含的信息

  • 用例设计与测试执行流程

    2011-02-16 11:57:12

    软件测试流程之测试用例的设计与测试执行流程 软件测试

      高效设计测试用例培训结束了,在上机练习的过程中,给他们穿插了sougo输入法的项目测试。之所以选择 sougo输入法,是因为大家对它比较熟悉,不用再熟悉其业务了。而且sougo输入法从1.0.14到现在的4.0有多个版本。每个版本更新前都会有当前版本更新的bug列表,和新增功能点列表。特别适合我们模拟实际的测试过程。这次我们测试使用TD从需求管理到缺陷管理的整个测试过程的管理。经过大家的努力和配合,我们采取边做测试边总结的方法,最后总结出测试工作中的工作流程,下面就是总结出的测试流程,大家看到后多多交流。

      一、需求分析:

      1、列出测试需求(根据需求规格说明书、帮助文档、软件的demo版,利用测试大纲法,以每个窗体为对象,每个窗体里面的控件为单位列出测试功能点。)

      2、需求等级划分,依据需求内容的重要程度划分为:高、中、低等。

      3、划分需求类型,(功能性、易用性、兼容性等)。

      4、评审需求(软件不熟悉的情况下采取以集体的形式整体讨论的方法评审需求或设立专人负责评审)。

      5、需求列入TestDirector(评审后的结果在TestDirector要有体现)。

      二、用例设计:

      1、根据功能点确定人员分工,具体的功能点分配给具体的组员。

      2、测试用例的编写,借助功能演示demo、前一阶段所编写的测试功能点等编写测试用例。

      3、要求组员对自己负责的功能点选择具体的设计测试用例的方法。

      一般选择方法顺序:在考虑好被测试软件本身的特性后,一般首先边界值挑选最具有代表性的数据;然后使用等价类进一步补充;如果要考虑各功能的输入输出关系可以使用因果图、判定表法;但如果输入太多,可以使用正交排列法选择减少测试用例,并且是测试数据均匀分布。这些理性方法都使用完后,在测试执行阶段,可以使用随机测试法或者错误猜测方法进一步丰富你的测试用例。

      4、针对所设计的用例对软件的功能点(以及其他类型的需求)进行需求覆盖。

      我们列测试需求的最主要目的,就是为了完成对需求的覆盖,所以这个是对每一个设计测试用例的人员的基本要求。

      5、用例评审,优化用例的数量确保用例的质量(设定专人评审)。

      6、评审后写入TestDirector中。

      7、挑选冒烟测试用例(抽取用例总数的10%~20%左右进行冒烟测试来反映基本功能)。

    三、测试执行:

      测试执行工作应尽量做到详细,依据测试计划里面的测试的整体安排,但是因为根据实际工作进度要做适当调整。一般情况是当天晚上前安排好明天的具体工作,具体任务可以以测试用例的数量来衡量。测试组长的几个重要工作步骤:

      1、确认人力以及硬件资源是否到位,测试开启时间是否和测试整体计划相一致。

      2、按照测试计划着手准备具体的测试工作。

      3、在TD中,Test Lab里面设置以天为单位安排组员当天的应完成的用例,以及利用TD分析功能总结当天执行用例的情况。

      4、指导组员工作,解决组员工作遇到的疑难问题

      5、做好审查工作,监督组员工作

      6、做好全组当天执行情况的总结

      用例执行通过情况、发现bug数量、以及在各个模块中的分布情况等

      7、将当天任务的执行情况书面化呈报上级领导

      阶段任务完成后书写整个阶段的测试总结报告衡量当前版本软件的质量以及相关的发布问题。

      四、下一版本的工作安排:

      根据软件更新功能的多少分为两种情况:

      1、一种是软件更新功能较少(新增加功能点是前一版本总功能的%5以内),执行回归测试,根据新的功能点增加相关的需求和测试用例,确定新的功能点安排相关人员执行新加的测试用例;

      2、另外一种情况是软件的新增更能点较多,则按照新的系统测试执行,首先进行冒烟测试,通过后进行详细的系统测试,测试过程中重点测试上一版本出现的缺陷(返测)、新增功能以及修改缺陷新增功能所影响到的模块。

      新本版出现,总体按照测试执行阶段的测试工作流程进行测试同时注意特殊问题特殊处理。

      五、提交缺陷(bug)

      提交的缺陷需要测试部门专门人审查,通过审查后的缺陷,提交的TD中。主要审查下面几个方面:

      1、发现的问题是否是缺陷(bug)

      2、是否是重复的缺陷(bug)

      3、缺陷(bug)程度的优先级是否合理

      4、缺陷(bug)修复情况

      看到很多有关测试流程以及测试用例设计的书籍,只是零散的测试知识,但是没有可操作性。希望上面列出的测试用例设计以及测试执行每个阶段的工作的步骤,有利于你更快更有效的进行软件测试工作。

  • 软件评测师考前冲刺复习资料

    2011-02-16 11:56:20

    2010年软考软件评测师考试时间为11月13日举行。离考试还有将近16天的时间,为了让广大考生顺利的通过考试,考试吧特整理了软考软件评测师冲刺资料,帮助考生做最后的冲刺。预祝各位考生顺利通过考生。
    考前须知 知识点突破 历年真题 学习方法与答题技巧

     第一步:考前须知

      2010年下半年全国计算机软考软件评测师考试时间:11月13日

      1、 考试用具早早准备:考试前当晚准备好两支2B的铅笔,检查准考证、身份证等是否全部备齐,避免第二天早上慌慌张张。

      2、 晚上早入睡:考场上的正常发挥,与考试前晚上的休息有关。晚上早点睡觉、不要熬夜看书,以免第2天考试的时候无精打采。

      3、 白天早起提前到考场:掌握好考试时间。第2天早点起来,打的去考场,以免路上颠簸,一年也就两次考试,打的吧,图个愉快轻松的心情,同时,早点出发避免塞车。早到后,在考场附近解决早餐问题。少喝水,早餐后上厕所,考试时想上厕所是一件非常痛苦的事情。

     第二步:知识点突破

      在考试之前,考生可以通过通读资料,并且梳理记忆考点全面突破。

    2010软件水平考试软件评测师考前复习资料汇总
    序号 资料 查看
    1 2010年软件水平考试软件测评师自动化测试汇总 查看
    2 2010年软考软件测评师软件测试文档及图表汇总 查看
    3 2010年软考软件评测师测试术语及名词解释汇总 查看
    4 2010年软考软件评测师测试工作管理与规范汇总 查看
    5 2010软考软件评测师软件测试流程及步骤汇总 查看
    6 2010软考软件评测师软件测试的分类及方法汇总 查看
    7 2010软考软件测试中面临的问题及解决办法汇总 查看

     第三步:历年真题

      历年真题往往是出题的蓝本,历年真题能直接的体现出题人的思路和重点,所以考生要把历年真题吃透。为了方便考生查找资料,考试吧特整理了以下历年真题,考生还可以到考试吧模拟考场用真题自我检验:

    软考嵌入式系统设计历年真题汇总(2007年-2010年)
    年份 上午题 上午题
    2010(上半年) 上午试题  答案 下午试题  答案
    2009(下半年) 上午试题  答案 下午试题  答案
    2009(上半年) 上午试题  答案 下午试题  答案
    2008(下半年) 上午试题  下午试题
    2008(上半年) 上午试题  下午试题
    2007(上半年) 上午试题 下午试题

     第四步:学习方法与答题技巧

      软件评测师考试有什么特点?如何备考才能拿到高分?往年考生有哪些成功经验?为了帮助考生提高复习效率,考试吧特别整理汇总了以下学习方法:

       这次考试通过了软件评测师考试,为了给后来人帮助,特说说我的复习方法。

      教新手怎么入手软件测试

      当你刚踏入测试团队的时候,你可能无从下手。拿来软件就是一顿乱点。其实要做一个好的测试人员。一定要有一份好的计划。所以测试计划就是测试的开始......详情

       拿到试题,仔细看题,不要匆忙做答,尤其是有论文的,先要酝酿好,但是时间也要把握好。答题卡一定要边答边填涂,不要等到最后一起涂!万一没时间了,上午题就没分了!不会的问题不要总是在想,只需要在卷上做个记号,如果有时间的话再回头看!不要因为捡芝麻而丢西瓜!........详情

      考试吧预祝各位考试顺利通过2010年软考软件评测师考试。

  • 2011年软件水平考试软件测评师基础知识辅导(2)

    2011-02-16 11:50:14

    测试用例设计方法

      白盒测试基本技术:控制流图、代码覆盖率分析(Code Coverage Analysis)。

      白盒测试方法:从总体上可划分为静态测试和动态测试;按测试操作的实施方式划分为手工测试和借助于工具的自动化测试等。

      白盒测试的静态测试方法:代码检查法、静态结构分析法、代码质量度量法等。

      白盒测试的动态测试方法:功能确认与接口测试、逻辑覆盖分析法、基本路径测试法、性能分析、内存分析等。

      动态测试通常在静态测试之后进行。

      其他白盒测试方法:域测试(Domain Testing)、程序变异测试、符号测试、数据流测试、Z路径测试。

      常用的黑盒测试用例设计方法有:等价类划分法、边值分析法、错误猜测法、因果图方法等,其他的一些测试方法还有判定表驱动法、正交试验法、功能图法,以及场景法等。

      面向对象测试关注于设计合适的操作序列以测试类的状态。

      测试用例设计方法的主要原则包括:

      (1)对每个测试用例应当给予特殊的标识,并且还应当与测试的类有明确的联系。

      (2)测试目的应当明确。

      应当为每个测试用例开发一个测试步骤列表。这个列表应包括以下一些内容:

      (1)列出所要测试的对象的专门说明;

      (2)列出将要作为测试结果运行的消息和操作;

      (3)列出测试对象可能发生的例外情况;

      (4)列出外部条件;

      (5)列出为了帮助理解和实现测试所需要的附加信息。

    软件自动化测试

      自动化测试可以帮助测试人员做到:(1)提高测试执行的速度;(2)提高运行效率;(3)保证测试结果的准确性;(4)连续运行测试脚本;(5)模拟现实环境下受约束的情况。

      自动化测试不能做到的是:(1)所有测试活动都可以自动完成;(2)减少人力成本;(3)毫无成本的得到;(4)降低测试的工作量。

    面向对象软件的测试

      面向对象技术主要包括6个核心概念:对象、消息、接口、类、继承、多态。

      面向对象的开发模型实质是将软件测试过程分成3个阶段,即面向对象分析(OOA)、面向对象设计(OOD)和面向对象编程(OOP)。

      面向对象测试的类型分为:面向对象分析的测试(OOA Test)、面向对象设计的测试(OOD Test)、面向对象编程的测试(OOP Test)、面向对象单元测试(OO Unit Test)、面向对象集成测试(OO Integration Test)、面向对象系统测试(OO System Test)。

      面向对象测试类型的另一种划分:模型测试、类测试(用于代替单元测试)、交互测试(用于代替集成测试)、系统(包括子系统)测试、接收测试、部署测试。

      传统测试模式与面向对象的测试模式的最主要的区别在于,面向对象的测试更关注对象而不是完成输入/输出的单一功能,这样的话测试可以在分析与设计阶段就先行介入,便得测试更好的配合软件生产过程并为之服务。与传统测试模式相比,面向对象测试的优点在于:更早地定义出测试用例;早期介入可以降低成本;尽早的编写系统测试用例以便于开发人员与测试人员对系统需求的理解保持一致;面向对象的测试模式更注重于软件的实质。

      面向对象测试的过程:(1)指定范围;(2)指定深度;(3)指定已创建的被测试模块的基本要求(上一个阶段需要提供的接口);(4)以基本模型的内容为输入来设计测试用例作为评估标准;(5)生成测试覆盖度量标准;(6)试用测试清单执行静态分析,确保被测模块与基本模型的一致性;(7)执行测试用例;(8)如果覆盖不足以检测所有的活动,就需要分解测试工作,并且使用传统测试用例的方式来警醒,或者中断测试,重新测试传统测试用例。

    Web应用测试

      Web应用测试类型:功能测试、性能测试、可用性测试、兼容性测试和安全测试。

      根据测试对象的不同,Web功能测试又分为链接测试、表单测试、Cookies测试、设计语言测试、数据库测试。

      Web性能测试是要是确保Web应用系统达到要求的性能,一般用最大运行时间、吞吐率、响应时间描述。Web应用在极端条件下的性能测试又分为负载测试和压力测试。负载测试是为了测量Web系统在某一负载级别上的性能,以保证Web系统的在需求范围内能正常工作。负载级别可以是某个时刻同时访问Web系统的用户数据,也可以是在线数据处理的数量。压力测试是指实际破坏一个Web应用系统时测试系统的反映。压力测试是测试系统的限制和故障恢复能力,也就是测试Web应用系统会不会崩溃,在什么情况下会崩溃。压力测试侧重于确定系统崩溃时的用户负载量。压力测试的区域包括表单、登录和其它信息传输页面等。

      Web性能测试:(1)连接速度测试;(2)负载测试;(3)压力测试。

      Web可用性测试:(1)导航测试;(2)图形测试;(3)内容测试;(4)整体界面测试。

      Web兼容性测试:(1)平台测试;(2)浏览器测试。

      Web安装性测试,就是测试Web应用防止未授权用户访问或故意破坏等情况下的能力,其重点是测试SSL(安全套接字)配置、登录模块、事务完整性等方面。

    网络测试

      网络性能测试的主要依据是:(1)双方在规划设计阶段共同认可的网络性能指标;(2)有关的国家标准或行业标准。

      网络性能测试的具体内容应以网络设计方案为准,但一般包括以下内容:

      (1)网络容量测试:最大容量和有效容量;

      (2)网络响应时间测试:检测网络系统完成一系列任务所需的时间;

      (3)网络可靠性测试;

      (4)网络吞吐量测试;

      (5)网络配置规模测试;

      (6)网络瓶颈测试;

      (7)衰减测试。

      网络性能测试分类:(1)网络可接受性测试;(2)网络升级测试;(3)网络设备评估测试。

      网络性能测试的对象:(1)路由器、集线器、交换机和网桥;(2)网段;(3)全局网;(4)网络操作系统;(5)文件服务器;(6)工作站。

      网络应用测试的主要内容:(1)性能测试;(2)功能测试;(3)网络应用负载测试;(4)应用系统响应时间测试;(5)应用系统升级测试。

    安全测试

      软件安全性是与防止对程序和数据的非授权的故意或意外访问的能力相关的软件产品属性。软件安全性的测试包括程序和数据安全性的测试。

      安全测试内容:用户认证机制、加密机制、安全防护策略、数据备份与恢复、防病毒系统。

      安全测试策略:

      (1)安全防护体系:实体安全、平台安全、数据安全、应用安全、通信安全、运行安全、组织安全、管理安全。

      (2)安全保护国家标准:用户自主保护级、系统审计保护级、安全标记保护级、结构化保护级、安全域级保护级。

      为保证实体、数据、平台、应用、运行等的安全,主要采用以下几种安全防护技术:防火墙、入侵检测系统、漏洞扫描、安全审计、病毒防治、Web信息防篡改。

      安全测试方法:

      主动发现方法:功能验证、漏洞扫描、模拟功能、侦听技术。

    兼容性测试

      硬件兼容性测试:主机兼容性测试;板卡、配件及外设的兼容性测试。

      配置指标主要包括对CPU、内存和硬盘的要求。

      推荐配置就保证软硬件构成的系统在正常业务的压力负载下,CPU资源占用率平均值不超过75%。

      软件兼容性测试:操作系统兼容性测试、数据库兼容性测试、中间件兼容性测试、与其他软件的兼容性测试。

      数据兼容性测试:编码体系测试、数据标准符合性测试。

      新旧系统数据迁移测试:迁移准备、迁移实施、迁移验证。

      平台软件兼容性测试:平台软件硬件、软件、数据库、文种兼容性测试。

    易用性测试

      在2003年颁布的GB/T16260-2003(ISO 9126-2001)《软件工程 产品质量》质量模型中,提出易用性包含易理解性、易学习性和易操作性;即易用性是指在指定条件下使用时,软件产品被理解、学习、使用和吸引用户的能力。

      (1)易理解性;(2)易学习性;(3)易操作性;(4)吸引性;(5)依从性。

      易用性测试包括针对应用程序的测试,同时还包括对用户手册系统文档的测试。通常采用质量外部模型来评价易用性。包括如下方面的测试:(1)易理解性测试;(2)易学性测试;(3)易操作性测试;(4)吸引性测试;(5)易用的依从性测试。

      易用性测试方法有:静态测试;动态测试;动态和静态结合测试。

      软件质量模型将质量属性划分为6种特性:功能性、可靠性、易用性、效率、维护性和可移植性。

      易用性与可靠性是正相关的;易用性与安全性(功能性的子特性)的某些方面是负相关的。

      安装测试的主要工作(安装的易用性):(1)安装手册的评估;(2)安装的自动化程度测试;(3)安装选项和设置的测试;(4)安装过程的中断测试;(5)安装顺序测试;(6)多环境安装测试;(7)安装的正确性测试;(8)修复安装测试和卸载测试。

      功能易用性测试:(1)业务符合性;(2)功能定制性;(3)业务模块的集成度;(4)约束性;(5)交互性;(6)系统信息与错误提示。

      界面整体测试指对界面的规范性、一致性、合理性等进行测试和评估。

    文档测试

      国家有关计算机软件产品开发文件编制指南()****有14种文件,可分为3大类。

      1. 开发文件:可行性研究报告、软件需求说明书、数据要求说明书、概要设计说明书、详细设计说明书、数据库设计说明书、模块开发卷宗。

      2. 用户文件:用户手册、操作手册。

      3. 管理文件:项目开发计划、测试计划、测试分析报告、开发进度月报、项目开发总结报告。

      用户文档分类:联机帮助;样例、示例和模板;包装;宣传与广告;其他。

      用户文档的作用:改善易安装性;改善软件的易学性与易用性;改善软件可靠性;降低技术支持成本。

      用户文档测试方法:技术校对;功能测试;其他辅助方式。

      用户文档测试要点:文档的读者群;文档的术语;文档的正确性;文档的完整性;文档的一致性;文档的易用性;样例与示例;文档的语言;印刷与包装质量。

      用户手册、操作手册的测试:“严格”地使用系统;“随心所欲”地使用系统;尝试文档中的每个建议和注意事项;描述的准确性;从用户角度看手册。

      联机帮助的测试:准确性、用户的查询;帮助主题的完整性;帮助的风格。

    测试项目管理

      软件配置管理的作用:

      通过软件配置管理,严格执行软件开发过程控制,使软件开发的各个过程阶段()置于软件配置管理控制之下,真实地记录软件生命周期内的全部过程活动,使软件开发从无形变成有形,从无法管理变成有章可循。

      通过软件配置管理,严格执行软件版本控制(),做到完整保存各种历史软件,有利于验证和比较测试、联试中出现的问题;严格执行软件更改控制,严格审批更动过程。

      配置管理内容:确立基线;建立3库(开发库、受控库、产品库);出入库管理和审计;状态报告和查询。

      测试管理组包括评审小组、测试小组和支持小组。

      软件测试过程分成4个阶段:单元测试、集成测试、系统测试和验收测试。

      软件测试文档描述要执行的软件测试及测试的结果。

      测试文件的类型:测试计划和测试分析报告。

      测试文件的重要性表现在:(1)验证需求的正确性;(2)检验测试资源;(3)明确任务的风险;(4)生成测试用例;(5)评价测试结果;(6)再测试;(7)决定测试的有效性。

      软件工程领域要考虑的风险类型:(1)项目风险;(2)技术风险;(3)商业风险。

      风险条目检查表:(1)产品规模风险;(2)商业影响风险;(3)客户相关风险;(4)过程风险;(5)技术风险;(6)开发环境风险;(7)与人员数目及经验相关的风险。

  • 2011年软件水平考试软件测评师基础知识辅导(1)

    2011-02-16 11:45:00

    软件评测基础知识

      软件测试基本概念

      软件质量与软件测试:软件测试是软件质量保证工作的一个重要环节。软件测试和软件质量保证是软件质量工程的两个不同层面的工作。软件测试只是软件质量保证工作中的一个重要环节。质量保证(QA)的工作是通过预防、检查与改进来保证软件的质量,它所关注的是软件质量的检查和测量。软件测试所关心的不是过程的活动,而是对过程的产物以及开发出的软件进行剖析。

      软件测试定义:软件测试就是在软件投入运行前对软件需求分析、软件设计规格说明和软件编码进行的查错(包括代码执行活动与人工活动)。软件测试是为了发现错误而执行程序的过程。软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序的错误。是在软件投入运行前,对软件需求分析、软件设计规格说明和软件编码的最终复审,是软件质量保证的关键步骤。

      软件测试目的:(1)测试是一个为了寻找错误而运行程序的过程;(2)一个好的测试用例是指很可能找到迄今为止未发现的错误的用例;(3)一个成功的测试是指揭示了迄今为止尚未发现的错误的测试。

      软件测试的目标是能够以耗费最少时间与最小工作量找出软件系统中潜在的各种错误与缺陷。

      测试只能证明程序中错误的存在,但不能证明程序中没有错误。

      软件测试原则:(1)尽早地并不断地进行软件测试;(2)程序员或程序设计机构应避免测试自己设计的程序;(3)测试前应当设定合理的测试用例;(4)测试用例的设计不仅要有合法的输入数据,还要有非法的输入数据;(5)在对程序修改之后要进行回归测试;(6)充分注意测试中的群集现象;(7)妥善保留测试计划、全部测试用例、出错统计和最终分析报告,并把它们作为软件的组成部分之一,为软件的维护提供方便;(8)应当对每一个测试结果做全面检查;(9)严格执行测试计划,排除测试的随意性。

      软件测试对象:软件的测试不仅仅是程序的测试,软件的测试应贯穿于整个软件生命同期中。在软件定义阶段产生的可行性报告、项目实施计划、软件需求说明书或系统功能说明书,在软件开发阶段产生的概要测试说明书、详细设计说明书,以及源程序等都是软件测试的对象。

      软件测试过程模型:V模型、W模型、H模型。

      软件测试模型的使用:在实际软件测试的实施过程中,应灵活地运用各种模型的优点,通常可以在W模型的框架下,运用H模型的思想进行独立的测试。当有变更发生时,按X模型和前置模型的思想进行处理。同时,将测试和开发紧密结合,寻找恰当的就绪点开始测试,并反复进行迭代测试,以达到按期完成预定的目标。

      软件问题分类:软件错误、软件缺陷、软件故障、软件失效。

      软件测试类型:

      按开发阶段分:单元测试、集成测试、确认测试(有效性测试)、系统测试

      确认测试、验收测试

      按测试实施组织分:开发方测试(验证测试或alpha测试)、用户测试(beta)、第三方测试(独立测试)

      按测试方式分:动态测试、静态测试

      按测试技术分:白盒测试、黑盒测试、灰盒测试

    软件测试过程:用黑盒法设计基本的测试方案,再利用白盒法补充一些必要的测试方案。可以用以下策略结合各种方法:

      (1)在任何情况下都应该使用边界值分析的方法;

      (2)必要时用等价划分法补充测试方案;

      (3)必要时用错误推测法补充测试方案;

      (4)如果在程序的功能说明中含有输入条件的组合,最好在一开始就用因果图法,然后再按以上(1)、(2)、(3)步进行。

      (5)对照程序逻辑,检查已设计出的设计方案。可以根据对程序可靠性的要求采用不同的逻辑覆盖标准,如果现有测试方案的逻辑覆盖程度没有达到要求的覆盖标准,则应再补充一些测试方案。

      单元测试主要是对模块的5个基本特性进行测试和评价:(1)模块接口;(2)局部数据结构;(3)重要的执行路径;(4)错误处理;(5)边界测试。

      在集成测试时,要考虑的问题有:数据经过接口是否会丢失;一个模块对另一模块是否造成不应有的影响;几个子功能组合起来能否实现主功能;误差不断积累是否达到不可接受的程度;全局数据结构是否有问题。

      确认测试又称为有效性测试、合格测试或验收测试。确认测试主要由使用用户参加测试,检验软件规格说明的技术标准的符合程度,是保证软件质量的最后关键环节。

      系统测试是将通过确认测试的软件,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的组装测试和确认测试。系统测试实质上是由一系列不同测试组成的,其主要目的是充分运行系统,验证系统各个部件是否都能正常工作并完成所分配的功能。

      系统测试包括:恢复测试、安全性测试、强度测试、性能测试等。

      验收测试是以用户为主,软件开发人员和质量保证人员也应参加的测试。由用户参加设计测试用例。使用用户界面输入测试数据,并分析测试的输出结果。验收测试往往知系统测试完成后,项目最终交付前进行。

  • 43个日常测试功能点

    2011-02-15 17:53:45

    功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。针对Web系统的常用测试方法如下:      

    1. 页面链接检查:每一个链接是否都有对应的页面,并且页面之间切换正确。可以使用一些工具,如LinkBotPro、File-AIDCS、HTML Link Validater、Xenu等工具。LinkBotPro不支持中文,中文字符显示为乱码;HTML Link Validater只能测试以Html或者htm结尾的网页链接;Xenu无需安装,支持asp、do、jsp等结尾的网页,xenu测试链接包括内部链接和外部链接,在使用的时候应该注意,同时能够生成html格式的测试报告。如果系统用
    QTP进行自动化测试,也可以使用QTP的页面检查点检查链接。

    2. 相关性检查:功能相关*:删除/增加一项会不会对
    其他项产生影响,如果产生影响,这些影响是否都正确,常见的情况是,增加某个数据记录以后,如果该数据记录某个字段内容较长,可能会在查询的时候让数据列表变形。
    数据相关*:下来列表默认值检查,下来列表值检查,如果某个列表的数据项依赖于其他模块中的数据,同样需要检查,比如,某个数据如果被禁用了,可能在引用该数据项的列表中不可见。

    3. 检查按钮的功能是否正确:如新建、编辑、删除、关闭、返回、保存、导入,上一页,下一页,页面跳转,重置等功能是否正确。常见的错误会出现在重置按钮上,表现为功能失效。

    4. 字符串长度检查: 输入超出需求所说明的字符串长度的内容, 看系统是否检查字符串长度。还要检查需求规定的字符串长度是否是正确的,有时候会出现,需求规定的字符串长度太短而无法输入业务数据。

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

    6. 标点符号检查: 输入内容包括各种标点符号,特别是空格,各种引号,回车键。看系统处理是否正确。常见的错误是系统对空格的处理,可能添加的时候,将空格当作一个字符,而在查询的时候空格被屏蔽,导致无法查询到添加的内容。

    7.特殊字符检查:输入特殊符号,如@、#、$、%、!等,看系统处理是否正确。常见的错误是出现在% ‘ " 这几个特殊字符

    8. 中文字符处理: 在可以输入中、英文的系统输入中文,看会否出现乱码或出错。

    9. 检查信息的完整*: 在查看信息和更新信息时,查看所填写的信息是不是全部更新,更新信息和添加信息是否一致。要注意检查的时候每个字段都应该检查,有时候,会出现部分字段更新了而个别字段没有更新的情况。

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

    11. 检查删除功能:在一些可以一次删除多个信息的地方,不选择任何信息,按“delete”,看系统如何处理,会否出错;然后选择一个和多个信息,进行删除, 看是否正确处理。如果有多页,翻页选,看系统是否都正确删除,并且要注意,删除的时候是否有提示,让用户能够更正错误,不误删除。

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

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

    14. 重复提交表单:一条已经成功提交的纪录,返回后再提交,看看系统是否做了处理。对于Web系统来说,可以通过
    浏览器返回键或者系统提供的返回功能。

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

    16. 搜索检查: 有搜索功能的地方输入系统存在和不存在的内容,看搜索结果是否正确.如果可以输入多个搜索条件,可以同时添加合理和不合理的条件,看系统处理是否正确,搜索的时候同样要注意特殊字符,某些系统会在输入特殊字符的时候,将系统中所有的信息都搜索到。

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

    18. 上传下载文件检查:上传下载文件的功能是否实现,上传文件是否能打开。对上传文件的格式有何规定,系统是否有解释信息,并检查系统是否能够做到。下载文件能否打开或者保存,下载的文件是否有格式要求,如需要特殊工具才可以打开等。上传文件测试同时应该测试,如果将不能上传的文件后缀名修改为可以上传文件的后缀名,看是否能够上传成功,并且,上传文件后,重新修改,看上传的文件是否存在。

    19. 必填项检查:应该填写的项没有填写时系统是否都做了处理,对必填项是否有提示信息,如在必填项前加“*”;对必填项提示返回后,焦点是否会自动定位到必填项。

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

    21. 回车键检查: 在输入结束后直接按回车键,看系统处理如何,会否报错。这个地方很有可能会出现错误。

    22.刷新键检查:在Web系统中,使用浏览器的刷新键,看系统处理如何,会否报错。

    23.回退键检查:在Web系统中,使用浏览器的回退键,看系统处理如何,会否报错。对于需要用户验证的系统,在退出登录后,使用回退键,看系统处理如何;多次使用回退键,多次使用前进键,看系统如何处理。

    24.直接URL链接检查:在Web系统中,直接输入各功能页面的URL地址,看系统如何处理,对于需要用户验证的系统更为重要。如果系统安全性设计的不好,直接输入各功能页面的URL地址,很有可能会正常打开页面。

    25.空格检查:在输入信息项中,输入一个或连串空格,查看系统如何处理。如对于要求输入整型、符点型变量的项中,输入空格,既不是空值,又不是标准输入。

    26.输入法半角全角检查:在输入信息项中,输入半角或全角的信息,查看系统如何处理。如对于要求输入符点型数据的项中,输入全角的小数点(“。”或“.”,如4.5);输入全角的空格等。

    27.密码检查:一些系统的加密方法采用对字符Ascii码移位的方式,处理密码加密相对较为简单,且安全性较高,对于局域网系统来说,此种方式完全可以起到加密的作用,但同时,会造成一些问题,即大于128的Ascii对应的字符在解密时无法解析,尝试使用“uvwxyz”等一些码值较大的字符作为密码,同时,密码尽可能的长,如17位密码等,造成加密后的密码出现无法解析的字符。

    28.用户检查:任何一个系统,都有各类不同的用户,同样具有一个或多个管理员用户,检查各个管理员之间是否可以相互管理,编辑、删除管理员用户。同时,对于一般用户,尝试删除,并重建同名的用户,检查该用户
    其它信息是否重现。同样,提供注销功能的系统,此用户再次注册时,是否作为一个新的用户。而且还要检查该用户的有效日期,过了有效日期的用户是不能登录系统的。容易出现错误的情况是,可能有用户管理权限的非超级管理员,能够修改超级管理员的权限。

    29.系统数据检查:这是功能测试最重要的,如果系统数据计算不正确,那么功能测试肯定是通不过的。数据检查根据不同的系统,方法不同对于业务管理平台,数据随业务过程、状态的变化保持正确,不能因为某个过程出现垃圾数据,也不能因为某个过程而丢失数据。

    30.系统可恢复性检查:以各种方式把系统搞瘫,测试系统是否可正常迅速恢复。

    31.确认提示检查:系统中的更新、删除操作,是否提示用户确认更新或删除,操作是否可以回退(即是否可以选择取消操作),提示信息是否准确。事前或事后提示,对于Update或Delete操作,要求进行事前提示。

    32.数据注入检查:数据注入主要是对
    数据库的注入,通过输入一些特殊的字符,如“’”,“/”,“-”等或字符组合,完成对SQL语句的破坏,造成系统查询、插入、删除操作的SQL因为这些字符而改变原来的意图。如select * from table where id = ‘’ and name = ‘ ’,通过在id输入框中输入“12’-”,会造成查询语句把name条件注释掉,而只查询id=12的记录。同样,对于update和delete的操作,可能会造成误删除数据。当然还有其它一些SQL注入方法,具体可以参考《SQL应用高级SQL注入.doc》,很多程序都是基于页面对输入字符进行控制的,可以尝试跳过界面直接向数据库中**数据,比如用Jmeter,来完成数据注入检查。

    33.刷新检查:web系统中的WebForm. 控件实时刷新功能,在系统应用中有利有弊,给系统的性能带来较大的影响。测试过程中检测刷新功能对系统或应用造成的影响(白屏),检查控件是否回归默认初始值,检查是否对系统的性能产生较大影响(如每次刷新都连接数据库查询等)。

    34.事务检查:对于事务性操作,断开网络或关闭程序来中断操作,事务是否回滚。

    35.时间日期检查:时间、日期验证是每个系统都必须的,如2006-2-29、2006-6-31等错误日期,同时,对于管理、财务类系统,每年的1月与前一年的12月(同理,每年的第1季度与前一年的第4季度)。另外,对于日期、时间格式的验证,如2006年2月28日、2006-2-28、20060228等。日期检查还要检查日期范围是否符合实际的业务,对于不符合时间业务的日期,系统是否会有提示或者有限制。

    36.多浏览器验证:越来越多的各类浏览器的出现,用户访问Web程序不再单单依赖于Microsoft Internet Explorer,而是有了更多的选择:Maxthon、Firefox、Tencent Traveler等,考虑使用多种浏览器访问系统,验证效果。

    37.安装测试:对于C/S架构的系统,安装程序的测试是一个重要方面,安装程序自动化程度、安装选项和设置(验证各种方案是否都能正常安装)、安装过程中断测试、安装顺序测试(分布式系统)、修复安装及卸载测试。

    38.文档测试:主要是对用户使用手册、产品手册进行测试,校验是否描述正确、完整,是否与当前系统版本对照,是否易理解,是否二义性等。

    39.测试数据检查:事实告诉我们,测试数据比代码更有可能是错的,因此,当测试结果显示有错误发生的时候,怀疑代码错误前要先对测试数据检查一遍。

    40.请让我的机器来运行:在某些项目中,出现一个病态的问题:系统没有问题呀,它在我的机器上是能够通过的。这就说明了其中存在着和环境相关的BUG。“是否所有的一切都受到了版本控制工具的管理?”、“本机的开发环境和服务器的环境是否一样?”、“这里是否存在一个真正的BUG,只不过是在其他的机器里偶然出现?”。所有的测试必须在所有系统要求的机器上运行通过,否则的话,代码就可能存在问题。

    41.Ajax技术的应用:Ajax有很多优点,但也有很多缺点,如果利用优点、避免缺点,是我们对新的Web2.0应用的一个挑战。而Ajax的应用最直接的问题就是用户体验,用户体验的效果直接关系到是否使用Ajax技术。“会做,并不意味着应该做、必须做”,这就是对Ajax技术的很重要的注解。

    42.Ajax技术的应用:Ajax采用异步调用的机制实现页面的部分刷新功能,异步调用存在异常中断的可能,尝试各种方法异常中断异步的数据调用,查看是否出现问题。在这里遇到的一个问题就是对日期控件的操作,已经如果页面数据较多的时候的刷新。

    43.脚本错误:随着Ajax、IFrame等异步调用技术的发展,Javascrīpt技术也越来越受到开发人员的重视,但Javascrīpt存在调试困难、各浏览器存在可能不兼容等问题,因此在Web系统中,可能会出现脚本错误。同时,脚本错误造成的后果可大、可小,不能忽视。


  • 大学生必须脱口而出80个英语句子

    2010-12-09 13:46:55

    Any day will do?哪一天都可以?


    Any messages for me?有我的留言吗?


    Are you by yourself?你一个人来吗?


    All right with you?你没有问题吧?


    Are you free tomorrow?明天有空吗?


    Are you kidding me?你在跟我开玩笑吧?


    As soon as possible!尽可能快!


    Back in a moment!马上回来!


    Believe it or not!信不信由你!


    Better luck next time!下次会更好!


    Boy will be boys本性难移!


    Come to the point!有话直说!


    Do you accept credit card?收不收行用卡?


    Does it keep long?可以保存吗?


    Don't be so fussy!别挑剔了!


    Don't count to me!别指望我!


    Don't fall for it!不要上当!


    Don't get me wrong!你搞错了!


    Don't give me that!少来这套!


    Don't let me down!别让我失望!


    Don't lose your head!别乐昏了头!


    Don't over do it!别做过头了!


    Don't sit there daydreaming!别闲着做白日梦!


    Don't stand on ceremony!别太拘束!


    Drop me a line!要写信给我!


    Easy come easy go!来得容易去得也快!


    First come first served!先到先得!


    Get a move on!快点吧!


    Get off my back!不要嘲笑我!


    Give him the works!给他点教训!


    Give me a break!饶了我吧!


    Give me a hand!帮我一个忙!


    Great minds think alike!英雄所见略同!


    I'll treat you to lunch。午餐我请你!


    In one ear,out the other ear。一耳进,一耳出!


    I'm spaced-out!我开小差了!


    I beg your pardon!请你再说一遍!


    I can't afford that!我付不起!


    I can't follow you!我不懂你说的!


    I can't help it!我情不自禁!


    I couldn't reach him!我联络不上他!


    I cross my heart!我发誓是真的!


    I don't mean it!我不是故意的!


    I feel very miserable!我好沮丧!


    I have no choice!我别无选择了!


    I watch my money!视财如命!


    I'll be in touch!保持联络!


    I'll check it out!我去看看!


    I'll show you around!我带你四处逛逛!


    I'll see to it!我会留意的!


    I'm crazy for you!我为你疯狂!


    You make me jump!你下了我一跳!


    Make up your mind。作个决定吧!


    Make yourself at home!就当在家一样!


    My mouth is watering!我要流口水了!


    Never heard of it!没听说过!


    Nice talking to you!很高兴和你聊天!


    No doubt about it!勿庸置疑!


    No pain no gain!不经一事,不长一智!


    None of your business!要你管?


    There is nothing on your business!这没你的事!


    Now you are really talking!说得对!


    Please don't rush me!请不要吹促我!


    Please keep me informed!请一定要通知我!


    She looks blue today。她今天很忧郁!


    She is under the weather。她心情不好!


    So far,so good。过得去。


    Speaking of the devil!一说曹操,曹操就到!


    Stay away from me!离我远一点!


    Stay on the ball!集中注意力!


    That makes no difference。不都一样吗?


    That's a touchy issue!这是个辣手得问题!


    That's always the case!习以为常!


    That's going too far!这太离谱了!


    That's more like that!这才象话嘛!


    The answer is zero!白忙了!


    The dice is cast!已成定局了!


    The same as usual!一如既往!


    The walls have ears!隔墙有耳!


    There you go again!你又来了!


    Time is running out!没有时间了!


    We better get going!最好马上就走

  • 测试成长

    2010-10-08 14:11:22

    第一阶段:(测试员)初级测试工程师
    自身条件:初入行具备计算机专业学位或一些手工测试经验的个人。
    具体工作:执行测试用例,记录bug,并回归测试,通过qtp等测试工具录制回归测试脚本,并执行回归测试脚本。
    学习方向:开发测试脚本并且开始熟悉测试生存周期和测试技术。

    第二阶段:(测试工程师)程序分析员
    自身条件:有1~2年工作经验的测试工程师或程序员。具有初步的自动化测试能力,完善自动化测试脚本。
    具体工作:设计和编写测试用例,编写自动测试脚本程序且担任测试编程初期的领导工作。
    学习方向:拓展编程语言、操作系统、网络与数据库方面的技能 。

    第三阶段:(高级测试工程师)程序分析员
    自身条件:有3~4年经验的测试工程师或程序员。具有一定的行业业务知识,储备系统分析员的能力。
    具体工作:帮助开发或维护测试或编程标准与过程,分析软件需求,获得测试需求。确定测试需求相应的测试方法,获得测试策略方案。参与同行的评审(软件需求,软件测试计划等),并为其它初级的测试工程师或程序员充当顾问。
    学习方向:继续拓展编程语言、操作系统、网络与数据库方面的技能。

    第四阶段:测试组负责人
    自身条件:有4~6年经验的测试工程师或程序员。具有丰富的行业业务知识,具有系统分析员的能力,专长性能测试。
    具体工作:负责管理1~3名测试工程师或程序员。集中于技能方面,担负一些进度安排和工作规模/成本估算职责。分析性能瓶颈的原因,为开发团队提供bug解决策略。
    学习方向:性能测试,测试技能

    第五阶段:(资深安全或性能测试工程师)测试/编程高级负责人
    自身条件:有6~10年经验的测试工程师或程序员。
    具体工作:负责管理8~10名技术人员。性能测试整体方案设计,软件系统性能问题定位和性能优化,内存优化及分析数据溢出等,分析系统的安全漏洞等。 负责进度安排、工作规模/成本估算、按进度表和预算目标交付产品。负责开发项目的技术方法。为一些用户提供支持与演示。
    学习方向:开发一些特定领域的技术专长

    第六阶段:测试/质量保证/开发(项目)、经理
    自身条件:有10多年的工作经验。
    具体工作:管理8名或更多的人员参加的1个或多个项目。负责这一领域(测试/质量保证/开发)内的整个开发生存周期业务。为一些用户提供交互和大量演示。负责项目成本、进度安排、计划和人员分工

    第七阶段:(公司级质量总监)计划经理
    自身条件:有15年以上开发与支持(测试/质量保证)活动方面的经验。
    具体工作:管理从事若干项目的人员以及整个开发生存周期。负责把握项目方向与盈亏责任


    入门书籍:1、我的老师在课上经常给我们推荐的好书,经典啊!

    《人月神话》
    《人件》
    《与熊共舞》
    《你在为谁工作》

    2、实习时,经理向我推荐的好书,确实不错哦

    1):入门好书:《软件测试入门》红皮的,主要是以实例介绍测试大纲,测试大纲到测试用例,面向对象测试,web测试等
    同类的还有《软件测试》这本书。

    2):《实用软件测试指南》,本书和上面一本书完全不同,似乎有一种信马由缰的感觉,不怎么建议什么大纲,而是偏向于
    意识方面,特别上每一个知识点、每一中软件攻击方法,都拿一些知名软件来说明,比如window,word等。

    3):《面向对象的软件测试》主要针对的是面向对象的单元测试---类测试,书中自始至终贯穿了一个例子:Brickle游戏的例子( 和弹砖块游戏相似的一个游戏),全书从测试视角来看问题,详细讨论了从用例分析到设计模型如何从测试视角看问题,然 后分析了具体的类测试以及类的交互测试,后面还有分层机构的测试和系统测试,都是拿例子来分析,比较直观,不象那些 全篇都是理论的拗口的书,这本书还是比较好的,推荐大家都看一下!

    4):《软件开发的科学与艺术》,是曾经在微软工作过的几个人合写的,主要是讲讲他们在微软的经历和经验。里面就有讲到微软的 测试是怎么做的经验之谈,里面还有一些测试计划,测试规范的规划文档,可以参考一下!

    5):《软件测试技术》

    6): 软件自动化测试工具的一些书籍,好像没有较专门的,这些可以看看它们的电子书籍,这方面很多!
    偏向于自动化理论方面的有一些好书:比如 《软件测试自动化》
    7):《软件测试求生法则》:作者积累数十年软件开发和测试经验,揭示出软件测试面临的几大人际挑战,包括获得软件培训、 与开发人员保持良好关系、争取管理人员的支持、与客户保持交流、满足不断变化的需求以及如何学会说不,并且通过具体 的案例讲述了解决这些挑战的策略性方法。

    还有一些:

    《软件测试方法与技术概论》
    《软件测试方法与应用》
    〈Software Testing〉 Sams RonPatton(美) [机械工程出版社]
    〈实用软件测试指南〉 [清华大学出版社]
    〈软件测试经验与教训〉
    〈软件测试驱动开发〉
    〈计算机软件测试技术〉
    〈自动化测试的引入,管理与实施〉 Elfriede Dustin [清华大学出版社] 推荐e文原版
    〈有效软件测试〉 Elfriede Dustin [清华大学出版社] 新语译
    〈软件测试〉 Paul.C.Jorgensen CRC [机械工程出版社]
    〈软件测试自动化〉 Paniel J.Moslsy [机械工程出版社] 邓波译 中文翻译的不错
  • 功能测试注意事项

    2010-09-01 15:49:12

    1.1  添加功能

    说明:点击添加按钮后,系统在原有页面或新打页面中显示相关的字段信息,供操作人员进行信息录入

    验证方式

    1)验证需要输入的字段是否可获得光标焦点,是否可以进行输入。

    2)若为下拉框选择输入,查看是否可进行选择。

    3)对于系统默认字段,查看系统是否正确给出默认值。

    1.2  保存功能

    说明:按要求输入各项符合要求的信息后,点击“保存”按钮,查看系统是否能够正确处理。

    验证方式:

    1)通过保存后显示的页面详细信息查看保存的信息是否与录入的相一致。

    2)通过相应的查询功能,查询对应的详细信息,查看保存的信息是否与录入的相一致。

    3)通过相关的数据库查看工具查看数据库表中的信息是否与录入时相一致。

    1.3  删除功能

    说明:选中某条要删除的记录信息,点击“删除”按钮,查看系统是否能够正确处理。

    验证方式:

    (1)   对于物理删除的记录信息,在相应的数据库表中查询不到该记录信息。

    (2)   对于物理删除的记录信息,若有必要,验证在有数据关联的情况下,该记录信息是否不允许被删除。

    (3)   对于非物理删除记录信息,查看相应的标志是否被置为“已删除”或“无效”等,是否修改正确。

    (4)   对于字典等被引用的记录信息,删除后需验证其后继业务中是否做相应判断,无效或已删除的记录信息不允许使用。

    1.4  修改功能

    说明:选中某条记录信息,进行相应的修改,修改完成后,点击“更新”或“修改”按钮,查看系统是否正确处理。进行修改时,也应做基本检查项中各内容的检查,并通过保存功能的验证方式进行验证。

    1.5  确认功能

    说明:在进行保存、删除或修改功能时,系统有时候弹出对话框,要求操作人员进行确认。

         一般情况下,有“是”、“否”及“取消”三种选择。

    选择相应的功能后,要根据所做操作及所选功能,进行相应的数据验证。

      验证方式:

    1)选择“是”,即确认方才所做操作,则系统执行相应功能,并反馈相应的操作结果。

    2)选择“否”,即否认方才所做操作,则系统什么也不做,返回到前一状态。

    3)选择“取消”,即不希望继续方才操作,则系统什么也不做,保持前一状态不变。

    1.6  打印/打印预览功能

    验证功能:

    1)点击打印按钮时,是否能够正常调用系统打印功能。

    2)若有打印预览功能,查看预览内容是否与期望打印内容相一致。

    3)查看打印后的实际内容是否与显示内容相一致,是否正确。

    4)对于发票及证书等特殊打印,还要验证打印位置是否符合要求,是否能够进行调整以符合要求。

    1.7  清空功能

    验证功能:

    (1)   在查询功能中,点击“清空”按钮,查看是否能够将已经设置的相关内容进行清空处理。

    (2)   在修改功能中,若选中某条记录后,相应的信息在窗口中进行显示,点击“清空”按钮,查看是否将显示的信息清空

    1.8  返回功能

    说明:若为新打开窗口中的“返回”按钮,点击后,查看新打开窗口是否能够正确关闭。

  • 软件需求

    2009-12-03 12:03:46

    目      录

    译者序

    前言

    第一部分   软件需求:是什么和为什么

    第1章  基本的软件需求 1

    1.1   软件需求的定义 2

    1.1.1   一些关于“需求”的解释 2

    1.1.2   需求的层次 3

    1.2   每个项目都有需求 4

    1.3   什么情况将会导致好的群体发生不合格

    的需求说明 5

    1.4   高质量的需求过程带来的好处 7

    1.5   优秀需求具有的特性 7

    1.5.1   需求说明的特征 7

    1.5.2   需求规格说明的特点 8

    1.6   需求的开发和管理 9

    第2章   客户的需求观 11

    2.1   谁是客户 12

    2.2   客户与开发人员之间的合作关系 12

    2.2.1   软件客户需求权利书 13

    2.2.2   软件客户需求义务书 15

    2..3   “签约”意味着什么 17

    第3章   需求工程的推荐方法 18

    3.1   知识技能 19

    3.2   需求获取 20

    3.3   需求分析 21

    3.4   需求规格说明 22

    3.5   需求验证 23

    3.6   需求管理 23

    3.7   项目管理 24

    第4章   改进需求过程 26

    4.1   需求与其他项目过程的联系 26

    4.2   软件需求对其他项目风险承担者的影响 27

    4.3   软件过程改进的基础 28

    4.4   过程改进周期 29

    4.4.1   评估当前采用的方法 29

    4.4.2   制定改进活动计划 30

    4.4.3   建立、实验和实施新的过程 31

    4.4.4   评估结果 32

    4.5   需求过程的积累材料 33

    4.5.1   需求开发过程的积累材料 34

    4.5.2   需求管理过程的积累材料 34

    4.6   需求过程改进路标 35

    第5章   软件需求与风险管理 37

    5.1   软件风险管理基础 38

    5.1.1   风险管理的要素 38

    5.1.2   编写项目风险文档 39

    5.1.3   制定风险管理计划 40

    5.2   与需求有关的风险 41

    5.2.1   需求获取 41

    5.2.2   需求分析 42

    5.2.3   需求规格说明 42

    5.2.4   需求验证 43

    5.2.5   需求管理 43

    5.3   风险管理是你的好助手 43

    第二部分   软件需求工程

    第6章   建立项目视图与范围 45

    6.1   通过业务需求确定项目视图 45

    6.2   项目视图和范围的文档 46

    6.3   关联图 50

    6.4   把注意力始终集中在项目的范围上 51

    第7章   寻找客户的需求 52

    7.1   需求的来源 52

    7.2   用户类 53

    7.3   寻找用户代表 54

    7.4   产品的代表者 55

    7.4.1   寻求产品代表者 56

    7.4.2   产品代表者的期望 56

    7.4.3   多个产品代表者 57

    7.5   谁作出决策 58

    第8章   聆听客户的需求 60

    8.1   需求获取的指导方针 60

    8.2   基于使用实例的方法 62

    8.2.1   使用实例和用法说明 62

    8.2.2   确定使用实例并编写使用实例文档 64

    8.2.3   使用实例和功能需求 67

    8.2.4   使用实例的益处 67

    8.2.5   避免使用实例陷阱 68

    8.3   对客户输入进行分类 69

    8.4   需求获取中的注意事项 70

    8.5   如何知道你何时完成需求的获取 71

    第9章      编写需求文档 72

    9.1   软件需求规格说明 72

    9.1.1   标识需求 73

    9.1.2   处理不完整性 74

    9.1.3   用户界面和软件需求规格说明 74

    9.2   软件需求规格说明模板 75

    9.3   编写需求文档的原则 79

    9.4   需求示例的改进前后 81

    9.5   数据字典 83

    第10章   需求的图形化分析 85

    10.1   需求建模 85

    10.2   从客户需求到分析模型 86

    10.3   数据流图 87

    10.4   实体联系图 88

    10.5   状态转换图 90

    10.6   对话图 92

    10.7   类图 94

    10.8   最后的提醒 96

    第11章   软件的质量属性 97

    11.1   非功能需求 97

    11.2   质量属性 97

    11.3   定义质量属性 98

    11.3.1   对用户重要的属性 99

    11.3.2   对开发者重要的属性 100

    11.4   属性的取舍 101

    第12章   通过原型法减少项目风险 103

    12.1   原型是“什么”和“为什么”要原型 103

    12.2   水平和垂直的原型 103

    12.3   抛弃型原型或进化型原型 104

    12.4   书面原型和电子原型 106

    12.5   原型评价 107

    12.6   原型法的最大风险 108

    12.7   原型法成功的因素 108

    第13章   设定需求优先级 110

    13.1   为什么要设定需求的优先级 110

    13.2   不同角色的人处理优先级 111

    13.3   设定优先级的规模 111

    13.4   基于价值、费用和风险的优先级设定 112

    第14章   需求质量验证 116

    14.1   需求评审 117

    14.1.1   审查过程 118

    14.1.2   需求评审的困难 122

    14.2   测试需求 124

    第15章   需求开发向设计规划的转化 128

    15.1   从需求到项目规划 128

    15.1.1    需求和进度安排 128

    15.1.2  需求和预估 129

    15.2   从需求到设计和编码 130

    15.3   从需求到测试 131

    15.4   从需求到成功 131

    第三部分   软件需求管理

    第16章   需求管理的原则与实现 133

    16.1   需求管理和过程能力成熟度模型 133

    16.2   需求管理步骤 135

    16.3   需求规格说明的版本控制 135

    16.4   需求属性 136

    16.5   度量需求管理的效果 138

    第17章   管理变更请求 139

    17.1   控制项目范围的扩展 139

    17.2   变更控制过程 140

    17.2.1   变更控制策略 140

    17.2.2   变更控制步骤 141

    17.2.3   变更控制工具 144

    17.3   变更控制委员会 145

    17.3.1   变更控制委员会的组成 145

    17.3.2   变更控制委员会总则 145

    17.4   测量变更活动 146

    第18章   需求链中的联系链 149

    18.1   需求跟踪 149

    18.1.1   需求跟踪动机 151

    18.1.2   需求跟踪能力矩阵 151

    18.1.3   需求跟踪能力工具 153

    18.1.4   需求跟踪能力过程 153

    18.1.5   需求跟踪能力可行吗,必要吗? 154

    18.2   变更需求代价:影响分析 154

    18.2.1   影响分析过程 155

    18.2.2   影响分析报告模板 157

    第19章   需求管理工具 158

    19.1   使用需求管理工具的益处 159

    19.2   商业需求管理工具 160

    19.3   实现需求管理自动化 161

    附录   当前需求实践的自我评估 163

    参考文献  167

    后记 171

601/3123>
Open Toolbar