首页 > 其他分享 >[软件设计] 软件系统总体结构设计 | 软件架构概述 [转载]

[软件设计] 软件系统总体结构设计 | 软件架构概述 [转载]

时间:2023-03-25 23:44:50浏览次数:59  
标签:架构 软件系统 软件设计 组件 软件架构 维度 软件 质量

1 概述

对于程序员而言,开始关注架构就是重大进步。就已经从单纯写代码的层次里跳了出来,至少从“增删改查”中跳了出来,能以更宏观的视角去思考代码、思考软件工程!
这是一个新的起点,加油!

1.1 架构的定义

架构是一个来源于传统领域的古老概念,用来指对房屋、桥梁等实体物理结构的设计与研究

后来,架构的概念被引入到软件系统领域,指对软件系统总体结构的设计

我们可以类比传统工程设计领域的概念,将软件系统领域的研究由上到下地分为三层:

  • 理念层面:研究软件系统开发中的理念和思想。

例如研究软件的开发模型、评价指标、架构风格等。类比于传统工程领域研究建筑质量标准、研究商业区与居住区的分布关系等。

  • 架构层面:研究如何协调和组织软件系统、子系统、模块之间的关系,从而指导系统实现并提升各类质量指标。

类比于规划和设计建筑物的承重结构、功能结构等,并协调各结构的关系等。

  • 技术层面:研究如何高效、可靠、经济地实现软件系统、子系统、模块等。

类比于搭建建筑物中的楼梯、墙体、阳台等。

这一样一类比,是不是就比较好理解了。
可见软件架构位于承上启下的中间层。因此,做出良好的架构需要我们对理念层面和技术层面的知识均由较为深刻的认识。
理念层面的知识为我们的架构提供了思路和目标上的指引,技术层面的知识为我们的架构提供了手段和工具上的支撑。
在软件开发过程中,架构发生在需求之后、规划之前。
经过需求架构规划开发几个主要步骤后,一个软件便从最初模糊的需求演变为最终可运行的实体。
软件架构是在软件系统结构、行为和属性的高级抽象基础之上展开的全面的系统设计,其主要内容包括概要设计和详细设计两大步骤。

  • 概要设计阶段,研究构成系统的抽象组件以及组件之间的连接规则;
  • 详细设计阶段,将这些抽象组件细化为模块、类、对象等实际的组件,并通过设计通信规则完成它们之间的连接。

软件系统架构的好坏对软件质量有着重要的影响。
算法研究中,我们常使用时间复杂度空间复杂度等指标来衡量算法的性能优劣
然而,在一个完整的软件项目中,算法的研究与优化只是软件开发阶段的一个小环节,其对系统质量的影响是有限的。
相比于算法优化,软件系统架构则是从顶层软件系统的软硬件结构进行设计,其设计的好坏对系统质量的影响更为重大。
通过架构,我们是要搭建一个高质量的软件系统。所以,我们需要先了解下什么是软件的质量。

1.2 软件的质量

作为一名软件开发者和用户,我们经常在工作和生活中接触各种各样的软件,也会从不同的维度对软件进行评判。

例如: 我们会使用“界面漂亮”、“好用”、“容易崩溃”、“功能强大”等各种类似的词语来描述一个软件,其实这都从不同的维度反映了一个软件的质量。

那有没有确切的标准来衡量一个软件的质量呢?

ISO/IEC 25010:2011软件工程-产品质量评价国际标准。它给出了软件质量模型Product Quality Model)并将软件质量划分成了八个特性维度,如图所示:

这8个特性维度的介绍如下:

  • 功能性(Functional suitability):在特定条件下使用时,产品或系统提供满足指定和隐含需求的功能的程度。这里仅对是否满足功能做要求,而对功能的规范性不做要求。
  • 效率(Performance efficiency):在指定条件下,软件产品对资源的占用。资源包括其他软件产品、系统的软件和硬件配置等。
  • 兼容性(Compatibility):产品、系统或组件可以与其他产品,系统或组件交换信息或执行其所需功能,同时共享相同的硬件或软件环境的程度。
  • 易用性(Usability):指定用户可以使用产品或系统在指定的使用环境下以有效、高效和满意的方式达到指定目标的程度。
  • 可靠性(Reliability):系统、产品或组件在指定条件下在指定时间内执行指定功能的程度。这里所说的指定功能涵盖可用性、安全性、可维护性等。因为软件不会在运行过程中损耗,所以其不可靠是由于软件需求、设计、实施中的错误引发,或者是执行上下文变化引发。
  • 安全性(Security): 产品或系统保护信息和数据的程度,以便人员或其他产品或系统具有与其权限类型和授权级别相适应的数据访问程度。
  • 可维护性(Maintainability):预期的维护者可以修改产品或系统的有效性和效率的程度。
  • 可移植性(Portability):系统、产品或组件从一种硬件,软件或其他操作或使用环境转移到另一种环境的有效性和效率的程度。

以上八个特性维度共同构成了软件的质量

例如:我们所说的“好用”、“界面漂亮”是在从易用性维度评价软件质量,“容易崩溃”是在从可靠性维度评价软件质量,“功能强大”是在从功能性维度评价软件质量。

软件架构设计过程中,原则就是尽量保证设计出的软件能够在以上八个维度都有较好的表现。

当然,能在以上所有维度表现良好理想情况,绝大多数时候,我们不得不做出取舍,为了某些重要的特性维度指标而牺牲一些次要的指标。

例如: 为了界面漂亮(易用性高)而导致界面的加载时间变长(效率降低),需要不断权衡。

X 参考文献

标签:架构,软件系统,软件设计,组件,软件架构,维度,软件,质量
From: https://www.cnblogs.com/johnnyzen/p/17255963.html

相关文章

  • 软件设计模式分类
     CreationalPatterns(创建型设计模式):SingletonPattern(单例模式)   PrototypePattern(原型模式)FactoryMethodPattern(工厂方法模式)   AbstractFac......
  • 在Linux系统中运行Classic AUTOSAR软件系统
    “转载自维克多汽车技术(上海)有限公司,作者VectorChina”无论是ADAS/AD软件系统验证的数据回灌训练或并行仿真验证,还是在软件快速迭代中的持续集成与持续测试,都需......
  • 机器人与无人驾驶软件架构设计所需要注意的几个点
    1.由于系统可能与多端通信,应尽量采用json作为外部通信格式。因为json是在各平台都被较好支持的一种数据格式。它可以较好的兼容与Android、Qt、Web等多端的通信。2.系统......
  • 【软考】2020年全国计算机技术与软件专业技术资格考试,软件设计师,考纲
    一、考试说明1.考试目标通过本考试的合格人员能根据软件开发项目管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指......
  • 软件设计于体系结构第二次分享
    1项目管理的十大知识领域:1、整合管理;2、范围管理;3、时间管理;4、成本管理;5、沟通管理;6、风险管理;7、采购管理;8、资源管理;9、质量管理;10、干系人管理。其中“整合管理”是对......
  • 逆向软件设计和开发能力-----学籍管理系统
    逆向工程是一种产品设计技术再现过程。也是一个合格的程序员必不可少的技能,在更新进步软件和维护软件方面功不可没。我找到了我曾经自己写的“学籍管理系统”并为它画出系......
  • 逆向软件设计和开发能力
          这是我在网上看到的一个网上购物管理系统,该系统的开发采用B/S模式,整个系统的构建基于ssm(Spring+SpringMvc+MyBatis)整合框架。  对其进行学习和研......
  • 逆向软件设计和开发能力—学生管理系统
    此项目为大一第一学期吕涛同学的c语言大作业用户界面如下:项目分析:该系统面向全体用户,系统简洁明了,功能完善。该系统主要运用文件存储用户信息,运用结构体定义用户信息。......
  • 逆向软件设计与开发——电子会议厅
    此程序为一个大三学长的软件项目,此系统旨在实现一个电子会议厅程序,利用其可以对某个班级事务管理采取网上发布和讨论的手段,以便征求广大同学对班级事务的建议和意见,从而加......
  • 逆向软件设计和开发能力--学生成绩管理系统
    本次逆向软件设计和开发我所使用的作业为由21计算4班杜良所编写的c++期末课程设计作业。 该程序采用文件读取方式进行数据存储,主要面向对象为老师,实现老师对学生成绩......