qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

自动化构建方面的知识

http://www.cnblogs.com/itech/archive/2011/07/25/2116447.html

posted @ 2012-06-27 10:01 顺其自然EVO 阅读(278) | 评论 (0)编辑 收藏

浅谈SQL Server中统计对于查询的影响

  简介

  SQL Server查询分析器是基于开销的。通常来讲,查询分析器会根据谓词来确定该如何选择高效的查询路线,比如该选择哪个索引。而每次查询分析器寻找路径时,并不会每一次都去统计索引中包含的行数,值的范围等,而是根据一定条件创建和更新这些信息后保存到数据库中,这也就是所谓的统计信息。

  如何查看统计信息

  查看SQL Server的统计信息非常简单,使用如下指令:

  DBCC SHOW_STATISTICS('表名','索引名')

  所得到的结果如图1所示。

图1.统计信息

  统计信息如何影响查询

  下面我们通过一个简单的例子来看统计信息是如何影响查询分析器。我建立一个测试表,有两个INT值的列,其中id为自增,ref上建立非聚集索引,插入100条数据,从1到100,再插入9900条等于100的数据。图1中的统计信息就是示例数据的统计信息。

  此时,我where后使用ref值作为查询条件,但是给定不同的值,我们可以看出根据统计信息,查询分析器做出了不同的选择,如图2所示。

图2.根据不同的谓词,查询优化器做了不同的选择

  其实,对于查询分析器来说,柱状图对于直接可以确定的谓词非常管用,这些谓词比如:

  where date = getdate()
  where id= 12345
  where monthly_sales < 10000 / 12
  where name like “Careyson” + “%”

  但是对于比如

  where price = @vari
  where total_sales > (select sum(qty) from sales)
  where a.id =b.ref_id
  where col1 =1 and col2=2

  这类在运行时才能知道值的查询,采样步长就明显不是那么好用了。另外,上面第四行如果谓词是两个查询条件,使用采样步长也并不好用。因为无论索引有多少列,采样步长仅仅存储索引的第一列。当柱状图不再好用时,SQL Server使用密度来确定最佳的查询路线。

  密度的公式是:1/表中唯一值的个数。当密度越小时,索引越容易被选中。比如图1中的第二个表,我们可以通过如下公式来计算一下密度:

图3.某一列的密度

  根据公式可以推断,当表中的数据量逐渐增大时,密度会越来越小。

  对于那些不能根据采样步长做出选择的查询,查询分析器使用密度来估计行数,这个公式为:估计的行数=表中的行数*密度

  那么,根据这个公式,如果我做查询时,估计的行数就会为如图4所示的数字。

图4.估计的行数

  我们来验证一下这个结论,如图5所示。

图5.估计的行数

  因此,可以看出,估计的行数是和实际的行数有出入的,当数据分布均匀时,或者数据量大时,这个误差将会变的非常小。

  统计信息的更新

  由上面的例子可以看到,查询分析器由于依赖于统计信息进行查询,那么过时的统计信息则可能导致低效率的查询。统计信息既可以由SQL Server来进行管理,也可以手动进行更新,也可以由SQL Server管理更新时手动更新。

  当开启了自动更新后,SQL Server监控表中的数据更改,当达到临界值时则会自动更新数据。这个标准是:

  ● 向空表插入数据时

  ● 少于500行的表增加500行或者更多

  ● 当表中行多于500行时,数据的变化量大于20%时

  上述条件的满足均会导致统计被更新。

  当然,我们也可以使用如下语句手动更新统计信息。

  UPDATE STATISTICS 表名[索引名]

  列级统计信息

  SQL Server还可以针对不属于任何索引的列创建统计信息来帮助查询分析器获取”估计的行数“.当我们开启数据库级别的选项“自动创建统计信息”如图6所示。

图6.自动创建统计信息

  当这个选项设置为True时,当我们where谓词指定了不在任何索引上的列时,列的统计信息会被创建,但是会有以下两种情况例外:

  ● 创建统计信息的成本超过生成查询计划的成本

  ● 当SQL Server忙时不会自动生成统计信息

  我们可以通过系统视图sys.stats来查看这些统计信息,如图7所示。

图7.通过系统视图查看统计信息

  当然,也可以通过如下语句手动创建统计信息:

  CREATE STATISTICS 统计名称 ON 表名(列名 [,...n])

  总结

  本文简单谈了统计信息对于查询路径选择的影响。过时的统计信息很容易造成查询性能的降低。因此,定期更新统计信息是DBA重要的工作之一。










