什么是软件结构设计(软件结构设计的基本原理是什么)

设计软件035

本篇文章给大家谈谈什么是软件结构设计,以及软件结构设计的基本原理是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享什么是软件结构设计的知识,其中也会对软件结构设计的基本原理是什么进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

什么是软件架构?有没有具体解释?

软件架构

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。

软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。

软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。

在“软件构架简介”中,David GArlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”[GS93]

但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”[IEEE98]。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。

在 Rational Unified ProcESs 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。

从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管理软件产品的高级设计。软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。

是一般而言,软件系统的架构(ArchitECture)有两个要素:

·它是一个软件系统从整体到部分的最高层次的划分。

一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。

详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(TASk-flow)。所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。

·建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。

在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。

历史

早在1960年代,诸如E·W·戴克斯特拉就已经涉及软件架构这个概念了。自1990年代以来,部分由于在 Rational Software Corporation 和MiCROSoft内部的相关活动,软件架构这个概念开始越来越流行起来。

卡内基梅隆大学和加州大学埃尔文分校在这个领域作了很多研究。卡内基·梅隆大学的Mary Shaw和David Garlan于1996年写了一本叫做 Software Architecture perspective on an emerging DIscipline的书,提出了软件架构中的很多概念,例如软件组件、连接器、风格等等。 加州大学埃尔文分校的软件研究院所做的工作则主要集中于架构风格、架构描述语言以及动态架构。

计算机软件的历史开始于五十年代,历史非常短暂,而相比之下建筑工程则从石器时代就开始了,人类在几千年的建筑设计实践中积累了大量的经验和教训。建筑设计基本上包含两点,一是建筑风格,二是建筑模式。独特的建筑风格和恰当选择的建筑模式,可以使一个独一无二。

下面的照片显示了中美洲古代玛雅建筑,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 中,软件构架文档记录有这种描述。

构架视图

我们决定以多种构架视图来表示软件构架。每种构架视图针对于开发流程中的涉众(例如最终用户、设计人员、管理人员、系统工程师、维护人员等)所关注的特定方面。

构架视图显示了软件构架如何分解为构件,以及构件如何由连接器连接来产生有用的形式 [PW92],由此记录主要的结构设计决策。这些设计决策必须基于需求以及功能、补充和其他方面的约束。而这些决策又会在较低层次上为需求和将来的设计决策施加进一步的约束。

典型的构架视图集

构架由许多不同的构架视图来表示,这些视图本质上是以图形方式来摘要说明“在构架方面具有重要意义”的模型元素。在 Rational Unified Process 中,您将从一个典型的视图集开始,该视图集称为“4+1 视图模型”[KRU95]。它包括:

用例视图:包括用例和场景,这些用例和场景包括在构架方面具有重要意义的行为、类或技术风险。它是用例模型的子集。

逻辑视图:包括最重要的设计类、从这些设计类到包和子系统的组织形式,以及从这些包和子系统到层的组织形式。它还包括一些用例实现。它是设计模型的子集。

实施视图:包括实施模型及其从模块到包和层的组织形式的概览。 同时还描述了将逻辑视图中的包和类向实施视图中的包和模块分配的情况。它是实施模型的子集。

进程视图:包括所涉及任务(进程和线程)的描述,它们的交互和配置,以及将设计对象和类向任务的分配情况。只有在系统具有很高程度的并行时,才需要该视图。在 Rational Unified Process 中,它是设计模型的子集。

配置视图:包括对最典型的平台配置的各种物理节点的描述以及将任务(来自进程视图)向物理节点分配的情况。只有在分布式系统中才需要该视图。它是部署模型的一个子集。

构架视图记录在软件构架文档中。您可以构建其他视图来表达需要特别关注的不同方面:用户界面视图、安全视图、数据视图等等。对于简单系统,可以省略 4+1 视图模型中的一些视图。

构架重点

虽然以上视图可以表示系统的整体设计,但构架只同以下几个具体方面相关:

