对于一个已经存在的系统,不知道这个系统的构架,或者最初的开发人员将构架文档丢失,或者系统进行了一系列修改升级但是却没有记录更新,在维护这样的系统时,构架重构是十分必要的。它是一种解释、交互和迭代的过程,涉及很多活动,而且并不是自动进行的。软件构架重构由信息提取、数据库构造、视图融合、重构这些活动组成,它们以迭代的方式进行。
信息提取的目的就是从各种源提取信息,信息提取设计分析系统现有的设计和实现制品,以构造系统的模型,所得到的结果就是放在数据库中的信息结合。提取信息使用的各种工具,如解析器、抽象语法树分析器、语法分析器、流行工具等,要根据需要选择。另外,以下指导方针尤为重要:用最少的工作量提取,验证已经提取的信息,在重要的地方提取动态信息。
数据库构造包括将该信息转换为标准的形式,以及用于创建数据库的基于SQL的数据库格式。将提取的信息转换为标准的格式以存储在数据库中。数据输入到数据库中,生成两个额外的表:元素和关系。构造数据库时,要仔细分析数据库设计。
数据存储在数据库中,就要对这些信息进行处理,这就是要进行视图融合的必要性,视图融合将数据库中的信息组合在一起,以生成该构架的一个内聚的视图,以协调、加强并建立元素之间的联系。到底怎么融合,就要以指导方针为基础,视实际情况而定。
重构活动中主要工作是构建数据抽象和各种表示以生成构架表示。由两个主要的活动组成:可视化和交互以及模式定义和识别。
构架重构是一个非常复杂的过程,所以过程做的再好,也还是会给构架带来伤害,所以决策者们首先要分析架构重构的理由和其他备选方案,明确重构的目的是为了满足业务需求,是最佳方案,再考虑其他问题。有些情况,也许还有其他解决方案,不一定非要采取重构的方式,那就没有必要进行构架重构了。因此确定重构的目的和必要性十分重要。
在确定要重构之后,首先要把目标明确下来,也就是重构的边界条件,目标要有数据量化,或者有能够测试的办法。这也是一个需求分析的过程,如果需求不明确,那么规格说明书就会不清楚,负责重构的团队也就没有明确的目标,所以不能以重构的时间或者主观的判断为结束的依据。在目标明确之后,团队才可以找到合适的方法。因此可见定义“重构完成”的界限十分重要。
重构过程不比构建一个新的构架简单,需要在不改变软件的功能和外部可见性的情况下,提高软件的清晰性、可扩展性和可重用性。在进行重构时,需要特别注意的是修改已经对外提供的接口,这时需要发布一个新接口保留原接口,在原有接口里直接调用新接口。