最近一直在看Junit源码,也看了很多Junit的源代码分析,看到里面都提到了Java设计模式,什么Command模式,工厂模式,Component模式等等。以前就知道有Java设计模式,这次通过看Junit源码发现这个设计模式真的是非常的有用,而且对于代码设计和架构设计有很多的指导作用,那大部分的Java开发人员在使用Java设计模式的时候,主要是为了可重用和扩展代码,增加代码的逻辑性和可靠性。让人感觉就是非常的High,也让人感觉这才是真的有技术含量,这里我就会联想到架构师,系统分析师等比较牛B的人,那些人至少是把这些设计模式理解和使用的非常精通的境界,什么情况下使用什么设计模式能启动什么样的效果,这些东西一说出来,在项目的系统技术方案评审和架构设计的时候,这就代表着水平和技术实力。甚至是很牛B的架构师就是开发一些新的设计模式出来,让其他的开发人员来使用这些设计模式,使其写的代码更具有可靠性和扩展性。
这里我就想到了测试架构师,自从了解了Java设计模式,就大概了解了开发架构师的一些内部职能,自己从事测试行业这么长时间了,还是不能完全明确体会到测试架构师到底具体是做什么呢,给其他的测试人员能够带来什么,给需要开发的项目或系统能带来什么,这里就不说其他人的见解,就谈下我个人的理解:
首先,一个合格的测试架构师要完全的理解测试技术。
这里的测试技术包括需求分析技术,测试设计技术,测试执行技术等;对比与开发架构师,有哪个开发架构师不了解甚至是使用基本编程技术,编程语言语法,设计模式,肯定是对这些方法和设计模式使用的炉火纯青,达到非常精通的境界。这里就不能看出作为一个测试架构师能具有的能力了,开发架构师对项目或系统的贡献是技术方案,架构设计的合理,设计模式的合理应用,能够让开发人员的代码更有质量和可测试性;测试架构师对项目或系统的贡献是最佳的测试策略,测试模型的合理应用,测试设计技术和需求分析技术的合理应用,能够让测试人员更快的进行测试设计,进行测试代码的编写,发现较隐含的bug。
其次,一个合格的测试架构师要能实时的掌握新的测试技术并应用于团队。
这里同样对比与开发架构师,我们的开发架构师不仅仅提供一些技术方案的指导,还掌握了JVM,J2EE,EJB等一系列技术的发展和动态,了解这些是否有最新的技术来改变或替代,并探索是否适合本公司内部应用,或作出较有深度的分析报告。那我们的测试架构师也是一样,不仅仅能够完全的应用和指导测试策略和测试模型,而且还需要了解国内外最新发展的新的测试技术(需求分析技术,测试设计技术,测试执行技术,优秀的工具),并探索这些技术在本公司内部应用,研究并定制化或完善这些最新的测试技术,提供最新技术的实施方案并亲自实践拿到最新的分析报告,知道其他的测试人员参与最新技术的应用,目的只有一个提升测试人员的技术能力,或是掌握多样化测试技术手段,或是更快的发现bug,或是发现更深层次的bug。
最后,一个合格的测试架构师要能抽象并创新出新的能应用于本身团队的测试技术。
这里说合格,估计有点高,我们可以看到开发架构师,能够抽象并开发新的设计模式的毕竟是少数,内部团队使用的设计模式相对来说容易一点。那么对于测试架构师也是一样,需要针对新的业务模式,新的系统架构模式抽象和创新出新的测试技术(需求分析技术,测试设计技术,测试执行技术,优秀的工具),并能实践与公司内部团队,并提供新测试技术指导和完善,如果能够服务于整个测试行业的测试人员的话,那就成了真正的大师了,我们的24个经典的设计模式不就是真是大师开发的吗。就好比等价类分析或因果图分析一样,牛B的测试架构师就应该可以开发或创新出类似的测试技术出来,让所有测试人员能够快速的进行测试设计,提高测试覆盖率。
总结下:这里用到了测试技术,个人理解的需要再次强调一下,由于是和设计模式相对,本来个人觉得使用测试模型更合适,类似于探索式测试的三大模型;但后来觉得有点狭隘,相比较与开发架构师所掌握的技术来说,测试技术要少一些,但是测试需要站在整个系统质量的角度来看,就必须在了解这些开发技术上,充分的利用测试技术来体现出自己的价值,就是提供最优的服务。所谓最优就是在成本,质量和进度上达到完美的结合点,那么测试架构师的作用就是帮助一个测试团队怎么去找到这个结合点,怎么去实施并取得相应的结果,怎么能去不断的优化自己提供的测试方案,测试技术指导,优秀工具等。
对于一个开发人员来说,我们敬佩一个开发架构师,绝不是因为他代码写的好,写的快,没有bug,最关键的是他能给我们在开发过程中,甚至在未来的新技术中都能提供很好且很合理的建议和指导。那么我作为一个测试人员,我也会敬佩一个测试架构师,我敬佩他的原因肯定是他能完全的透析我要测试的项目或系统,并给出非常合理的测试策略或方案,对于一些异常或特殊模块进行测试技术的指导来提高测试覆盖率,也可以快速的进行开发小工具帮助我进行更有效的测试,更多异常的测试。这些技能无不需要厚重的测试技术的积累和相关经验的抽象和创新。
以上都是个人看法,欢迎拍砖。