我们知道软件系统的架构会对系统测试产生影响,而到底会产生哪些影响呢?
首先看一下软件系统架构到底是如何定义的?
软件系统架构就是组成系统的主要重要模块、过程、数据的管理和分配、用户界面的种类和风格,以及系统运行平台等。其中包括它们的结构和彼此间的准确关系,他们可被扩展和修改的方式,他们依赖于某种技术,是怎样得到系统性能和灵活性的,又是如何确定系统实施或修改计划的。
软件架构之所以重要是因为优秀的架构是确保软件长期成功的关键因素。而对于我们测试来说,其软件架构会对测试实施产生哪些影响呢?
首先是稳定性。稳定性可以降低在版本更新时扩展系统功能的重复老师,并减少实施过程的总成本。它巩固了开发团队的基础,使其专注于开发更大价值的特性,而并非浪费精力关注在经常变更的问题上。对于良好的系统架构,会使测试设计更稳定,减少因变更带来的测试工作量。
对变更的度和性质。架构决定系统中发生变更的性质。有些变更很容易被察觉,而察觉另一些则很难。在我们为吸引更多客户而需要提高客户满意度或增加功能时,如果能够简单实现预期的变更,那么各种架构通常被认为是好的。系统的功能需求变更,使系统受影响的部分最小,避免大量的回归测试。
社会架构。优秀的架构为创建它的团队而工作。它可以平衡团队内部的个体在实力和能力上存在的差异,而且可以弥补各自的弱点。例如团队对C++的内存管理经常使用不当,而如果使用Java、Perl或C#等系统自动进行内容管理的开发语言可以减少这方面的问题。而我们测试中,则对于内存方面的测试则可以考虑的较少一些。对我们招募测试团队的人员的技能也产生影响。
边界的决定。在架构的设计过程中,团队会就哪些应该被加入到系统中,而哪些不应该被加入到系统中做出很多决定。例如,是团队自己写数据库访问层,还是购买许可?团队是使用开源的Web服务器还是购买许可?那个子团队应该负责用户界面的设计?成功的解决方案确实能够创建技术边界来支持业务的特殊需求。这些边界选择可直接影响我们的测试,例如,服务器监控、服务器性能参数调优等。
可持续的、不可替代的优势。这一点可以概括前面的几点,但是一个好的架构能够使系统在市场竞争由于难于复制而占据优势地位。例如在性能和易用性方面获得优势。这对于我们测试来说,可以减少缺陷,性能更能达到目标而减少系统调优后反复测试的过程。
创建系统架构的实际方法就是探索多种已被文档化的模式,所以关于开发模式的书籍比较畅销,也正是很多研发管理人员必读的书籍。
测试团队要对软件系统架构进行理解,应该着重分析研发团队提供的一些视图,以增加对系统架构的理解。
逻辑视图。它提供了系统开发中对象间或实体间相互关系的静态快照。这种视图实际上可能有两个或更多的表现层。一个概念模型,另一个是数据库模式中模型的实现。往往现在数据库架构师使用PowerDesigner描述实体的逻辑关系,所以需要我们测试工程师学会查看数据库实体描述,从而了解系统中的数据库设计,例如关键字,索引、表实体之间的关系等。
过程视图。过程视图描述设计的并发性和同步性因素。我们了解过程视图,从而会了解系统中各个模块之间的时间、空间关系。原来的结构化编程中经常用流程图来表示,而现在面向对象的编程经常用一些建模工具描述对象实体。例如,架构师经常使用Rose等建模工具,建立实体的序列图、状态图等来描述过程。而我们测试工程师应该学会看懂序列图或状态图等。
物理视图。物理视图描述软件到硬件的映射,其中包括实现高可用性、可靠性、容错性和性能等目标的处理部件的分布情况。常用Rose部署图来描述物理视图,也可以使用Visio等绘图工具绘制系统架构图来描述。
开发视图。开发视图描述软件在开发环境中的静态组织结构。研发团队通常用Rose等建模工具绘制实体关系图,描述各个实体之间的静态关系。
了解了系统的架构之后,对于测试来说,就应该做相应的准备工作。包括招募具有相应技能的人员。针对特定的结构采取相应的测试设计。例如,对于J2EE架构,则要考虑如何集成测试,采用何种集成策略。对于性能测试,考虑哪些测试。例如研发采用Weblogic作为应用服务器,则我们要考虑该服务器哪些配置参考会影响系统的性能。物理架构中具有中间件服务器,则我们对中间件服务器如何测试。
总之,了解一些软件系统架构,对于测试人员尤其是测试管理人员是非常需要的。