窥探云测试

发表于 2012-05-06 11:42 浏览次数:2,841 views 来源:

  云计算是当今的一个热点,也是一个潮流,那么软件测试能否借助云计算的威力而更上一层楼呢?最近看了几个号称云测试的网站,有感,记录一下。

第一个网站是Cloud Testing。这个公司能提供多种平台,多种浏览器的平台,一般的用户在本地用Selenium把自动化测试脚本编写好,然后上传到他们网站,然后就可以在他们的平台上运行Selenium脚本了。他们的优点是:平台和浏览器覆盖得广,按需付费。不过我自己对这样的服务有以下的疑问:

1. 基于UI的自动化测试通常都会遇到一些不稳定的问题,本地编辑好的自动化脚本是否也能够在他们的平台上正常运行

2. 如果出现错误,有没有办法进行调试。究竟这个错误是SUT的错误,还是测试脚本的错误,如何区分

3. 用户自己开发的插件能否在这个云测试平台上使用(我觉得是不行的)

总得来说Cloud Testing是一个基于UI自动化测试的云测试平台,但是我认为这样的平台并没有太多的优势,一般做互联网的公司产品发布都是比较快的,根本是不可能有时间和资源去覆盖所有的浏览器和平台,根据80/20原则,在中国搞互联网,只要搞定Windows下的IE6和IE7基本上就万事大吉了,一般好一点的前端TEAM都是在Firefox下进行开发的,所以Firefox的兼容应该是不成问题,最后在 Chrome和Safari上过一下关键流程,差不多了。再说,现在虚拟化技术日渐流行,自己搭建多个平台也不是非常耗费资源。

第二个是keynote公司的kite,这个感觉比Cloud Testing更加弱一点,kite有自己的浏览器,然后用户在这个浏览器上录制脚本,然后上传,然后可以在keynote公司不同的可用地点中运行测试,查看结果。这个平台给我的感觉更多的是关注终端用户性能,里面有一个页面元素下载的timeline,用户可以查看那些页面资源下载花费多少时间,DNS查询时间等等……

这个平台的问题有:

1. 可用的节点不多,现在为止只有北美地区的几个节点可用

2. 专门的工具,可能对测试的结果有影响

估计是keynote公司的一个实验性产品。

第三个是SOASTA。这个公司不单只提供了功能测试,而且还有性能测试。感觉上性能测试应该是利用云计算的一个非常重要而且有意义的点。貌似这个公司不是那么开放,没有太多公开的资料,所以不知道他们是怎么运作的。看他们的网站的一些成功案例,说的挺好,不过这样相对于在公网做性能测试,不知道会不会有问题:

1. 带宽问题,例如云那段设定的带宽是1Mb,那么云和端之间的带宽是否能真正达到1Mb呢

2. 安全问题,这些性能测试的脚本不会日后成为攻击的工具吧

突然觉得,现在做CDN的公司,其实他们可以兼营性能测试,因为他们的服务器分布的跟真实情况最接近的,而且也有足够多的服务器资源和带宽。

QTP中一些基础代码结构累积

发表于 2012-05-06 11:40 浏览次数:2,768 views 来源:

