在本系列中,您将了解如何编写软件架构文档说明 。了解编写文档说明的不同方面:系统上下文、体系结构概述、功能体系结构、操作体系结构和体系结构决策 。
在这第一篇文章中,了解软件架构是什么,以及为该学科的不同方面编写文档说明的重要性 。回页首软件架构不同的研究人员已解释了软件架构是什么,并且他们对有关如何最好地表示软件系统的体系结构具有不同的观点 。
其中没有哪一种解释是错误的;每种解释都具有自己的价值 。Bass L 等人抓住了软件架构的本质: “程序或计算系统的软件架构是该系统的结构,包括软件组件、那些组件的外部可见的属性,以及那些组件之间的关系”。
此定义重点关注由粗粒度的构造(软件组件)所构成的体系结构,可以将这些构造看作是体系结构的构建块 。每个软件组件或体系结构构建块具有某些外部可见的属性,这是它向其他体系结构构建块公开的属性 。
软件组件的内部设计和实现细节不是系统的其他部分所关心的内容,系统的其他部分只是将某个特定组件视为一个黑盒 。该黑盒具有某些所公开的属性,其他软件组件可以使用这些属性来共同实现业务或 IT 目标 。
软件架构在恰当的粒度级别标识体系结构构建块 。软件架构还标识那些构建块如何彼此相关,并进行文档记录 。
与软件工程相关的体系结构涉及到将单个系统分解或划分为一组可迭代地、渐进地和独立地构造的部分 。各个部分彼此具有显式的关系 。
当组合在一起时,各个部分就形成了系统、企业或应用程序的体系结构 。关于体系结构与设计之间的区别,存在一些混淆 。
正如 Clements P 等人 所指出的,所有体系结构都是设计,但不是所有设计都是体系结构 。需要绑定以使系统满足其功能性和非功能性需求和目标的设计本质上是体系结构 。
体系结构将体系结构构建块视为黑盒,而设计则处理体系结构构建块的配置、自定义和内部工作 。体系结构将软件组件与其外部属性绑定在一起 。
设计通常要比体系结构松散得多,因为它允许以更多的方式遵守组件的外部属性 。设计还考虑用于实现组件内部细节的各种方法 。
软件架构可以递归地使用 。请考虑一个属于某个系统的软件架构组成部分的软件组件 (C1) 。
软件架构师将该组件及其应该公开的属性、功能和非功能特性及其与其他软件组件的关系交给系统设计人员 。设计人员在分析软件组件 C1 之后,决定将该组件分解为更细粒度的组件(C11、C12 和 C13),其中每个组件提供可重用的功能,这些功能将用于实现 C1 的要求属性 。
设计人员详细设计了 C11、C12、C13 及其接口 。此时,对设计人员来说,C11、C12 和 C13 是体系结构构造(或组件);其中每个构造具有显式定义的外部接口 。
对设计人员来说,C11、C12 和 C13 是软件组件 C1 的体系结构,并且这些构造需要进一步的改进和设计,以处理它们的内部实现 。通过将大型、复杂的系统划分为小型的构成部分并集中于每个部分,可以递归地使用体系结构 。
体系结构使用共同满足行为和质量目标的体系结构构建块将系统绑定在一起 。参与者必须能够理解体系结构 。
因此必须为体系结构编写足够的文档说明,下一个部分将对此进行讨论 。回页首编写体系结构文档说明的重要性参与者:体系结构的下游设计和实现用户 。
为体系结构的定义、维护和增强功能进行投资的人 。向参与者传达您正在构建的系统蓝图的关键是为系统体系结构编写文档说明 。