(欧)第15章 设计模式与软件测试

来源:互联网 发布:网络信息管理平台 编辑:程序博客网 时间:2024/05/16 13:52

软件模式

设计模式关注的重点在于通过经验提取的”准则或指导方案“在设计中的应用,因此在不同层面考虑问题的时候形成了不同问题领域上的模式。

模式的目标:把共通问题中的不变部分和变化部分分离出来。不变的部分,就构成了模式。因此,模式是个经验提取的准则,并且一次次的实践中得到验证。


软件测试是指使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验软件是否满足规定的需求或弄清预期结果与实际结果之间的差别。


1 辨析鸡与蛋,用设计模式观点。

分析:“先有鸡还是先有蛋”这个问题只是对面向对象本质的一个理解,将人类自然语言放在此处不合理。不存在鸡与蛋的问题,而是型与值的问题,以及指针引用问题,因为鸡与蛋两个对象间是引用关系而不是包含关系。


2 设计模式思想描述蜡笔和毛笔有什么不同、

分析:brideg模式。画一幅画,需要准备36支型号不同的蜡笔,而改用毛笔的话3支就够,另外配12中颜料。通过bridege模式,把乘法3*12=36改为了加法运算3+12=15.

蜡笔和毛笔的一个关键区别在于笔和颜色是否能够分离。 brideg模式的用意是“将抽象化与实现化脱耦,使得二者可以独立地变化”。关键在于能否脱耦。蜡笔的颜色和蜡笔本身不能分开,所以必须使用36个色彩、大小相异的笔来绘制图画。而毛笔与颜料能够很好的脱耦,各自独立变化,简化了操作。

在这里,抽象层面的概念是“毛笔用颜料作画”,而在实现时,毛笔有大、中、小3号,颜料有红、绿、蓝等12种,于是出现36种组合。每个参与者(毛笔和颜料)都可以在自由度内随意转换。而蜡笔和颜色无法分离,造成笔和颜色两个自由度无法单独变化,使得只有创建36种对象才能完成任务。

bridge模式将继承关系转换为组合关系,从而降低了系统间的耦合,减少代码编写量。


3 观察者模式

工会给每位教工发大米的例子。教工等着发大米就是一个典型的观察者模式。

大米到了工会后,工会不把大米给每人送去,而是给每人发个轻量级的消息,教工得到消息,再把大米拉回各家。要求每位教工有一个工会的引用,在得到消息后到指定的地点领取大米。这样工会不用给每家教工送大米,而教工也不用每天到工会门口等大米。


鼠标帮助例子与上述例子相似。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题帮助。这个帮助对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更新自己


一个软件系统要求一个对象的状态发生变化时候,某些其他对象作出相应的改变。做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。减少对象之间的耦合有利于系统的复用,但是同时设计师需要这些低耦合度的对象能够维持行动的协调一致,保持高度的协作。


观察者模式

基本简介:

观察者模式(Observer)完美的将观察者和被观察的对象分离开。举个例子,用户界面可以作为一个观察者,业务数据是被观察者,用户界面观察业务数据的变化,发现数据变化后,就显示在界面上。面向对象设计的一个原则是:系统中的每个类将重点放在某一个功能上,而不是其他方面。一个对象只做一件事情,并且将他做好。观察者模式在模块之间划定了清晰的界限,提高了应用程序的可维护性和重用性。
观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新。
过程
实现观察者模式有很多形式,比较直观的一种是使用一种“注册——通知——撤销注册”的形式。


观察者

(Observer)将自己注册到被观察对象(Subject)中,被观察对象将观察者存放在一个容器(Container)里。

被观察

被观察对象发生了某种变化(如图中的SomeChange),从容器中得到所有注册过的观察者,将变化通知观察者。

撤销观察

观察者告诉被观察者要撤销观察,被观察者从容器中将观察者去除。
观察者将自己注册到被观察者的容器中时,被观察者不应该过问观察者的具体类型,而是应该使用观察者的接口。这样的优点是:假定程序中还有别的观察者,那么只要这个观察者也是相同的接口实现即可。一个被观察者可以对应多个观察者,当被观察者发生变化的时候,他可以将消息一一通知给所有的观察者。基于接口,而不是具体的实现——这一点为程序提供了更大的灵活性。


4 单例模式

特点:单例类只能有一个实例。

   单例类必须自己创建自己的唯一实例。

   单例类必须给所有其他对象提供这一实例。

Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它,除此以外,该模式中包含一个静态私有成员变量instance与静态共有办法instance()。instance()方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。


软件测试基础