1 生产随机数列
第一种方法———————————–
randomize’更新反回的数据
funcation rand(k,n)
n=int((k-1)*rnd+1)
rand=n
end funcation
第二种方法
n=randomnumber.value(1,255)
2 当运行到表中的某一行,自动导出表中的所有数据
row=datatable.getcurrentrow
if row="5" then
datatable.export("d:data.xml")
end if
3 webedit("txtpass").setsecure"sdsdf…."
如果参数化密码,可以直接在数据表中写入未加密的密码,它会自动识别,即不用把setsecure改为set
4 如果弹出对话框就获取上面提示信息并与表中的信息对比,不统一证明弹出的提示出错,主要用来验证
if browser("web_name".dialog("dialog_name").exist(1) then’如果不出现=false
error_message=browser("web_name".dialog("diaglog_name".static("用户密码错误!").getRoproperty("text")
if error_message<>(datatable.value("error_info"))then
msgbox(error_message)
end if
browser("web_name").dialog("diaglog_name").close
end if
这里我总结了两点技巧:
一是:对于dialog中,虽然提示信息对象名称是"用户密码错误",但如果信息对象名称是“该用户不存在”,不用更改会自动识别,我想主要是录制第一遍 时,“用户密码错误”只是让运行时能找到这个控制,而不管它是什么内容,因为在对象仓库中,text不是决定该对象的属性
二是:如果对于提示信息比较长的,可以用mid(error_message,n,m)取一部份特征提示信息进行验证,这样我想可以节省处理时间,又可以避免长度以及空格等字符的处理
5 在运行时,向某一个单元格赋值: datatable.value("kai",dtlocalsheet)="nanjing"
datatable.value("num")只在global形式下的一种省略形式;完整形式
是datatable.value("num",dtlocalsheet)
—–取得某一具体行的值:
datatable.setcurrentrow(n);
msgbox(datatable.getsheet("global").getparameter("kai").Rawvalue)
或者kk=datatable.Rawvalue("kai","action1")
—–在run-time期间,添加一个action和参数
kk=datatable.addsheet("name").addparameter("kai","ddd").name’/value
6 with dialog("name")’可以省好多代码,看着也简洁
content=.wintreeview
end with
7 wintreeview.select(item)(根是0,列表第一个也是0)
wintreeview.getcontent
wintreeview.getitem(整行)+";"+
winlistview.getitem(行中的第一个字符段)
wincheckbox("").set"off"’/on
8 数据库检查点:
sub getdata
set con=createobject("adodb.connection")
con.open("descrīption=mod;driver=sqlserver;server=hpsqlserver;uid=sa;"&_
"pwd=11111;APP=qtp;WSID=hp;database=MOD31" ‘用sqlserver方式
Con.open "DRIVER = {Microsoft Access Driver (*.mdb)};DBQ=D:Testdb.mdb" ‘用access方式
set record=createobject("adodb.recordset")
sql="select * from m3_program" ‘选择具体满足一条件的:sql="select* from m3_program where "
record.open sql,con
if(not record.eof) then
record.movenext
msgbox("p_name")
end if
record.close
set record=nothing
con.close
set con=nothing
end sub
‘如果没有查到内容,在结果中不会报错,也不会弹出窗口
9 vbcr—-chr(13)回车符
vblf—-chr(10)换行符
vbcrlf—-chr(13)+chr(10)结合
10 从step run has two ways(一是在key-driven页面,另一个是在代码页面,前者走完项目,后者只是本acton第一行
11 对于时间,日期等的格式检查(一种是正则表达式,另一种是输出对比,如果
不好对比,用mid截取一部分对比)
12对于一些列表框或树结构,如果发生结点名称发生变化,此时如果报没有彼配的对象,此时可以把更改后面的名称如_2"
13;对于动态变化的对象,要分清是对像还是属性;对于属性可以用gettoproperty("ddd");得到;而对于由于动态无法识别对
像可以用描述性脚本:
如:Set ōbject= Descrīption.Create()
Object("regexpwndclass").Value="HtmlButton"
Object("regexpwndtitle").Value="登陆"
browser("ss").page("a").button(Object).click
14:对于属性是变化的,有时可以把该属性从识别对象里删除
15:从系统的文件中获取信息及删除文件
get_file_infor("c:she.mpg")
function get_file_infor(url)
dim fso,f
set fso=createobject("scrīpting.filesystemobject")
set f=fso.getfile(url)
msgbox(f.datecreated)
f.name:f.size:f.type
fso.deletefile(url)’/////删除文件
end function
——–获取文件夹里所有文件信息
get_folder_infor("c:kai")
function get_folder_infor(folder)
dim fso,f,f1,n
set fso=createobject("scrīpting,filesystemobject")
set f=fso.getfolder(folder)
set fc=f.files
for each f1 in fc
select case f1.name
case"kai.mpg","she.mpg","dd.mp3"
end select
next
end function

16,四舍五入可以在后面+0.5,进行自动解决
17,y=——-waitproperty("visible",true,10000)
18,on error resume next
on error goto o
19 window("").wintreeview("systreeview32").TYpe micctrldown+"p"+micctrlup
20,定义数组 name=array(1,2,"aa","bb");name(0)=1
21进行日期YYYY-MM-DD的格式检查 :
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ‘ Create variable.
Set regEx = New RegExp ‘ Create a regular expression.
regEx.Pattern = patrn ‘ Set pattern.
regEx.IgnoreCase = True ‘ Set case insensitivity.
regEx.Global = True ‘ Set global applicability.
Set Matches = regEx.Execute(strng) ‘ Execute search.
For Each Match in Matches ‘ Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is ‘"
RetStr = RetStr & Match.Value & "’." & vbCRLF
Next
RegExpTest = RetStr
End Function
date_pattern="^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((01,3-9])|(1[0-2]))-(29|30)))))$"
result_message=RegExpTest(date_pattern, inputbox("请你输入要检查的时间:"))
Select case result_message
Case ""
msgbox("你输入的日期格式与标准不匹配")
case else MsgBox(result_message)

 

功能测试用例的书写方式(适于新手学习)

发表于 2012-05-06 11:22 浏览次数:1,774 views 来源:

 

功能性测试用例

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

测试用例的主要来源有:
1) 需求说明”及相关文档
2)相关的设计说明(概要设计,详细设计等)
3)与开发组交流对需求理解的 记录(可以是开发人员的一个解释)
4)已经基本成型的UI(可以有针对性地补充一些用例)
       简而言之,所有你能得到的项目文档,都尽量拿到。 从所得到的资料中,分解出若干小的“功能点”,理解“功能点”,编写相应的测试用例。

2. 用例的组织方式

不同的公司有不同的做法,原则上,只要方便管理和跟踪,怎么组织都可以的。
用例可以按大的功能块组织,如查询功能模块的用例,可以组织在一起,打印模块的测试用例,可以另外组织在一起。
     在没有专门的测试用例管理工具的情况下,用例执行后会产生2种状态:“通过”、“失败”——这样加上“未 执行”的用例的状态,共3种状态。
    即从“未执行”用例中执行一个用例后,该用例状态应为“失败”或“通 过”。将同一状态的用例组织在一起。
至于用例文件格式,可以是.DOC或.XLS(如果有专门的测试用例管理工具另当别论)。

3. 用例与其他材料的关联方式,即如何解决用例跟踪的问题

测试用例面临的比较大的风险有:需求的变更、设计的修改、需求的错误和遗漏等等。
由于用例的主要来源是需求和设计的说明,所以对用例的跟踪其实就是对需求和设计的跟踪,需求和设计的 变更势必引起测试用例的变更。
如前所说,将分解的功能点编号,与相应的用例联系起来。例如,你可以列一个表格,列出各个(编号的)功 能点和测试用例间的关联关系。
这样,当需求和设计发生变化时,你只需要跟踪“功能点”是否变化,是否增加了新的功能点。
4. 一个好的用例的表述要点,即用例中应当包含的信息

一个优秀的测试用例,应该包含以下信息:
1) 软件或项目的名称
2) 软件或项目的版本(内部版本号)
3) 功能模块名
4) 测试用例的简单描述,即该用例执行的目的或方法
5) 测试用例的参考信息(便于跟踪和参考)
6) 本测试用例与其他测试用例间的依赖关系
7) 本用例的前置条件,即执行本用例必须要满足的条件,如对数据库的访问权限
8) 用例的编号(ID),如可以是 软件名称简写-功能块简写-NO.。
9) 步骤号、操作步骤描述、测试数据描述
10)预期结果(这是最重要的)和实际结果(如果有BUG管理工具,这条可以省略)
11)开发人员(必须有)和测试人员(可有可无)
12)测试执行日期