模型的结构,即组织模式,例如分层。

基本元素,即关键用例、主类、常用机制等,它们与模型中的各元素相对。

几个关键场景,它们表示了整个系统的主要控制流程。

记录模块度、可选特征、产品线状况的服务。

构架视图在本质上是整体设计的抽象或简化,它们通过舍弃具体细节来突出重要的特征。在考虑以下方面时,这些特征非常重要:

系统演进,即进入下一个开发周期。

在产品线环境下复用构架或构架的一部分。

评估补充质量,例如性能、可用性、可移植性和安全性。

向团队或分包商分配开发工作。

决定是否包括市售构件。

插入范围更广的系统。

构架模式

构架模式是解决复发构架问题的现成形式。构架框架或构架基础设施(中间件)是可以在其上构建某种构架的构件集。许多主要的构架困难应在框架或基础设施中进行解决,而且通常针对于特定的领域:命令和控制、MIS、控制系统等等。

构架模式示例

[BUS96] 根据构架模式最适用的系统的特征将其分类,其中一个类别处理更普遍的结构问题。下表显示了 [BUS96] 中所提供的类别和这些类别所包含的模式。

类别 模式

结构 层

管道和过滤器

黑板

分布式系统 代理

交互系统 模型-视图-控制器

表示-抽象-控制

自适应系统 反射

微核

软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。

在“软件构架简介”中,David Garlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。”[GS93]

但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”[IEEE98]。构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。

在 Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。

为阐明其含义,下面将详述其中的两个;完整说明请参见 [BUS96]。模式以下列广泛使用的形式来表示:

模式名

环境

问题

影响,描述应考虑的不同问题方面

解决方案

基本原理

结果环境

示例

模式名

环境

需要进行结构分解的大系统。

问题

必须处理不同抽象层次的问题的系统。例如:硬件控制问题、常见服务问题和针对于不同领域的问题。最好不要编写垂直构件来处理所有抽象层次的问题。否则要在不同的构件中多次处理相同的问题(可能会不一致)。

影响

系统的某些部分应当是可替换的

构件中的变化不应波动

相似的责任应归为一组

构件大小 -- 复杂构件可能要进行分解

解决办法

将系统分成构件组,并使构件组形成层叠结构。使上层只使用下层(决不使用上层)提供的服务。尽量不使用非紧邻下层提供的服务(不跳层使用服务,除非中间层只添加通过构件)。

示例:

1. 通用层

严格的分层构架规定设计元素(类、构件、包、子系统)只能使用下层提供的服务, 服务可以包括事件处理、错误处理、数据库访问等等。 相对于记录在底层的原始操作系统级调用,它包括更明显的机制。

2. 业务系统层

上图显示了另一个分层示例,其中有垂直特定应用层、水平层和基础设施层。注意:此处的目标是采用非常短的业务“烟囱”并实现各种应用程序间的通用性。 否则,就可能有多个人解决同一问题,从而导致潜在的分歧。

有关该模式的深入讨论,请参见指南:分层。

模式名

黑板

环境

没有解决问题的确定方法(算法)或方法不可行的领域。例如 AI 系统、语音识别和监视系统。

问题

多个问题解决顾问(知识顾问)必须通过协作来解决他们无法单独解决的问题。各顾问的工作结果必须可以供所有其他顾问访问,使他们可以评估自己是否可以参与解决方案的查找并发布其工作结果。

影响

知识顾问参与解决问题的顺序不是确定的,这可能取决于问题解决策略

不同顾问的输入(结果或部分解决方案)可能有不同的表示方式

各顾问并不直接知道对方的存在,但可以评估对方发布的工作

解决办法

多名知识顾问都可访问一个称为“黑板”的共享数据库。黑板提供监测和更新其内容的接口。控制模块/对象激活遵循某种策略的顾问。激活后,顾问查看黑板,以确定它是否能参与解决问题。如果顾问决定它可以参与,控制对象就可以允许顾问将其部分(或最终)解决方案放置于黑板上。

