发布新日志

  • 测试的态度

    2009-06-28 23:52:48

    ……
    1.1  精益求精
    精益求精不仅仅是一种做事的标准,更是一种做人的态度。无论是测试用例设计、性能测试、回归测试、测试脚本开发还是测试工具开发等任何一个测试的分工,都需要用精益求精的态度来提高每个测试环节的质量,并相应地提高产品的测试质量。
      案例
    A是某著名软件公司的软件测试人员,工作的流程非常严谨而明晰,这自然也意味着重复劳动。但枯燥并没有淹没A的工作激情,发现一个bug会带来很大的成就感,特别是想到每天将会有几百万人通过使用没有这个bug的软件准确无误地达到他们的目的,A就特别有成就感。虽然可能一整天都为了一个小功能“循规蹈矩”地反复测试,但是这样的重复却被A当做一种重要的积累,在积累中不断地追求精益求精的完美。
    正如新东方学校的徐小平在其著作《骑驴找马》中的一句话:“重复做汉堡,就是麦当劳;重复煮咖啡,就是星巴克;重复教托福,就是俞敏洪;重复做好事,就是活雷锋。”重复的过程也是追求精益求精的过程,每一次重复都需要比上一次做得更好、更精彩,你才能不断地进步,并做到极致的成功。
    1.1.1  测试用例设计的精益求精
    测试用例设计工作本身是一个很难直接定量的工作,也不可能像开发代码一样,只要编译通过可执行就认为完成了任务。那么在测试用例设计过程中,我们如何才能促进测试用例设计水平的提高呢?测试用例的设计和编写基本上只有依靠测试工程师自己精益求精的态度才能保证测试用例设计的质量。测试人员自身精益求精的态度,不但影响着测试用例的设计质量,而且直接影响着测试人员之间测试水平的高低。
    在设计测试用例时,精益求精的精神需要我们在完成每一个功能测试点的基本测试方法设计后,再继续投入时间和大脑,并继续发散思维,在基本测试方法的基础上多写出一两倍的测试方法,希望所设计的用例能发现更多的bug,使测试的质量取得更好的效果。有一天你会发现正是这些多写出的测试方法更容易发现bug,帮助测试人员提高自己绩效的同时得到测试的乐趣。因为最基本的应用模式,90%的人都会比较容易地想到和覆盖到;而质量提升的最后10%,则可能只有很少的人,也许是10%的人才能去实现和达到。所以当我们在进行功能测试的测试用例设计时,每多想一个测试方法,就越接近99%的质量目标。
      案例
    一个即时通信产品的服务器与客户端通信功能模块的测试用例
    基本测试要求:服务器与客户端之间传送文本信息的功能测试(不包括压力测试和性能测试)。
    大多数人很容易就想到如下测试方法:
    (1)服务器向客户端发送一段文字,如果客户端能收到完整的信息,则验证通过。
    (2)客户端向服务器发送一段文字,如果服务器端能收到完整的信息,则验证通过。
    倘若只是进行最基本的通信功能验证,好像如上两个测试方法已经覆盖了服务器与客户端通信的全部功能。可是,如果我们能追求测试用例设计的精益求精,则该功能的测试用例还可以再进行如下补充。
    测试策略1——测试数据集
    服务器与客户端通信的测试数据分为:全中文(不同编码格式)、英文、日文、中英文+数字+其他符号(@、#、!、~、&等)的组合、以数字及各类符号作为传送信息的最后一个字符。
    以服务器能输入字符信息的最大数量为依据,输入一个最大化的数据,判断客户端能否完整显示。
    以客户端能输入字符信息的最大数量为依据,输入一个最大化的数据,判断服务器能否完整显示。
    应用测试策略1,服务器端与客户端1:1同时进行双向通信。
    应用测试策略1,服务器端与客户端1:n同时进行双向通信。
    应用测试策略1,服务器端与客户端n:1同时进行双向通信。
    测试策略2——临界状态测试
    在服务器和客户端同时发送空数据信息给对方。
    在服务器和客户端同时发送满数据信息给对方。
    在服务器和客户端启动过程中,分别向对方发送空信息、满信息。
    测试策略3——异常处理
    模拟双向数据传输时,传输过程中不断发生传输中断和恢复,服务器和客户端不发生不合理的现象。
    数据发送瞬间,接收端发生意外关闭、正常关闭或接收端重启,是否服务器和客户端不发生异常,接收端能正常接收完整的发送信息。
    在对端软件未启动和传输通信不通时,如果数据发送失败,发送方进行合理处理。
    测试策略4——长时间工作
    通过转换为自动化测试的方式,将测试策略1、测试策略2和测试策略3按先后顺序循环执行多次或10小时以上,寻找测试策略1、测试策略2和测试策略3所能覆盖的逻辑处理代码中是否有内存泄漏的情况。
    到目前为止,我们已在最开始的测试设计基础上进行了很多的扩展。那么我们现在是否还可以有新的测试策略来进一步提高测试用例的质量呢?
    测试策略5——模拟资源紧张情况下的测试
    长时间(10小时以上)同步模拟服务器和客户端在各自接收端口和发送端口同时受到网络攻击,在有限的通信系统资源紧张的情况下是否还能进行正常的文本通信,而不出现异常。
    测试策略6——真实环境测试
    将服务器和客户端挂在Internet上进行真实环境的测试,验证是否会有在真实环境应用中我们未想到的测试情形。
    我们现在还能继续设计新的测试策略吗?只要你坚信测试无止境,坚持凡事精益求精,向自己的思维潜力挑战,肯定还可以设计出新的测试策略。
    笔者于是在前面已有的测试策略的基础上又有新的突破,秉承对功能测试质量精益求精的态度,继续对该模块进行测试方法的挖掘。
    测试策略7——安全性测试
    服务器和客户端在通信过程中进行安全性测试。当两端正在持续正常通信过程中,同时启动对服务器和客户端的各类安全性测试攻击。例如:通过向接收端进行伪造的源IP数据攻击;向接收端发送一些畸形的数据文件格式;向接收端发送一些错误的协议报文等方式,来判断接收端是否会出现异常。
    最后限于笔者对即时通信软件客户端与服务器通信测试的有限功力,这个功能点的测试设计先到此为止。希望通过这个案例如何进行精益求精设计的过程,来让读者体会“精益求精”对于提升测试用例设计水平的意义和价值。读者如果感兴趣,还可以在此基础上提出更多好的测试策略,不断完善这个案例的测试用例设计。
    测试用例设计的精益求精除了多创造测试方法外,还有另一个很重要的领域——在测试用例设计规范上追求精益求精。笔者曾见过不少测试用例由于写得过于草率和简单,导致执行测试的人在工作时压力非常大,需要花费很大的精力和时间来啃测试用例中描述的真实含义。请大家不要误认为这只是因为我们中国测试起步晚,才有这样的现象。笔者曾见过两家欧美顶尖电信设备公司老外工程师写的测试用例,其测试方法过于简单,测试步骤描述基本没有,基本上每个执行这些测试用例的中国工程师都叫苦连天。
    你说这些欧美企业没有规范的流程吗?可他们是CMMI5(软件能力成熟度模型集成模型5级)都过了的,这些测试用例也是经过了每一个需要评审的流程才正式进入测试用例库的。那为什么这些外国人写的用例方法如此简单?因为测试流程和测试规范只关注测试用例的骨架是否完成,而附着在骨架上的肌肉状况,则很难由流程来规范和考评。这样有的老外就偷懒,用一句简单的句子就描述完了一个测试方法,给后来者带来了极大的痛苦。
    据笔者所知,后来在这两家欧美企业的中国工程师一改他们的老外同事留下的弊病,在写测试方法时,尽量做到非常详细的文字描述,并尽可能地把所有的操作步骤和命令都补充在对应的测试步骤后面。使用这种精益求精的态度写出的测试用例,完全可以让任何一位测试用例执行者只看一遍测试用例即可完成测试用例的执行。测试用例设计工程师通过自己多付出些时间来完善和丰富测试用例的描述,不但大大提高了未来测试用例执行的效率,而且为公司节省了时间和成本。
    1.1.2  性能测试的精益求精
    在进行性能测试时,我们需要细致地关注每一个数据的变化,不放弃任何一个怪异的数据变化是最基本的性能测试工作的态度要求。那么在性能测试中的精益求精可以体现在哪些地方呢?一个性能测试活动本身大致需要经历如下4个阶段。
    第1阶段:选择可靠的性能测试工具。
    第2阶段:调试及稳定性能测试环境。
    第3阶段:正式的性能测试。
    第4阶段:统计性能测试结果,输出性能测试报告。
    在选择可靠的性能测试工具阶段,如何做到精益求精?可能有朋友看到这里会问:“选择工具还需要精益求精?那么如何精益求精?”。俗话说:“好的开始是成功的一半”。软件的性能测试非常依赖性能测试工具的长期高负荷运转的稳定性和测试数据统计的精确度,对性能测试工具的选择决定了后续工作的成功与否和成本消耗的代价。就是这样一个对后续工作至关重要的步骤,却在实际工作中没有得到足够的重视,这个过程很有可能就只是某个性能测试工程师花两三个小时的时间到网上搜索几篇文章,按网上文章推荐的工具来初选,然后根据个人主观的判断就决定了未来所用的性能测试工具。结果,有可能这个性能测试工具在后续的调试稳定测试环境阶段,以及正式测试阶段和统计结果阶段会出现各种各样的奇怪问题,并导致性能测试团队不得不花费数倍的时间来解决这些性能测试工具的问题。
    因此,在选择性能测试工具时,建议除了在网上搜索介绍资料外,最好能亲自把所选的几个性能工具进行本地对比测试。在同等环境下,对后续关注的测试数据指标先进行测试观察,然后再将这些性能测试工具的各项性能参数、长期稳定性等关键指标,形成一个表格交由整个测试团队来决策并最终选出未来正式使用的性能测试工具。虽然在进行工具性能对比测试时,会消耗掉测试人员的部分时间和公司人力成本,但是却能避免以后在错误的道路上越走越远,造成无谓的成本消耗越来越大。
    测试团队一致选定了性能测试工具后,负责该工具操作的测试人员,需要继续发扬精益求精的工作态度,去全面、深入地了解和掌握该性能测试工具的各类使用方式。笔者曾见过某公司花费重金购买了一个世界顶级的性能测试工具,结果,几年来该公司的性能测试人员只会使用该性能测试工具的少数几个基本功能,其中的大部分功能从未应用过,大大浪费了公司的资产。为什么会出现测试人员对性能测试工具使用不充分的现象呢?原因可能有如下几种可能:由于人的天生惰性,在完成了最基本的性能测试需求后,就不再对性能测试工具的其他功能花时间来了解、操作、学习。当然也可能是由于该工具的学习和使用难度较大,测试工程师在无客观压力的情况下,面对困难退缩了,不愿意继续钻研学习该工具。
    所以,我们需要性能测试工程师在性能测试工具上同样能发扬精益求精的精神,在使用性能测试工具时能精益求精地多钻研该工具的其他功能,全面深入地了解该工具的使用特点,最大化地发挥性能测试工具的作用,提高公司资产的利用率。
    在调试和稳定性能测试环境阶段,性能测试工程师可以在只完成最基本的环境搭建并让大部分设备和软件正常运转起来后,就直接开始正式的性能测试。但是,只是保证大部分设备和软件能够运转起来对于期望开展高质量的性能测试是远远不够的。只有保证整个性能测试环境能够长期稳定地工作,才能真正确保性能测试的效果和效率;否则会在后续统计测试结果阶段,付出很多时间和成本来分析测试结果中的“垃圾数据”。
    一个稳定的性能测试环境是执行性能测试和准确统计性能测试结果的发动机。如果发动机不结实、不稳定,时而无动力,时而动力下降,那么驾驭这个测试环境进行性能测试的人将会非常痛苦。在笔者以前的性能测试经历中,就曾经出现过测试环境中的模拟器时而正常工作产生正常的数据,时而停发数据,时而效率下降,其直接结果就是大大影响了正式性能测试的项目进度,很难得到准确的性能测试效果。
    因此,一个追求精益求精的性能测试工程师,应该用尽一切方法,确保性能测试的环境能够非常稳定,仔细地调试性能测试环境中的每个模拟器。如果物理连线环境有问题或设备有缺陷,则一定要事先准备好备用方案,绕开这些问题,来保证性能测试环境的稳定。如果性能测试工程师觉得只是保证性能测试环境的长期稳定还不够体现其精益求精的精神,则可以努力将性能测试环境再改造成一个半自动化测试的环境。一个半自动化测试的性能测试环境将会大大帮助提高性能测试环境的使用和搭建的效率,同时也是性能测试工程师对工作精益求精追求精神的体现。
    正式的性能测试阶段,通常是性能测试工程师在所有性能测试工作的各阶段中最轻松也最有空闲时间的阶段。大多数情况下,很多性能测试工程师就觉得该自己休息、喝咖啡、聊天了。请先别忙着完全放松下来,虽然前期的测试准备工作非常辛苦,现在难得有空休息了,是应该短暂休息一下。但是,是否我们还可以更好地利用好这段唯一的休息时间来做一些让我们的工作更精益求精的事呢?例如:为了以后分析、定位问题更快,完成环境参数配置更快,我们是否可以利用这段时间开发一些自动化配置环境参数和自动化分析定位的小工具,每当遇到麻烦时,就可以大大提高解决麻烦的效率,为公司节约时间和人力成本。同时你还可以利用这段时间,多思考是否可以在现有的性能测试方案的基础上,针对性能测试方案再进行改进和优化,创造出更多新的性能测试方案,发现更多隐藏得更深的bug。
    另外,你也可以利用这段较空闲的时间优化性能测试报告的内容,让其图文并茂,能更准确、简洁地展现性能测试的结果。因此,如何充分利用好这难得的大块空闲时间,取决于我们是否有着一颗精益求精的心。只要有一颗精益求精的心,在性能测试的执行阶段也能创造出更大的贡献和价值。
    在统计性能测试结果和输出性能测试报告阶段,我们依然可以进行精益求精的改进。可以在查看性能测试仪器的统计数据结果时,仔细查看性能测试过程中的每一条log信息,从执行的log中不放过任何稍纵即逝的异常信息,毕竟每一个详细的log信息也是我们性能测试的劳动成果,很有必要充分利用起来。如果你现在还完全用手工和人眼来对大量的log信息进行处理,那么你很有必要通过编写自动化log分析工具来自动查找异常log信息的方式来大大减少工作量,提高log分析工作效率,而这也是体现精益求精的方式。
    在性能测试报告中,你可以不只是简单地罗列本次测试的几个数据就算完成了任务,还可以加上丰富、详细的历次测试数据的趋势对照,并且图文并茂,以及除测试参数数据外的其他相关数据的变化。相信这样的性能测试报告应该会更让所有人满意,一位能做出这么完整的性能测试报告的性能测试工程师一定会因其精益求精的工作态度得到同事和领导更多的尊重和肯定。
    1.1.3  回归测试的精益求精
    前面两节谈了有关测试用例设计和性能测试中精益求精的方法,相信大家还是有所收获的。那么接下来我们应该如何进行回归测试的精益求精呢?笔者曾经做过手工回归测试,也做过自动化回归测试,从笔者自己的经验和身边看到的实例证明,在从事看似枯燥的回归测试工作时,我们同样可以调整自己,在回归测试工作中追求精益求精。
    在手工回归测试时,我们除了需要按照测试用例的要求,保证每一步都是正常完成测试外,自己还可以利用空闲的时间和资源,尝试小范围地改变测试用例中的参数和方法,来进行一定的探索性测试。这样的行为有时能帮助我们得到意外的惊喜,发现新bug。毕竟创新是无止境的,没有哪个测试用例是完美的,按照测试用例执行回归测试可以保证90%的测试目标,但是靠自己想出的新点子找到的问题,却可以帮助测试团队和公司向最后10%的质量目标又前进一步。笔者相信,任何测试经理对于你在完成了本职工作后,还能发现新问题,都会感到非常高兴。能超出预期的员工肯定是一个追求卓越、追求精益求精的员工。
    自动化回归测试阶段,与性能测试执行阶段类似,你将会有大量的空闲时间。在这段空闲时间中,最容易想到追求精益求精的方面是,自己编写一些自动化测试脚本结果的分析工具。当出现自动化测试脚本运行失败时,可以大大缩短分析、定位的时间,提高工作效率。同时,你还可以思考是否可以通过改变和优化脚本执行的顺序来大大降低自动化脚本运行失败的概率,从而达到缩短自动化测试脚本运行时间,提高运行效率的效果。
    1.1.4  测试脚本开发的精益求精
    精益求精的态度在测试脚本的开发中比较容易得到体现。例如:测试脚本优化;测试脚本的信息提示;测试脚本与测试工具的融合;测试脚本文档4个领域,都有着足够的空间让我们去发挥,去追求精益求精。
    1.测试脚本优化领域
    我们可以不断优化测试脚本,使其能够适应在不同的测试环境中运行。也可以通过优化脚本的测试代码,使其能够有很强的容错性,在有一定干扰或异常的情况下依然成功运行下去,不对测试环境的“纯净性”要求过高。通过使测试脚本的代码松耦合,当被测设备的命令风格发生变化时,只需要对测试脚本做尽可能少的修改,就能适应新的命令风格。
    2.测试脚本的信息提示领域
    当测试脚本在运行失败时,能打印出更多的错误信息和更详细的调试分析信息。在脚本运行失败后,通过报错信息直接告诉测试人员是脚本语法错误,还是测试环境错误,或者是某个正常的逻辑处理错误。这些提示信息可以让自动化回归测试执行的工程师高效地分析、定位出脚本失败的原因,越是详细的调试分析信息,越能帮助测试工程师提高工作效率。
    3.测试脚本与测试工具的融合领域
    一般情况下我们在进行手工测试时,常常需要借助一些第三方辅助小工具来完成测试。对于这种情况下的自动化测试脚本开发而言,要在测试脚本中完全模拟像手工测试一样的测试效果,脚本开发的难度是比较大的。不过,我们可以从如下几方面入手来实现目标。
    (1)多了解一些开源的小工具来代替目前辅助测试的小工具。通过开源的小工具,可以更容易地开发出适合自己调用的API,便于集成到自己的测试脚本中。
    (2)在脚本与工具的接口代码处,优化脚本代码使其松耦合,当以后需要更换测试工具时,依然能很容易地驱动新的测试工具。
    (3)测试脚本能够对测试工具发生的异常和错误提供足够详细的log信息,便于以后因测试工具的错误而引起脚本运行失败时,可以快速地进行定位,节省分析、定位的时间和成本。
    4.测试脚本文档领域
    文档的编写也许是大多数工程师都不愿意从事的工作,但是它却对公司非常重要,公司要实现铁打的营盘、流水的兵,就必须有非常详细、规范的各类文档。虽然,我们可以在测试脚本中通过注释的方式来解释各个测试步骤的脚本代码,但毕竟注释方式所覆盖的信息量太少。我们最好是针对每个测试脚本有一个独立的测试脚本开发文档,告诉后来者这个脚本要干什么;各个测试步骤是怎么实现的;关键参数是什么;用了哪些变量,每个变量的含义;与其他测试脚本的层次关系如何等。
    1.1.5  测试工具开发的精益求精
    在测试工具开发过程中,对于工具的开发者不光要实现工具的功能要求,也要像对待一个商业产品一样,对代码规范及工具的功能稳定性、易用性和相关文档做到精益求精。
    一个测试工具的开发并不是一次性的。因此,我们需要像对产品开发要求一样,尽量有一个规范的代码结构,以便于后来者进行二次开发和维护。虽然我们很少会利用自己开发的测试工具进行精确的性能指标统计测试,但是我们却常常利用测试工具进行流量的模拟。为了保证测试环境流量大小的稳定性,我们也需要对自己开发的测试工具进行测试,优化测试工具的性能,使测试工具能够在实际应用中尽量状态稳定地工作。因此,我们可以在测试工具开发这一环节进行尽可能精益求精的发挥。往往一个测试工具的稳定性效果就是优秀测试工具开发者追求精益求精、追求卓越的结果,也是与其他普通测试工具开发工程师的最大区别。
    在测试工具的易用性方面,通常由于测试工具开发项目时间紧,使得测试工具的使用方式在风格上可能过于偏“开发化”,也就是说,开发者自己可以很容易理解和使用测试工具,而测试工具的用户——测试工程师却比较难全面搞懂所开发的测试工具的使用方式。因此,建议测试工具的开发工程师应在稳定了测试工具后,再从测试工具易用性的角度,来不断完善、改进开发的工具。
    在测试工具的相关文档方面,如果开发者自己不希望未来每一个工具的使用者都亲自来向他请教工具如何使用,或是未来进行二次开发时,自己都回忆不起来所有的代码细节,那么测试工具的开发者还是最好能在工具的开发过程中,编写一份详细的开发文档,以及在完成测试工具的开发后,开发一个详细的使用手册。这样不但方便了未来的测试工具用户,也大大减轻了测试工具的开发者未来维护和支持的工作量。

     

  • 软件测试精要

    2009-06-28 22:38:39

    目前中国市场上关于各种测试流程、测试规范、测试工具的相关书籍非常多,基本上都可以解答广大测试同行们在业务上的问题和困惑。可是关于测试同行们非技术外的困惑,却仍无法从现有书籍中得到满意的答案。就连一些工作了四五年的测试朋友也常问我:“做测试能有什么快乐,有什么激情?”非常多的测试朋友们缺乏做测试的激情,没有动力,充满了职业发展的困惑。同时我发现很多测试人包括我自己一直以来都非常缺乏关于测试意义的交流,大家的经验和心得很少在业内、公司间进行交换和分享。同行们对于测试人生的意义、未来的职业发展太缺乏交流和借鉴了。正由于看不到测试人生的意义,工作没有激情,自己得不到从事测试工作的快乐,加上对测试职业发展未来的迷茫,导致很多测试人员选择了离开这个行业。虽然人各有志,但我还是希望能有更多的测试战士们通过得到适时的激励和肯定,发现测试的人生意义,从测试工作中找到激情和价值,看到未来的希望,用一个健康的心态过着一个自己满意、幸福、有安全感的职业生涯。最好能够每天早上起床投入工作时,能怀着一颗今天又是一个充满创意、成就感的心,而不是一颗充满厌倦、工作重复单调的心,投入到测试工作中。我希望读者们通过本书能多了解一些测试以外,但与大家的职业发展、生活快乐有关的信息和经验。在未来的职业发展和职业选择中少走些弯路,少一些迷茫,少一些浮躁,看到自己的价值所在。希望通过本书的一点点启发,跳出每天测试工作的细节,反思测试、工作和人生,最终找到自己工作和生活的平衡点、价值与快乐。本书内容基础是以人的认识客观发展规律为主线来逐渐演进的,使得处于测试各阶段的读者都能在本书中找到对自己有价值的内容。内容基本主线为:第一步:端正和树立正确的“测试态度”,掌握“软技能”。第二步:学习和掌握向高阶测试高手发展的技巧和思想,掌握“硬技能”。第三步:找到和了解未来测试职业生涯的发展趋势,看清“航行的方向”。第四步:在测试工作中找到本职工作的意义和体现个人的价值,知道“目标的意义”。本书围绕如上4步编排了8章的内容,如下所示。章 名 主要内容第1章测试的态度 知名足球教练米卢曾说过“态度决定一切”。在我们的生活、工作中,一个好的态度将是影响我们是否能够成功,是否能够取得进步的最重要因素。足球运动员有“足球的态度”,软件测试人员也应该有自己的“测试态度”,因此本书将“测试的态度”放在了第1章作为本书最重要的内容。先点燃读者心中积极的火焰,然后再带着良好的态度来吸收和了解软件测试的相关经验和观点。第2章测试策略的相关因素 通过第1章“测试的态度”,帮助我们拥有了测试成功的“软实力”。而本章将通过融合中国古代经典的军事哲学思想,来帮助我们掌握取得测试成功的“硬实力”。软、硬实力皆有后,可让测试人员能更有力地挥舞起遨游高空的翅膀。本章主要讲述如何制定好的测试策略,其中包含了几个重要的实战经验:测试资源和时间控制;测试的知己知彼;测试效率的优化;测试中技术风险的控制;测试中的金矿;灵活机动的测试。第3章自动化测试策略 作为测试技术中“硬实力”的重要组成部分——自动化测试,是每一个试图进阶为测试高手的测试工程师必备的技能和能力。本章帮助读者建立起一个正确的自动化测试的认识,了解自动化测试实施的策略和实施过程,从中发现自动化测试并不只是进行自动化测试脚本的开发,自动化测试也是一个完整的系统体系。第4章性能测试与Troubleshooting 向读者展示什么是性能测试,性能测试与压力测试之间的关系。性能测试与压力测试是测试工作中对产品系统内部整体了解要求最高的测试阶段,需要测试人员能对产品系统有更全面和深入的认识。Troubleshooting一节与性能测试和压力测试紧密相关,因为很多所谓不易重现的问题,大多是在性能测试和压力测试阶段发现的。分析定位问题的能力是成长为一个测试高手必备的能力,本章将与读者一起分享在分析定位方法上的经验,希望帮助读者能提高重现bug的能力,提高分析定位问题的效率。第5章安全测试技术 为什么说黑客是高级的软件测试人员?本章将为读者奉献一个在互联网上广为流传的一个中国黑客高手的故事,来体会测试技术与黑客技术本质上的相似性。同时,本章还会告诉读者产品安全测试应该包括哪些内容,如何开展安全性测试,并且推荐在一些领域较好的安全性测试工具,以供大家研究了解世界最新安全性测试技术的趋势。第6章测试职业发展 当读者阅读完前面几章关于测试技术的内容后,相信不少的测试朋友能对软件测试有一定新的认识和理解,让自己重新对软件测试树立起新的兴趣和信心。但是测试朋友们对于更多非测试技术外的困惑,我们应该如何来解决?从本章开始,将与测试朋友们分享在非测试技术领域的一些职场经验,希望能帮助大家解除心中的一些疑问。本章将从一个测试人的角度出发,将如何规划测试从业者的职业发展和职业选择作为非技术疑惑的解惑开始。续 第7章测试组织架构与测试管理 本章将对测试人员在测试团队中所处的价值和地位,通过类比让测试人员直观地感受到自己所处的位置和价值所在。同时,本章还会针对测试管理的现状和测试新人培训过程中容易疏忽的地方进行一定的经验分享。第8章测试杂谈 本章是把大多数测试人员所感兴趣的测试非技术话题集中起来,当读者在阅读前面几章内容感觉疲倦时,可以直接跳到本章来休息一下,换一下思路,品尝一些轻松的“测试咖啡”和“测试红牛饮料”。又或是如果读者在前几章依然没有找到心中期望解决的困惑,那么可以到本章来试试,看是否能找到自己期望的答案。最后,和大家分享一句话:“创新就像海绵里的水,只要你去挤,总会有。”软件测试是一个富有创造性的工作。关于本书任何建议和意见,请与作者联系:dongjietest@gmail.com

    refer to : http://book.csdn.net/bookfiles/912/

  • 好的测试工程师应具备的素质

    2009-06-28 21:53:38

    人是测试工作中最有价值也是最重要的资源,没有一个合格的、积极的测试小组,测试就不可能实现。然而,在软件开发产业中有一种非常普遍习惯,那就是让那些经验最少的新手、没有效率的开发者或不适合干其他工作的人去做测试工作。这绝对是一种目光短浅的行为,对一个系统进行有效的测试所需要的技能绝对不比进行软件开发需要的少,事实上,测试者将获得极其广泛的经验,他们将遇到许多开发者不可能遇到的问题。

    ①、沟通能力

      一名理想的测试者必须能够同测试涉及到的所有人进行沟通,具有与技术(开发者)和非技术人员(客户,管理人员)的交流能力。既要可以和用户谈得来,又能同开发人员说得上话,不幸的是这两类人没有共同语言。和用户谈话的重点必须放在系统可以正确地处理什么和不可以处理什么上。而和开发者谈相同的信息时,就必须将这些活重新组织以另一种方式表达出来,测试小组的成员必须能够同等地同用户和开发者沟通。

    ②、移情能力

      和系统开发有关的所有人员都处在一种既关心又担心的状态之中。用户担心将来使用一个不符合自己要求的系统,开发者则担心由于系统要求不正确而使他不得不重新开发整个系统,管理部门则担心这个系统突然崩溃而使它的声誉受损。测试者必须和每一类人打交道,因此需要测试小组的成员对他们每个人都具有足够的理解和同情,具备了这种能力可以将测试人员与相关人员之间的冲突和对抗减少到最低程度。

    ③、技术能力

      就总体言,开发人员对那些不懂技术的人持一种轻视的态度。一旦测试小组的某个成员作出了一个错误的断定,那么他们的可信度就会立刻被传扬了出去。一个测试者必须既明白被测软件系统的概念又要会使用工程中的那些工具。要做到这一点需要有几年以上的编程经验,前期的开发经验可以帮助对软件开发过程有较深入的理解,从开发人员的角度正确的评价测试者,简化自动测试工具编程的学习曲线。

    ④、自信心

      开发者指责测试者出了错是常有的事,测试者必须对自己的观点有足够的自信心。如果容许别人对自己指东指西,就不能完成什么更多的事情了。

    ⑤、外交能力

      当你告诉某人他出了错时,就必须使用一些外交方法。机智老练和外交手法有助于维护与开发人员的协作关系,测试者在告诉开发者他的软件有错误时,也同样需要一定的外交手腕。如果采取的方法过于强硬,对测试者来说,在以后和开发部门的合作方面就相当于“赢了战争却输了战役”。

    ⑥、幽默感

      在遇到狡辩的情况下,一个幽默的批评将是很有帮助的。

    ⑦、很强的记忆力

      一个理想的测试者应该有能力将以前曾经遇到过的类似的错误从记忆深处挖掘出来,这一能力在测试过程中的价值是无法衡量的。因为许多新出现的问题和我们已经发现的问题相差无几。

    ⑧、耐心

      一些质量保证工作需要难以置信的耐心。有时你需要花费惊人的时间去分离、识别和分派一个错误。这个工作是那些坐不住的人无法完成的。

    ⑨、怀疑精神

      可以预料,开发者会尽他们最大的努力将所有的错误解释过去。测式者必须听每个人的说明,但他必须保持怀疑直到他自己看过以后。

    ⑩、自我督促

      干测试工作很容易使你变得懒散。只有那些具有自我督促能力的人才能够使自己每天正常地工作。

    11、洞察力

      一个好的测试工程师具有“测试是为了破坏”的观点,捕获用户观点的能力,强烈的质量追求,对细节的关注能力。应用的高风险区的判断能力以便将有限的测试针对重点环节。

  • 关于Ad-hoc测试的基本知识

    2009-06-28 21:39:35

    “Ad-Hoc” 原意是指特定的,一次性的,这里专指随机的,自由的测试。在软件测试中除了根据测试样例和测试说明书进行测试外,还需要进行随机测试(Ad-hoc testing),主要是根据测试者的经验对软件进行功能和性能抽查。随机测试是根据测试说明书执行样例测试的重要补充手段,是保证测试覆盖完整性的有效 方式和过程。

    随机测试主要是对被测软件的一些重要功能进行复测,也包括测试那些当前的测试样例(TestCase)没有覆盖到的部分。另外,对于软件更新和新增 加的功能要重点测试。重点对一些特殊点情况点、特殊的使用环境、并发性、进行检查。尤其对以前测试发现的重大Bug,进行再次测试,可以结合回归测试 (Regression testing)一起进行。

    理论上,每一个被测软件版本都需要执行随机测试,尤其对于最后的将要发布的版本更要重视随机测试。随机测试最好由具有丰富测试经验的熟悉被测软件的 测试人员进行测试。对于被测试的软件越熟悉,执行随机测试越容易。只有不断的积累测试经验,包括具体的测试执行和对缺陷跟踪记录的分析,不断总结,才能提 高。

    关于Ad-hoc测试的简短问答

    问:什么叫特定测试?或者探索式的测试?

    就是为了某一个特定目的进行的测试,就这一次,以后一般也不会重复测试。在软件工程的实践中,“ad hoc”大部分是指随机进行的,探索性的测试。比如:测试人员阿毛拿到了一个新的Build,按计划是进行模块A的功能测试,但是他灵机一动,想看看另一 个功能B做得如何,或者想看看模块A在某种边界条件下会出现什么问题,于是他就“ad hoc”一把,居然在这一功能模块中发现了不少Bug

    “ad hoc”也意味着测试是尝试性的,我来试试,在这个对话框中一通乱按,然后随意改变窗口大小,看看会出什么问题…”, 如果没问题,那么以后也不会再这么做了。

    一般情况下,测试人员不会花很多时间进行特定测试,但是在一些缺乏管理的团队中,很多时候测试人员不知道自己此时应该做什么,只好做一些看似“ad hoc” 的测试,比如随机测试各个功能的各个方面。这些测试理论上都应该由测试管理人员规划好属于各个功能模块的测试用例中。

    在一个团队中,“ad hoc”太多是一个管理不好的标志,因为“ad hoc”是指那些一时想到要做,但是以后也没有计划经常重复的测试计划。

    问:我听说有人是“ad hoc”测试的高手,这是什么意思?

    答:有很多测试人员会按部就班地进行测试,但是还有一些人头脑比较灵活,喜欢另辟蹊径,测试一些一般人不会想到的场景,这些人往往会发现更多的Bug。开发人员对这样的“ad hoc”高手是又爱又恨。

    问:同时看问题要分两方面,有些“ad hoc”发现的Bug在正常使用软件中几乎不会出现,我们要不要花时间“ad hoc”

    答:现在一些成功的通用软件的用户以百万计,按部就班的测试计划很难包括很多实际的场景,这时,“ad hoc”测试能够发现重要的问题;另外一些风险很大的领域,例如安全性,一旦出了问题,威胁就会相当大,这时要多鼓励一些“ad hoc”测试,以弥补普通测试的不足。从这个意义上说,“ad hoc”测试可以用来衡量当前测试用例的完备性,如果你探索了半天,都没有发现什么在现有测试用例之外的问题,那就说明现有的测试用例是比较完备的。

    “ad hoc”测试的测试流程是不可重复的,因为它的测试都是特定测试,没法重复。由于这一原因,“ad hoc”测试不能自动化,就这一点而言,还达不到CMM的第二级可重复级。

    作为管理人员来说,如果太多Bug是在“ad hoc”出来的,那我们就要看看测试计划是否基于实际的场景,开发人员的代码逻辑是否完善,等等。同时,要善于把看似“ad hoc”的测试用例抽象出来,包括到以后的测试计划中。

    问:做好“ad hoc”测试有什么窍门?

    随机测试有些小窍门,可以帮助测试人员更有效的发现bug

    窍门一,在发现很多bug的地方,一定可以发现更多的bug。我们在做随机测试的时候,往往会先统计一下,上周哪些模块被发现的bug最多,那么这周一定要狠狠的在那个模块里发掘一下。

    窍门二,做到知己知彼。知己就是要了解自己在哪些方面有特长,多发挥这些特长;知彼主要是了解两方面,一是程序本身哪些地方最复杂,最薄弱,这些地 方最容易发生什么错误,二是程序员最容易在哪些地方犯哪些错误。前者通过对程序的熟悉可以比较好的掌握,后者可以通过CQ(BUG管理工具)分析得到。

    窍门三,多和程序员沟通。在和程序员沟通的过程中,你可以知道很多你前所未知的东西,你可以通过验证这些东西,来发现未知的bug,并且可以激发你运用更多的测试手段来测试。

    Refer to : http://hi.baidu.com/sparkqrt/blog/item/0d5351f1d770fca9a40f52de.html

  • 常用cmd命令

    2009-02-25 11:23:19

    从win2000起N多命令都可以 98也可以用少部分 xp以后支持更多

    网上找的 没有时间全部测试,使用时注意些!

    inetmgr.exe IIS管理器

    cacls----------显示或者修改文件的访问控制表(ACL)
    certmgr.msc----证书管理实用程序
    ciadv.msc------索引服务程序
    compmgmt.msc---计算机管理
    devmgmt.msc--- 设备管理器
    dfrg.msc-------磁盘碎片整理程序
    diskmgmt.msc---磁盘管理实用程序
    fsmgmt.msc-----共享文件夹管理器
    gpedit.msc-----组策略
    lusrmgr.msc----本机用户和组
    ntmsmgr.msc----移动存储管理器
    ntmsoprq.msc---移动存储管理员操作请求
    perfmon.msc----计算机性能监测程序
    rsop.msc-------组策略结果集
    secpol.msc-----本地安全策略
    services.msc---本地服务设置
    wmimgmt.msc ---打开windows管理体系结构(wmi)
    calc-----------启动计算器
    charmap--------启动字符映射表
    chkdsk.exe-----Chkdsk磁盘检查
    cleanmgr-------垃圾整理
    cliconfg-------SQL SERVER 客户端网络实用程序
    Clipbrd--------剪贴板查看器
    cmd.exe--------CMD命令提示符
    conf-----------启动netmeeting
    dcomcnfg-------打开系统组件服务
    ddeshare-------打开DDE共享设置
    dfrg.msc-------磁盘碎片整理程序
    drwtsn32------ 系统医生
    dvdplay--------DVD播放器
    dxdiag---------检查DirectX信息
    eudcedit-------造字程序
    cleanmgr /sageset:99 ----让清理系统功能更完善
    cleanmgr /SAGERUN:99 ----直接清理
    eventvwr-------事件查看器
    explorer-------打开资源管理器
    iexpress-------木马捆绑工具,系统自带
    logoff---------注销命令
    magnify--------放大镜实用程序
    mem.exe--------显示内存使用情况
    mmc------------打开控制台
    mobsync--------同步命令
    mplayer2-------媒体播放机
    Msconfig.exe---系统配置实用程序
    mspaint--------画图板
    mstsc----------远程桌面连接
    narrator-------屏幕“讲述人”
    net start messenger----开始信使服务
    net stop messenger-----停止信使服务
    netstat -an----(TC)命令检查接口
    notepad--------打开记事本
    nslookup-------网络管理的工具向导
    ntbackup-------系统备份和还原
    odbcad32-------ODBC数据源管理器
    oobe/msoobe /a----检查XP是否激活
    oobemsoobe a----检查XP是否激活
    osk------------打开屏幕键盘
    packager-------对象包装程序
    progman--------程序管理器
    regedit.exe----注册表
    regedt32-------注册表编辑器
    regsvr32 /u *.dll----停止dll文件运行
    regsvr32 /u zipfldr.dll------取消ZIP支持
    rononce -p ----15秒关机
    sfc scannow---windows文件保护
    sfc.exe--------系统文件检查器
    shrpubw--------创建共享文件夹
    sigverif-------文件签名验证程序
    sndrec32-------录音机
    Sndvol32-------音量控制程序
    syncapp--------创建一个公文包
    sysedit--------系统配置编辑器
    syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码services.msc---本地服务设置
    systeminfo   系统信息察看
    tasklist /svc 察看服务pid
    taskmgr--------任务管理器
    tourstart------xp简介(安装完成后出现的漫游xp程序)
    tsshutdn-------60秒倒计时关机命令
    utilman--------辅助工具管理器
    wiaacmgr-------扫描仪和照相机向导
    winchat--------XP自带局域网聊天
    winmsd---------系统信息
    winver---------检查Windows版本
    write----------写字板
    wscrīpt--------windows脚本宿主设置
    wupdmgr--------windows更新程序
    CHKNTFS /t:0--- 让非法关机后scandisk 取消10秒等待
    mstsc------- windows 3389登陆器
    sfc /purgecache ---可以清除“Windows 文件保护”文件高速缓存,即删除了dllcache文件夹下的全部内容,对于硬盘比较紧张的用户这当然也可以,但从此Windows XP失去了自己恢复系统文件的能力,所以折中的办法应该是适当减小该文件夹的大小,/cachesize=x参数即可设置“Windows 文件保护”文件高速缓存的大小,其默认大小为102M,最小值为15M,你可以根据情况设置,Windows会根据文件的重要程度自行调节(当然也可增大该文件夹)。
    sfc /revert的意义,举个例子,如果你一旦运行了sfc /scanboot,则今后每次进入Windows XP时都会自动运行sfc,在“系统配置实用程序”的“启动”中都不见其踪迹,如想禁止,可运行一遍sfc /revert将其恢复到默认状态。
    windows使用“运行”快捷命令大全
    2007年11月2日 评论 发表评论 众所周知,windows在开始菜单中提供了一个“运行”的功能块,在对话框中输入指定的指令可以快速调出一些有用的管理工具和执行相关命令,具体如下:

    azman.msc------授权管理器
    admgmt.msc-----ad管理
    calc-----------启动计算器
    certmgr.msc----证书-当前用户
    certtmpl.msc---证书模板
    chkdsk.exe-----Chkdsk磁盘检查
    charmap--------启动字符映射表
    ciadv.msc------索引服务
    cliconfg-------SQL SERVER 客户端网络实用程序
    clipbrd--------剪贴簿查看器
    cleanmgr-------垃圾整理
    cmd.exe--------CMD命令提示符
    compmgmt.msc---计算机管理
    conf-----------启动netmeeting
    cys------------配置您的服务器
    dcomcnfg.exe---组件服务
    dcpol.msc------域控制器策略
    ddeshare-------打开DDE共享设置
    debug----------dos命令
    devmgmt.msc----设备管理器
    dfrg.msc-------磁盘碎片整理程序
    dhcpmgmt.msc---dhcp设置
    diskmgmt.msc---磁盘管理实用程序
    dnsmgmt.msc----dns设置
    domain.msc-----域和信任关系
    dompol.msc-----域安全策略
    drwtsn32-------系统医生
    dsa.msc--------ad用户和计算机
    dssite.msc-----ad站点和计算机
    dvdplay--------DVD播放器
    dxdiag---------检查DirectX信息
    eventvwr-------事件查看器
    eventvwr.msc---事件查看器
    explorer-------打开资源管理器
    eudcedit-------造字程序
    filesvr.msc----文件服务器管理
    fsmgmt.msc-----共享文件夹
    fsmgmt.msc-----共享文件夹管理器
    gpedit.msc-----组策略
    ias.msc--------internet验证服务
    iexpress-------木马捆绑工具,系统自带
    iis.msc--------信息管理器
    inetmgr--------internet信息服务(IIS)(IIS组件已安好了)
    logoff---------注销命令
    ipaddrmgmt.msc---ip地址管理
    ipconfig-------查看设置信息
    lusrmgr.msc----本机用户和组
    magnify--------放大镜实用程序
    mem.exe--------显示内存使用情况
    mmc------------打开控制台
    mplayer2-------简易widnows media player
    msconfig.exe---系统配置实用程序
    msinfo32-------查看系统信息(系统摘要) 若运行不了,看"服务"中的帮助服务是否开启
    mstsc.msc------远程桌面
    mspaint--------画图板
    mobsync--------同步命令
    mstsc----------远程桌面连接
    narrator-------屏幕“讲述人”
    notepad--------打开记事本
    nslookup-------用来诊断域名系统 (DNS) 基础结构的信息
    ntbackup-------系统备份和还原
    ntmsmgr.msc----移动存储管理器
    ntmsoprq.msc---移动存储管理员操作请求
    netstat –ano---(TC)命令检查接口
    netsh----------(dos命令对网络的配置)
    net stop messenger-----停止信使服务
    net start messenger----开始信使服务
    osk------------打开屏幕键盘
    odbcad32-------ODBC数据源管理器
    oobe/msoobe /a----检查XP是否激活
    packager-------对象包装程序
    perfmon.msc----计算机性能监测程序
    pkmgmt.msc-----(公匙管理)
    progman--------程序管理器
    rsadmin.msc----远程存储
    rsop.msc-------组策略结果集
    regedit.exe----注册表
    regedt32.exe-------注册表编辑器
    runonce -p ----15秒关机
    regsvr32 /u *.dll----停止dll文件运行 regsvr32 /u
    zipfldr.dll------取消ZIP支持
    scandisk(外)---检测,修复磁盘命令
    schmmgmt.msc---ad架构
    secpol.msc-----本地安全策略
    services.msc---本地服务设置
    shrpubw--------创建共享文件夹
    sigverif-------文件签名验证程序
    sndrec32-------录音机
    sndvol32-------音量控制程序
    sfc.exe--------系统文件检查器
    sfc /scannow---扫描错误并复原
    systeminfo-----显示系统信息
    syncapp--------创建一个公文包
    sysedit--------系统配置编辑器
    syskey---------系统加密,一旦加密就不能解开,保护windows xp系统的双重密码
    taskmgr--------任务管理器
    tasklist-------查看系统进程
    tscc.msc-------终端服务配置
    tsshutdn-------60秒倒计时关机命令
    tourstart------xp简介(安装完成后出现的漫游xp程序)
    utilman 或 windows键+u --------辅助工具管理器
    wiaacmgr-------扫描仪和照相机向导
    winchat--------2000以上自带局域网聊天
    winmsd---------系统信息
    wins.msc-------wins服务器配置
    winver---------检查Windows版本
    wmimgmt.msc----打开windows管理体系结构(WMI)
    write----------写字板
    wscript--------windows脚本宿主设置
    wupdmgr--------windows更新程序

  • windows下模拟linux shell的软件(Cygwin)[转载]

    2009-02-21 08:02:53

    Cygwin是一个用于在Windows上模拟Linux环境的软件。它可以作为那些虚拟机软件的一个部分替代品。之所以将它排在第一个来介绍,是因为它实在给我帮了很大的忙。

    运行Cygwin后,你会得到一个类似Linux的Shell环境,在其中你可以使用绝大部分Linux软件和功能。如Gcc,Make,Vim,Emacs等等。总之如果你想使用某个Linux下的功能,而windows上又找不到好的替代品的话,你就可以用Cygwin。我使用的最频繁的是Gcc和Make。我经常用它们来编译一些我从网上下载的开源的工程。这些工程在Windows上编译往往很麻烦。我也用它做过X Server来连接一台真正的Linux服务器,用来测试一个用tcl/tk编写的跨平台的用户界面程序。下面,我逐步介绍Cygwin的基本用法。

    使用

    安装完成后,在桌面上会有一个Cygwin的图标,双击它,会出现一个windows的命令窗口,过一会,你就会见到熟悉(或者陌生)的 Linux的Shell界面。试一试ls ,是不是可以工作了?

    从今往后,你就可以自由的在windows下使用Linux的软件了。基本上你能用到,cygwin都有。如果你要开发可以在两个平台上运行的程序, cygwin也是你前期试验的好地方。从互联网上下载的各种开源代码,也可以在Cygwin里编译,运行,调试。下面介绍一些使用技巧,更多地还要靠大家自己探索拉!

    使用Cygwin访问windows的文件
    Cygwin安装后,其根目录位于你的安装目录下。所以使用cd /,只能访问到你的安装目录,要访问硬盘上的其他文件,可以使用mount:
    mount D:/testdir ~/testdir
    这样,你就可以在~/testdir里访问到D:/testdir里的内容了。

    使用Cygwin作为X Server
    现在的Linux服务器一般都提供X,要从Windows上使用Linux的X,需要在Windows上运行一个X Server。有一些专门为windows开发的软件可以做这个,但是Cygwin自带的X server就可以胜任。下面举例说明如何使用:
    首先你必须安装X11包,然后运行Cygwin shell,输入x&。这时候你的桌面上出出现一个布满斜纹大窗口,这就是我们的X server了,回头Linux机器上的X 程序就会显示在这里:

    1. Linux命令使用技巧
    2. TurboLinux入门教程系列之一
    3. TurboLinux入门教程系列之二
    4. TurboLinux入门教程系列之三
    5. TurboLinux入门教程系列之五
    6. TurboLinux入门教程系列之六
    7. TurboLinux入门教程系列之七
    8. TurboLinux入门教程系列之八
    9. TurboLinux入门教程系列之九
    10. TurboLinux入门教程系列之十
    11. TurboLinux入门教程系列之十一
    12. TurboLinux入门教程系列之十二
    13. TurboLinux入门教程系列之十三
    14. TurboLinux入门教程系列之十四
    15. TurboLinux入门教程系列之十五
    16. TurboLinux入门教程系列之十六
    17. TurboLinux入门教程系列之十七
    18. TurboLinux入门教程系列之十八
  • 阿里与Google间的PK [转载]

    2009-02-18 13:32:50

    reference : http://www.cnblogs.com/leadzen/archive/2008/06/26/1230286.html

    PK”一词因超级女声的成功而风靡世界。“PK”就是对手之间尽情展示自己的实力,吸引众多的支持者,哦,应该叫粉丝。谁能更符合粉丝的需求,带给粉丝更多的欢乐,谁的粉丝就越多。PK的最终结果,是靠粉丝的多少来判定谁胜谁负。

    PK”是一种良性竞争,胜的一方和败的一方往往只有很小的差距。尽管PK的双方竞争非常激烈,胜负也融入了粉丝们的大喜大悲的情感之中。双方PK下来,败的一方虽是愿赌服输却依然自信,胜的一方自知侥幸也不敢小瞧对手。但PK的结果却推动整个娱乐世界发生着翻天覆地的变化。

    如果你现在还认为Google就是做搜索的,那么你错了!如果你现在还认为阿里就是做电子商务的,那么你也错了!

    为什么今天我会写这么一个题目的文章?因为前两天,我有幸去了淘宝网和阿里软件公司。先是见了多位淘宝里各项技术的掌门人,还给他们一线的程序员讲了堂课。后来见了阿里软件的首席架构师赵进(看上去非常年轻的小伙子)、总监叶伟、营销总经理王建勋,以及总裁王涛。三天的交流下来,我才弄清了阿里现在在做什么。阿里的所有意图都体现在了王涛的那句不经意的话中:“我们可以与Google来一场PK”。

    前不久,Google刚刚发布了Google App Engine,这标志着云计算已经从概念走到了开发人员的眼前。这是一套完全开放的WEB API,也是一个完全开放的WEB开发平台,任何开发人员可以在这个平台上开发应用软件。尽管目前Google可以提供的WEB API还主要在搜索、广告、地图、邮件和一些在线办公方面。但随着在线软件模式的不断普及和发展,可以提供的WEB API将越来越多。

    在此之前,我一直以为阿里软件就是做B/S结构的企业管理软件,利用自己庞大的商业用户群,推自己的SAAS应用。现在才知道,阿里软件早在一年以前就放弃了自己开发在线应用的思路,转而打造电子商务领域的在线软件开发平台,提供电子商务领域的WEB API

    阿里为什么会转作WEB开发平台呢?

    总所周知,微软依靠Windows API成功击溃了早期的OS/2和其他一些操作系统,帮助Windows操作系统迅速占据了桌面电脑。随后,SUN公司依靠JAVA的跨平台特性,又在WEB服务器端占尽优势。多年后,微软又投入巨资精心打造了下对平台开放上对语言开放的dotNet平台,迅速抢夺失去的市场。而此时的Google却凭借自身在网络方面的先天优势,打造出一个WEB API标准,仿佛要在网络世界一统江湖的样子。

    由此可见,在软件开发平台的层次上,谁站得高,谁就能占尽先机!阿里无疑看到了这一点,于是迅速转型,做起了WEB平台的开发。只要阿里在电子商务领域打造出一个WEB API标准,就可以在这个平台上开发各种各样的电子商务的应用。而阿里也将和Google一样,向所有的软件开发企业或个人开放这个开发平台,从而在电子商务领域一统江湖。

    阿里是做B2B网站起家的,积累了大量的商业用户群。在随后淘宝与eBay的大战中,又成功集聚了B2C/C2C的巨量客户群。就像Google依靠个性搜索、GmailGtalk等应用集聚大量在线用户群一样,阿里本身也具有打造云计算平台的先天优势。而且,与Google不同的是,阿里的在线用户大都是与商业相关的买家或卖家,而非GoogleMSN、百度等用户那样混杂。这是阿里客户群的先天优势,意味着愿意为应用付钱的客户比例将非常高。一旦阿里需要将客户群转换成商业价值,那将是天文数字。

    阿里开放WEB API之后,不仅仅提供给第三方软件开发商一个开发平台,还能提供一个高价值的客户群。相信阿里WEB API对程序员的吸引力也许没有Google那样大,但蕴含巨大商机的客户群更能吸引第三方软件开发商的老板们。

    十多年前曾有一个颇响亮的名词叫“EDI”,其目的就是将客户和供应商通过电子数据交换连接起来,实现供应链的无缝连接,实现无纸办公。这本是非常好的理想,但当时的负责EDI的中国电子商务中心却选择了封闭的道路,上EDI用专用网,在外经贸企业内部使用。虽然投入巨资,但EDI最终死掉了。

    而今阿里开放电子商务的WEB API之后,这一切都变得可能。在这么多软件开发商的参与下,阿里只需制定关键的标准,即可实现一个最大的电子数据交换网络。也许这个开放网络最后的名字不叫“EDI”,但却能实现EDI的梦想。

    支付宝的成功,扫清了网络交易中的信用问题。只要与商业有点沾边的网站,都想搞个即时的网络支付功能。可现有的各种网络支付使用起来多多少少存在不方便性,或者因为安全性的原因,或者是因为不同接口或协议的原因。阿里开放的支付宝WEB API或许能在许多方面方便网络支付功能的开发,这对许许多多的商业网站来说也会产生巨大的引力。

    淘宝网也要开放WEB API了,大量的第三方开发商也会陆陆续续进来,在网店应用开发上面淘到自己的宝贝。不仅如此,以广告服务为主的阿里妈妈也要开放WEB API,阿里真是啥都打算开放。

    客户、供应商、网店、支付、广告,这一系列涉及商业活动的问题都解决了。那么阿里还缺什么?物流!

    虽然淘宝现在采用的是推荐物流的模式来解决物流问题,但越来越多的用户希望可以直接处理物流问题。不过,物流却不象支付宝那样仅仅只需信息交换即可解决问题,它是需要实际的货物移动。相信阿里绝不会自己搞物流,但阿里一定在打造一个自己的物流WEB API,将多家物流公司的在线业务整合起来。

    那么这些WEB API都齐了,阿里已经站在电子商务领域与Google展开一场云计算的“PK”。这场PK势必将云计算概念从空中落地,变成一个个具体的SaaS应用。云能落地才能变成雨,滋养世间万物。云计算也必须有一个一个具体的SaaS应用,才能给用户带来价值。和Google一样,阿里也正在陆陆续续推出自己的SaaS应用。

    Google建造云计算的服务器农场时,阿里也在建造自己的云计算服务器群。Google发布Google App Engine的同时,阿里推出“互联平台创富计划”,大量征召第三方开发人员。目前已有上百个在线应用提供给阿里或淘宝的用户使用,还有上千个应用在开发当中。由此可见,阿里的动作相当快,每一步都与Google展开同台竞技。

    也许,阿里的服务器群还远远没有Google那么大,也许阿里的第三方开发人员还没有Google那么多,但这都不是问题。阿里软件总裁王涛很风趣地说:“微软反应太慢,我们不去找他玩,我们和GooglePK一把总行吧”。

    的确,阿里已经站在了云计算的舞台上,与Google展开了一场PK。不管结果如何,这场PK将实实在在推动云计算的发展和应用。

    一直很好奇,马云到底是个啥样的人?同行都说他爱吹牛,阿里的员工对他敬若神灵。但有理由相信,一旦天马行空,必将掀起风云,也许这就是真正的马云。

  • 测试用例制定的原则[转载]

    2009-02-18 09:14:24

    reference : http://www.51testing.com/html/75/n-106575.html
    http://www.51testing.com/html/50/n-106850.html

     测试用例要包括欲测试的功能、应输入的数据和预期的输出结果。测试数据应该选用少量、高效的测试数据进行尽可能完备的测试;基本目标是:设计一组发现某个错误或某类错误的测试数据,测试用例应覆盖方面:

      1、 正确性测试:输入用户实际数据以验证系统是满足需求规格说明书的要求;测试用 例中的测试点应首先保证要至少覆盖需求规格说明书中的各项功能,并且正常。

      2、 容错性(健壮性)测试:程序能够接收正确数据输入并且产生正确(预期)的输出, 输入非法数据(非法类型、不符合要求的数据、溢出数据等),程序应能给出提示 并进行相应处理。把自己想象成一名对产品操作一点也不懂的客户,在进行任意操作。

      3、 完整(安全)性测试:对未经授权的人使用软件系统或数据的企图,系统能够控制的程度,程序的数据处理能够保持外部信息(数据库或文件)的完整。

      4、 接口间测试:测试各个模块相互间的协调和通信情况,数据输入输出的一致性和正确性。

      5、 数据库测试:依据数据库设计规范对软件系统的数据库结构、数据表及其之间的数据调用关系进行测试。

      6、 边界值分析法:确定边界情况(刚好等于、稍小于和稍大于和刚刚大于等价类边界值),针对我们的系统在测试过程中主要输入一些合法数据/非法数据,主要在边界值附近选取。

      7、 压力测试:输入10条记录运行各个功能,输入30条记录运行,输入50条记录运行。。。进行测试。

      8、等价划分:将所有可能的输入数据(有效的和无效的)划分成若干个等价类。

      9、错误推测:主要是根据测试经验和直觉,参照以往的软件系统出现错误之处。

      10、效率:完成预定的功能,系统的运行时间(主要是针对数据库而言)。

      11、可理解(操作)性:理解和使用该系统的难易程度(界面友好性)。

      12、可移植性:在不同操作系统及硬件配置情况下的运行性。

      13、回归测试:按照测试用例将所有的测试点测试完毕,测试中发现的问题开发人员 已经解决,进行下一轮的测试。

      14、比较测试:将已经发版的类似产品或原有的老产品与测试的产品同时运行比较,或与已往的测试结果比较 。

      说明:针对不同的测试类型和测试阶段,测试用例编写的侧重点有所不同。

      1、 其中第1、2、6、8、9、13项为模块(组件、控件)测试、组合(集成)测试、系统测试都涉及并重点测试的方面。

      2、 单元(模块)测试(组件、控件)测试:重点测试第5项。

      3、 组合(集成)测试:重点进行接口间数据输入及逻辑的测试,即第4项。

      4、 系统测试:重点测试第3、7、10、11、12、14项。

      5、 其中压力测试和可移植性测试如果是公司的系列产品,可以选用其中有代表性的产品进行一次代表性测试即可。

      6、 GMPS基础测试用例设计完成后,其他的测试项目只编写设计与之不同部分的测试用例。

      7、 对于每个测试项目测试的测试用例不是一成不变的,随着测试经验的积累或在测试其他项目发现有测试不充分的测试点时,可以不断的补充完善测试项目的测试用例。

     

  • Nice Test Knowledge Link

    2009-02-17 10:31:41

  • [日志] 50种方法巧妙优化SQL Server数据库--4 2009-03-13
  • [日志] 50种方法巧妙优化SQL Server数据库--3 2009-03-13
  • [日志] 50种方法巧妙优化SQL Server数据库--2 2009-03-13
  • [日志] 50种方法巧妙优化SQL Server数据库--2 2009-03-13
  • [日志] 50种方法巧妙优化SQL Server数据库--1 2009-03-13
  • [日志] Linux下的shell编程入门(2) 2009-03-05
  • [日志] Linux下的shell编程入门(1) 2009-03-05
  • [日志] Linux主要shell命令详解 2009-03-05
    ===========================

     

  • 测试用例设计白皮书之等价类划分方法[转载]

    2009-02-17 10:06:50

    reference : http://www.51testing.com/html/36/190836-106777.html

    一.方法简介

      1.定义

      是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。

      2.划分等价类:

      等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的,并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试,因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件就可以用少量代表性的测试数据取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。

      1)有效等价类

      是指对于程序的规格说明来说是合理的、有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。

      2)无效等价类

      与有效等价类的定义恰巧相反。无效等价类指对程序的规格说明是不合理的或无意义的输入数据所构成的集合。对于具体的问题,无效等价类至少应有一个,也可能有多个。

      设计测试用例时,要同时考虑这两种等价类。因为软件不仅要能接收合理的数据,也要能经受意外的考验,这样的测试才能确保软件具有更高的可靠性。

      3.划分等价类的标准:

      1)完备测试、避免冗余;

      2)划分等价类重要的是:集合的划分,划分为互不相交的一组子集,而子集的并是整个集合;

      3)并是整个集合:完备性;

      4)子集互不相交:保证一种形式的无冗余性;

      5)同一类中标识(选择)一个测试用例,同一等价类中,往往处理相同,相同处理映射到"相同的执行路径"。

      4.划分等价类的方法

      1)在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。如:输入值是学生成绩,范围是0~100;

      

      2)在输入条件规定了输入值的集合或者规定了"必须如何"的条件的情况下,可确立一个有效等价类和一个无效等价类;

      3)在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。

      4)在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。

      例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。

      5)在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则);

      6)在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。

      5.设计测试用例

      在确立了等价类后,可建立等价类表,列出所有划分出的等价类输入条件:有效等价类、无效等价类,然后从划分出的等价类中按以下三个原则设计测试用例:

      1)为每一个等价类规定一个唯一的编号;

      2)设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;

      3)设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。

    二.实战演习

      1.某程序规定:"输入三个整数 a 、 b 、 c 分别作为三边的边长构成三角形。通过程序判定所构成的三角形的类型,当此三角形为一般三角形、等腰三角形及等边三角形时,分别作计算 … "。用等价类划分方法为该程序进行测试用例设计。(三角形问题的复杂之处在于输入与输出之间的关系比较复杂。)

      分析题目中给出和隐含的对输入条件的要求:

      (1)整数 (2)三个数 (3)非零数 (4)正数

      (5)两边之和大于第三边 (6)等腰 (7)等边

      如果 a 、 b 、 c 满足条件( 1 ) ~ ( 4 ),则输出下列四种情况之一:

      1)如果不满足条件(5),则程序输出为 " 非三角形 " 。

      2)如果三条边相等即满足条件(7),则程序输出为 " 等边三角形 " 。

      3)如果只有两条边相等、即满足条件(6),则程序输出为 " 等腰三角形 " 。

      4)如果三条边都不相等,则程序输出为 " 一般三角形 " 。

      列出等价类表并编号

      

      覆盖有效等价类的测试用例:

      a b c 覆盖等价类号码

      3 4 5 (1)--(7)

      4 4 5 (1)--(7),(8)

      4 5 5 (1)--(7),(9)

      5 4 5 (1)--(7),(10)

      4 4 4 (1)--(7),(11)

      覆盖无效等价类的测试用例:

      

     划分等价类并编号,下表等价类划分的结果

      

  • 黑盒测试方法揭密[转载]

    2009-02-16 19:21:34

    作者:陈樵 2002年04月08日 本文选自:中国计算机报

    一、黑盒测试在快速应用开发(rad)环境中的重要作用

      软件测试方法一般分为两种:白盒测试与黑盒测试。其中,白盒测试又称为结构测试、逻辑驱动测试或基于程序本身的测试,着重于程序的内部结构及算法,通常不关心功能与性能指标。黑盒测试又被称为功能测试、数据驱动测试或基于规格说明的测试,实际上是站在最终用户的立场上,检验输入输出信息及系统性能指标是否符合规格说明书中有关功能需求及性能需求的规定。

      随着rad环境的发展,软件工程面临新的挑战,其中包括:

      ●应用系统的规模越来越庞大,结构越来越复杂;

      ●开发团队人员越来越多,分工越来越细;

      ●项目投资日益提高,导致投资风险增大。

      在这样一种背景下,软件质量面临着更大的危机,而解决问题的关键正是黑盒测试,可是由于传统的黑盒测试往往局限于手工测试,凭借工程人员的经验自发地进行,缺乏严格的测试管理机制,因而效果并不明显。

      在分发一个应用系统之前,若没有经过科学、周密的黑盒测试,就相当于将大量隐含的缺陷(defect)交付到最终用户手中,这对于开发团队自身、项目投资方及最终用户来说都是不负责任的表现,也将严重损害三方的利益。

      今天,软件的质量要求越来越受到重视,在对软件的质量监督中,黑盒测试起着重要的、不可替代的作用;而随着软件开发平台及软件设计思想的进步和发展,特别是rad技术的发展,对黑盒测试提出了更明确的要求,人们发现,必须遵循一定的测试理论,依赖于优秀的测试工具,才能进行科学、完备的测试。

      二、黑盒测试的操作步骤

      在传统的软件开发生命周期当中,测试工作往往被搁置到整个开发过程的后期进行,也就是说,当应用程序的编码工作已经基本完成,才开始进行测试,这样做的缺点在于:

      a)由于应用程序庞大而复杂,测试工作千头万绪,测试人员难以组织科学、全面的测试用例,从而大幅度提高了测试成本,并严重影响测试的全面性和有效性;

      b)由于缺陷所涉及的模块从开发到测试之间的时间间隔较长,使得程序员的修改和维护工作要付出更大的代价;

      c)由于受到分发日期的限制,测试工作往往是在忙碌中结束的,而将大量的缺陷遗留给最终用户,也就是说,真正的测试工作实际上是由最终用户来完成的。

      因此,为了保证测试工作科学、精确、全面、有序地进行,应该采取一边开发一边测试的策略,使得开发工作与测试工作平行进行,这也就是俗话所说的“越早测试越好”的概念。

      一套完整的测试应该由五个阶段组成:

      1.测试计划

      首先,根据用户需求报告中关于功能要求和性能指标的规格说明书,定义相应的测试需求报告,即制订黑盒测试的最高标准,以后所有的测试工作都将围绕着测试需求来进行,符合测试需求的应用程序即是合格的,反之即是不合格的;同时,还要适当选择测试内容,合理安排测试人员、测试时间及测试资源等。

      2.测试设计

      将测试计划阶段制订的测试需求分解、细化为若干个可执行的测试过程,并为每个测试过程选择适当的测试用例(测试用例选择的好坏将直接影响到测试结果的有效性)。

      3.测试开发

      建立可重复使用的自动测试过程。

      4.测试执行

      执行测试开发阶段建立的自动测试过程,并对所发现的缺陷进行跟踪管理。测试执行一般由单元测试、组合测试、集成测试、系统联调及回归测试等步骤组成,测试人员应本着科学负责的态度,一步一个脚印地进行测试。

      5.测试评估

      结合量化的测试覆盖域及缺陷跟踪报告,对于应用软件的质量和开发团队的工作进度及工作效率进行综合评价。

      显然,黑盒测试只有严格按照步骤进行,才可能对应用程序的质量进行把关。然而,如果没有一种优秀的测试工具的帮助,单纯凭借手工测试,不但将耗费大量的人力、物力和财力,而且有很多测试工作是难以实现甚至是无法实现的。

      三、手工测试与自动测试的比较

      手工测试无法保证黑盒测试的科学性与严密性,这是因为:

      ●测试人员要负责大量文档、报表的制订和整理工作,会变得力不从心;

      ●受软件分发日期、开发成本及人员、资源等诸多方面因素的限制,难以进行全面的测试;

      ●如果修正缺陷所花费的时间相当长,回归测试将变得异常困难;

      ●对测试过程中发现的大量缺陷缺乏科学、有效的管理手段,责任变得含混不清,没有人能向决策层提供精确的数据以度量当前的工作进度及工作效率;

      ●反复测试带来的倦怠情绪及其他人为因素使得测试标准前后不一,测试花费的时间越长,测试的严格性也就越低;

      ●难以对不可视对象或对象的不可视属性进行测试。

      因此,自动测试成为最佳的解决方案。所谓自动测试,实际上是将大量的重复性工作交给计算机去完成,一个优秀的自动测试工具,不但可以满足科学测试的基本要求,而且可以节约大量的时间、成本、人员和资源,并且测试脚本可以被重复利用(包括被不同的项目所利用)。
  • 测试术语理解

    2009-02-15 08:06:02

    测试计划:需要确定测试对象、测试组织、测试任务划分、测试失败/通过的标准、挂起恢复的条件、时间安排、资源安排、风险估计和应急计划等;

    测试方案:侧重于规划测试活动的技术因素。如:确定被测特性、测试组网、测试对象关系图、测试原理、测试操作流程、测试需求、工具的设计、测试用例的设计(只是说明用例的设计原则,具体的用例设计应该在用例文档指出)、测试数据的设计等等;

    测试指导书:指测试过程文档,用来定义测试过程中的阶段、活动、输入输出、角色职责、模板、工具等等
  • Software Testing 10 Rules,总结的不错,在这里转载一下.^-^

    2009-02-15 07:59:43

    1. Test early and test often.
    尽早测试,经常测试
    2. Integrate the application development and testing life cycles. You'll get better results and you won't have to mediate between two armed camps in your IT shop.(这后半句怎么理解?)
    整合应用程序开发和软件测试生命周期,你将得到更好的结果,并且不必要在程序开发和软件测试两者之间左右为难。
    3. Formalize a testing methodology; you'll test everything the same way and you'll get uniform. results.
    形成一套完整的测试方法;你将用同样的方法开展测试工作,并且可以得到始终如一的结果
    4. Develop a comprehensive test plan; it forms the basis for the testing methodology.
    开发一套完整、全面的的测试计划;作为软件测试方法论的基础部分
    5. Use both static and dynamic testing.
    采用静态测试和动态测试相结合的方法(可以采用静态代码检查工具作静态测试)
    6. Define your expected results.
    定义测试预期结果(在测试用例中,这是比不可少的项目)
    7. Understand the business reason behind the application. You'll write a better application and better testing scripts.
    理解应用背后的商业动机,找出真正的需求根源,你将写出更好的应用程序和测试脚本。
    8. Use multiple levels and types of testing (regression, systems, integration, stress and load).
    采用多层面和多类型的软件测试(回归测试、系统测试、集成测试、压力测试和负载测试)
    9. Review and inspect the work, it will lower costs.
    多工作评审和检视,可以降低成本(检视和评审可以提早发现问题,规避问题,避免造成不必要的损失,因此,可以降低成本)
    10. Don't let your programmers check their own work; they'll miss their own errors.
    不要让程序员检查自己的工作产品,程序员会忽略自己犯的错误。

  • 一点想法

    2009-02-11 21:27:20

    时间如梦,岁月如歌,生命总是在叹息中感觉到短暂,心智成熟的征途总是使人如此的兴奋.
    一声感叹,我已经工作快四年了.在大千世界中找到自己的位置真的是不容易,理论上努力就会成功,有多少人会实践这样的一条真谛呢?生活的挫折让我找回了自己的位置,开始决定从局限思维中走出来,用更为全局的眼光来看待生活,所以这也是为什么我正在下决定步入测试领域的原因,在分析-设计-执行-总结这个四个基本步骤走上一程.理论上说我这是逃避,因为有执行力的人,做什么都可以成功.但我更相信环境决定意识,正因为有竞争力的环境才有更多talent,因为那里无形中提供一个启示,给了你思维与实践的空间.从这里我又想到了应该换一份工作.哈哈,越走越远了,2009年对于我来说意味着什么呢,意义很大,应该是我人生的转折点吧,希望如此.所以今天很高兴申请成功这个空间,与各位朋友交流一下心得.

     

  • 数据统计

    • 访问量: 6806
    • 日志数: 15
    • 建立时间: 2009-02-11
    • 更新时间: 2009-06-28

    RSS订阅

    Open Toolbar