5. 给出一个测试用例的例子该范例已经包含一个测试用例的模板。

 

备注:本用例未考虑“企业代码”的输入情况;测试用例并未涵盖所有的非法输入,如非法输入中可能会有 “user=*,pw=*”的组合,对回车的默认操作,空格输入,对输入上溢的处理的处理(可能会跳过身份验证) 等等。
如果你有兴趣,至少可以再补充5-10条左右的输入组合(当然,如果步骤超过15步,用例的易操作 性就降低,你可以再创建一个测试用例如TC-TEP_Login_2)

 

丁同学就业中国企点网

发表于 2012-05-06 11:15 浏览次数:988 views 来源:

就业学员丁同学   职位:java程序员  

工作单位中国企点网 

学员感悟:

     丁云勇是山东济南校区的学生。以前在一家地方文工团做一名歌手,性格内向,人很聪明,也很腼腆。技术实际应用能力强。喜欢手写代码。毕业后来到北京,在北京就业部老师的组织下进行面试。但都不是很理想,但是他始终没有气馁。在一次招聘会上,他由于堵车迟到了,当时现场只有一家企业,而且也打算离场了。在他的诚挚的恳求下,企业留下来面试了他。在复试中在待遇方面也没有提太多要求。结果在他这一次面试就被选上。很快就上班了。他的求职经历可以说很顺利,主要得益于他的积极求职的心态和务实的求职思想。

 