1 自动化测试为何重要?
分析:自动化测试从根本上提高了QA的职业素质,让QA从彻底上摆脱重复繁重的测试工作,更着重在QA的流程上一届完成项目质量的重复保证上。
答案:自动化测试可以让测试人员从枯燥无味手工重复性测试中解放出来,并且提高工作效率,通过自动化测试结果来分析功能和性能的缺陷。

2 描述一个测试结束的准则?
答案:一个测试结束的标准可以查看已提交的bug是否已经全部解决并已验证关闭,一般来说,bug验证率在95%以上,并且没有大的影响功能的bug处于未解决状态,就可以测试通过。

3 一个测试计划中能包含哪些内容,如可用的人力资源?
分析:包含需要测试的产品特点和主要功能模块,列出需要测试的功能点,并标明侧重点;测试的策略和记录(测试工具的确认,测试用例等文档模板,测试方法确定);
测试资源配置(确定测试每一阶段的任务和所需资源)

4 功能测试 vs 可用性测试
分析:功能测试称为行为测试,根据产品特征、操作描述和用户方案,验证一个产品的特性和可用性行为以确定它们满足设计要求本地化软件的功能测试,用于验证用于程序对网站对目标用户能正确工作。
功能测试也叫黑盒测试或数据驱动 测试,只需考虑各个功能,不需要考虑整个软件的内部结构及代码。

可用性测试是用户在和系统交互时对用户体验质量的度量。 可用性是交互式IT产品/系统的重要质量指标,指的是产品对用户来说有效、易学、高效、好记、少错和令人满意的程序,即用户能否用产品完成他的任务,效率如何,感受怎么样?实际上是从用户角度所看到的产品质量,是产品竞争力的核心。


答案:功能测试主要是黑盒测试,由测试人员进行,主要验证产品是否符合需求设计要求;可用性测试主要是由用户来进行测试,主要是对产品的易用性进行测试,包括有效性、效率、用户主观满意度。有效性指用户完成特定任务和达到特定目标时所具有的正确和完整程度;效率指用户完成任务的正确和完整程度与所使用资源之间的比率;满意度指的是用户在使用产品过程中所感受的主观满意度和接受程度。

黑盒测试

1 一个学生60分及格,80分得优,100分满分。下面4个选项哪一个边界值测试是最好的?为什么?
A -1,0,59,60,79,80,99,100 B 0,59,79,100 C 0,1,59,69,70,80,100D 60,80,100
分析:边界值测试就是找到边界,然后在边界及其边界附近(这里应该包括边界两侧)选点。因此边界0(隐含需求边界),60,,8,100要测试,边界另一侧-1,59,79,99也要测试。对于BD,只覆盖边界的一侧,而C中的69和70跟边界无关,所以A相对较好。

补充:
健壮性测试:是边界值分析的一种简单扩展。除了变量的5个边界值分析外,还要分析变量值比最高值高出一点和比最低值低一点的情况下会出现声明反应。
最坏情况测试:边界值分析是在单缺陷假设性进行的。如果不做此假设,就会出现同时有多个变量取边界值的情况。最坏情况测试用例的获取,是对每个变量,先进行包含 5个边界值元素集合的测试,然后对这些集合进行笛卡尔积计算,以生成测试用例。

特殊值测试:不需要使用任何测试方阵,只使用最佳工程判断。该方法与测试人员能力相关。
随机测试:使用随机数生成器生成测试用例值。这种测试用例的获取需要用程序来得出,而且还设计测试覆盖率的问题。


白盒测试

白盒测试的测试方法:条件覆盖、路径覆盖、语句覆盖、分支覆盖。其中分支覆盖又称判定覆盖,使得程序中每个判断的取真分析和取假分支至少经历一次,即判断的真假均曾被满足。

白盒测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、Z路径覆盖等方法,其中运用最广泛的是基本路径测试法.

基本路径测试法是在程序控制流图的基础上,通过分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例的方法设计出的测试用例要保证在测试中程序的每个可执行语句至少执行一次。



计算圈复杂度
圈复杂度是一种为程序逻辑复杂性提供定量测度的软件度量,将该度量用于计算程序的基本的独立路径数目,为确保所有语句至少执行一次的测试数量的下界。独立路径必须包含一条在定义之前不曾用到的边。
有3种方法计算圈复杂度
1. 流图中区域的数量对应于环形的复杂性
  2 给定流图G的圈复杂度V(G),定义V(G)=E-N+2,(E是流图中边的数量,N是流图中节点的数量)
3 给定流图G的圈复杂度V(G),定义为V(G)=P+1,P是流图G中判定节点的数量。

独立路径:是指和其他独立路径相比,至少引入一个新处理语句或一个新判断的程序通路。


《程序员面试宝典》 第五版 欧立奇 P253~P273
















原创粉丝点击