示例:

以上显示了使用 UML 建模的结构或静态视图。 它将成为参数化协作的一部分,然后会绑定到实参上对模式进行实例化。

构架风格

软件构架(或仅是构架视图)可以具有名为构架风格的属性,该属性减少了可选的形式,并使构架具有一定程度的一致性。样式可以通过一组模式或通过选择特定构件或连接器作为基本构件来定义。对给定系统,某些样式可作为构架描述的一部分记录在构架风格指南(Rational Unified Process 中设计指南文档的一部分)中。样式在构架的可理解性与完整性方面起着主要的作用。

构架设计图

构架视图的图形描述称为构架设计图。对于以上描述的各种视图,设计图由以下统一建模语言图组成 [UML99]:

逻辑视图:类图、状态机和对象图。

进程视图:类图与对象图(包括任务 - 进程与线程)。

实施视图:构件图。

部署视图:配置图。

用例视图:用例图描述用例、主角和普通设计类;顺序图描述设计对象及其协作关系。

构架设计流程

在 Rational Unified Process 中,构架主要是分析设计工作流程的结果。当项目再次进行此工作流程时,构架将在一次又一次迭代中不断演化、改进、精炼。由于每次迭代都包括集成和测试,所以在交付产品时,构架就相当强壮了。构架是精化阶段各次迭代的重点,构架的基线通常会在此阶段结束时确定。

架构师

软体设计师中有一些技术水平较高、经验较为丰富的人,他们需要承担软件系统的架构设计,也就是需要设计系统的元件如何划分、元件之间如何发生相互作用,以及系统中逻辑的、物理的、系统的重要决定的作出。

这样的人就是所谓的架构师(Architect)。在很多公司中,架构师不是一个专门的和正式的职务。通常在一个开发小组中,最有经验的程序员会负责一些架构方面的工作。在一个部门中,最有经验的项目经理会负责一些架构方面的工作。

但是,越来越多的公司体认到架构工作的重要性,并且在不同的组织层次上设置专门的架构师位置,由他们负责不同层次上的逻辑架构、物理架构、系统架构的设计、配置、维护等工作。

什么是软件体系结构的设计模式?

MVC是当前流行的Web应用设计框架的实施标准,是软件工程中的一种软件架构模式[

]。它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),目的是实现一种动态和可持续的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的代码或功能重复利用成为可能。

在这种设计结构下,一个应用被分为三个部分:model、view和controller,每个部分负责不同的功能。根据用户界面(view)的操作完成对程序数据(model)的更新。将程序数据(model)改变及时反应到用户界面(view)上。也就是完成两个方向的动作。

什么是软件设计?

软件的设计概念应遵循以下几个方面:

一、 抽象: 我们必须把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。建议用数学语言来抽象事务和问题,因为数学是最好的抽象语言,并且它的本质就是抽象。

二、 模块化:将复杂的问题分解成可以管理的片断会更容易。将问题或事物分解并模块化这使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。

软件的设计原则应遵循以下几个方面:

一、 设计对于分析模型应该是可跟踪的:软件的模块可能被映射到多个需求上。

二、 设计结构应该尽可能的模拟实际问题。

三、 设计应该表现出一致性。

四、 不要把设计当成编写代码。

五、 在创建设计时就应该能够评估质量。

六、 评审设计以减少语义性的错误。

软件设计包括软件的结构设计,数据设计,接口设计和过程设计.

结构设计是指:定义软件系统各主要部件之间的关系

数据设计是指:将模型转换成数据结构的定义

接口设计是指:软件内部,软件和操作系统间以及软件和人之间如何通信

过程设计是指:系统结构部件转换成软件的过程描述

软件体系结构设计包含哪些内容

