软件工程第四周

news2024/11/16 1:25:46

模型建立的基本理念

模型是对现实世界复杂系统的简化和抽象,目的是为了更好地理解、分析和预测系统的行为。它能够真实反映研究对象的整体结构 or 某一侧面(功能、反应)的本质特征和变化规律可以建立不同的子模型用于反应系统不同的侧面。同时,也可以使用不同的方法学:结构化方法学Structured和面向对象方法学Object-Oriented。


结构化需求分析方法

结构化方法学是一种逻辑过程,它按照顺序、选择和迭代的方式来定义。其特点为:

  • 突出过程和步骤。
  • 适用于简单、线性和有明确定义的任务。

自顶向下,逐步求精。一定对应着迭代的过程!

对于逻辑模型(WHAT,我要做什么?),构建以下三个子模型:

数据层面:信息域的概念模型。ER。就是建立数据库的ER图。

功能层面:使用数据流图。DFD。数据的流动能够体现模型的功能。

行为层面:状态-迁移图。实时监控,自动化系统。STD。系统对外部事件的响应情况。

数据模型 

行为模型

功能模型

数据流出现的地方,一定有加工部分。数据流流动的动力来自于加工部分。可以是加工与加工部分,也可以是加工与存储部分,也可以是加工与源点、终点的部分,但不能脱离加工。

注意数据流的命名要明确、规范,便于存储固定成分。

可以简单记为:*代表&&,+代表&&和||, \oplus代表限流(只能允许选择一个进入或产出)。

数据的源点终点主要作用是确定系统边界。告诉我们用户是谁,便于访谈等需求分析的实施。

基本思想

搞好了,就能够交给开发者了。

上图中的事务就相当于mysql中的changelog,作为更新过程经过处理可以变成实际操作——更新库存信息,并且从数据库中提取库存信息,包括库存信息临界值。

注意事项

可以把同一层分成若干个子图有所侧重扩展具体的加工过程,最后再合并。

画图有一个7+-2法则,涉及到认知科学,超过这个法则就使得读者难以理解。

结构化方法中的子图

在结构化设计和分析中,为了更清晰地展示和理解系统的各个部分,通常会将大的、复杂的系统分解成多个更小、更简单的部分或子系统。这些子系统可以通过子图来表示。

  1. 子图的目的

    • 简化复杂性:大型系统可以非常复杂,将其分解成小的子系统或组件可以使设计和分析过程更容易进行。
    • 便于管理:当处理大型项目时,子图允许团队成员在不同的部分上并行工作
    • 重用和模块化:子系统或子图中的某些部分可能在其他项目中重用。
  2. 合并:一旦各个子图或子系统已经被定义和设计,它们可以被组合或集成到一个完整的系统中,保证整体功能和性能。

7±2法则

7±2法则是认知科学中的一个概念,它指的是人类短期记忆的容量大约在5到9个信息项之间,平均为7个。这是乔治·A·米勒在1956年的一篇文章中首次提出的。

  1. 应用

    • 界面设计中,为了保持用户界面简洁和易于理解,通常建议一次只显示7±2个选项或信息项
    • 在教育和培训中,为了确保学员能够有效地吸收和记住信息,内容通常被分为5到9个部分。
  2. 扩展理解:尽管7±2法则被广泛引用,但后续的研究表明,实际的数字可能更接近4。然而,这个原则的关键点是,人们的短期记忆容量是有限的,设计时应尽量简化信息和任务,以避免超出这个容量。

结合这两方面的内容,当使用结构化方法创建子图或设计系统时,应考虑7±2法则,以确保每个子图或组件不会过于复杂或包含过多的信息,从而确保易于理解和管理。

1. 当我们在DFD中解释或描述某个概念时,如果需要使用“”、“”、“以及”、“或者”这样的连词,很有可能表示这个概念或主题并没有被适当地分解或结构化。

这在写作、报告撰写、教程制作等多个领域都是一个常见的现象。

2. 千万不要有加工条件(如果……就这么加工),否则会带来控制流。

SRS(需求分析规格说明书)