posted @ 2012-06-27 09:55 顺其自然EVO 阅读(188) | 评论 (0)编辑 收藏

说一下你的思考过程 Tell me what you think(编程测试)

 有这样一个脑筋急转弯的题目,不要试图去网络上寻找答案,思考一下,然后告诉我你的思考过程,不一定要有结果,找到答案不一定是最重要的,我更关心你的思考过程:以下是文章原文出处http://www.taixiaomei.com/archives/94。文章回答的很精辟,不敢独自保留,在此分享出来,供大家欣赏。

  这一个等式很奇怪,0比2大,2比5大,5比0大,为什么?

  When you see the following inequality, what will be the reasone, in your opinion? Don’t try to find the answer from the internet. Just tell me your thinking process.

  0>2,  2>5,  5>0

  Responses to 说一下你的思考过程 Tell me what you think

  看到这个等式首先想到的是为什么是反的。然后就想肯定不是代表普通的数学比大小,因为有计算机背景,初步就想到是不是asc编码符的比大小。但是继续验证ASCII编码是不正确的,其本质还是数字的比大小,没有摆脱那个思维,换种思路,上面这个等式的0,2,5其实并不是看做数字来理解而是一种图形,比如0代表圆圈,那2和5又代表什么呢?

  还是说不通,但是可以肯定的是0,2,5各自代表着某种已定的特殊含义,这种含义又有某种特殊的联系,现在就是要找出这种联。

  有了新的数据,推翻了上一次的猜测。并且推出新的猜测:“0,2,5其实并不是看做数字来理解,0,2,5各自代表着某种已定的特殊含义,这种含义又有某种特殊的联系”,现在需要用新的数据来证明这种猜测是正确的。

  这种既定联系的范围太广了,光从这个等式提供的信息量有点少啊。

  这种状态是否似曾相识?你测试的时候,是否有过这样的时候,感觉毫无头绪,感觉效率很低,感觉没有思路。。。

  这个时候,不妨试着运用Defocused Thinking,尽量拓宽自己的思路、找更多的数据(data)。或者运用Alternative Thinking,先做些别的事情,过一些时间再回来接着测试,也许就有新的思路了

  很好,你找到了题目与圆在某一方面的相似性。但是这个就是那个“答案(bug)”了吗?你需要找到更多的数据,证明它就是你要找的

  “答案”是我们最终要找的东西;我们测试的时候,bug不也是我们要找的东西吗?答案,事先你并不知晓在哪里,你也事先不知道bug藏在哪里,否则就没有必要测试了。都是在解决问题,都是在找寻未知,测试的乐趣也在于此了!

  可以从软件质量和软件测试的角度来思考这个问题:

  0、2、5分别表示软件测试中发现的bug数。0>2, 2>5:没有bug的程序固然比有2个bug的程序的代码质量高;类推,2个bug的比5个bug的代码质量高;5>0:0个bug不代表程序没有bug!而只能说由于个人测试方法、测试思维和知识的局限性导致了某些bug无法发现。从这个角度来讲,发现5个bug的测试用例和方法显然比没发现bug的用例和方法对保证软件测试质量的价值和意义重大。从某种角度来说0bug意味着测试方案的失败而非程序质量的成功。事实上,世界上最优秀的程序员,也不敢保证他的代码100%正确无误!

  这是不是软件测试的博弈?

  Well, I think I’ve got the key.0:石头;2:剪刀;5:布。

  非常棒!终于找到了答案。说说我能想到的启发吧:

  - 做这种题目就是一个寻找未知的过程,测试也是一个寻找未知的过程。这个未知可能是bug、可能是系统真实的表现

  - 当你知道答案时,你可能觉得这也没有什么高深的,很容易理解,剪刀、石头、布嘛,换句话说,正向思考还是很容易的出这道题的,可是让你找答案时,就不是那么容易了,因为这时你得利用反向思考的方法,这就是测试的思维

  - 不同的人思维方式区别很大,决定是否能找到这个答案和人的思维方式、知识经验都有很大关系,思维方式可以通过训练提高、知识经验可以通过学习和实践累积。【是的,我是在说,思维方式可以后天训练提升,而不是先天就决定了的】

  -  所以多做做这种动脑筋的题目、多解解各种谜题、多做做拼图游戏、多玩玩魔法和数独等,都可以训练你的思维,包括边际思考能力、系统思考能力、逆向思考能力等等,这些都是你的学习能力

  - 学习能力提高了,不管是产品知识还是测试知识,当然都对你来说不是什么难事了,你也能区分出来何时学习产品知识、何时补充测试知识、应该补充什么知识、应该补充多少知识了

  - 测试中,我们经常可以使用溯因推理法(adbuctive inference),也就是假设性诱导法

  1、你获得一些数据,希望能够解释这个数据

  2、你想到数个可能的解释

  3、你寻求更多的数据帮助你解释或反驳每一个解释

  4、你选择最能帮助你解释所有其中重要的数据的解释

  5、或者,你没有找到一个最合理的解释,那么继续寻找更多的数据

  - 科学家们会经常使用溯因推理法,测试人员也经常使用溯因推理法,实际上有些研究表明科学家们的思考方式与测试人员非常相似,他们经常质疑其他人习以为常的 东西、他们经常做各种可能的假设然后去验证、他们会时而想到其他人想不到的方面,科学家们的发现发明不是因为科学家们都是天才、都有超人的智慧,而是因为 他们的思维方式。所以多读读科学、社会学、人文学、认知学,了解发现问题、解决问题的思考过程,对测试大有裨益。