Linux学习笔记:目录架构

发表于 2012-05-06 11:13 浏览次数:2,375 views 来源:

 linux目录架构

 

/   根目录

/bin    常用的命令 binary file 的目录

/boot   存放系统启动时必须读取的档案,包括核心 (kernel) 在内

/boot/grub/menu.lst   GRUB设置

/boot/vmlinuz   内核

/boot/initrd     核心解压缩所需 RAM Disk

/dev    系统周边设备

/etc    系统相关设定文件

/etc/DIR_COLORS   设定颜色

/etc/HOSTNAME   设定用户的节点名

/etc/NETWORKING   只有YES标明网络存在

/etc/host.conf 文件说明用户的系统如何查询节点名

/etc/hosts 设定用户自已的IP与名字的对应表

/etc/hosts.allow 设置允许使用inetd的机器使用

/etc/hosts.deny 设置不允许使用inetd的机器使用

/etc/hosts.equiv 设置远端机不用密码

/etc/inetd.conf 设定系统网络守护进程inetd的配置

/etc/gateways 设定路由器

/etc/protocols 设定系统支持的协议

/etc/named.boot 设定本机为名字服务器的配置文件

/etc/sysconfig/network-scripts/ifcfg-eth0   设置IP

/etc/resolv.conf    设置DNS

/etc/X11  X Window的配置文件,xorg.conf 或 XF86Config 这两个 X Server 的设定档

/etc/fstab    记录开机要mount的文件系统

/etc/inittab 设定系统启动时init进程将把系统设置成什么样的runlevel

/etc/issue 记录用户登录前显示的信息

/etc/group 设定用户的组名与相关信息

/etc/passwd 帐号信息

/etc/shadow 密码信息

/etc/sudoers 可以sudo命令的配置文件

/etc/securetty 设定哪些终端可以让root登录

/etc/login.defs 所有用户登录时的缺省配置

/etc/exports 设定NFS系统用的

/etc/init.d/   所有服务的预设启动 script 都是放在这里的,例如要启动或者关闭

/etc/xinetd.d/  这就是所谓的 super daemon 管理的各项服务的设定档目录

/etc/modprobe.conf   内核模块额外参数设定

/etc/syslog.conf   日志设置文件

/home   使用者家目录

/lib    系统会使用到的函数库

/lib/modules   kernel 的相关模块

/var/lib/rpm   rpm套件安装处

/lost+found    系统不正常产生错误时,会将一些遗失的片段放置於此目录下

/mnt     外设的挂载点

/media   与/mnt类似

/opt     主机额外安装的软件

/proc    虚拟目录,是内存的映射

/proc/version   内核版本

/proc/sys/kernel   系统内核功能

/root    系统管理员的家目录

/sbin    系统管理员才能执行的指令

/srv     一些服务启动之後,这些服务所需要取用的资料目录

/tmp     一般使用者或者是正在执行的程序暂时放置档案的地方

/usr     最大的目录,存许应用程序和文件

/usr/X11R6:   X-Window目录

/usr/src:    Linux源代码

/usr/include:系统头文件

/usr/openwin 存放SUN的OpenWin

/usr/man 在线使用手册

/usr/bin           使用者可执行的 binary file 的目录

/usr/local/bin     使用者可执行的 binary file 的目录

/usr/lib           系统会使用到的函数库

/usr/local/lib     系统会使用到的函数库

/usr/sbin          系统管理员才能执行的指令

/usr/local/sbin    系统管理员才能执行的指令

/var   日志文件

/var/log/secure    记录登入系统存取资料的档案,例如 pop3, ssh, telnet, ftp 等都会记录在此档案中