SRS(软件需求规格说明书)是一个详细的文档,它描述了系统应该如何运行和功能。在功能需求部分,有必要进行详细的需求规约。

  1. 假定的输入方式

    • 这部分详细描述了用户如何与系统交互。这可能包括:键盘输入、鼠标点击、触摸屏手势、语音指令等。
    • 需要明确指出可以输入什么类型的数据,例如:文本、数字、日期等。
  2. 响应异常条件

    • 这部分描述了系统在遇到异常或错误输入时的行为。例如:如果用户输入了无效的日期,系统应该如何响应?
    • 可能包括错误消息、警告、日志记录等。
  3. 考虑系统的内部状态

    • 这部分描述了系统在不同状态下的行为。比如“老师-学生”在系统中的不同用户角色,要区分他们的相应权限和功能。
    • 例如,老师可能能够发布作业,而学生只能提交作业。当系统识别用户角色为“老师”时,应该提供发布作业的功能。

除了上述内容,SRS还可能包括其他关键部分,如:

  • 系统的总体描述:简要描述系统的目的、范围和用户。
  • 性能需求:描述系统的性能指标,如响应时间、处理能力等。
  • 设计约束:可能涉及到的技术、法律或合同约束。
  • 接口需求:描述系统与其他系统或硬件的交互。

确保SRS是完整的、一致的和无歧义的,因为它通常作为开发团队和客户之间的正式协议,并指导整个开发过程。


虚拟仿真实验最后一个图要保存在大作业的附录


系统流程图

包含物理部件的数据流动情况。图题一定要准确,一定要明确自己画的是流程图还是系统流程图还是数据流图,明显区别在于是数据流还是控制流。

  • 描述系统中各个物理部件之间的互动和流动,既可以是数据流也可以是控制流。
  • 它更偏重于表示系统的物理组件(如硬件设备)和这些组件之间如何交互。
  • 例如,在计算机网络中,系统流程图可能会显示路由器、交换机、服务器以及它们之间的数据包流动情况。

需求分类

在软件工程中,需求是系统应有的特性、功能和性能等方面的描述。根据其性质和描述的内容,需求可以被分类为以下几类:

  1. 功能需求(Functional Requirements,需求主体)

    • 定义:描述了系统应当执行的任务或功能。
    • 内容:它们指定了系统能够提供的服务,例如:“系统应该允许用户注册新账号”或“系统应能处理在线支付”。
    • 用户方面的需求可能会出现描述不严密的情况,所以往往采用系统需求。
  2. 非功能性需求(Non-Functional Requirements)

    • 定义:描述了系统的性能、可靠性、安全性等质量属性,而不是具体功能。
    • 内容:例如,数据备份频率、系统的可用性标准、数据加密方法等。
    • (大作业中增加一到两个)
  3. 性能需求(Performance Requirements)

    • 定义:描述了系统的性能标准。
    • 内容:例如,系统的响应时间、处理能力、用户并发数等。
    • 解决方法:为了确保明确性,常常需要对这些需求进行量化,例如:“95%的请求应在2秒内得到响应”。
  4. 环境需求(Environmental Requirements)

    • 定义:描述了系统运行的硬件、软件、网络和其他环境条件
    • 内容:例如,服务器的硬件配置、操作系统版本、支持的浏览器类型等。
  5. 质量属性(Quality Attributes)

    • 定义:描述了与系统整体质量相关的需求。
    • 内容:例如,可维护性、扩展性、可靠性、安全性等。

需求分类的意义

需求分类的主要目的是帮助项目团队更好地理解、沟通和满足客户的期望。明确分类可以:

  • 确定需求获取方法:不同类型的需求可能需要不同的获取方法,如访谈、观察、问卷调查等。
  • 明确访谈对象:例如,性能需求可能需要与系统管理员沟通,而功能需求可能需要与终端用户沟通。

通过这种方式,需求分类确保了项目团队可以全面、准确地收集和记录所有相关的需求,从而为项目的成功奠定坚实的基础。


面向数据流与快速原型法

面向数据流的分析方法与快速原型法是两种不同的需求分析和获取方法。面向数据流分析法,是比快速原型更精细的需求获取方法。

面向数据流的分析方法(Data Flow Oriented Analysis)

  • 定义:面向数据流的分析方法是一种系统分析方法,它侧重于捕获、表示和分析在系统中流动的数据的过程。通常使用数据流图(DFD)来描述系统的数据流、过程、数据存储和外部实体。

  • 优点

    • 结构化:提供了一种系统的层次化和模块化表示,使其更易于理解。
    • 专注于数据:这种方法强调了数据在系统中的流动和处理,这对于数据密集型的应用尤其重要。
    • 清晰地定义界限:通过明确的外部实体和数据存储,可以明确地界定系统的范围和边界。
  • 缺点

    • 可能不足以捕获某些复杂的用户交互或界面元素。
    • 可能需要多轮迭代来完善和细化。