posted @ 2012-06-27 09:51 顺其自然EVO 阅读(244) | 评论 (0)编辑 收藏

Test Load Balancer 测试均衡负载

 什么是Test Load Balancer ?

  Test Load Balancer 测试分发工具,它能把所有的测试按照某个策略(数量、时间)均衡分布到不同的计算机上运行。

  问题域?

  一个典型的问题,当软件开发团队在做CI(持续集成)时,必须让CI的构建时间保持在一个合理的时间,比如10分钟为一个上线,但是由于需求的不断增多测试的数量也随之增加,花费在运行这些测试的时间越来越多,影响到了整个交付团队的进度。为了尽可能的缩短交付周期时间,减少测试的运行时间,一个行之有效的方法就是让测试并行执行。

  Test Load Balancer 如何工作 ?

  TLB(Test Load Balancer)有两个比较重要的概念:

  server:存储,查询测试数据(测试时间、测试结果等)

  balancer:测试分支,指定测试套件,设置server的url等

  Balancer与CI或者与某种测试框架一起工作,Server只是一个数据交互中心,Balancer需要测试的数据需要和Server通信。

  如何使用?

  TLB必须结合构建工具使用,我们以TLB自带的例子为例。

  examples/ant_junit

  这个例子使用shell写的运行脚本,我在windows上做的,先把它的脚本改改。

  把run_balancer.sh和上级目录的recipe.sh在powershell脚本里面合并。

$env:TLB_JOB_NAME='ant_junit'
$env:TLB_TOTAL_PARTITIONS='2'
$env:TEST_TASK='ant test.balanced'

Function StartServer() {
    cd ..\..\server
    .\server.bat start
    cd ..\examples\ant_junit
}

Function RunTest() {
    $env:TLB_DATA_DIR='.\demo_tlb_store'
    $env:TLB_OUT_FILE-".\tlb_balancer.out"
    $env:TLB_ERR_FILE='.\tlb_balancer.err'
    $env:TLB_BASE_URL='http://localhost:7019'
    $env:TLB_JOB_VERSION='1.0.0'

    for($i=1; $i -le $env:TLB_TOTAL_PARTITIONS; $i++) {
        $env:TLB_PARTITION_NUMBER='$i'
        $env:TLB_BALANCER_PORT='300$i'
        iex $TEST_TASK
    }
}

Function StopServer() {
    cd ..\..\server
    .\server.bat stop
    cd ..\examples\ant_junit
}

Function Runner() {
    StartServer
    RunTest
    StopServer
}

Runner

  TLB所有的设置依赖环境变量, TLB_TOTAL_PARTITIONS指定所有的测试分成多少份,TLB_BASE_URL指定TLB Server的地址,TLB_PARTITION_NUMBER当前node执行那一份测试,TLB_BALANCER_PORT指定node的端口。

  StartServer启动TLB服务器,会开启一个cmd窗口,关闭的时候调用脚本关闭这个窗口就可以关闭TLB 服务器。

  RunTest 运行测试,在每个node都必须配置TLB_PARTITION_NUMBER和TLB_BALANCER_PORT.

  StopServer 关闭TLB Server。

  Runner 脚本入口函数。

  这里的脚本是把TLB Server 和 Balancer写在一起的,只为show一下TLB如何使用,如果要在不同node运行,必须把它分成server和balancer两部分脚本。server只需要 StartServer 和StopServer函数,而node只需要RunTest函数,去掉for循环,指定具体的TLB_PATTITION_NUMBER和PORT就可以了。

  TLB不足?

  TLB虽然可以实现测试分发,但是如果不结合CI工具的话,就必须手动的去运行每个node,而且在server也不能监控和收集每个node的运行结果。

