4.1 软件设计概要

news2024/11/26 11:46:02

软件设计概要

  • 1、 软件设计的概念和设计质量
    • 1.1 软件设计基本任务
    • 1.2 设计模型
    • 1.3 软件设计特点
    • 1.4 设计质量属性
    • 1.5 设计指导原则
  • 2、 设计相关八大概念
    • 抽象
    • 体系结构
    • 设计模式
    • 模块化
    • 信息隐藏
    • 功能独立
    • 精化
    • 重构
  • 3、 四类设计技术概要
    • 3.1 数据设计
    • 3.2 体系架构设计
      • 体系结构组织和细化
      • 部署设计
    • 3.3 接口设计
    • 3.4 组件设计

软件设计定义为软件系统或组件的架构、构件、接口和其他特征的定义过程及该过程的结果。

在这里插入图片描述
软件设计是软件生命周期中的一个活动,是进行软件编码的基础,将软件需求分析转化为软件的内部结构,是连接用户需求和软件技术的桥梁。
在这里插入图片描述

1、 软件设计的概念和设计质量

1.1 软件设计基本任务

  • 软件架构设计(有时称为顶层设计):描述软件的顶层架构和组织,划分不同的组件。包括设计软件系统总体结构、数据结构及数据库设计(概念设计、逻辑设计和物理设计)、编写概要设计文档和评审。
  • 软件详细设计:详细描述各组件以便能够编码实现。算法设计、数据结构设计、数据库设计和其他设计(代码设计、输入输出设计和用户界面设计)、编写详细设计说明书和评审。
  • 注意:
    1. 软件设计主要为分解设计D-design(Decomposition design).分解设计:将软件映射为各组件
    2. 可以包括系列模式设计FP.deslgn(Family Pattern design):

1.2 设计模型

模型输入:软件需求的数据模型、功能模型和行为模型。
分类:数据设计、架构设计、接口设计、组件设计
在这里插入图片描述

1.3 软件设计特点

  1. 设计必须实现在分析模型中包含的所有明确要求,必须满足客户所期望的所有隐含要求;
  2. 设计必须对编码人员、测试人员及后续的维护人员是可读可理解的;
  3. 设计应提供该软件的完整视图,从实现的角度解决数据、功能及行为等各领域方面的问题。

1.4 设计质量属性

  • 功能性
  • 易用性
  • 可靠性
  • 性能
  • 可支持性:扩展性、适应性和可维护性

1.5 设计指导原则

  1. 设计应该是一种架构;
  2. 设计应该是模块化的;
  3. 设计应该包含数据、体系结构、接口和组件各个方面:应该设计出系统所用的数据结构;应该设计出展现独立功能特性的各组件;应该设计出各组件与外部环境连接的各接口。
  4. 设计由软件需求分析过程中获得信息驱动、采用可重复使用的方法导出;
  5. 设计应该采用正确清晰的表示法。

2、 设计相关八大概念

抽象

  • 抽象是在软件设计的规模逐渐增大的情况下,控制复杂性的基本策略。抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同特性而暂不考虑它的细节。
  • 抽象机制:参数化和规范化
  • 规范化抽象:数据抽象(描述数据对象的冠名数据集合)和过程抽象(具有明确和有限功能的指令序列)。
    如门包含属性:门的类型、转动方向、开门机关、重量和尺寸等;开 一系列过程:走到门前,伸出手并抓住把手,转动把手并拉门,离开打开的门等。

体系结构

  • 定义:软件的整体结构和这种结构为系统提供概念上完整性的方式
  • 体系结构设计可以使用大量的一种或多种模型来表达:结构模型、框架模型、动态模型、过程模型、功能模型

设计模式

  • 定义:在给定上下文环境中一类共同问题的共同解决方案
  • 微观结构:实体模式、结构模式、行为模式
    抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