软件体系结构是具有一定形式的结构化元素,即构件的集合,包括处理构件、数据构件和连接构件。处理构件负责对数据进行加工,数据构件是被加工的信息,连接构件把体系结构的不同部分组组合连接起来。这一定义注重区分处理构件、数据构件和连接构件,这一方法在其他的定义和方法中基本上得到保持。

什么是软件设计呢?

你好,很高兴回答你的问题,

软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。

软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。将问题或事物分解并模块化使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。

软件设计即“…the process of applying various techniques and principles for the purpose of defining a device, a process or a system in sufficient detail to permit its physical realization. ”“ … 应用各种各样的技术和原理,并用它们足够详细的定义一个设备、一个程序或系统的物理实现的过程。 ”

对任意的工程产品或系统,开发阶段绝对的第一步是确定将来所要构建的制造原型或实体表现的目标构思。这个步骤是由多方面的直觉与判断力来共同决定的。这些方面包括构建类似模型的经验、一组引领模型发展的原则、一套启动质量评价的标准、以及重复修改直至设计最后定型的过程本身。计算机软件设计与其他工程学科相比还处在幼年时期,仍在不断变化中,例如更新的方法、更好的算法分析、以及理解力的显著进化。软件设计的方** 的出现也只有三十年多一点,仍然缺乏深度、适应性和定量性质,通常更多的与经典工程设计学科相联系。尽管如此,现今的软件技术已经存在、设计质量的标准也可使用、设计符号亦可以应用。带着这些意见,我们一起来看看什么有助于程序员们找到他们的软件涅盘 ( 天堂的意思 ) 。

软件设计包括软件的结构设计,数据设计,接口设计和过程设计。

结构设计是指:定义软件系统各主要部件之间的关系。

数据设计是指:将模型转换成数据结构的定义。

接口设计是指:软件内部,软件和操作系统间以及软件和人之间如何通信。

过程设计是指:系统结构部件转换成软件的过程描述。

小议软件架构设计要点

如何更好地进行软件架构设计 这是软件工程领域中一个永恒的重点话题 过去几十年来 国际软件工程界在软件架构设计方面已经获得了长足发展 大量图书 文章和文献记载了这方面的成熟经验与成果 软件架构设计往往是一件非常复杂的工作 涉及到很多细节和方方面面 可探讨的话题也非常之多 囿于篇幅限制 以下只能根据笔者个人理解 遴选出软件架构设计的个别要点 结合当前流行的敏捷软件工程思想 与大家分享一下自己在软件架构设计方面的心得和体会

架构决定成败

软件架构是软件产品 软件系统设计当中的主体结构和主要矛盾 任何软件都有架构 哪怕一段短小的HelloWorld程序 软件架构设计的成败决定了软件产品和系统研发的成败 软件架构自身所具有的属性和特点 决定了软件架构设计的复杂性和难度

这几年流行一个说法(管理谚语) 细节决定成败 这句话其实只说对了一半 细节确实很重要 很多项目 产品就输在细节的执行上 一方面 战术细节固然很重要 但另一方面 战略全局也同样重要 对应的我们可以说 战略决定成败 战略性失败 就好比下一盘围棋 局部下得再漂亮 再凌厉 如果罔顾大盘 己方连空都不够了 还有官子(细节)获胜的机会吗?必然是中盘告负

类似地 正确的软件架构设计 应该既包括战略全局上的设计 也包括战术细节(关键路径)上的设计 有一种错误的观点认为 软件架构设计只要分分层和包 画一个大体的轮廓草图 就完事了 这种 纸上谈兵 型的架构师行为是非常有害的 事实上 既然软件架构是软件建筑的主体结构 隐蔽工程 承重墙和要害部位 那么软件架构也必然要落实到实际的算法和代码 不但要有实现代码 还要包括对这部分架构进行测试的代码 以保证获得高质量的 满足各种功能和非功能质量属性要求的架构 除了完成概念 模型设计外 软件架构师一定要参与实际的编码 测试和调试 做一位真正的hands on practitioner 这已经成为了敏捷软件工程所倡导的主流文化

两个架构