posted @ 2012-06-27 09:48 顺其自然EVO 阅读(307) | 评论 (0)编辑 收藏

软件测试持续集成的方法实践

  配置管理

  配置管理在软件开发项目中极其重要,它记录了软件开发流程的演进过程。它能够实现软件增量式开发,并随时可以追溯或查看任意时间的软件版本。持续集成一书中对配置管理是这样定义的:

  配置管理是指一个过程,通过该过程,所有与项目相关的产物,以及它们之间的关系都被唯一的定义、修改、存储和检索。

  那么我们怎么做配置管理?

  (一)版本控制

  (1)首先我们需要一个版本控制系统,Subversion、Mercurial或者Git,对于一个分布式的团队最好优先选择Mercurial或者Git。

  (2)把软件开发有关的所有内容进行版本控制。包括源代码、数据库脚本、构建脚本、部署脚本、文档、第三方依赖、MindMap等等。保证新加入的成员能够很容易地从零开始工作,保证在新的测试或者生产中能轻松部署应用。

  (3)频繁提交代码到主干。为了验证修改的正确性,快速的得到反馈,以及能够轻松地回滚到某个无错误的版本,提倡频繁提交。

  (4)提交注释清晰明了。构建失败时,为了能够通过版本控制器查询是谁破坏了构建,以及他做了哪些修改,提交代码的时候必须使用意义明显的提交注释。建议第一段是简短的总结,第二段是描述更多的修改细节。

  (二)依赖管理

  第三方库文件是最常见的依赖,我们可以在本地建一个外部依赖库的副本来统一管理所有依赖,如果你使用Maven,你就可以这样做。

  (三)环境配置

  软件最终的运行环境可能不止一个,而且每个软件都会依赖的硬件、软件、基础设施或者外部系统才能工作。我们必须把环境配置自动且可靠化,可以借助Puppet或者CfEngine之类的工具软件。

  持续集成

  敏捷宣言首要原则就是尽快的交付可工作的软件到客户手中,为了实现这一原则,控制成本并及早的验证修改的正确性和快速得到反馈,提倡使用持续集成方法。

  准备工作:

  (1)版本控制

  (2)自动化构建

  (3)持续集成系统(Jenkins,Go,TeamCity等等)

  (4)七步代码提交法则。如下图:



  为了实现持续集成需要做一下准备:

  (1)频繁提交

  (2)创建全面的自动化测试套件(单元测试、功能测试等)

  (3)保持较短的构建和测试过程

  (4)可视化构建状态(可使用红绿熔岩灯)

  必不可少的实践

  (1)构建失败后不要提交代码

  (2)提交前在本地运行所有的提交测试(单元测试、功能测试等)

  (3)等提交测试通过后再继续工作

  (4)下班之前,构建必须处于成功状态

  (5)若测试运行慢,就让构建失败

  (6)若有编译错误或者代码风格问题,就让构建失败

  持续集成改变了以往的软件开发模式,使应用程序任何时候都处于可运行状态,创建了一个快速的反馈环,使你能够尽早的发现问题,而发现问题越早,修复成本越低。

  测试策略

  测试策略的设计主要是识别和评估项目风险的优先级,以及决定采用哪些行为来缓解风险的一个过程。

  测试有很多种,Brian Marick提出了如下图 所示的测试象限。

  好的测试策略会带来很多的积极作用。测试会建立我们的信心,使我们相信软件可按预期正常运行。

相关链接:

软件开发为何采用持续集成

posted @ 2012-06-27 09:39 顺其自然EVO 阅读(651) | 评论 (0)编辑 收藏

对于表列数据类型选择的一点思考

  简介

  SQL Server每个表中各列的数据类型的选择通常显得很简单,但是对于具体数据类型的选择的不同对性能的影响还是略有差别。本篇文章对SQL Server表列数据类型的选择进行一些探索。

  一些数据存储的基础知识

  在SQL Server中,数据的存储以页为单位。八个页为一个区。一页为8K,一个区为64K,这个意味着1M的空间可以容纳16个区。如图1所示:

图1.SQL Server中的页和区

  如图1(PS:发现用windows自带的画图程序画博客中的图片也不错)可以看出,SQL Server中的分配单元分为三种,分别为存储行内数据的In_Row_Data,存储Lob对象的LOB_Data,存储溢出数据的Row_Overflow_data。下面我们通过一个更具体的例子来理解这三种分配单元。

  我建立如图2所示的表。