/var/log/wtmp      记录登入者的讯息资料, last

/var/log/messages  几乎系统发生的错误讯息

/var/log/boot.log  记录开机或者是一些服务启动的时候,所显示的启动或关闭讯息

/var/log/maillog   纪录邮件存取或往来( sendmail 与 pop3 )的使用者记录

/var/log/cron      记录 crontab 这个例行性服务的内容

/var/log/httpd, /var/log/news, /var/log/mysqld.log, /var/log/samba, /var/log/procmail.log:

分别是几个不同的网路服务的记录档

Web测试与浏览自动化

发表于 2012-05-06 11:13 浏览次数:1,040 views 来源:

  一直对网络机器人之类的东西比较感兴趣。可以实现定时登录某站点捞积分,还可以提高测试 Web 站点效率(虽然我目前不做这一块)。我目前了解的有以下几个实现途径:

  (1) JavaScript

   所有主流浏览器对嵌入 JavaScript 的支持比较一致,对 JavaScript 暴露了 DOM 访问 API 以及浏览器操作 API。所以“JavaScript”这条路比较好走。但由于 JavaScript 不能访问本地文件(安全性考虑)等限制,我无法做“登录某站点后下载某文件”之类的操作。JavaScript 相关的 Web 自动化工具有:

   zope.testrecorder:一个跨浏览器 (IE, Firefox, Safari) JavaScript 程序,记录浏览器事件 (点击和输入文字等) 以及测试断言 (这个文本框应包含这个文字,那个复选框应不应被勾选等)。必须安装 Zope 这个 Web Server,再访问 zope.testrocoder 这个组件,然后输入任意 URL 开始记录测试。但是安装和配置 Zope 太麻烦了。需要配合 Selenium(一个开源的 Web 测试框架)或 zope.testbrowser(见下文)使用。

  JsUnit:设计为测试静态或生成的 HTML 文档,不能与实际的 Web Server 交互。

  (2) 控制浏览器

  IE 和 Firefox 都提供了编程接口以便外部程序控制其行为。

   MSDN 给出了 IE 的 COM 接口以及 VB 控制 IE 的例子。pywin32 以 Python 包装了 COM 等机制,所以用 Python 操作 IE 也是可行的。PAMIE 对 pywin32 进一步包装,控制 IE 更加方便。关于 Python 的 COM 编程,请参考《Python Programming on Win32》一书。另外该书的 Chapter 21. Active Scripting 还描述了怎样把 Python 嵌入 IE(受限于安全性,嵌入 Python 不允许导入任何模块,所以并不能提供比 JavaScript 更多的功能)。另外注意: IE 7 及以上版本默认不允许 COM 控制,这样打开:Tools –> Internet Options –> Security –> Security for this zone 修改为"Medium"。

  XPCOM 是访问 Gecko 库、嵌入或扩展 Gecko 的方法。PyXPCOM 包装了 XPCOM 机制。FireFox 等以 Gecko 作为 Web 排版引擎,所以可以通过 XPCOM 来控制它们。这方面资料较少,我至今还没有在 Google 上发现通过 PyXPCOM 控制 Firefox 的例子。

  (3) 模拟浏览器

  浏览器的重定向、表单和 Cookie 等行为比较好模拟,但 Frame、DOM 访问、JavaScript 和 JavaApplet 等就越来越难模拟了。以下按照模拟能力降序排列:

  • HttpUnit(Java 实现,配合 JUnit):支持基本 HTTP 认证、简单的 JavaScript。
  • zope.testbrowser 是一个 Zope 组件但可脱离 Zope 单独使用。支持简单 DOM (含表单)、Cookie、定制 HTTP 请求。
  • WebUnit(Python 实现,配合 PyUnit):DOM 方面仅支持表单,其他能力与 zope.testbrowser 相当。
  • twill(Python 实现):模拟能力与 WebUnit 相当。
  • Python 3 标准模块 urllib(基于更底层的 http.client 模块)和 http.cookiejar 等配合起来支持基本的定制 HTTP 请求、Cookie。标准模块 html.parser 解析 HTML,可能需要 python-utidylib 做 HTML 整理。

  (4) 宏记录鼠标点击坐标和时间然后重放

  这个方法受 Web 页变化影响很大,且测试逻辑不明确,所以这方式的测试用例几乎无法维护。许多商业的 Web 测试软件就是这一类。

