软件质量属性-可测试性

软件质量属性-可测试性

王建宁 

(石家庄铁道大学,河北省石家庄市,050043)

  要:随着软件规模的扩大,软件的可测试性在软件质量属性中的位置越来越突出。本文简要阐述了软件可测试性的特征,引入MVC框架来描述可测试性的具体作用和意义,最后提出了提高软件的可测试性的几种方法。

关键词可测试性,MVC框架

Software quality attributes - testability

WangJianNing

(ShiJiaZhuang TieDao University,Shijiazhuang, Hebei province,050043,China)

Abstract:With the expansion of software scale, the testability of software is more and more prominent in the software quality attribute. This paper briefly describes the characteristics of software testability, introduces MVC framework to describe the specific role of testability, and finally puts forward several methods to improve the testability of software.

Key words:testability,MVC framework

 

 

 

 

0引言内容:

可测试性”这一概念于1975年在《设备自动测试性设计》一文中第一次被提出。从此,可测试性便在电子产品诊断电路设计及研究等各个领域得到了广泛应用。当系统的规模越来越大,对软件的测试变得越来越困难,那么软件的我们需要提高软件的可测试性来提高软件性能、节省开发费用。MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式它强制性的使应用程序的输入、处理和输出分开MVC框架的使用大大提升了Web应用程序的可测试性

1软件可测试性的特征:

软件的可测试性是指软件发现故障并隔离、定位其故障的能力特性,以及在一定的时间和成本前提下,进行测试设计、测试执行的能力。它依赖于软件本身的结构和描述该软件的文档资料的明确性。一个软件的可测试性应具有几个特征如表1所示。

特征

说明

可操作性

如果设计的软件存在很少缺陷或基本没有缺陷话,那么在进行测试时的效率就会很高。

可观察性

可观察性好的软件产品测试时可以容易地观察到测试结果。

可控制性

能够从软件产品的输入来控制它的各种输出,软件硬件状态和变量能够直接由测试工程师控制。从而使软件的自动测试工作变得更容易。

可分解性

软件可以分解为独立的模块,能够被独立地测试。

简单性

软件在满足需求的基础上要尽量简单。

稳定性

软件的变化很少,保持稳定的状态。

易理解性

软件的设计易于理解。

可测试性特征

2 MVC框架可测试性体现:

 MVC框架把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。

 

1 MVC框架分层图解

MVC架构提供了一种按功能对各种对象进行分割的方法(这些对象是用来维护和表现数据的),其目的是为了将各对象间的耦合程度减至最小。MVC结构本来是为了将传统的输入(input)、处理(processing)、输出(output)任务运用到图形化用户交互模型中而设计的

由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松耦合的构件同时,可以根据程序要实现的不同功能将其分离成许多不同的、相互独立的软件块当测试的过程中出现错误时,可以很快的定位错误出现在哪一个模块,进而及时的消除错误。

MVC可测试性的体现不进如此,由于MVC的实现了控制器、视图、模型的分离,并且不像WebForm那样对Request和Session这些内部组件过于依赖,使得它成为了一个便于单元测试的框架。

3如何提高软件的可测试性:

需求分析阶段修复一个错误的费用还有编码阶段的1/5到1/10,而在维护阶段做同样的工作所付出的代价却是编码阶段的20倍。可见,在软件生命周期的早期就确定软件的可测试性,在设计时就充分考虑可测试性的问题,就可以既省时又省力地提高软件的可测试性。因此,如何提高软件的可测试性就显得尤为重要。

3.1降低模块之间的耦合度:

模块耦合表示模块间的联系程度。模块间的耦合作用强,会降低软件的可测试性水平。因此在软件设计时,尽可能的强调测试功能模块之间的相对独立性。下面是实现低耦合的几个具体方法:

1、少使用类的继承,多用接口隐藏实现的细节。 Java面向对象编程引入接口除了支持多态外, 隐藏实现细节也是其中一个目的。

2、模块的功能化分尽可能的单一,道理也很简单,功能单一的模块供其它模块调用的机会就少。(其实这是高内聚的一种说法,高内聚低耦合一般同时出现)。

3、遵循一个定义只在一个地方出现。

4、少使用全局变量。

5、类属性和方法的声明少用public,多用private关键字。

6、多用设计模式,比如采用MVC的设计模式就可以降低界面与业务逻辑的耦合度。

7、尽量不用“硬编码”的方式写程序,同时也尽量避免直接用SQL语句操作数据库。

8、避免直接操作或调用其它模块或类(内容耦合);如果模块间必须存在耦合,原则上尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。

3.2减少UI和UI模块之间的互相调用

窗口之间的迁移逻辑不应该写在窗体的代码中;业务代码之间的互相调用则是比较常见的,比如一个公司的管理系统,财务模块调用人员管理模块的接口,这是很正常的结构。层次之间原则上坚持单向调用。如果存在层次之间的双向调用,程序中的层次划分基本上就名存实亡了。 

很多JSP开发者很熟悉STRUTS框架,这是MVC的一种实现。使用这个框架,可以使JSP页面成为程序的一种单纯的数据表示,不用进行任何业务功能。JSP画面之间的迁移、JSP对底层业务代码的调用都不是在UI层次上进行的。根据这样的技术,UI实际上简化为一个薄薄的层,UI之间的迁移、UI对后台层次的调用是在UIP层次上(User Interface Process)实现的。类似STRUTS的struts.config,程序使用一个配置文件反映用户界面之间的迁移关系。

参考文献:

[1] 林锐 :《软件工程思想》

[2] Vince:《软件可测试性设计》

[3] 刘菲菲,赵怀勋,祁冰:《软件测试性分析方法的研究》

原文地址:https://www.cnblogs.com/123456www/p/13053375.html