图2.测试表

  图2的测试表不难看出,通过插入数据使得每一行的长度会超过每页所能容纳的最大长度8060字节。使得不仅产生了行溢出(Row_Overflow_Data),还需要存储LOB的页。测试的插入语句和通过DBCC IND看到的分配情况如图3所示。

图3.超过8060字节的行所分配的页

  除去IAM页,这1行数据所需要三个页来存储。首先是LOB页,这类是用于存储存在数据库的二进制文件所设计,当这个类型的列出现时,在原有的列会存储一个24字节的指针,而将具体的二进制数据存在LOB页中,除去Text之外,VarBinary(max)也是存在LOB页中的。然后是溢出行,在SQL Server 2000中,一行超过8060字节是不被允许的,在SQL Server 2005之后的版本对这个特性进行了改进,使用Varchar,nvarchar等数据类型时,当行的大小不超过8060字节时,全部存在行内In-row data,当varchar中存储的数据过多使得整行超过8060字节时,会将额外的部分存于Row-overflow data页中,如果update这列使得行大小减少到小于8060字节,则这行又会全部回到in-row data页。


数据类型的选择

  在了解了一些基础知识之后。我们知道SQL Server读取数据是以页为单位,更少的页不仅仅意味着更少的IO,还有更少的内存和CPU资源消耗。所以对于数据选择的主旨是:

  尽量使得每行的大小更小

  这个听起来非常简单,但实际上还需要对SQL Server的数据类型有更多的了解。

  比如存储INT类型的数据,按照业务规则,能用INT就不用BIGINT,能用SMALLINT就不用INT,能用TINYINT就不用SMALLINT。

  所以为了使每行的数据更小,则使用占字节最小的数据类型。

  1、比如不要使用DateTime类型,而根据业务使用更精确的类型,如下表:

  2、使用VarChar(Max),Nvarchar(Max),varbinary(Max)来代替text,ntext和image类型

  根据前面的基础知识可以知道,对于text,ntext和image类型来说,每一列只要不为null,即使占用很小的数据,也需要额外分配一个LOB页,这无疑占用了更多的页。而对于Varchar(Max)等数据类型来说,当数据量很小的时候,存在In-row-data中就能满足要求,而不用额外的LOB页,只有当数据溢出时,才会额外分配LOB页,除此之外,Varchar(Max)等类型支持字符串操作函数比如:

  ● COL_LENGTH
  ● CHARINDEX
  ● PATINDEX
  ● LEN
  ● DATALENGTH
  ● SUBSTRING

  3、对于仅仅存储数字的列,使用数字类型而不是Varchar等。

  因为数字类型占用更小的存储空间。比如存储123456789使用INT类型只需要4个字节,而使用Varchar就需要9个字节(这还不包括Varchar还需要占用4个字节记录长度)。

  4、如果没有必要,不要使用Nvarchar,Nchar等以“字”为单位存储的数据类型。这类数据类型相比varchar或是char需要更多的存储空间。

  5、关于Char和VarChar的选择

  这类比较其实有一些了。如果懒得记忆,大多数情况下使用Varchar都是正确的选择。我们知道Varchar所占用的存储空间由其存储的内容决定,而Char所占用的存储空间由定义其的长度决定。因此Char的长度无论存储多少数据,都会占用其定义的空间。所以如果列存储着像邮政编码这样的固定长度的数据,选择Char吧,否则选择Varchar会比较好。除此之外,Varchar相比Char要多占用几个字节存储其长度,下面我们来做个简单的实验。

  首先我们建立表,这个表中只有两个列,一个INT类型的列,另一个类型定义为Char(5),向其中插入两条测试数据,然后通过DBCC PAGE来查看其页内结构,如图4所示。

图4.使用char(5)类型,每行所占的空间为16字节

  下面我们再来看改为Varchar(5),此时的页信息,如图5所示。