模块化

  • 模块:程序中数据说明、可执行语句等程序对象的集合。
  • 模块化:解决一个复杂问题时自顶而下逐层把软件系统划分成若干模块的过程。
  • 软件的模块性:程序可被智能管理的单一属性。
  • 模块化的理论依据:基于人类解决问题的观测数据。模块的个数与集成成本、总成本、工作量有约束关系,不能过多或过少。
  • 模块化设计标准
    1. 模块化的分解性:可分解为子问题
    2. 模块化的组合性:组装可重用的组件
    3. 模块化的可理解性:可作为独立单元理解
    4. 模块化的连续性:需求小变化只影响单个模块
    5. 模块化的保护:模块内异常只影响自身。高内聚、低耦合
  • 模块化基本问题:如何分解软件系统以达到最佳的模块划分

信息隐藏

信息隐蔽是指在设计和确定模块时,使得一个模块内包含的信息对于不需要这些信息的其他模块来说,是不能访问的。通过抽象,可以确定组成软件的过程实体;通过信息隐蔽,可以定义和实施对模块的过程细节和局部数据结构的存取限制。

  • 信息隐藏原则:
    1. 模块应该具有彼此相互隐藏的特性;
    2. 模块定义和设计时应当保证模块内的信息(过程和数据)不可以被不需要这些信息的其他模块访问
  • 特点:
    1. 抽象有助于定义构成软件的过程(或信息)实体;
    2. 信息隐藏原则定义和隐藏了模块内的过程细节和模块内的本地数据结构

功能独立

  • 含义:·每个模块只负责需求中特定的子功能,并且从程序结构的其他部分看,该模块具有简单的接口
  • 好处
    1. 易于开发:功能被划分,接口被简化
    2. 易于维护(和测试):次生影响有限,错误传递减少,模块重用
  • 定性衡量标佳
    1. 内聚性:模块的功能相对强度
    2. 耦合性:模块之间的相互依赖程度
    3. 模块独立性强=高内聚低耦合
      在这里插入图片描述
      在这里插入图片描述

精化

  • 含义:逐步求精的过程
  • 与抽象的关系
    1. 抽象使设计师确定过程和数据,但不局限于底层细节;
    2. 精化有助于设计者在设计过程中揭示底层细节。

重构

  • 含义:不改变组件功能和行为条件下,简化组件设计(或代码)的一种重组技术
  • 方法:检查现有设计的冗余情况、未使用的设计元素、无效或不必要的算法、较差的构建方式或不恰当的数据结构,或任何其他可被更改从而优化设计的问题

3、 四类设计技术概要

3.1 数据设计

数据设计(数据架构)构建高层抽象(客户/用户的数据视图)的数据模型、信息模型。
在这里插入图片描述

  • 设计原则

    1. 应用于功能和行为系统分析的原则也应适用于数据设计
    2. 所有的数据结构及其对应的操作都应该确定
    3. 建立数据字典并在数据定义和程序设计中应用
    4. 低层次的数据设计应该推迟到设计的后期过程
    5. 数据结构的表示应该只对直接使用数据结构中数据的模块可见
    6. 开发有用的数据结构及其对应操作的程序库
    7. 软件设计和编程语言应该支持抽象数据类型的定义与实现
  • 组件级别的数据设计
    在这里插入图片描述

3.2 体系架构设计

系统需要执行的函数功能组件集(如数据库、计算模块);
组件之间通信、协同和合作的连接器;
组件集成构成系统的约束;
设计人员通过分析系统组成部分的已知特性,理解其整体特性的语义模型分析。

  • 数据中心架构
    在这里插入图片描述

  • 数据流体系架构
    在这里插入图片描述

  • 调用和返回架构
    在这里插入图片描述

  • 层次架构
    在这里插入图片描述

  • 面对对象架构
    在这里插入图片描述

体系结构组织和细化

