专注于自动化测试,性能测试.......

发布新日志

  • 设计模式系列(1) 使用频率

    2018-01-30 09:59:52

    自1995年,GoF四人组在《设计模式》一书中定义了23种设计模式后,设计模式就如灯塔般给无数开发者指明着方向。这些设计模式有些是我们耳熟能详的,如单例模式,工厂模式,策略模式,也可能有鲜有耳闻的,如享元模式,解释器模式.本文将列出每种设计模式在实际应用中的使用频率,已给开发者以参考。

    创建型(Creational Patterns)

    设计模式描述使用频率
    抽象工厂(Abstract Factory)提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类*****
    工厂方法(Factory Method)定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类*****
    单例(Singleton)保证一个类仅有一个实例,并提供一个访问它的全局访问点****
    原型(Prototype)用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象***
    建造者(Builder)将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示**

    结构型(Structural Patterns)

    设计模式描述使用频率
    外观(Facade)为子系统中的一组接口提供一个一致的接口,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用*****
    适配器(Adapter)将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作****
    组合(Composite)将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性****
    代理(Proxy )为其他对象提供一种代理以控制对这个对象的访问****
    桥接(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化***
    装饰(Decorator)动态地给一个对象添加一些额外的职责***
    享元(Flyweight)使用共享来有效地支持大量细粒度对象*

    行为型(Behavioral patterns)

    设计模式描述使用频率
    观察者(Observer)定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新*****
    迭代器提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示*****
    策略(Strategy)定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化****
    命令将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作****
    状态(State)允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类***
    模板方法(Template Method)定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤***
    中介者(Mediator)用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互**
    责任链(Chain of Responsibility)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止**
    访问者(Visitor)表示要在对象结构的元素上执行的操作。Visitor允许您定义一个新的操作,而不需要更改它所操作的元素的类*
    解释器(Interpreter)给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子*
    备忘录(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态*
  • 自动化测试:你如何拥有

    2018-01-18 08:57:24

    原文发布在: https://www.jianshu.com/p/907b21353a4f

    这是一个老生常谈的话题,如果你打开这篇文章,说明你正困惑于“如何开展自动化”这类问题。相信目前测试业内普遍认同"自动化并不是银弹"的说法。也就是说自动化并不能完美的解决测试的所有问题,但很多公司又都在搞自动化,说明开展自动化是需要具备一定条件的。

    适不适合开展自动化测试

    开展自动化测试之前,你第一个要问自己的问题就是"我们的团队适不适合开展自动化测试?"。并不是公司老板说我们需要开展自动化测试来提高工作效率,节约公司成本,就匆匆忙忙的开始进行自动化测试。你至少应该从以下几个方面考虑是否适合开展自动化测试:

    公司及业务的规模
    一般说来,自动化测试是大公司才能玩得转的游戏。因为在这些公司,开发流程相对比较严谨和完善,有专门的自动化测试团队来实施自动化;同时也因为规模大,可以使自动化测试形成规模优势,从而降低成本,提高效率

    项目的规模和性质
    并不是所有项目都适合进行,一些短平快的项目不适合自动化测试,一些需求长期变动频繁的项目也不适合自动化测试,只有迭代周期长且需求变动平稳的项目才适合自动化测试.

    做好ROI(投资回报率)
    做工作干事业,我们总是会考虑投入和产生的问题,自动化测试自然也例外。简单的概括,自动化测试的ROI可以用如下公式来计算:

    ROI=(手工测试成本-自动化测试成本)/自动化测试成本*100% 
    
    比如:现在有100条测试用例,设计这些用例需要耗费3天时间,执行一次需要耗费1天时间,那么以1月执行5次为例,
    那么一个月手工测试成本为3+1*5=8人日,而自动化测试100条用例设计需要7天,执行一次需要耗费2小时,
    但由于业务需求更改,每次需要花费半天进行脚本调整,那么一个月的自动化测试成本为7+0.5*5=9.5人日
    由此可见,只有在需求尽量少变更(减少维护成本),且需要多进行自动化测试的情况下,自动化测试才会有比较高的回报率.
    

    测试团队的技术水平
    虽然目前自动化测试框架的**度已经很高,但依然需要测试人员具备一定的开发能力。如果在技术储备不足的情况下开展自动化测试,成功的几率很低。

    业务需求变动频繁
    关于这点,几乎已经是业界内的共识。对变更很频繁的功能进行自动化测试,结局几乎都是灾难性的。测试人员往往陷入到自动化测试用例维护的漩涡中,结果就是自动化测试没有起到应有的作用,手工测试也被耽误了。

    持续集成的项目
    目前越来越多的团队实施了敏捷开发模式,敏捷开发中比较重要的观点就是持续集成。由于持续集成的持续性和即时性,所以非常需要自动化测试来持续的,及时的反馈测试的结果。

    节制且有策略的实施自动化测试

    很多公司都曾经开展过自动化测试,但取得成效的确很少。其中一个很重要的原因就是缺乏策略性,仓促的就开展自动化,甚至把自动化测试作为KPI来考核,结果大家都一窝蜂的编写自动化测试用例,KPI是漂亮了,但开展自动化测试对实际工作效率和效果的改善确没有尽如人意。其实,开展自动化测试应该一步一步来。先拿一个项目,甚至一个模块来做实践,"实践是检验真理的唯一标准",那么花费最小的代价来实践出真理就是最好的结果。通过实践,你总是会得到“自动化测试适不适合你们公司”,“如何更好的开展自动化测试”这些问题的答案。而且通过最佳实践,你也更有底气的在项目,甚至公司里广泛的开展自动化测试。![timg.jpg]
    实践出真知.jpg

    要选择合适的自动化测试

    测试金字塔.png

    大家对上面这幅图都应该很熟悉,测试金字塔揭示了进行测试的优先级。如果你们公司需要开展自动化测试,那么如上图所示,从单元测试开始是最好的选择。但单元测试是否实施以及如何实施的主动权往往在开发的手里。所以开展自动化测试的最佳选择往往是API测试(接口测试)。尤其是在现在越来越盛行基于服务的开发以及前后端分离,给接口测试实施自动化带来了极大的便利。对于UI自动化测试,虽然关于UI自动化测试讨论以及相关技术和框架都比较多,但实施的效果往往都不尽如人意。

    你可能需要一个自己的框架

    我们需要自己的框架并不是为了显示自己逼格高,而是当自动化测试规模到了一定的规模,维护自己的框架才会使你的自动化测试更好的进行。你也不必自己从头开始造轮子,在现有的测试框架上实现适合自己公司的功能就可以。比如说,使用Junit驱动API测试用例的执行,那么你可能需要一个平台来管理你目前的用例,批量执行测试以及测试报告的查看。

    结束语

    自动化测试,你是否值得拥有,我想答案是肯定的。但如何拥有,确有很长的一段路要走。如何结合技术与实践总结出适合工作的最佳方案是最终的目

Open Toolbar