图5.Varchar(5),每行所占用的空间为20字节

  因此可以看出,Varchar需要额外4个字节来记录其内容长度。因此,当实际列存储的内容长度小于5字节时,使用char而不是varchar会更节省空间。

  关于Null的使用

  关于Null的使用也是略有争议。有些人建议不要允许Null,全部设置成Not Null+Default。这样做是由于SQL Server比较时就不会使用三值逻辑(TRUE,FALSE,UNKNOWN),而使用二值逻辑(True,False),并且查询的时候也不再需要IsNull函数来替换Null值。

  但这也引出了一些问题,比如聚合函数的时候,Null值是不参与运算的,而使用Not Null+Default这个值就需要做排除处理。

  因此Null的使用还需要按照具体的业务来看。

  考虑使用稀疏列(Sparse)

  稀疏列是对 Null 值采用优化的存储方式的普通列。 稀疏列减少了 Null 值的空间需求,但代价是检索非 Null 值的开销增加。 当至少能够节省 20% 到 40% 的空间时,才应考虑使用稀疏列。

  稀疏列在SSMS中的设置如图6所示。

图6.稀疏列

  对于主键的选择

  对于主键的选择是表设计的重中之重,因为主键不仅关系到业务模型,更关系到对表数据操作的的效率(因为主键会处于B树的非叶子节点中,对树的高度的影响最多)。关于主键的选择,我之前已经有一篇文章关于这点:从性能的角度谈SQL Server聚集索引键的选择,这里就不再细说了。

  总结

  本篇文章对于设计表时,数据列的选择进行了一些探寻。好的表设计不仅仅是能满足业务需求,还能够满足对性能的优化。

posted @ 2012-06-26 10:03 顺其自然EVO 阅读(210) | 评论 (0)编辑 收藏

TDD从何开始

     摘要: 万事开头难。在TDD中,人们纠结最多的可能是这样一个问题:如何写第一个测试呢?实际上要视不同的问题而定。如果问题本身是一个算法求解,或者是一个大系统中的小单元,那么可以从最简单、最直观的情况出发,这样有助于快速建立信心,形成反馈周期。但是在实际的开发中,很多时候我们拿到的就是一个“应用级”的需求:一个网上订票系统,一个网上书店,愤怒的小鸟,诸如此类。此时,我们如何TDD呢?...  阅读全文

posted @ 2012-06-26 09:58 顺其自然EVO 阅读(408) | 评论 (0)编辑 收藏

开发测试工作考核数据之---生产环境bug修复及时率

  编写背景:

  前段时间有不少猎头来电询问是否考虑换工作,我一一回绝;因为在目前公司要完成的目标目前完成了1个,正在进行中1个,剩余1个还没有开始;其中一个猎头问我为什么来这家公司,主要是因为我的老板懂测试这个工种和工作,非常实实在在的支持和重视测试部门。

  非常感谢今年的绩效考核工作,增加了一项考核指标:生产环境bug修复及时率,让我有机会学习和学会如何用这项指标来驱动开发的工作和检查测试工作成果,感谢我的老板给我的工作指导和好的想法,感谢在工作中时常提醒我做重要事情并给我很多工作建议的mac。

  今天拿出来和同行分享,希望对大家有帮助。^_^。

  点子1:生产环境bug的review会议

  我们有固定的时间每周四上午,花1小时和开发及管理层过生产环境没有处理的P0、P1、P2问题,时间来得及会把P3也过一过;主要让大家知道目前生产环境都有哪些问题,处理进展如何,什么时候能解决,解决这些问题有什么困难。连续开了4周,有一些进步,还需继续引导。

  点子2:每周过一遍生产环境bug修复及时率数据

  给大家分享一下上半年的数据,还没有进行更深入的分析。从数据上可以看出测试漏出去不少问题,我在想:为什么会漏出去这些问题?在哪些环节给漏出去的?

  我们要通过什么方法改善?为什么修复及时率这么低,工作流程中哪个地方有问题?数据因什么原因上升或下降?

posted @ 2012-06-26 09:55 顺其自然EVO 阅读(399) | 评论 (0)编辑 收藏