应用场景

  • 当系统的核心是数据流和数据处理时。
  • 当项目的需求比较明确,且对数据流和数据交互有明确的要求时。

快速原型法(Rapid Prototyping)

  • 定义:快速原型法是一种需求获取和验证方法,它侧重于快速创建系统的工作模型或原型,以便用户能够看到和与其交互。

  • 优点

    • 直观:用户可以实际看到和体验原型,这有助于消除歧义和误解。
    • 快速反馈:开发人员可以迅速获得用户的反馈,并相应地进行调整。
    • 适应性:允许在开发过程中进行迭代和更改,这特别适用于需求不明确或可能发生变化的项目。
  • 缺点

    • 原型可能被错误地视为最终产品,导致关键需求或结构问题被忽视。
    • 如果不适当地管理,可能会导致项目范围的膨胀。

应用场景

  • 当项目的需求不是很明确或可能会发生变化时。
  • 当需要快速地收集用户反馈和调整需求时。

总结

数据流分析方法通常更细致,而快速原型法更加灵活和迭代。在实际的项目环境中,这两种方法可以结合使用,以确保需求的完整性和准确性。

  • 对于数据密集型的应用或需求明确的项目,可以首先使用面向数据流的分析方法定义和描述系统的数据流,然后使用快速原型法验证这些数据流与实际的用户交互和界面是否一致。

  • 对于需求不明确或可能会发生变化的项目,可以首先使用快速原型法收集和验证用户需求,然后使用面向数据流的分析方法为已验证的需求提供更细致的描述。


第四章 系统设计

体系结构的起源——软件系统的复杂性

能否通过复用的方式降低软件开发的复杂性?

很多非功能需求来自于软件本身的体系结构,规格说明和结构设计大于数据结构算法。体系结构能够提升我们对于非功能性需求的要求。


软件开发阶段

软件开发经历了许多发展阶段,从简单的函数编程到现代的面向服务设计。这个演变的过程中,主要的目标是提高软件的可维护性、可复用性、可扩展性和可靠性。

以下是各个发展阶段介绍: 

函数(Function)

  • 早期的软件设计主要基于函数和过程。每个函数具有特定的任务或功能。
  • 信息隐藏: 每个函数内部的实现细节对外部是隐藏的。
  • 接口简单: 通过参数传递数据并返回结果。
  • 低耦合: 通过模块化和适当的函数设计,可以实现函数之间的低耦合。

对象(Object)

  • 在面向对象的设计中,软件被视为对象的集合,这些对象可以代表现实世界中的实体或概念。
  • 信息隐藏: 通过私有变量和公有方法实现。
  • 接口简单: 对象提供的方法定义了它与外部世界的交互方式。
  • 低耦合: 通过继承、多态和封装,对象可以独立于其他对象。

构件(Component)

  • 构件是独立的、可重用的模块化软件单位。它们封装了特定的功能或服务,并通过定义好的接口与其他构件交互。这些构件可以被看作是软件中的积木,它们可以组合在一起创建更大的系统或应用。
  • 信息隐藏: 构件的内部实现被完全封装,用户只能看到其接口。
  • 接口简单: 构件的接口应当简洁明了,提供明确的功能或服务。
  • 低耦合: 通过明确定义的接口和消息传递,构件之间的交互可以降低耦合。

面向服务(Service Oriented)

  • 面向服务的架构(SOA)视应用程序为一组提供特定功能的服务集合,每个服务都是独立的并专注于完成单一任务。
  • 这种架构的核心思想是提供一个灵活、可扩展和可复用的设计,其中服务通常由跨网络的不同系统提供,并通过标准化的接口进行通信。
  • 为了实现这种设计,开发者通常会依赖某种框架(如Web服务框架)来实现服务的创建、发布、发现和通信。
  • 尽管服务各自独立,但它们的设计都重视信息的隐藏、简洁的接口和低耦合性。这确保了各服务之间可以方便地进行互操作,同时还保留了各自的独立性和可维护性。