一个成功测试人解读测试这条路

发表于 2012-05-06 11:09 浏览次数:794 views 来源:

  那我说一下我的看法吧。因为大家都是搞测试的,这里我也只谈测试。

首先,我们可以有两条路发展,技术和管理。管理就是做team lead, manager, director这么走。因为我没有走这条路,所以,我这里也只谈技术。而且,即使走管理,也是应该具备很强的技术能力才行,所以技术是我们的发展之本。我个人不喜欢技术不精通的领导,也不喜欢被这种人管理。

技术的发展是分阶段的,基本上你要是能发展到最后的阶段,工作,钱,房子,车子,老婆都不用发愁了。当然要一步一步走,不可能一步升天,而且一路走过来也不是很容易,应该说大部分人可能都达不到。不过只要你肯努力,坚持不懈,就一定能达到。

第一阶段:就是基本功的问题。这个阶段从大学入学就开始了,我接触不少人工作几年都没有达到要求。这个要求是一定要达到的,不然以后没法往高发展。大学的一些课程一定要学好,主要是数据结构,算法,数据库,操作系统,计算机网络。争取精通两门。数据结构,算法对软件开发非常的重要,很多大公司面试就考这些。你不过关,根本通过不了面试,一两道算法题一下就把你难住了。另外,我可以告诉你,顶尖公司的面试80%都是考算法,你有没有经验不要紧,做没做过项目不要紧。关键是考察你的基本功,基本功打好了,其他工作就都容易很多了,基本功打不好,什么都白说。操作系统,争取要精通windows或者linux内核,看你走哪条路了,我是搞windows的,不过他们之间很多地方也是相通的。计算机网络,争取精通TCP/IP协议。数据库我不怎么懂,我的理解是要精通oracle, sqlserver, 还有sql编程。

另外就是编程技术了。C,C++,面向对象一定要搞懂,搞熟。大公司面试的算法就是要你用C/C++实现的。这些搞熟了,学习其他语言就是几个小时的事情。(我指的是上手,不是精通)。这些东西搞不透,不管你其他语言用多少年,回来学他们还是难。

再有就是英语水平了,听说读写,各个方面都要达到要求。技术到了一定程度,英语对你的发展就起到了非常决定性的作用了。你英语好,就可以去外企,就可以外派出国,甚至国外发展。

以上这些都是在大学应该掌握好的。当然了,能在大学掌握好这些的毕竟是少数。这些少数人就是去了微软,google的那些,一毕业就拿到月薪上万工资的。大部分人都是达不到要求的,这没关系,毕业后一定要找时间把这些基本功补上。不然的话,在下个阶段的发展就很受限制了。

第二阶段:计算机知识的扩展,行业知识的精通。这个阶段从你大学毕业走向第一个工作岗位开始。工作之后,发现计算机的世界比大学的知识要博大精深很多。一开始工作,就要拼命吸收以前没有接触过的,新的知识。这个就不多说了,大家都会有很多感受的,会觉得很多东西都不会,不会就学。以后你跳槽去面试,人家就会看你工作几年,这几年干什么了。工作1,2年之后,很重要的一件事情就是要选择一个行业了。也许是你现在正在从事的行业,也许是一个新的行业。总之,你自己要为自己规划,选择一个适合自己,而且又热门,以后有发展的行业。无论是现在的行业,还是跳槽到一个新的行业,都需要你开始积累在这个行业的经验了,要精通这个行业。有这个基础之后,就要去这个行业里top的公司了,国企,外企都可以,一定要有名气,大公司。比如,通信的华为,搜索的百度,等等。如果你精通了这个行业,去这些公司不是很难。

另外有一点很重要,如果你本科不是一所名校毕业的话,争取能上一个名校的研究生,全职,兼职都可以。这样可以为下一阶段做好充分的准备,否则的话会有比较大的困难。总之了,是自己的短处都要想办法去弥补,不然发展总会受限制。