新浪会员探索性测试思路详解

  1、商业区测试法:

  1.1 指南测试法:4-16字符、英文小写、数字、下划线,不能全是数字或下划线。

  1.2 可用测试法:帐号由字母、数字组成,点(.)减号(-)下划线(_)不能放在开头或结尾,也不能连续出现。

  1.3 卖点测试法:当邮箱名已经被注册,不要仅仅只是提示错误信息,最好能给些用户建议或者用户感兴趣的其他处理办法。

  1.4 质疑测试法:当邮箱名以下划线开头或者以下划线结尾时注册。

  1.5 地标测试法:1.1与1.3结合,之所以这样测试目标还是考虑基本点和竞争对手。

  1.6 极限测试法:1.6.1功能方面:长度4、16,组成:全字母、全数字、全下划线、三者组合、非字母、非数字、非下划线。1.6.2性能方面:能同时支持多少用户注册?1.6.3多个用户同时注册某个邮箱名。

  1.7 快递测试法:测试邮箱地址、登录密码、确认密码、密保问题、密保问题答案、昵称、验证码其中某一个输入错误或者没有填,能否及时提醒。而不是等到最后提交才提醒。而且不能在提交的时候清理掉本身正确的输入。

  1.8 深夜测试法:1.6.2性能方面:能同时支持多少用户注册?最大能支持多少人同时访问,如果超过最大的访问人数,系统又如何处理。

  1.9 遍历测试法:测试所有字段都填写的时候,只填必填字段时。

  2、历史区测试法:

  2.1 恶灵测试法:测试错误常出的地方,在这个例子中主要测试邮箱地址以及密保问题答案。

  2.2 博物馆测试法:结合开发提的建议,有哪些代码是没有修改过。测试的重点应该是最近被修改(本版本被修改过的部分)。

  2.3 上一版本测试法:有点类似于回归测试,测试上一个版本的用例。为了更好地对比新老版本在同样功能上的区别。

  3、娱乐区测试法:

  3.1 配角测试法:测试一个特定的特性(辅助功能)与一个主要的特性(重要的特性)放在一个测试场景中,目的是验证功能是否存在明显的相互影响。比如注册新浪邮箱和注册新浪会员。比如新浪微博和邮件转发微博内容。

  3.2 深港测试法:测试密保问题,根据测试不常用的原则,测试靠下的密保问题以及自定义密保问题。从开发人员心理的角度来看,常犯错的地方往往是不经意间的地方。

  3.3 混合测试法:把正常符合邮箱地址的地址以及密保问题的自定义密保配合来测试,邮箱地址和强的密码(长度6位以上,且组成含有字母(大小写)、数字、特殊字符)

  3.4 通宵测试法:测试一段时间(10分钟,根据不同行业用户习惯)不对注册邮箱界面做任何操作后,系统是超时退出还是保留原界面。(在安全和易用性之间找到一个平衡点)

  4、旅馆区测试法:

  4.1 收藏家法:整理输出,更多是整理输入非法的情况下对应的输出,输出越全面、完整,测试定位问题越精确,软件的容错性就越好。分类处理(更多关注输入隐式的规则,从违反规则角度来对应整理输出,管理员、开发语言的关键字、敏感词汇、特殊字符)。

  4.2 长路径法:主要应用在配置类测试,具体的例子有移动的资费套餐的配置。

  4.3 超模测试法:跟GUI测试几乎类似,关注的是风格和样式,包括颜色、字体、控件布局、Tab键的处理等界面相关。

  4.4 测一送一法:最典型的情况是浏览器的兼容性(某一个BS软件要能支持主流的浏览器),同时使用不同的浏览器来打开注册界面,同时提交数据请求。有时要借助一些工具。如果是测试的是CS的,往往是测试其是否支持多线程。(进程与线程区别)

  4.5 苏格兰酒吧测试:

  5、破坏区测试法:

  5.1 取消测试法:最好给用户回溯功能(取消某一个步骤,甚至是整个操作的功能)这里最典型的是office的undo功能。测试新浪会员能支持清空出错的输入,也能支持回退上一个步骤。

  5.2 懒汉测试法:对一些有默认值的输入框,我们测试能否正常处理输入框默认值功能,另一个方面是默认值(下拉列表)是否真正默认。

posted @ 2012-06-26 09:52 顺其自然EVO 阅读(168) | 评论 (0)编辑 收藏