两个基本问题:

  1. 控制结构:在架构内部如何实现管理控制?是否有不同的控制架构存在?
  2. 数据传递:组件之间如何进行数据传递?数据流是否连续,或者传递给系统的数据对象是否零散?

部署设计

以部署环境创建开始,在整个生命周期阶段中处于逻辑设计和技术需求阶段;
部署环境包含整个解决方案的逻辑架构和服务质量( Q o S Q_oS QoS)需求;
部署架构设计是一个反复达代的过程,通常需要多次查看 Q o S Q_oS QoS要求和多次检查先前的设计,需要考虑了服务质量 Q o S Q_oS QoS需求的相互关系,平衡取舍相关问题成本以实现最佳解决方案,最终满足项目的业务目标。

  • 部署设计输出
    在这里插入图片描述

  • 部署设计方法
    在这里插入图片描述

3.3 接口设计

高效的用户界面设计由三条重要原则:

  1. 允许用户操作控制(用户为中心)
  2. 减少用户记忆负担
  3. 保持界面一致

环境分析确定了用户接口操作对的物理结构和社会结构。

3.4 组件设计

  • 面对过程的组件设计:函数与模块的设计
  • 面对对象的组件设计:类与操作的设计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL表的增删改查(CRUD2)

美好的一天又开始了,大家今天有没有学习呢?没学的话,开始跟随和博主一起对MYSQL的学习吧!!! 复习: CRUD新增1.新增 insert into 表名 [(列名[,列名,列名...])] values (值[,值,值.…

用接地气的例子趣谈 WWDC 24 全新的 Swift Testing 入门(三)

概述 从 WWDC 24 开始,苹果推出了全新的测试机制:Swift Testing。利用它我们可以大幅度简化之前“老态龙钟”的 XCTest 编码范式,并且使得单元测试更加灵动自由,更符合 Swift 语言的优雅品味。 在这里我们会和大家一起初涉并领略…

【案例】Excel使用宏来批量插入图片

一、场景介绍 我有一个excel文件,需要通过一列的文件名称,按照规则给批量上传图片附件。 原始文件: 成功后文件: 二、实现方法 1. 使用【wps】工具打开Excel文件,将其保存为启用宏的文件。 2.找到编辑宏的【VB编辑器…

Springboot项目报错记录

SpringBoot测试报错:Unable to find a SpringBootConfiguration, you need to use Context 该测试类所在测试包test下的包名和类路径java下的包名不一致导致的 引发以下报错 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need…

RabbitMQ 高级特性——消息分发

文章目录 前言消息分发RabbitMQ 分发机制的应用场景1. 限流2. 负载均衡 前言 当 RabbitMQ 的队列绑定了多个消费者的时候,队列会把消息分发给不同的消费者,每条消息只会发送给订阅列表的一个消费者,但是呢,RabbitMQ 默认是以轮询…

深度学习:bert模型

multi-headed机制 1、通过不同的head得到多个特征表达,一般8个head 2、将所有特征拼接在一起 3、降维,将Z0~Z7连接一个FC全连接实现降维 多层堆叠 位置编码 如何实现位置编码? (1)为每个时间步添加一个0-1范围内的数…

Vue实战学习(2)(Vue快速入门(快速构建一个局部Vue项目))

目录 一、Vue快速入门。 (1)快速入门的案例需求。 (2)原生js解决。 (3)使用Vue解决。 1、准备一个html页面。且该页面需要引入Vue模块。 2、创建Vue程序的应用实例。 3、准备html元素(如div&…

SpringMVC学习记录(三)之响应数据

SpringMVC学习记录(三)之响应数据 一、页面跳转控制1、快速返回模板视图2、转发和重定向 二、返回JSON数据1、前置准备2、ResponseBody 三、返回静态资源1、静态资源概念2、访问静态资源 /*** TODO: 一个controller的方法是控制层的一个处理器,我们称为h…

Spring WebFlux 核心原理(2-3)

1、Project Reactor 高级 1.1、响应式流的生命周期 要理解多线程的工作原理以及 Reactor 中实现的各种内部优化,首先必须了解 Reactor 中响应式类型的生命周期。 1.1.1、组装时 流生命周期的第一部分是组装时(assembly-time)。 Reactor 提供…

Python爬虫与Web渗透测试入门指南——初学者防踩雷

目录 Python爬虫与Web渗透测试入门指南一、学习方向和基础知识Python爬虫学习方向Web渗透学习方向 二、具体知识点总结三、学习流程和典型案例案例1:Python爬虫 - 简单网页数据爬取案例2:Web渗透 - SQL注入漏洞检测与利用案例3:Python爬虫 - …

apache-seata-2.1.0 AT模式使用篇(配置简单)

最近在研究seata的AT模式,先在本地搭建了一个演示demo,看看seata是如何使用的。在网上搜的demo,配置相对来说都比较多。我最终搭建的版本,配置较少,所以写篇文章分享下,希望能帮到对seata感兴趣的小伙伴。先…

Java代码与数据库纽带——JDBC

ok,看了题目,就可以知道今天要分享的是JDBC 讲这个这之前,想讲讲之前的。 之前我们操作数据库基本都是通过MySQL客户端,进行编写sql语句来操作的。 但是我们在开发中一般都是通过代码来操控数据库的。 而且在我们日常开发中&a…

navicat pg库安装mysql fdw 外表扩展

在Windows上手动安装mysql_fdw(MySQL Foreign Data Wrapper)通常涉及一系列步骤,包括下载源码、编译、配置和测试。以下是一个详细的指南: 一、下载mysql_fdw源码 访问mysql_fdw的GitHub发布页面,选择最新版本的源码…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3

本系列文章记录“智能提醒助理”产品建设历程,记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级的过程,遇到的问题和解决方案。 一、需求出发点 智能提醒小程序 当前使用的是jdk8,springboot2.3,升级到jdk21和springboot3.3 学…

雷军-2022.8小米创业思考-11-新零售:用电商思维做新零售,极致的效率+极致的体验。也有弯路,重回极致效率的轨道上。

第十一章 新零售 当我们说到小米模式的时候,其实我们说的是两件东西: 一是小米模式的本质,即高效率的商业模式; 另一件是小米这家公司具象的商业模式,这是小米在实践中摸索、建立的一整套业务模型。 从2015年到202…

人工智能——小白学习指南

知孤云出岫 目录 1. **智能评测系统**2. **个性化学习路径推荐**3. **虚拟学习助手**4. **学习行为分析**5. **数据驱动的教学决策**6. **自动化课程推荐**7. **数据隐私与安全保护** 人工智能知识点的总结和学习路线,以数据表格形式呈现,并附带在教育行…

【深度学习基础】常用图像卷积核类型

🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. 常…

SpringCloud框架学习(第一部分:初始项目搭建)

目录 一、SpringBoot和SpringCloud版本选型 1.Springcloud版本选择 2.Springcloud版本选择 3.Springcloud Alibaba版本选择 4.SpringCloud VS SpringBoot VS SpringCloud Alibaba版本三者制约对应关系 二、SpringCloud介绍 1.单体架构 2.微服务架构 3.springcloud 4.S…

【动手学运动规划】 4.1 图搜的基础

🏰代码及环境配置:请参考 环境配置和代码运行! 4.1.1 基础概念 4.1.1.1 Configuration Space(配置空间) configuration: 机器人上每一点位置的完整说明degrees of freedom: 机器人能够独立移动或旋转的关节数量(下图所示有4个自由度&#x…

如何用彩屏显示精美的动画

1什么样的动画是精美的? 1)视觉暂留 视频播放的原理基于人眼的视觉暂留现象。‌视频是由一系列静态图像(帧)组成的,这些图像以特定的频率(帧率)连续播放,使得人眼无法区分单帧图像&…