系统的体系结构描述了其主要组件,它们的关系(结构)以及它们如何相互作用。软件架构和设计包括几个促成因素,例如业务战略、质量属性、人力动态、设计和 IT 环境。
我们可以将软件架构和设计分为两个不同的阶段:软件架构和软件设计。在 体系结构 中,非功能性决策由功能需求进行转换和分离。在设计中,功能要求得到满足。
软件架构
架构是 系统的蓝图 。它提供了一个抽象来管理系统的复杂性,并在组件之间建立通信和协调机制。
软件设计
软件设计提供了一个 设计计划 ,描述了系统的元素,它们如何适应,并协同工作以满足系统的要求。制定设计计划的目标如下:
-
协商系统要求,并与客户、营销和管理人员设定期望。
-
在开发过程中充当蓝图。
-
指导实施任务,包括详细设计、编码、集成和测试。
它排在详细设计、编码、集成和测试之前,排在领域分析、需求分析和风险分析之后。
架构的目标
体系结构的主要目标是确定影响应用程序结构的要求。精心布置的体系结构可降低与构建技术解决方案相关的业务风险,并在业务和技术需求之间架起一座桥梁。
其他一些目标如下 -
-
公开系统的结构,但隐藏其实现细节。
-
实现所有用例和场景。
-
尝试满足各种利益相关者的要求。
-
处理功能和质量要求。
-
减少所有权目标,提高组织的™市场地位。
-
提高系统提供的质量和功能。
-
提高外部对组织或系统的信心。
局限性
软件架构仍然是软件工程中的一门新兴学科。它具有以下限制 -
-
缺乏表示架构的工具和标准化方法。
-
缺乏分析方法来预测体系结构是否会导致满足要求的实现。
-
缺乏对架构设计对软件开发重要性的认识。
-
对软件架构师的角色缺乏了解,利益相关者之间的沟通不畅。
-
缺乏对设计过程、设计经验和设计评价的了解。
软件架构师的角色
软件架构师提供技术团队可以为整个应用程序创建和设计的解决方案。软件架构师应具备以下领域的专业知识:
设计专长
-
软件设计专家,包括面向对象设计、事件驱动设计等多种方法和途径。
-
领导开发团队并协调开发工作,以确保设计的完整性。
-
应该能够审查设计方案并在他们之间进行权衡。
领域专业知识
-
正在开发的系统的专家和软件演进计划。
-
协助需求调查过程,确保完整性和一致性。
-
协调正在开发的系统的域模型的定义。
技术专长
-
有助于系统实施的可用技术专家。
-
协调编程语言、框架、平台、数据库等的选择。
方法学专业知识
-
SDLC(软件开发生命周期)期间可能采用的软件开发方法专家。
-
选择有助于整个团队的适当开发方法。
软件架构师的隐藏角色
-
促进团队成员之间的技术工作,并加强团队中的信任关系。
-
分享知识并拥有丰富经验的信息专家。
-
保护团队成员免受外部力量的影响,这些力量会分散他们的注意力并降低项目的价值。
架构师的可交付成果
-
一套清晰、完整、一致且可实现的功能目标
-
系统的功能描述,至少具有两层分解
-
系统概念
-
系统形式的设计,至少具有两层分解
-
时间、操作员属性以及实施和操作计划的概念
-
确保遵循功能分解并控制界面形式的文档或流程
质量属性
质量是衡量卓越或没有缺陷或缺陷的状态的指标。质量属性是独立于系统功能的系统属性。
实现质量属性可以更轻松地区分好系统与坏系统。属性是影响运行时行为、系统设计和用户体验的总体因素。
它们可以分类为 -
静态质量属性
反映与体系结构、设计和源代码直接相关的系统和组织的结构。它们对最终用户是不可见的,但会影响开发和维护成本,例如:模块化、可测试性、可维护性等。
动态质量属性
反映系统在执行过程中的行为。它们与系统的™体系结构、设计、源代码、配置、部署参数、环境和平台直接相关。
它们对最终用户可见,并在运行时存在,例如吞吐量、健壮性、可扩展性等。
质量方案
质量方案指定如何防止故障变成故障。它们可以根据其属性规格分为六个部分 -
-
源 − 产生刺激的内部或外部实体,例如人员、硬件、软件或物理基础设施。
-
刺激 − 到达系统时需要考虑的条件。
-
环境 − 刺激在特定条件下发生。
-
工件 - 整个系统或其某些部分,如处理器、通信通道、持久存储、进程等。
-
响应 − 在刺激到达后进行的活动,例如检测故障、从故障中恢复、禁用事件源等。
-
响应度量 − 应测量发生的 响应 ,以便可以测试需求。
常见质量属性
下表列出了软件架构必须具备的常见质量属性 -
类别 |
质量属性 |
描述 |
设计品质 |
概念完整性 |
定义整体设计的一致性和连贯性。这包括组件或模块的设计方式。 |
可维护性 |
系统能够在一定程度上轻松进行更改。 |
可 重用 |
定义组件和子系统适合在其他应用程序中使用的功能。 |
运行时质量 |
互操作性 |
一个系统或不同系统通过与外部各方编写和运行的其他外部系统进行通信和交换信息来成功运行的能力。 |
可管理性 |
定义系统管理员管理应用程序的难易程度。 |
可靠性 |
系统随时间推移保持运行的能力。 |
可扩展性 |
系统能够在不影响系统性能的情况下处理负载增加,也能够轻松扩展。 |
安全 |
系统防止设计用途之外的恶意或意外操作的能力。 |
性能 |
指示系统在给定时间间隔内执行任何操作的响应能力。 |
可用性 |
定义系统正常运行和工作的时间比例。它可以衡量为预定义时间段内系统总停机时间的百分比。 |
系统质量 |
保障性 |
当系统无法正常工作时,系统能够提供有助于识别和解决问题的信息。 |
测试 |
衡量为系统及其组件创建测试标准的难易程度。 |
用户质量 |
可用性 |
通过直观性定义应用程序满足用户和使用者要求的程度。 |
架构质量 |
正确性 |
满足系统所有要求的责任。 |
非运行时质量 |
可移植性 |
系统能够在不同的计算环境下运行。 |
完整性 |
能够使单独开发的系统组件正确协同工作。 |
可修改性 |
每个软件系统都可以轻松适应对其软件的更改。 |
业务质量属性 |
成本和进度 |
系统的成本与上市时间、预期项目寿命和遗留物的利用率有关。 |
市场化 |
在市场竞争中使用制度 |
|