我们在日常的软件产品和系统开发中 实际上会遇到两种 两个部分的软件架构 即待开发的应用部分的软件架构(简称 应用架构 ) 以及既有的基础平台部分的软件架构(简称 基础架构 ) 这两部分架构之间是互为依赖 相辅相成的关系 它们共同组成了整个软件产品和系统的架构

基础架构的例子包括 NET和J EE等主流的基础平台和各种公共应用框架 由基础库API 对象模型 事件模型 各种开发和应用的扩展规则等内容组成 我们只有熟悉基础架构的构造细节 应用机理 才能有效地开发出高质量 高性能的上层应用 然而 开发一个面向最终用户的软件应用系统和产品 仅仅掌握一般的计算机高级编程语言知识和基础平台架构 API的使用知识显然是不够的 我们还需要根据客户应用的类型和特点 在基础架构之上 设计出符合用户要求的高质量应用软件

熟悉OOA OOD抽象建模技术 设计原则以及架构模式和设计模式等等方法技术 不但有助于我们更好地理解和利用基础平台架构 也有助于我们设计开发出更高质量的应用软件架构

风险驱动 敏捷迭代的架构设计与开发

软件架构将随着软件产品和系统的生命周期而演化 其生命期往往超过了一个项目 一次发布 甚至有可能长达数年之久 因而软件架构无论对于客户还是开发商来说都是一项极其重要的资产

软件架构的设计应该遵循什么样的开发过程?或者说 有没有更好的 成熟的软件架构设计和开发过程?回答是 世纪的软件架构设计应该优先采用敏捷迭代的开发方式和方法 与传统做法不同 敏捷迭代开发主张软件架构采用演进式设计(evolutionary design) 一个软件产品或系统的架构是通过多次迭代 乃至多次发布 在开发生命周期中逐步建立和完善起来的

好的软件架构不是一蹴而就的 在架构设计开发过程中 我们应该尽量避免瀑布式思维 通过一个 架构设计阶段 来完成系统的架构设计乃至详细设计 然后再根据架构图纸和模型 在 编码实现阶段 按图索骥进行架构的编码与实现 这种传统做法的错误在于认为软件架构就是图纸上的模型 而不是真正可以高质量执行的源代码 几十年的软件工程实践表明 没有经过代码实现 测试 用户确认过的架构设计 往往会存在着不可靠的臆想 猜测和过度设计 过度工程 极易造成浪费和返工 导致较高的失败率

风险是任何可能阻碍和导致软件产品/系统研发失败的潜在因素和问题 软件架构是软件产品和系统研发的主要矛盾和主要技术风险 软件架构的质量决定了整个软件系统和产品的质量 不确定性往往是软件架构设计当中一种最大的潜在风险 因此 软件架构的设计与开发应该遵循风险驱动的原则 在整个开发生命周期内至始至终维护一张风险问题清单 随着迭代的前进 根据风险的实时动态变化 首先化解和处理最主要的架构风险 再依次化解和处理次要的架构风险

架构设计的可视化建模

软件架构设计的难度源于软件设计问题本身的复杂性 一个复杂的软件系统往往存在大量复杂的 难于被人类所理解的细节和不确定因素 抽象与建模是人类自诞生以来就已掌握的理解复杂事物的方法 因而人类所从事的软件设计工作本质上也是一个不断建模的过程 我们可以通过各种抽象的模型和视图 从各个不同层次 宏观和微观的角度来理解复杂的软件架构 以保证作出正确和有效的设计