也就是说,构件思想:系统分解,每个构件包含一定的功能;而面向服务架构思想:系统分解成各个独立的服务,每个服务对应一个任务。

  1. 构件分解: 当我们说到构件,我们是指系统中的独立、可重用的模块或单位。这些构件通常会封装特定的功能或逻辑,并通过定义好的接口与其他构件或系统进行交互。构件的设计使得它们可以在不同的应用程序或系统中重复使用,从而提高开发效率和软件质量。

  2. 服务分解: 在面向服务的架构(SOA)中,系统则是由一系列服务组成,每个服务对应一个特定的任务或功能。这些服务是独立的,可以跨网络边界进行通信,并且被设计为可复用的。例如,一个服务可能处理用户认证,而另一个服务处理支付事务。服务之间通过定义明确的接口(例如APIs)进行通信,这些接口提供了一种标准化的方式来请求服务的功能。

整体上,从函数到面向服务的演变过程体现了软件设计的核心思想,即封装细节、简化接口并降低系统间的耦合。这使得软件更加模块化、可维护和可扩展。

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

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

相关文章

《机器人SLAM导航核心技术与实战》第1季:第6章_机器人底盘

视频讲解 【第1季】6.第6章_机器人底盘-视频讲解 【第1季】6.1.第6章_机器人底盘_底盘运动学模型-视频讲解 【第1季】6.2.第6章_机器人底盘_底盘性能指标-视频讲解 【第1季】6.3.第6章_机器人底盘_典型机器人底盘搭建-视频讲解 第1季:第6章_机器人底盘 先 导 课…

SpringBoot二手车管理系统

本系统采用基于JAVA语言实现、架构模式选择B/S架构,Tomcat7.0及以上作为运行服务器支持,基于JAVA、springboot等主要技术和框架设计,idea作为开发环境,数据库采用MYSQL5.7以上. 采用技术: SpringBootMySQL

存在负权边的单源最短路径的原理和C++实现

负权图 此图用朴素迪氏或堆优化迪氏都会出错,floyd可以处理。 负环图 但floyd无法处理负权环,最短距离是无穷小。在环上不断循环。 经过k条边的最短距离(可能有负权变) 贝尔曼福特算法(bellman_ford)就是解决此问题的。 原理 …

智慧公厕:将科技融入日常生活的创新之举

智慧公厕是当今社会中一项备受关注的创新项目。通过将科技融入公厕设计和管理中,这些公厕不仅能够提供更便利、更卫生的使用体验,还能够极大地提升城市形象和居民生活质量。本文将以智慧公厕领先厂家广州中期科技有限公司,大量的精品案例项目…

Boost程序库完全开发指南:1.2-C++基础知识点梳理

主要整理了N多年前&#xff08;2010年&#xff09;学习C的时候开始总结的知识点&#xff0c;好长时间不写C代码了&#xff0c;现在LLM量化和推理需要重新学习C编程&#xff0c;看来出来混迟早要还的。 1.const_cast <new_type> (expression)[1] 解析&#xff1a;const_c…

分布式架构篇

1、微服务 微服务架构风格&#xff0c;就像是把一个单独的应用程序开发为一套小服务&#xff0c;每个服务运行在自己的进程中&#xff0c;并使用轻量级机制通信&#xff0c;通常是 HTTP API。这些服务围绕业务能力来构建&#xff0c;并通过完全自动化部署机制来独立部署。这些…

一文拿捏Spring事务之、ACID、隔离级别、失效场景

1.&#x1f31f;Spring事务 1.编程式事务 事务管理代码嵌入嵌入到业务代码中&#xff0c;来控制事务的提交和回滚&#xff0c;例如TransactionManager 2.声明式事务 使用aop对方法前后进行拦截&#xff0c;然后在目标方法开始之前创建或者加入一个事务&#xff0c;执行完目…

AutoCAD2014第一章 快速入门

AutoCAD的基本功能 AutoCAD具有功能强大、易于掌握、使用方便和体系结构开放等特点&#xff0c;能够绘制平面图形与三维图形、标注图形尺寸、渲染图形以及打印输出图纸&#xff0c;深受广大工程技术人员的欢迎。 AutoCAD所包含的基本功能有图形的绘制与编辑功能、尺寸标注功能…

[架构之路-229]:计算机体硬件与系结构 - 计算机系统的矩阵知识体系结构

目录 一、纵向&#xff1a;目标系统的分层结构 1.1 目标系统的架构 1.2 网络协议栈 1.3 计算机程序语言分层 二、横向&#xff08;构建目标系统的时间、开发阶段&#xff09;&#xff1a;软件工程 三、二维矩阵知识体系结构 一、纵向&#xff1a;目标系统的分层结构 1.1…