第三阶段:国际著名大公司。有了前两个阶段的积累,加上自己的英文水平,就要找机会进入国际的大公司了。相信这个时候就会有很多猎头来联系你了。选择你这个行业的世界前3,最好是第一或者第二。进去之后要学习两个方面,一是英文,中国人可以学一辈子英文的。另外一个就是大公司的管理。可以这样说,国际大公司的管理有很多类似的地方,因此他们的招聘非常愿意招其他国际大公司的职员。这就是为什么,你一旦踏上一家公司,一辈子都不用愁工作了,可以在这些大公司跳来跳去,工资节节高。到了这个阶段,你基本上可以有个比较不错的生活了,房子,车子都不会是太大的问题。

第四阶段:向国际化发展。如果你还不满足,觉得自己还有能力更进一步,那我就建议你向国际化发展了。中国的工资毕竟有限,到了第三阶段也不过就是20万左右,你可能还不满足。那么你就可以联系国外的公司了,有了你的英文,你的经验,你的背景,到时候就是水到渠成了。我相信国际的猎头也会盯上你的。

最后说一下,如果你现在已经具备了我所说的各个阶段的能力,那么你的简历是任何公司都很难拒绝的了。因为目前的情况,具有这些素质的测试人员在世界都紧缺。很多公司都招不到人,即使连google,MS也不列外。他们都在到处寻找这种人。

最后说一下测试。我一直没有讨论测试的问题,因为我一直没有把测试当作一个难得东西来看待。我认为测试是表面上的,我前边提到的东西要比它重要的多。欢迎大家一起来讨论。我也是进入测试才2年多的时候,其中大多数的时间也像大家一样的迷惘,很多时候也很悲观。不过通过自己的努力,最后终于得到了一个满意的结果。我发现自己对测试这个行业的理解和很多人都不同,希望我的理解能给大家一点帮助。

软件失效分类与管理

发表于 2012-05-06 11:08 浏览次数:2,352 views 来源:

  软件测试使用各种术语描述软件出现的问题,通用的术语如下:

● 软件错误(software error)

● 软件缺陷(software defect)

● 软件故障(software fault)

● 软件失效(software failure)

区分这些术语的概念很重要,它关系到测试工程师对软件失效现象与机理的深刻理解,而这些概念尝尝在文献中被混淆。

由于软件内部逻辑复杂,运行环境动态变化,且不同的软件差异可能很大,因而软件失效机理可能有不同的表现形式。但总的说来,软件失效机理可描述为:软件错误→软件缺陷→软件故障→软件失效。

① 软件错误:在可以预见的时期内,软件仍将由人来开发。在整个软件生存期的各个阶段,都贯穿着人的直接或间接的干预。然而,人难免犯错误,这必然给软件留下不良的痕迹。软件错误是指在软件生存期内的不希望或不可接受的人为错误,其结果是导致软件缺陷的产生。可见,软件错误是一种认为过程,相对于软件本身,是一种外部行为。

② 软件缺陷:软件缺陷是存在于软件(文档、数据、程序)之中的那些不希望或不可接受的偏差,如少一逗点、多一语句等。其结果是软件运行于某一特定条件时出现软件故障,这时称软件缺陷被激活。

③ 软件故障:软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态。譬如,软件处于执行一个多余循环过程时,我们说软件出现故障。此时若无适当措施(容错)加以及时处理,便产生软件失效。显然,软件故障是一种动态行为。

④ 软件失效:软件失效是指软件运行时产生的一种不希望或不可接受的外部行为结果。

综上所述,软件错误是一种认为错误。一个软件错误必定产生一个或多个软件缺陷。当一个软件缺陷被激活时,便产生一个软件故障;同一个软件缺陷在不同条件下被激活,可能产生不同的软件故障。软件故障如果没有及时的容错措施加以处理,便不可避免地导致软件失效;同一个软件故障在不同条件下可能产生不同的软件失效。

在软件生存期中存在和产生形形色色的软件错误、缺陷、故障和失效。不同的软件,其错误、缺陷、故障和失效无论在表现形式、性质乃至数量上都可能大不相同,试图对它们作一个全面而详细的阐述是不现实的,所以有必要加以区别对待。关于“错误”的广义定义是:不正确的事务和行为。在 1999年 (美)John D. Musa的《软件可靠性工程》书中,关于“软件错误”是这样描述的:“错误是在系统运行时,引起或可能潜在地引起失效的缺陷,是一种面向开发的概念。”例如,当用户单击某个具体的菜单时,本应在屏幕上出现特定的对话框,但是却没有出现。这种行为就是一个失效。造成这种失效的错误可能是遗漏代码。这里给出的定义是“电气与电子工程师协会(IEEE)”和“美国标准协会(ASA)”的标准,是通过引起失效和错误的系统成分,来定义失效和错误的。这些成分一般是硬件、软件和人。

