📜  软件体系结构和设计简介

📅  最后修改于: 2020-12-14 03:24:06             🧑  作者: Mango


系统的体系结构描述了其主要组件,它们之间的关系(结构)以及它们之间如何交互。软件体系结构和设计包括几个促成因素,例如业务战略,质量属性,人员动态,设计和IT环境。

软件架构类型

我们可以将软件体系结构和设计分为两个不同的阶段:软件体系结构和软件设计。在体系结构中,非功能性决策由功能需求强制转换和分离。在设计中,功能要求得以实现。

软件架构

体系结构是系统蓝图。它提供了一种抽象来管理系统复杂性并在组件之间建立通信和协调机制。

  • 它定义了一种结构化的解决方案,可以满足所有技术和运营要求,同时优化性能和安全性等通用质量属性。

  • 此外,它涉及与软件开发有关的组织方面的一系列重要决策,并且这些决策中的每一个都会对质量,可维护性,性能以及最终产品的整体成功产生重大影响。这些决定包括-

    • 选择组成系统的结构元素及其界面。

    • 在这些元素之间的协作中指定的行为。

    • 将这些结构和行为元素组成大型子系统。

    • 体系结构决策符合业务目标。

    • 建筑风格指导组织。

软件设计

软件设计提供了一个设计计划,该计划描述了系统的元素,它们如何适合并共同工作以满足系统的需求。制定设计计划的目标如下-

  • 与系统需求进行谈判,并与客户,市场营销和管理人员建立期望。

  • 在开发过程中充当蓝图。

  • 指导实施任务,包括详细的设计,编码,集成和测试。

它在详细设计,编码,集成和测试之前,以及在域分析,需求分析和风险分析之后。

软件设计

建筑目标

该体系结构的主要目标是确定影响应用程序结构的需求。架构合理的架构可减少与构建技术解决方案相关的业务风险,并在业务和技术要求之间架起一座桥梁。

其他一些目标如下-

  • 公开系统的结构,但隐藏其实现细节。

  • 实现所有用例和方案。

  • 尝试解决各种利益相关者的要求。

  • 处理功能和质量要求。

  • 降低所有权的目标并改善组织的市场地位。

  • 改善系统提供的质量和功能。

  • 提高外部对组织或系统的信心。

局限性

软件体系结构仍然是软件工程中的新兴学科。它具有以下限制-

  • 缺乏表示架构的工具和标准化方法。

  • 缺乏分析方法来预测体系结构是否会导致实现符合要求的分析方法。

  • 缺乏对体系结构设计对软件开发的重要性的认识。

  • 缺乏对软件架构师角色的了解,以及利益相关者之间的沟通不畅。

  • 缺乏对设计过程的了解,设计经验和设计评估。

软件架构师的角色

软件架构师提供了一个解决方案,技术团队可以为整个应用程序创建和设计该解决方案。软件架构师应在以下领域具有专业知识-

设计专长

  • 软件设计专家,包括多种方法和方法,例如面向对象的设计,事件驱动的设计等。

  • 领导开发团队并协调开发工作,以确保设计的完整性。

  • 应该能够审查设计建议并在它们之间进行权衡。

领域专长

  • 正在开发的系统专家以及软件开发计划。

  • 协助需求调查过程,确保完整性和一致性。

  • 协调要开发的系统的域模型的定义。

技术专长

  • 有助于系统实施的可用技术专家。

  • 协调编程语言,框架,平台,数据库等的选择。

方法学专长

  • SDLC(软件开发生命周期)中可能采用的软件开发方法论专家。

  • 选择对整个团队有帮助的合适的开发方法。

软件架构师的隐藏角色

  • 促进团队成员之间的技术工作,并增强团队中的信任关系。

  • 共享知识并拥有丰富经验的信息专家。

  • 保护团队成员免受外力影响,这些外力会分散他们的注意力,并给项目带来较少的价值。

建筑师的成果

  • 清晰,完整,一致且可实现的功能目标集

  • 系统的功能描述,至少有两层分解

  • 系统的概念

  • 系统形式的设计,至少具有两层分解

  • 时间,运算符属性以及实施和操作计划的概念

  • 确保遵循功能分解并控制接口形式的文档或过程

质量属性

质量是衡量卓越水平或无缺陷或无缺陷状态的一种度量。质量属性是与系统功能分开的系统属性。

实施质量属性使区分好系统和坏系统变得更加容易。属性是影响运行时行为,系统设计和用户体验的总体因素。

他们可以分类为-

静态质量属性

反映与体系结构,设计和源代码直接相关的系统和组织的结构。它们对于最终用户是不可见的,但是会影响开发和维护成本,例如:模块化,可测试性,可维护性等。

动态质量属性

反映系统在执行过程中的行为。它们与系统的体系结构,设计,源代码,配置,部署参数,环境和平台直接相关。

它们对于最终用户是可见的,并且在运行时存在,例如吞吐量,健壮性,可伸缩性等。

质量方案

质量方案指定了如何防止故障成为故障。根据其属性规范,它们可以分为六个部分-

  • 来源-产生刺激的内部或外部实体,例如人员,硬件,软件或物理基础结构。

  • 刺激-到达系统时需要考虑的条件。

  • 环境-刺激在某些条件下发生。

  • 工件-整个系统或其一部分,例如处理器,通信通道,持久性存储,进程等。

  • 响应-刺激到达后进行的活动,例如检测故障,从故障中恢复,禁用事件源等。

  • 响应措施-应该测量已发生的响应,以便可以测试需求。

通用质量属性

下表列出了软件体系结构必须具有的常见质量属性-

Category Quality Attribute Description
Design Qualities Conceptual Integrity Defines the consistency and coherence of the overall design. This includes the way components or modules are designed.
Maintainability Ability of the system to undergo changes with a degree of ease.
Reusability Defines the capability for components and subsystems to be suitable for use in other applications.
Run-time Qualities Interoperability Ability of a system or different systems to operate successfully by communicating and exchanging information with other external systems written and run by external parties.
Manageability Defines how easy it is for system administrators to manage the application.
Reliability Ability of a system to remain operational over time.
Scalability Ability of a system to either handle the load increase without impacting the performance of the system or the ability to be readily enlarged.
Security Capability of a system to prevent malicious or accidental actions outside of the designed usages.
Performance Indication of the responsiveness of a system to execute any action within a given time interval.
Availability Defines the proportion of time that the system is functional and working. It can be measured as a percentage of the total system downtime over a predefined period.
System Qualities Supportability Ability of the system to provide information helpful for identifying and resolving issues when it fails to work correctly.
Testability Measure of how easy it is to create test criteria for the system and its components.
User Qualities Usability Defines how well the application meets the requirements of the user and consumer by being intuitive.
Architecture Quality Correctness Accountability for satisfying all the requirements of the system.
Non-runtime Quality Portability Ability of the system to run under different computing environment.
Integrality Ability to make separately developed components of the system work correctly together.
Modifiability Ease with which each software system can accommodate changes to its software.
Business quality attributes Cost and schedule Cost of the system with respect to time to market, expected project lifetime & utilization of legacy.
Marketability Use of system with respect to market competition.