软件架构师是开发软件时在用户需求分析与系统设计阶段的灵魂人物,与传统的系统分析员相比,软件架构师的工作能为接下来的代码设计,以及将来的运行都提供更好的指导。有人把架构师的工作定义为分解系统模块以及定义相互之间的关系,也有人认为架构师就是对软件设计核心环节设计的一系列决策;之所以架构师在现代软件开发体系中越来越重要,还与目前流行的软件开发组织结构有一定的关系。
一、“软件人”面临的困惑:
随着软件行业竞争的加剧,有数据显示一个商业软件推出的周期不能超过九个月。客户为了适应市场的变化,业务流程、运营模式都随市场而不断调整,经常有新业务需要支持,开发周期超过九个月,软件即使推出,也面临“市场淘汰”的危险。纠其原因:对于软件的用户来说,软件不再只是办公文件编辑的工具而已,而是业务运营的支撑平台,本来是客户的业务经营快速多变,也就是常说的商家经营压力,现在直接传递给了软件开发者。从前拼的是经营者的“思路”,现在不仅经营者要拼思路,还要拼IT支持部门对经营者新思路的运营支持能力。
如何让软件能够适应快速多变的需求呢?说白了,就是不断修改企业的软件功能与控制流程,软件开发人员也没少下功夫,采用面向对象的重用技术节省代码的编写;采用分层隔离的技术减少需求变化对代码的影响程度;采用业务开发平台技术让用户随意组合自己的业务流程…
为了弥补软件开发人员与业务人员思路的差异,可以快速给客户操作体验、形象式沟通,“极限编程”方式成为很多软件开发者的最爱。
极限编程是众多适应需求变化、小版本开发技术的一个代表,其目的就是避免把软件设计的庞大、复杂,尽快推出用户可见的、功能简单的、够用的小版本软件,让用户先用起来,在实践中体验感觉,再逐渐完善。
当新需求的增加造成实现上难逾越时,就采用“重构”技术,局部调整软件架构,如对象的重构、数据库的重构、功能模块的重构…重构就是在不影响外部调用接口的情况下,对局部程序的重新编写。当然,整个软件架构都不适应的时候,就只好推倒重来,重新开发了。走到这一步,该软件的生命周期就终结了。
二、新方法带来的新问题:
极限编程是一种软件开发的组织模式,需要管理者对软件系统整体架构有清晰的认识,否则软件的开发过程就会随着用户的需求任意“漫游”,成为永远不能最终交付的“大尾巴”工程。其原因有下面两点:
1、软件提供的功能不仅与用户的需求有关,还与其服务质量、约束条件有关。约束一般为计算机硬件、系统软件、网络等;服务质量一般为用户对软件的质量要求,如并发支持量、持续性服务等。
极限编程者非常好地关注了用户的需求变化,但适应这些变化要在软件系统整体架构范围内,在约束条件的许可下、服务质量可接受范围内才可以,否则发布的软件是用户就无法接受的,后者也达不到需要的效果。
2、因为要“敏捷”,很多开发组织者就“缩小”的前期架构设计的时间,在“够用原则”的支持下,简单搭建,甚至对采用的开发工具、中间件、对象的抽象等工作随手捻来,等到了开发的后期,成了烫手的“山芋”,难缠的“鸡肋”,继续保留则用户新需求无法满足,彻底更换则很多工作需要重来,还顾得上什么“敏捷”呢。
因此,采用“敏捷”的开发方法的软件团队,对软件架构的设计应该比传统的方式更加关注,这也是目前软件架构师的职业比从前系统分析员还受欢迎的原因。我很佩服Cisco的65系列交换机,那个机箱结构经历了几代引擎,兼容性让很多厂家非常羡慕。而有些厂家自己的产品,前后判若两人,相似的产品也很难相互配合,每个产品一个新面孔,真是“麻雀随小,五脏具新”。
如何较为完整地进行软件架构设计,温昱在《软件架构设计》中给出了“五视图法”比较全面。