1 介绍

软件架构和设计有关的元素如下图 软件架构类型

1.1 软件架构

  • 软件架构描述了一个系统的蓝图
  • 定义了一个结构化的解决方案来满足所有的技术和操作需求,同时优化一些常见的质量参数(比如性能、安全性)
  • 包含一系列和软件开发组织有关的重要决策,而且每个决定对于最终产品的质量、可维护性、性能有重要的影响。决策包括
    • 组成系统的结构化元素和元素接口的选取
    • 上述元素之间合作的行为
    • 将上述结构化、指定行为的元素组成一个大的子系统
    • 和商业目标一致的架构决策
    • 指导组织的架构风格

1.2 软件设计

  • 软件设计提供了一个设计计划,此计划描述了一个系统的元素,以及元素之间如何组合并一起工作来满足系统的需求
  • 设计计划的目标包括
    • 商定系统需求,设置对客户、市场和管理人事的期望
    • 作为开发过程中的一个蓝图
    • 指导执行任务,包括详细设计、编码、集成、测试
  • 软件设计在详细设计、编码、继承和测试之前,在领域分析、需求分析和风险分析之后 软件设计

1.3 架构目标

  • 架构目标
    • 主要目标是识别影响应用结构的需求
    • 降低和创建技术解决方案有关的商业风险,并且连接商业和技术需求
    • 展示系统结构,但是隐藏实现细节
    • 实现所有的用例(use-case)和情景
    • 设法满足不同利益共享者的需求
    • 简化所有者的目标,改善组织的市场定位
    • 改善系统提供的质量和功能
    • 改善外部对于组织或系统的信心
  • 软件架构仍然是软件工程领域刚出现的准则。因此有一些限制
    • 缺少工具和标准化的方式呈现架构
    • 缺少分析方法来预测架构是否会落实实现需求
    • 缺少对从架构设计到软件设计重要性的认知
    • 缺少对软件架角色和利益共享者之间缺乏沟通的理解
    • 缺少对设计流程、设计经验和设计评估的理解

1.4 软件架构的角色

  • 软件架构提供了解决方案,技术团队可以用来创建和设计整个应用
  • 相关的专业知识包括
    • 设计:软件设计的知识、方法和途径;领导开发团队;审查和权衡设计建议
    • 领域:帮助确认需求,确保完整性和一致性
    • 技术:熟悉已有技术,整合选择编程语言、框架、平台和数据库等
    • 方法论:在软件开发生命周期可采用的软件开发方法,选择合适的方法帮助整个团队
    • 隐藏的角色:促进团队成员间的技术工作,强化团队的信任关系;分享知识,有很多经验的信息专家;保护团队免受外界干预和分心
    • 交付的产品:
    • 一个清楚、完整、一致且可达到的功能目标
    • 对于系统的一个功能性描述,至少有两个层面的分解
    • 对于该系统的一些概念
    • 系统的设计层面,至少有两层分解
    • 对于时间、操作人员属性、实现和操作计划的标注
    • 一个文件或流程,用于确保功能性的分解,以及接口的形式

1.5 质量参数

  • 质量参数可分为
    • 静态质量参数:反映了系统和组织的结构,与架构、设计和源码直接相关
    • 对终端用户不可见,但是影响了开发和维护成本
    • 比如模块化性、可测试性、可维护性
    • 动态质量参数:反映了系统执行期间的行为
    • 与系统的架构、设计、源码、配置、部署参数、环境和平台直接相关
    • 对于终端用户可见,且存在于运行时
    • 比如吞吐率、健壮性、可伸缩性

1.6 质量情景

一个软件架构必须有的公共的质量参数

  • 设计质量
    • 概念完整性:定义整个设计的一致性和条理性,包括组件或模块的设计方式
    • 可维护性:在一定程度上可修改
    • 可复用性:组件或紫刺探对其他应用可用
  • 运行时质量
    • 互用性:一个或多个系统与外部系统通过通信和交换信息正确操作,外部系统由外部组成来写或运行
    • 易管理性:系统管理员容易管理系统
    • 可靠性:系统维持操作的时间
    • 可伸缩性:可以不影响系统性能时解决负载增加的问题,或是易于扩大规模
    • 安全性:可以阻止设计之外的恶意或者偶然的使用
    • 性能:表明在给定的时间间隔,系统对于所有动作的反应
    • 可用性:定义系统正常工作的时间比例
  • 系统质量
    • 可支持性:当工作不正确时,可以提供有用的信息便于定位和解决问题
    • 可测试性:容易为系统和系统组件创建测试标准
  • 用户质量
    • 易用性:定义应用如何较好地满足用户和消费者的需求
  • 架构质量
    • 正确性:系统满足所有需求
  • 非运行时质量
    • 可移植性:使得系统可以在不同的电脑环境运行
    • 完整性:使得单独开发的系统组件一起正常工作
    • 易修改性:软件系统易修改
  • 商业质量参数
    • 花费和日程表:系统的花费,考虑市场时间、期望的工程时间、已有项目的利用
    • 市场性:系统的使用,考虑到市场竞争

相关