软件性能的生命周期

  影响软件性能的要素有很多,在需求阶段就应该对软件性能进行分析,在设计阶段要充分考虑软件架构设计对性能的影响,在测试阶段要充分验证软件的性能表现是否满足需求。

  一、需求阶段的性能分析

  从业务角度分析,如果一个系统上线后使用人数比较多,而且后期数据量比较大(如电信、金融证券等对外开放的系统),就有必要做好性能测试,因为这些系统对于实时性交互要求比较高,对系统的响应时间、并发用户数等要求都比较高,并且从数据角度分析,系统上线几年后存量数据一般都是千万级数据量,因此前期性能设计与验证对业务系统的后期正常运行维护至关重要。

  在软件开发前期的需求分析阶段,需求分析师与客户业务人员沟通时,要明确提出各项性能指标,包括系统业务交易的使用频度、系统并发用户量、业务数据量评估等各项指标。然后对系统的响应时间、用户数和资源使用进行分析。

  1、响应时间分析

  响应时间的需求调研分析,例如查询类的交易需要在多少秒之内响应,对于URL连接或者刷新整个网页的时间,它是一个非常重要的度量值,因为它是直接体现用户体验的一个指数。

  它同时也是最不容易测量的度量值,因为它比其他的度量值更容易发生变化。我们需要了解响应时间的区域分布。例如:一般月底是发工资的时候,查询当前账户额度是用户这段时间最常用的功能,这段时间的系统响应时间估计比平常响应时间慢些,而对于电信之类的报表查询,省内公司查询当月本省各个分公司、分点的销售额情况,总公司查询全国各省的总销售额情况,这时数量级别相差甚大,查询时响应时间也相对比较慢。这些情况对于指导服务器分布、负载均衡、数据库的设计都非常重要。

  2、用户数分析

  用户数分析,主要分析评估系统上线后的总用户数、平均每天在线用户数等情况,具体可分析:哪些交易每天都有用户在执行业务交易,这些用户一般占系统总人数的比例是多少;哪些交易会在月底、季末或者年底高频率并发使用;哪些交易用户使用得比较少,但却是相关重要人物(如上级领导)重点关注的交易。这些用户数分析结果,可为后续的性能测试设计中,针对混合场景的用户数配比设计提供有力的参考依据。

  3、资源使用分析

  资源使用分析用于衡量系统资源使用率的情况,反映系统的最底层性能情况,对于容量规划比较有指导作用,同时它也是比较容易理解的性能度量值。

  二、设计开发阶段的性能分析与验证

  大部分项目的性能问题是设计出来的,而不是开发和测试出来的。要获得性能良好的软件系统,需要根据需求分析及设计规划,进行系统的规模分析和完整的性能分析,预估性能瓶颈点,提出解决方案,最后通过架构师、程序设计人员等角色进行评审验证并确认,保障性能目标的达成。

  在代码开发阶段,需要根据设计方案,在开发过程中关注性能瓶颈点,进行相应的白盒测试,通过代码分析和评审等手段,确认性能瓶颈并解决。需要不断地分析和总结性能问题和解决方案,形成性能方面的代码编写规范,从而在研发阶段的早期就能确保把软件系统在性能方面的风险降到最低。

  系统设计与代码实现的很多细节都会对软件系统性能起到关键的作用。例如,在数据查询界面设计时,需要考虑查询方式是模糊查询还是精确查询、如何设计查询分页展现、对象的创建以及释放问题等。

  在采用具体实现技术时,也需要注意性能细节,例如 Hibernate 中对大数据量查询时,需慎用 list() 或者 iterator() 遍历返回查询结果。

  在采用Java等托管语言开发软件系统时,需要注意对象的生成和对象大小问题,否则容易导致产生大量对象实例,系统不仅要花时间生成对象,还可能要花时间对这些对象进行垃圾回收和处理,生成过多的对象将会对程序的性能带来很大的影响。

  在数据库设计上也有很多细节会对后期系统性能表现有决定性的影响,例如:对历史查询是否分区、如何分区性能更好;如何设计批量数据抽取转换的方式,以保证减少或消除等待;如何设计索引,减少全表扫描、提高SQL查询效率;编写良好的SQL语句以便提高重用率、减少数据库解析。

  三、统测试阶段的性能验证与优化

  性能问题越早发现、修改,越能保证系统上线后的稳定性,因此应该在软件生命周期的不同阶段进行软件性能测试。

  性能测试大致可以分为单元性能测试、集成性能测试、系统性能测试、多套系统互联接口性能测试等。其中,对一套系统进行的系统性能测试,也就是在特定的环境下、一定量的数据情况下,进行的系统级的性能测试,是最常用的,也是最为测试人员所熟悉的一种性能测试。

  系统性能测试阶段的一般测试过程如下:在系统功能被确认后,模拟真实生产环境进行软件系统的部署(包括硬件设备、操作系统、网络搭建、负载均衡部署、中间件部署、数据库部署等),然后再根据前期的性能测试需求分析结果及测试策略定义的方法,模拟一定量的虚拟并发用户数,进行压力测试,同时监控分析系统是否满足预期的性能指标,识别性能可能出现的瓶颈点(应用代码、网络设备、硬件设备、操作系统、中间件配置、数据库等),并进行性能优化处理,调优后再进行复测,确保软件系统最终达到性能要求。

posted @ 2012-06-26 09:49 顺其自然EVO 阅读(311) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 311 312 313 314 315 316 317 318 319 下一页 Last 
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