mysql双主双从读写分离

架构图&#xff1a; 详细内容参考&#xff1a; 结果展示&#xff1a; 178.119.30.16&#xff08;从&#xff09;- master 178.119.30.17&#xff08;从&#xff09;- slave 由上述结果可以看出&#xff0c;产生了主备节点同时抢占VIP的问题&#xff08;即脑裂问题&#xff09…

Python无废话-办公自动化Excel格式美化

设置字体 在使用openpyxl 处理excel 设置格式&#xff0c;需要导入Font类&#xff0c;设置Font初始化参数&#xff0c;常见参数如下&#xff1a; 关键字参数 数据类型 描述 name 字符串 字体名称&#xff0c;如Calibri或Times New Roman size 整型 大小点数 bold …

Ae 效果:CC Page Turn

扭曲/CC Page Turn Distort/CC Page Turn CC Page Turn &#xff08;CC 翻页&#xff09;主要用于模拟书页翻动的效果。通过使用该效果&#xff0c;用户可以创建出像书页或杂志页面翻动的视觉效果&#xff0c;增强影片的交互性和视觉吸引力。 ◆ ◆ ◆ 效果属性说明 Contro…

3D孪生场景搭建:参数化模型

1、什么是参数化模型 参数化模型是指通过一组参数来定义其形状和特征的数学模型或几何模型。这些参数可以用于控制模型的大小、形状、比例、位置、旋转、曲率等属性&#xff0c;从而实现对模型进行灵活的调整和变形。 在计算机图形学和三维建模领域&#xff0c;常见的参数化模…

获取医疗器械板块的个股列表

获取医疗器械板块的个股列表&#xff0c;用python爬虫做到&#xff08;数据网址&#xff1a;板块 - 医疗器械概念 - 股票行情中心 - 搜狐证券&#xff09; import requests from bs4 import BeautifulSoup # 获取医疗器械概念个股列表url "https://q.stock.sohu.com/cn/…

​苹果应用高版本出现:“无法安装此app,因为无法验证其完整性”是怎么回事?竟然是错误的?

最近经常有同学私聊我问苹果应用签名后用落地页下载出现高版本是什么意思&#xff1f;我一脸懵&#xff01;还有这个操作&#xff1f;高版本是个啥玩意&#xff01;所以我就上了一下科技去搜索引擎搜索了下&#xff0c;哈哈哈&#xff0c;然后了解下来发现是这样的首先我们确定…

《Secure Analytics-Federated Learning and Secure Aggregation》论文阅读

背景 机器学习模型对数据的分析具有很大的优势&#xff0c;很多敏感数据分布在用户各自的终端。若大规模收集用户的敏感数据具有泄露的风险。 对于安全分析的一般背景就是认为有n方有敏感数据&#xff0c;并且不愿意分享他们的数据&#xff0c;但可以分享聚合计算后的结果。 联…

Go语言面经进阶10问

1.Golang可变参数 函数方法的参数&#xff0c;可以是任意多个&#xff0c;这种我们称之为可以变参数&#xff0c;比如我们常用的fmt.Println()这类函数&#xff0c;可以接收一个可变的参数。可以变参数&#xff0c;可以是任意多个。我们自己也可以定义可以变参数&#xff0c;可…

【Leetcode】二分查找合集

二分查找合集 二分模板leetcode 704.二分查找题目思路代码 Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置题目思路代码 35. 搜索插入位置题目思路代码 69.X的平方根题目思路代码 852. 山脉数组的峰顶索引题目代码 162.寻找峰值题目思路代码 153. 寻找旋转排序数组中…

CUDA C编程权威指南:1-基于CUDA的异构并行计算

什么是CUDA&#xff1f;CUDA&#xff08;Compute Unified Device Architecture,统一计算设备架构&#xff09;是NVIDIA&#xff08;英伟达&#xff09;提出的并行计算架构&#xff0c;结合了CPU和GPU的优点&#xff0c;主要用来处理密集型及并行计算。什么是异构计算&#xff1…

基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度(matlab代码)

目录 1 主要内容 系统结构图 P2G-CCS 耦合模型 其他算例对比 2 部分代码 3 下载链接 1 主要内容 该程序复现《基于阶梯碳交易的含P2G-CCS耦合和燃气掺氢的虚拟电厂优化调度》模型&#xff0c;以碳交易和碳封存成本、燃煤机组启停和煤耗成本、弃风成本、购气成本之和为目标…