文件的物理结构包括哪些呢?
引言 软件架构是一门学科,开始于 20 世纪 70 年代。
面对不断增加的复杂性和开发复杂实时系统的压力,作为主流系统工程和软件开发的基本构造,软件架构应运而生。
与任何其他久经考验的学科一样,软件架构在诞生之初也面临许多挑战。
软件架构表示系统的结构和行为方面。
在早期为软件架构编写文档说明时,所使用的文本和图解表达常常不足或者不够精确。
所需的是某种一致并得到充分理解的伪(或元)语言,以便将对软件架构进行表示和编写文档说明的不同方式统一起来。
在学术研究的推动下,在用于开发有效软件架构文档说明的最佳实践和指导原则方面,工程和计算机科学领域已取得了长足的发展。
在本系列中,您将了解如何编写软件架构文档说明。
了解编写文档说明的不同方面:系统上下文、体系结构概述、功能体系结构、操作体系结构和体系结构决策。
在这第一篇文章中,了解软件架构是什么,以及为该学科的不同方面编写文档说明的重要性。
回页首软件架构不同的研究人员已解释了软件架构是什么,并且他们对有关如何最好地表示软件系统的体系结构具有不同的观点。
其中没有哪一种解释是错误的;每种解释都具有自己的价值。
Bass L 等人抓住了软件架构的本质: “程序或计算系统的软件架构是该系统的结构,包括软件组件、那些组件的外部可见的属性,以及那些组件之间的关系” 。
此定义重点关注由粗粒度的构造(软件组件)所构成的体系结构,可以将这些构造看作是体系结构的构建块。
每个软件组件或体系结构构建块具有某些外部可见的属性,这是它向其他体系结构构建块公开的属性。
软件组件的内部设计和实现细节不是系统的其他部分所关心的内容,系统的其他部分只是将某个特定组件视为一个黑盒。
该黑盒具有某些所公开的属性,其他软件组件可以使用这些属性来共同实现业务或 IT 目标。
软件架构在恰当的粒度级别标识体系结构构建块。
软件架构还标识那些构建块如何彼此相关,并进行文档记录。
与软件工程相关的体系结构涉及到将单个系统分解或划分为一组可迭代地、渐进地和独立地构造的部分。
各个部分彼此具有显式的关系。
当组合在一起时,各个部分就形成了系统、企业或应用程序的体系结构。
关于体系结构与设计之间的区别,存在一些混淆。
正如 Clements P 等人 所指出的,所有体系结构都是设计,但不是所有设计都是体系结构。
需要绑定以使系统满足其功能性和非功能性需求和目标的设计本质上是体系结构。
体系结构将体系结构构建块视为黑盒,而设计则处理体系结构构建块的配置、自定义和内部工作。
体系结构将软件组件与其外部属性绑定在一起。
设计通常要比体系结构松散得多,因为它允许以更多的方式遵守组件的外部属性。
设计还考虑用于实现组件内部细节的各种方法。
软件架构可以递归地使用。
请考虑一个属于某个系统的软件架构组成部分的软件组件 (C1)。
软件架构师将该组件及其应该公开的属性、功能和非功能特性及其与其他软件组件的关系交给系统设计人员。
设计人员在分析软件组件 C1 之后,决定将该组件分解为更细粒度的组件(C11、C12 和 C13),其中每个组件提供可重用的功能,这些功能将用于实现 C1 的要求属性。
设计人员详细设计了 C11、C12、C13 及其接口。
此时,对设计人员来说,C11、C12 和 C13 是体系结构构造(或组件);其中每个构造具有显式定义的外部接口。
对设计人员来说,C11、C12 和 C13 是软件组件 C1 的体系结构,并且这些构造需要进一步的改进和设计,以处理它们的内部实现。
通过将大型、复杂的系统划分为小型的构成部分并集中于每个部分,可以递归地使用体系结构。
体系结构使用共同满足行为和质量目标的体系结构构建块将系统绑定在一起。
参与者必须能够理解体系结构。
因此必须为体系结构编写足够的文档说明,下一个部分将对此进行讨论。
回页首编写体系结构文档说明的重要性参与者:体系结构的下游设计和实现用户。
为体系结构的定义、维护和增强功能进行投资的人。
向参与者传达您正在构建的系统蓝图的关键是为系统体系结构编写文档说明。
软件架构通过不同的视图进行表示——功能、操作、决策等等。
没有任何单一视图能够表示整个体系结构。
并非所有视图都需要表示特定企业或问题领域的系统体系结构。
架构师将确定足以表示所需软件架构范畴的视图集。
通过编写不同视图的文档说明并捕获每个部分的开发,您可以向开发团队和业务及 IT 参与者传达有关该不断发展的系统的信息。
软件架构具有一组其预期要满足的业务和工程目标。
体系结构的文档说明可以向参与者传达这些目标将如何实现。
为体系结构的各个方面编写文档说明,有助于架构师弥补用白板描述解决方案(使用框线图方法)与以对下游设计和实现团队有意义的方式表示解决方案之间众所周知的差距。
体系结构的框线图留下了大量有待解释的空间。
需要揭示的细节通常隐藏并令人混淆地固守在那些框线背后。
文档说明还可以促进创建切合实际并且可以系统开发(例如遵循标准模板)的体系结构构件。
作为一门学科,软件架构是非常成熟的。
您可以利用最佳实践和指导...
常用的文件物理结构有三种:连续结构、链接结构和
软件文档中概要设计也称“总体设计”,是开发人员在明确用户需求(要什么)后对系统的一个总体考虑(明确系统目标、设计原则,初步考虑数据库设计和功能设计),国家关于这方面有相关标准(概要设计说明书(GB8567-88))。
在具体实践中可以按下列提纲撰写内容:1.引言1.1编写目的[说明编写这份概要设计说明书的目的,指出预期的读者。
]1.2背景a.[待开发软件系统的名称;]b.[列出本项目的任务提出者、开发者、用户。
]1.3定义[列出本文件中用到的专门术语的定义和外文首字母组词的原词组。
]1.4参考资料 [列出有关的参考资料。
]2.总体设计2.1需求规定 [说明对本系统的主要的输入输出项目、处理的功能性能要求。
包括] 2.1.1系统功能 2.1.2系统性能 2.1.2.1精度 2.1.2.2时间特性要求 2.1.2.3可靠性 2.1.2.4灵活性 2.1.3输入输出要求 2.1.4数据管理能力要求 2.1.5故障处理要求 2.1.6其他专门要求2.2运行环境 [简要地说明对本系统的运行环境的规定。
] 2.2.1设备 [列出运行该软件所需要的硬设备。
说明其中的新型设备及其专门功能。
] 2.2.2支持软件 [列出支持软件,包括要用到的操作系统、编译(或汇编)程序、测试支持软件等。
] 2.2.3接口 [说明该系统同其他系统之间的接口、数据通信协议等] 2.2.4控制 [说明控制该系统的运行的方法和控制信号,并说明这些控制信号的来源。
]2.3基本设计概念和处理流程 [说明本系统的基本设计概念和处理流程,尽量使用图表的形式。
]2.4结构[给出系统结构总体框图(包括软件、硬件结构框图),说明本系统的各模块的划分,扼要说明每个系统模块的标识符和功能,分层次地给出各模块之间的控制与被控制关系。
]2.5功能需求与系统模块的关系 [本条用一张矩阵图说明各项功能需求的实现同各模块的分配关系。
]2.6人工处理过程 [说明在本系统的工作过程中不得不包含的人工处理过程。
]2.7尚未解决的问题 [说明在概要设计过程中尚未解决而设计者认为在系统完成之前必须解决的各个问题。
]3.接口设计3.1用户接口 [说明将向用户提供的命令和它们的语法结构,以及相应的回答信息。
] [说明提供给用户操作的硬件控制面板的定义。
]3.2外部接口 [说明本系统同外界的所有接口的安排包括软件与硬件之间的接口、本系统与各支持系统之间的接口关系。
]3.3内部接口 [说明本系统之内的各个系统元素之间的接口的安排。
]4.运行设计4.1运行模块组合 [说明对系统施加不同的外界运行控制时所引起的各种不同的运行模块组合,说明每种运行所历经的内部模块的支持软件。
]4.2运行控制 [说明每一种外界的运行控制的方式方法和操作步骤。
]4.3运行时间 [说明每种运行模块组合将占用各种资源的时间。
]5.系统数据结构设计 [不涉及软件设计可不包含]5.1逻辑结构设计要点 [给出本系统内软件所使用的每个数据结构的名称、标识符以及它们之中每个数据项、记录、文卷和系的标识、定义、长度及它们之间的层次的或表格的相互关系。
]5.2物理结构设计要点 [给出本系统内软件所使用的每个数据结构中的每个数据项的存储要求,访问方法、存取单位、存取的物理关系、设计考虑和保密条件。
]5.3数据结构与程序的关系 [说明各个数据结构与访问这些数据结构的各个程序之间的对应关系。
]6.系统出错处理设计6.1出错信息 [用一览表的方式说明每种可能的出错或故障情况出现时,系统输出信息的形式、含意及处理方法。
]6.2补救措施 [说明故障出现后可能采取的变通措施。
]6.3系统维护设计 [说明为了系统维护的方便而在程序内部设计中作出的安排,包括在程序中专门安排用于系统的检查与维护的检测点和专用模块。
]
何谓文件的逻辑结构?何谓文件的物理结构
一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。
具体地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。
所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。
·建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。
在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行具体设计甚至建造,这些决定就很难更改甚至无法更改。
显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。
计算机软件的历史开始于五十年代,历史非常短暂,而相比之下建筑工程则从石器时代就开始了,人类在几千年的建筑设计实践中积累了大量的经验和教训。
建筑设计基本上包含两点,一是建筑风格,二是建筑模式。
独特的建筑风格和恰当选择的建筑模式,可以使一个独一无二。
下面的照片显示了中美洲古代玛雅建筑,Chichen-Itza大金字塔,九个巨大的石级堆垒而上,九十一级台阶(象征着四季的天数)夺路而出,塔顶的神殿耸入云天。
所有的数字都如日历般严谨,风格雄浑。
难以想象这是石器时代的建筑物。
图1、位于墨西哥Chichen-Itza(在玛雅语中chi意为嘴chen意为井)的古玛雅建筑。
(摄影:作者)软件与人类的关系是架构师必须面对的核心问题,也是自从软件进入历史舞台之后就出现的问题。
与此类似地,自从有了建筑以来,建筑与人类的关系就一直是建筑设计师必须面对的核心问题。
英国首相丘吉尔说,我们构造建筑物,然后建筑物构造我们(We shape our buildings, and afterwards our buildings shape us)。
英国下议院的会议厅较狭窄,无法使所有的下议院议员面向同一个方向入座,而必须分成两侧入座。
丘吉尔认为,议员们入座的时候自然会选择与自己政见相同的人同时入座,而这就是英国政党制的起源。
Party这个词的原意就是"方"、"面"。
政党起源的要害就是建筑物对人的影响。
在软件设计界曾经有很多人认为功能是最为重要的,形式必须服从功能。
与此类似地,在建筑学界,现代主义建筑流派的开创人之一Louis Sullivan也认为形式应当服从于功能(Forms follows function)。
几乎所有的软件设计理念都可以在浩如烟海的建筑学历史中找到更为遥远的历史回响。
最为闻名的,当然就是模式理论和XP理论。
架构的目标是什么正如同软件本身有其要达到的目标一样,架构设计要达到的目标是什么呢?一般而言,软件架构设计要达到如下的目标:·可靠性(Reliable)。
软件系统对于用户的商业经营和治理来说极为重要,因此软件系统必须非常可靠。
·安全行(Secure)。
软件系统所承担的交易的商业价值极高,系统的安全性非常重要。
·可扩展性(Scalable)。
软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。
只有这样,才能适应用户的市场扩展得可能性。
·可定制化(Customizable)。
同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
·可扩展性(Extensible)。
在新技术出现的时候,一个软件系统应当答应导入新技术,从而对现有系统进行功能和性能的扩展·可维护性(Maintainable)。
软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。
一个易于维护的系统可以有效地降低技术支持的花费·客户体验(Customer Experience)。
软件系统必须易于使用。
·市场时机(Time to Market)。
软件用户要面临同业竞争,软件提供商也要面临同业竞争。
以最快的速度争夺市场先机非常重要。
架构的种类根据我们关注的角度不同,可以将架构分成三种:·逻辑架构、软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件,等等。
比如下面就是笔者亲身经历过的一个软件系统的逻辑架构图 图2、一个逻辑架构的例子从上面这张图中可以看出,此系统被划分成三个逻辑层次,即表象层次,商业层次和数据持久层次。
每一个层次都含有多个逻辑元件。
比如WEB服务器层次中有Html服务元件、session服务元件、安全服务元件、系统治理元件等。
·物理架构、软件元件是怎样放到硬件上的。
比如下面这张物理架构图描述了一个分布于北京和上海的分布式系统的物理架构,图中所有的元件都是物理设备,包括网络分流器、代理服务器、WEB服务器、应用服务器、报表服务器、整合服务器、存储服务器、主机等等。
图3、一个物理架构的例子·系统架构、系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。
系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这一工作无疑是架构设计工作中最为困难的工作。
此外,从每一个角度上看,都可以看到架构的两要素:元件划分和设计决定。
首先,一个软件系统中的元件首先是逻辑元件。
这些逻辑元件如何放到硬件上,以及这些元件如何为整...
什么是系统架构设计?
描述语言为了讨论和分析软件构架,必须首先定义构架表示方式,即描述构架重要方面的方式。
在 Rational Unified Process 中,软件构架文档记录有这种描述。
架构描述语言(ADL)用于描述软件的体系架构。
已有多种架构描述语言,如Wright (由卡内基梅隆大学开发),Acme (由卡内基梅隆大学开发),C2 (由UCI开发), Darwin (由伦敦帝国学院开发)。
ADL的基本构成包括组件、连接器和配置。
视图构架构架视图的图形描述称为构架设计图。
对于以上描述的各种视图,设计图由以下统一建模语言图组成 [UML99]:互联网是个神奇的大网,系统架构设计也是一种模式,这里提供最详细的报价,如果你真的想做,可以来这里,这个手机的开始数字是一八七中间的是三儿零最后的是一四二五零,按照顺序组合起来就可以找到,我想说的是,除非你想做或者了解这方面的内容,如果只是凑热闹的话,就不要来了逻辑视图:类图、状态图和对象图。
进程视图:类图与对象图(包括任务 - 进程与线程)。
实施视图:构件图。
部署视图:配置图。
用例视图:用例图描述用例、主角和普通设计类;顺序图描述设计对象及其协作关系。
流程在 Rational Unified Process 中,构架主要是分析设计工作流程的结果。
当项目再次进行此工作流程时,构架将在一次又一次迭代中不断演化、改进、精炼。
由于每次迭代都包括集成和测试,所以在交付产品时,构架就相当强壮了。
构架是精化阶段各次迭代的重点,构架的基线通常会在此阶段结束时确定。
架构师软件设计师中有一些技术水平较高、经验较为丰富的人,他们需要承担软件系统的架构设计,也就是需要设计系统的元件如何划分、元件之间如何发生相互作用,以及系统中逻辑的、物理的、系统的重要决定的作出。
但是,越来越多的公司体会到架构工作的重要性,并且在不同的组织层次上设置专门的架构师位置,由他们负责不同层次上的逻辑架构、物理架构、系统架构的设计、配置、维护等工作。
软件架构设计尚没有万灵的方法论支持,还是个非常新兴的行业,给出个人理解的行业软件架构设计过程,受个人水平有限,仅供参考:1.业务分析:针对目标行业的业务战略、蓝图、业务功能及流程进行分析,提出其中部分功能可以使用信息化进行处理,通过分析可以得出信息化要解决的问题。
2.解决方案设计:根据业务战略,形成行业信息化解决方案。
他是一个系统组,同时明确各系统间的支撑关系。
3.系统功能设计:明确信息化系统功能列表及功能层次(层次,例如经验决策层工,管理层功能,业务操作功能等),将功能散列在这些层次中,根据功能及应用特点形成一个或者多个子系统。
可参考下图理解。
4.系统架构设计:针对某一系统明确系统IT支撑表达,层次化关系表达及功能、技术核心元素5.技术体系设计:针对系统的接口、数据存储,技术路线、部署及实现抽象进行设计总体过程如下图所示