John D. Musa(1999年)对软件错误的定义是:软件错误是代码中的缺陷,是由错误引起的,是由一个或多个人的不正确或遗漏行为造成的。例如,系统工程师在定义需求时可能会犯错误,从而导致代码错误,而代码错误又导致在一定条件下执行系统时出现失效。“缺陷”是指欠缺或不够完备的地方。软件的欠缺和不完备主要是针对产品说明书而言的。2001年(美)Ron Pttern著的《软件测试》一书对软件缺陷进行了定义。按照一般定义,只要软件出现的问题符合下列5中情况的任何一种,就叫做软件缺陷:①软件未达到产品说明书中标明的功能;②软件出现了产品说明中指明的不会出现的错误;③软件功能超出了产品说明书指明的范围;④软件未达到产品说明书虽未指出但应达到的指标;⑤软件测试人员认为软件难以理解、不易使用、运行速度慢,或最终用户认为不好用。实践表明,大多数软件缺陷产生的原因并非源自编程错误,主要来自于产品说明书的编写和产品方案设计。

产品说明书称为软件缺陷的罪魁祸首,是因为产品说明书编写的不全面、不完整和不准确,而且经常更改,或者整个开发组织没有很好地沟通和理解。这也就是出自于软件需求说明书本身的问题,或开发人员对需求说明书的理解与沟通不足。

软件缺陷的第二大来源是设计方案,也就是软件设计说明书。这是程序员开展软件计划和构架的地方,就像建筑师为建筑物绘制蓝图一样。这里产生软件缺陷的原因与产品说明书或需求说明书是一样的,片面、多变、理解与沟通不足。

总之,软件缺陷是开发的软件与软件需求说明书、设计说明书的不一致:软件的实现未满足应达到目标的用户潜在需求。故障是指一个实体发生障碍和毛病。软件故障在ISO14958软件产品评价标准中的定义是:计算机程序中的不正确的步骤、过程或数据定义。

软件故障是指软件运行过程中出现的一种不希望或不可接受的内部状态,软件出现故障若无适当措施(容错)加以及时处理,便产生软件失效。显然,软件故障是一种动态行为。

在软件设计和编程过程中,花费很大的精力确保软件系统能从各种故障导致的失效中恢复。当遇到软件出现故障时,系统不能像软件设计和用户要求那样运行而导致失效,就需要有故障恢复措施,以保证故障恢复后的继续执行。软件失效是系统行为对用户要求的偏离,是一种面向用户的概念。这就是说,失效意味着系统的运行。只有在执行程序过程中才会发现软件失效,发现潜在的失效可以是设计审查、代码阅读和其他方法产生的结果。有的项目组还把文档错误计算在软件错误之内,这一般是不正确的,因为文档并不直接影响程序的执行。因为用户接受的是程序使用的错误信息,文档错误可能会导致用户的失效。但是,用户并不是软件成分,不能把用户看成是与失效和可靠性有关的单独的系统成分。

对失效严重程度进行分类,主要是为了结合失效频率来解决失效优先级的确定。常见的分类标准包括对人员生命、成本和系统能力的影响。失效强度常常应用于软件可靠性工程中,最初是指单位时间内的失效次数;基于软件大量的使用经验,失效强度表示为每个自然单元出现的失效数目更加方便。失效强度是表示可靠性的另一种形式。

关于概念不可能彼此分得很清楚,实际上也没有太大的必要。目前软件测试界一般主要使用缺陷(defect)和错误(error)这两个词。在测试过程中,我们找到的错误会有不同的类型,对错误的分析与管理是十分重要的。




返回首页 | 关于我们 | 联系我们 | 乘车路线| 地铁路线| 学生住宿| 周边环境| 人才招聘 | 网站地图 | 友情链接 | 版权声明