SQL Server essence

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  37 随笔 :: 8 文章 :: 2 评论 :: 0 引用

公告

2009年11月18日 #

谈到自动化测试,一般就会提到测试工具。许多人觉得使用了一、两个测试工具就是实现了测试自动化,这种理解是不对的,至少是片面的。的确,测试工具的使用是自动化测试的一部分工作,但“用测试工具进行测试”不等于“自动化测试”。那什么是“自动化测试”? 半自动化测试过程,算不算自动化测试?是否可以为“自动化测试”给出如下定义?
 
  以自动化的方式完成测试?
 
  测试过程的自动化? 

  将手工测试的过程变成了自动化测试的过程? 

  摆脱手工测试的各种途径和方法? 

  自动化为测试而存在的,所以自动化测试的真正含义可以理解为“一切可以由手动完成的测试任务都已经由计算机系统或软件工具、程序来承担并自动执行”。它包含了下列3层含义: 

  “一切”,不仅仅指测试执行的工作——对被测试的对象进行验证,还包括测试的其它工作,如缺陷管理、测试管理、环境安装、设置和维护等。 

  “可以”,意味着某些工作无法由系统自动完成,如脚本的开发、测试用例的设计,需要创造性,其工作需要手工处理。 

  即使由系统进行自动化测试,还少不了人的干预,包括事先安排自动化测试任务、测试结果分析、调试测试脚本等。 

  严格意义上,“自动化测试(Automated Testing)”不等于“测试自动化(Test Automation)”。自动化测试,模拟手工测试步骤,通过执行程序语言编制的测试脚本自动地测试软件,自动地实施软件的单元测试、功能测试、负载测试或性能测试等。自动化测试集中体现在实际测试执行(test execution)的过程,也就是由手工逐个地运行测试用例的操作过程被测试工具自动执行的过程所代替。自动化测试,强调借助工具(不仅仅是工具,有时包括策略和工件)来完成测试的执行,也就是用工具来帮助或辅助测试,这个执行过程可能是全自动的,也可能是半自动的。 
  测试自动化的要求高得多,侧重说明将测试用自动化设计和实现的过程,即所有的测试工作都能有计算机系统自动完成,包括: 

  测试环境的搭建和设置,如上载安装包到服务器; 
  脚本自动生成,如根据UML状态图、时序图等生成可运行的测试脚本; 
  测试数据的自动产生,例如自动产生数据负载测试所需要的大量数据; 
  测试步骤的自动执行,包括测试执行过程的控制; 
  测试结果分析,实际输出和预期输出的自动对比分析; 
  测试流程的自动处理,即测试工作流的自动实现,包括测试计划复审和批准、测试任务安排和执行、缺陷生命周期等流程的自动化处理。 
  测试报告自动生成功能等。 

  这样,测试自动化意味着测试全过程的自动化和测试管理工作的完全自动化,是测试工程师所追求的一种理想境界,但是很难实现的。往往不能完全通过全自动化过程来完成一个完整的测试任务,自动化到不需要人工参与的程度是不现实的。虽然不能完全实现那种理想境界,但是我们每时每刻可以向这个方向去思考,优化每项工作,一切可以由计算机系统自动完成的测试任务都已经由计算机系统或工具来承担并自动执行。 

  在一般情况下,人们并不严格区分“自动化测试”和“测试自动化”,就是通过工具或程序来对软件进行测试,一般不需要大量的手工操作来完成测试,而只要很少的人工干预。自动化测试,理应从工作效率和产品质量的目的出发,而不是为了自动化而自动化,在某些时刻,也可能得不偿失,即投入过大,产出远远小于投入。脱离了目的,测试人员可能会变成自动化测试的奴隶。奢想做到百分之百地实现自动化测试,不仅不现实,所引起的代价可能会非常大,而且可能引起负面性,造成质量水平的降低。 

  最后,我们还不得不承认,自动化测试和手工测试往往交织在一起,相互补充,工具执行过程往往需要人工分析,手工测试时也可以借助工具处理某些数据、日志或显示某些信息。也就是说,不是试图用自动化测试来代替所有的手工测试,而应该在尊重手工测试的同时,尽量采用自动化测试,根据各自的特点充分发挥各自的优势,使手工测试和自动化测试实现完美结合。 
posted @ 2009-11-18 17:41 天蝎 阅读(229) 评论(0) 编辑

存储过程一方面减少网络数据流量,提高数据处理效率;另一方面在数据库层面进行事务处理和控制比在应用程序中使用分布式事务更高效、占用的资源更少;还有一个就是灵活性问题,设计良好的存储过程,当业务逻辑或规则发生变化时,可以不用修改软件代码,只需修改存储过程即可,这对于用户和软件开发商来讲,可以降低维护成本和升级花费;另外,扩展开来还有一个系统健壮性和安全性问题,在非电信级商业网络环境中(比如:大多数企业局域网),尽量减少设备节点和层次意味着更高的可靠性,尽量减少数据在网络上暴露和传输的机会意味着更高的安全性。

  另外,使用存储过程有可能使得系统存在缺陷。存储过程的一个缺陷是对于非数据密集型运算其实是很低效的,可能会过多的占用DB Server的CPU资源,而使得性能强大的Application Server的计算能力被闲置;另外,对于强调协作的分布式应用来,计算能力的过于集中在一定程度上降低了灵活性,毕竟现在早已不是大型主机的时代。

posted @ 2009-11-18 16:32 天蝎 阅读(25) 评论(0) 编辑

  SOA是Service Oriented Architecture的简称,中文译为“面向服务的体系架构”。与传统技术相比,SOA从业务着眼,基于标准化的技术手段,以“服务”为基本元素来构建或整合适合于各行业应用需求的信息系统,提高信息系统的开发效率、充分整合和复用IT资源、并使信息系统能灵活快速的响应业务变化需求。

  从技术的角度来看,SOA对软件开发的影响是深远的一方面SOA在继承传统的面向对象和组件化(构件化)编程思想的同时,更加强调了软件作为商业资产的可复用、可集成能力,其中软件(组件)的开放性和标准化是SOA的基石,它消除了软件(组件)之间交流和衔接的障碍,是软件实现“积木式”灵活装配的基础,同时,SOA强调了服务的治理,其实是为软件(组件)制定了一个价值衡量标准(或服务分割标准),用以界定软件(组件)的服务价值,这是软件(组件)可复用、按需组装的价值基础;

  另一方面,SOA强调了支撑“积木式”编程的统一基础设施环境,包括设计时的服务组装、运行时的服务调度(比如:工作流引擎)、统一的服务通信总线(ESB),这些基础设施提供了随需应变的服务组装能力和可伸缩、低耦合、可靠高效、分布式的服务运行环境,这是对组件化(构件化)编程模式的最新发展和完善。SOA是第一个真正完整、系统的阐述和实现组件化(构件化)编程思想的软件架构,是当前软件系统架构的集大成者。

posted @ 2009-11-18 16:19 天蝎 阅读(88) 评论(0) 编辑