有人认为 软件架构就是源代码(source codes) 以及 源代码就是设计 这种说法其实是片面的 什么是真正的软件?我们知道 最终可以在电脑上执行的真正的软件其实是二进制代码 和 借助编译器我们把高级编程语言翻译成底层的汇编语言 机器语言等 没有人能直接 完整地看到二进制程序在CPU上的实际运行状况(runtime) 人们大多只能通过各种调试工具 窗口视图等方式来间接地动态观察这些真正的软件的运行片段 因此 Java C# C++ 等等设计时(design time)源代码在本质上也是一种模型 虽然是一种经处理后可执行的静态模型 但显然它们并不是真实软件和软件架构的全部 可见 源代码模型(有时也叫实现模型)与UML模型其实都是软件架构的一种模型(逻辑反映) 差别就在于抽象层次的不同 完整的软件架构(建筑)不仅仅包括源代码(实现模型) 还包括了需求模型 分析模型 设计模型 实现模型和测试模型等等许多模型 软件架构本身就是一组模型的集合

UML SysML是当前国际上流行的软件/系统架构可视化建模语言 在编写实际的代码之前 利用包图 类图 活动图 交互图 状态图等等各种标准图形符号对软件架构进行建模 探讨和交流各种可行的设计方案 发现潜在的设计问题 保证具体编码实现之前抽象设计的正确性 被实践证明是一种非常有效和高效 敏捷的工作方式

架构设计的重用

重用(Reuse)是在软件工程实践中获得高效率 高质量产品和系统开发的一种基本手段和主要途径 通过有组织的 系统和有效的重用 我们往往可以获得 倍率以上的效率提升 而一个优秀的 有长久生命力的软件架构(比方主流的一些框架软件) 其本身或其组件被重用的次数越多 其体现的价值也就越大

软件重用有各种不同的范围 层次 粒度和类型 从函数重用 类重用 构件/组件重用 库(API)重用 到框架重用 架构重用 模式重用 再到软件设计知识 思想的重用等等 重用的效能和效果各有不同

软件工程经过几十年的发展 已经积累了大量的软件架构模式和设计模式 它们记载 蕴藏了大量成熟 已经验证的软件设计知识 思想和经验 我们平时对各种基础平台 主流框架和API的应用和调用 本身就是一种最为普遍的重用形式 而一个优秀 成熟的软件研发组织 必然会在日常开发中注意收集各种软件设计知识和经验 建立和维护基于架构模式和设计模式等内容的软件重用知识库 积极主动和频繁地运用各种软件模式来解决实际工程问题

框架(Framework)是一类具有高可重用度的软件 针对某一类应用或领域 它们具有非常灵活的 高度可扩展的软件架构 那么 如何才能设计出可重用的软件架构或其组件?借助于OOA OOD等抽象分析和设计技术是一种重要的方法 人们在实践中发现 往往越抽象的东西 其适应面也就越广 可重用度也就越高 相反 越具体的东西 其适应面也就越窄 可重用度也就越低 重用 意味着充分利用现成 既有的东西 成果来解决新问题或重复的问题 以 不变 应 万变 在软件架构设计中 应该主动地区分软件架构中的 不变 与 可变 之处 系统地管理好这些稳定点和变化点以适应未来的变化 这也是提高软件架构重用度 获得高质量框架设计的一种重要方法

架构设计的权衡

与其它所有工程行业一样 软件工程本质上也是一门讲究权衡的科学和艺术 软件架构设计的最难之处往往在于如何在各种相互竞争 矛盾的制约条件之下 作出巧妙的最佳权衡 软件架构设计的权衡水平 也是最能体现软件架构师的设计经验 能力和技巧的地方

在软件开发和软件架构的设计过程中 从选择平台 到选择语言 选择框架 选择设计模式 选择工具…等等 我们无时不刻都需要权衡 对各种候选项作出合理评判 在架构师带领下 软件研发团队往往还需要对近期目标与远期目标 质量与速度和效率 质量与成本 功能与性能 灵活性与复杂性…等等许多彼此矛盾的设计选项 因素和约束进行细致 小心和理性的权衡

lishixinzhi/Article/program/Java/gj/201311/27294

关于什么是软件结构设计和软件结构设计的基本原理是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 什么是软件结构设计的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于软件结构设计的基本原理是什么、什么是软件结构设计的信息别忘了在本站进行查找喔。