软考高级架构师——5、系统规划分析与设计方法
系统计划主要用于描述从项目提出、选择到确立的过程,包括系统项目的提出与可行性
分析,系统方案的制订、评价和改进,新旧系统的分析和比较,以及现有软件、硬件和数据
资源的有效利用等问题。
1、项目的提出与选择
| 项目的立项目标和动机 | 进行基础研究并获取技术 进行应用研发并获得产品 提供技术服务 信息技术产品的使用者 |
| 项目的选择和确定 | 选择有核心价值的产品/项目或开发方向 评估项目风险、收益和代价 |
| 项目提出和选择的结果 | 系统项目提出和选择的结果, 最终会以“产品/项目建议书”的方式来体现 |
2、可行性研究与效益分析
| 可行性研究的内容 | 经济可行性 技术可行性 法律可行性 执行可行性 方案的选择 |
| 可行性研究与效益分析 | 成本效益分析 项目可能涉及的收益 效益分析的若干指标和进一步的分析 |
| 可行性分析报告 | 可行性研究报告首先由项目负责人审查(审查内容是否可靠),再上报给上级主管审阅 (评估项目的地位)。从可行性研究报告中应当得出“行或不行”的决断。 |
3、方案的制订和改进
| 确定软件架构 | (1)分析模型的结构(2)一些对应于系统目标的最基本、最重要的实现要素(3)特性和要点的解释。这些附加的内容解释系统的一些特性、服务等是如何实现的。 |
| 确定实现的各种关键性要素和实现手段关键性的实现要素通常包括 | 关键的用例、最主要的控制类、功能和服务的首要组织方式(例如网站首页); 对象的组织模式; 常用和最关键的实现算法模型。关键性的实现手段通常包括: 选定基础计算平台,如操作系统、数据库、 Web 服务器、中间件平台等; 选定开发工具和开发环境,如计算机语言、构件库、工具软件等。 |
归结目标到最适合的计算体系 | 通常,提供开发工具和开发环境的组织总是有一些标准的计算体系可以选择(例如, .NET和 J2EE 等),因此对于大多数系统开发项目来说,比较各种标准计算体系与预期目标之间的匹配程度即可选定计算体系。 |
4、新旧系统的分析和比较
淘汰策略
第 3 象限为低水平、低价值区,即遗留系统的技术含量较低,且具有较低的商业价值。
对这种遗留系统的演化策略为淘汰
继承策略
第 4 象限为低水平、高价值区,即遗留系统的技术含量较低,可满足企业运作的功能
或性能要求,但具有较高的商业价值,目前企业业务对该系统仍有很大的依赖性。 对这种遗
留系统的演化策略为继承
改造策略
第 1 象限为高水平、高价值区,即遗留系统的技术含量较高,本身还有较大的生命力,
且具有较高的商业价值,基本上能够满足企业业务运作和决策支持的要求。这种系统可能建
成的时间还很短,对这种遗留系统的演化策略为改造。
集成策略
第 2 象限为高水平、低价值区,即遗留系统的技术含量较高,但其商业价值较低,可
能只完成某个部门(或子公司)的业务管理。
5、定义问题与归结模型
| 问题分析 | 在问题定义上达成共识 确定项目干系人和用户 定义系统的边界 |
| 问题定义 | 包括目标、功能需求和非功能需求三个方面。 功能需求 功能需求是用来指明系统必须做的事情,只有这些行为的存在,才有系统存在的价值。 (1)观感需求(2)易用性需求(3)性能需求(4)可操作性需求(5)可维护性和可移植性需求 |
6、需求分析与软件设计
| 需求分析的任务与过程 | 需求分析阶段的工作可以分成 4 个方面 (1)问题识别 需求的分类:功能需求、非功能需求和设计约束 需求工程:需求开发、需求管理 |
| 如何进行系统设计 | (1)组件的独立性。审视自己设计的系统,是否做到了高内聚、低耦合? (2)例外的识别和处理。谁能保证系统使用者都精确按照使用说明书使用? (3)防错和容错。当网络中断、数据库崩溃这样的灾难性事件发生时,系统也跟着崩溃吗? |
| 软件设计的任务与活动 | (1)概要设计(2)详细设计 Parnas 方法:将可能引起变化的因素隐藏 |
7、结构化分析与设计
结构化分析方法的基本思想是自顶向下逐层分解
结构化分析工具
数据流图( Data Flow Diagram, DFD)、数据字典( DataDictionary, DD)、结构化语言、判定表、判定树
结构化分析的工作步骤
(1)研究“物质环境”(2)建立系统逻辑模型(3)划清人机界限
数据流图
(1)数据流图的层次

(2) Context 图

(3)逐级分解

(4)DFD0 层图
结构化设计:
结构化设计包括架构设计、接口设计、数据设计和过程设计等任务。它是一种面向数据
流的设计方法,是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模
块化的过程。
概要设计:设计软件的结构、确定系统是由哪些模块组成,以及每个模块之间的关系。采用结构图(包括模块、调用、数据)来描述程序的结构,此外还可以使用层次图和 HIPO(层次图加输入/处理/输出图)
详细设计:确定应该如何具体地实现所要求的系统,得出对目标系统的精确描述。它采用自顶向下、逐步求精的设计方式和单入口单出口的控制结构。常使用的工具包括程序流程图、盒图、 PAD(Problem Analysis Diagram,问题分析图)、 PDL(ProgramDesign Language,程序设计语言)。
模块设计:
模块化是一个很重要的概念,它是将一个待开发的软件分解成为若干个小的简单部分——模块,每个模块可以独立地开发、测试。这是一种复杂问题的“分而治之”原则,其目的是使程序的结构清晰、易于测试与修改
1.信息隐蔽原则
信息隐蔽是开发整体程序结构时使用的法则,即将每个程序的成分隐蔽或封装在一个单
一的设计模块中,并且尽可能少地暴露其内部的处理。
2.模块独立性原则

8、面向对象的分析与设计
面向对象的基本概念
对象是系统中用来描述客观事物的一个实体
类则是对具有相同属性和服务的一个或一组对象的抽象
实体类:实体类映射需求中的每个实体
边界类:边界类用于封装在用例内、外流动的信息或数据流。边界类用于系统接口与系统外部进行交互
控制类:控制类是用于控制用例工作的类。控制类没有属性,但一定有方法
继承与泛化
继承:说明特殊类(子类)与一般类(父类)的关系。“交通工具”是“自行车”和“小轿车”的泛化
泛化:一般类与特殊类的关系。自行车”和“小轿车”从“交通工具”中继承。

多态与重载

模板类:类属类,它用来实现参数多态机制。一个类属类是关于一组类的一个特性抽象,
它强调的是这些类的成员特征中与具体类型无关的那些部分,而用变元来表示与具体类型有
关的那些部分。
消息和消息通信:消息就是向对象发出的服务请求,它通常包括提供服务的对象标识、消息名、输入信息和回答信息。
面向对象分析
面向对象分析的目标是开发一系列模型,这些模型描述计算机软件,当它工作时以满足
一组客户定义的需求。对象技术的流行,演化出了数十种不同的 OOA 方法,每个方法都引
入了一个产品或系统分析的过程、一组过程演化的模型及使软件工程师能够以一致的方式创
建每个模型的符号体系。
1. OOA/OOD 方法
OOA 模型中包括主题、对象类、结构、属性和服务 5 个层次,需经过标识对象类、标识结构与关联(包括继承、聚合、组合、实例化等)、划分主题、定义属性、定义服务 5 个步骤来完成整个分析工作。
2. Booch 方法
Booch 认为软件开发是一个螺旋上升的过程,每个周期中包括标识类和对象、确定类和
对象的含义、标识关系、说明每个类的接口和实现 4 个步骤

3. OMT 方法
OMT 是对象建模技术的缩写,它是由 Jam Rambaugh 及其同事合作开发的,它主要用
于分析、系统设计和对象设计。包括对象模型(静态的、结构化的系统的“数据”性质,通
常采用类图)、动态模型(瞬时的、行为化的系统“控制”性质,通常使用状态图)和功能
模型(表示变化的系统的“功能”性质,通常使用数据流图)。 OMT 方法的三大模型如表 8-6
所示
4.OOSE 方法
OOSE 是面向对象软件工程的缩写,它是由 Ivar Jacobson 提出的。它在 OMT 的基础
上,对功能模型进行了补充,提出了“用例”的概念,最终取代数据流图进行需求分析和建
立功能模型。
统一建模语言
统一建模语言(Unified Modeling Language, UML)是用于系统的可视化建模语言,它将
OMT、 OOSE 和 Booch 方法中的建模语言和方法有机地融合在一起,是国际统一的软件建
模标准。
UML 是一种语言、一种可视化语言、一种可用于详细描述的语言
UML 的结构:
| 构造块 | 建模元素 | 包括结构事物(类、接口、协作、用例、活动类、组件、节点等)、行为事物(交 互、状态机)、分组事物(包)、注释事物 |
| 关系 | 包括关联关系、依赖关系、泛化关系、实现关系 | |
| 图 | 静态模型:类图、对象图、包图、构件图、部署图、制品图 交互概览图 | |
| 公共机制 | 规格说明 | 规格说明是元素语义的文本描述,它是模型的重要组成部分 |
| 修饰 | UML 为每一个模型元素设置了一个简单的记号,还可以通过修饰来表达更多的信息。 | |
| 公共分类 | 包括类元与实体(类元表示概念,而实体表示具体的实体)、接口和实现(接口 用来定义契约,而实现就是具体的内容)两组公共分类 | |
| 扩展机制 | 包括约束(添加新规则来扩展元素的语义)、构造型(用于定义新的 UML 建模元素)、标记值(添加新的特殊信息来扩展模型元素的规格说明) | |
| 架构 | 逻辑视图:以问题域的语汇组成的类和对象集合。 进程视图:可执行线程和进程作为活动类的建模,它是逻辑视图的一次执行实例。 实现视图:对组成基于系统的物理代码的文件和组件进行建模。 部署视图:把组件物理地部署到一组物理的、可计算的节点上。 用例视图:最基本的需求分析模型。 | |
用例图

包含关系:当可以从两个或两个以上的原始用例中提取公共行为,或者发现能够使用一个组
件来实现某一个用例的部分功能是很重要的事时,应该使用包含关系来表示。所提取出来的
公共行为称为抽象用例。包含关系的例子如图 8-13 所示。
扩展关系:如果一个用例明显地混合了两种或两种以上的不同场景,即根据情况可能发生多
种事情。可以将这个用例分为一个主用例和一个或多个辅用例,描述可能更加清晰。扩展关
系的例子如图 8-14 所示。
类图和对象图

① 依赖关系。有两个元素 X、Y,如果修改元素 X 的定义可能会引起对另一个元素 Y 的
定义的修改,则称元素 Y 依赖于元素 X。在 UML 中,使用带箭头的虚线表示依赖关系。
② 泛化关系。泛化关系描述了一般事物与该事物中的特殊种类之间的关系,也就是父
类与子类之间的关系。继承关系是泛化关系的反关系,也就是说子类是从父类中继承的,而
父类则是子类的泛化。在 UML 中,使用带空心箭头的实线表示,箭头指向父类。
③ 关联关系。关联表示两个类之间存在某种语义上的联系。例如,一个人为一家公司
工作,一家公司有许多办公室。就认为人和公司、公司和办公室之间存在某种语义上的联系。
④ 实现关系。实现关系是用来规定接口和实现接口的类或组件之间的关系的。接口是
操作的集合,这些操作用于规定类或组件的服务。在 UML 中,用一个带空心箭头的虚线表
示。
交互图
| 顺序图 | 顺序图用来描述对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。![]() |
| 通信图 | 通信图用于描述相互合作的对象间的交互关系和链接关系,顺序图着重体现交互的时间顺序, 通信图则着重体现交互对象间的静态链接关系。 ![]() |
| 定时图 | 如果要表示的交互具有很强的时间特性(例如,现实生活中的电子工程、 实时控制等系统中),在 UML 1.X 中是无法有效地表示出来的。而在 UML 2.0 中引入了一 种新的交互图来解决这类问题,这就是着重表示定时约束的定时图 ![]() |
| 状态图 | 用来描述一个特定对象的所有可能状态及其引起状态转移的事件。大多数面向对象技术
|
| 活动图 | 活动图的应用非常广泛,它既可用来描述操作(类的方法)的行为,也可以描述用例和 对象内部的工作过程。活动图是由状态图变化而来的,它们各自用于不同的目的。 ![]() |
| 带泳道的活动图 | ![]() |
| 对象流 | 在活动图中可以出现对象。对象可以作为活动的输入或输出,对象与活 动间的输入/输出关系由虚线箭头来表示。如果仅表示对象受到某一活动的影响,则可用不 带箭头的虚线来连接对象与活动。 |
| 信号 | 在活动图中可以表示信号的发送与接收,分别用发送和接收标识来表示。 发送和接收标识也可与对象相连,用于表示消息的发送者和接收者。 |
| 构件图 | 构件图是面向对象系统的物理方面进行建模要用的两种图之一。它可以有效地显示一组 构件,以及它们之间的关系。构件图中通常包括构件、接口及各种关系。 ![]() |
| 部署图 | 部署图,也称为实施图,它和构件图一样,是面向对象系统的物理方面建模的两种图之
|
9、用户界面设计
接口设计主要包括三个方面的内容:一是设计软件构件间的接口;二是设计模块和其他
非人的信息生产者和消费者(如外部实体)的接口;三是人(如用户)和计算机间界面设计。
| 1 用户界面设计的原则 | 置用户于控制之下、减少用户的记忆负担![]() |
| 2 用户界面设计过程 | 用户界面的设计过程也应该是迭代的,它通常包括 4 个不同的框架活动![]() |
10、工作流设计
工作流是一类能够完全或者部分自动执行的经营过程,根据一系列过程规则、文档、信息或任务在不同的执行者之间传递、执行
11、 简单分布式计算机应用系统的设计
12、系统运行环境的集成与设计
- 1.集中式系统
- 2.分布式系统
- 3. C/S 结构
- 4.多层结构
- 5.Internet、 Intranet 和 Extranet:Intranet 是私有网络,只限于内部使用,也使用 TCP/IP
- 协议。 Extranet 是一个扩展的 Intranet。它包括企业之外的和企业密切相关合作的其他企业。
13、系统过渡计划
1.直接过渡:新系统运行时,立即关闭原来的系统
2.并行过渡:让新系统和旧系统在一段时间里同时运行,通过这样的旧系统作为新系统的备份,可以大大降低系统过渡的风险
3.阶段过渡
相关文章:
软考高级架构师——5、系统规划分析与设计方法
系统计划主要用于描述从项目提出、选择到确立的过程,包括系统项目的提出与可行性 分析,系统方案的制订、评价和改进,新旧系统的分析和比较,以及现有软件、硬件和数据 资源的有效利用等问题。 1、项目的提出与选择 项目的立项目标…...
区块链学习6-长安链部署:如何创建特定共识节点数和同步节点数的链
正常prepare的时候只支持4 7 13 16个节点个数,想要创建10个节点,其中5个是共识节点,如何实现? 1. 注释掉prepare.sh的这几行: 2. 修改 crytogen的模板文件: 如果是cert模式:chainmaker-crypt…...
北航基于openEuler构建工业机器人操作系统,打造“开箱即用”的机器人基础软件平台
北京航空航天大学是国家“双一流”建设高校,以建设扎根中国大地的世界一流大学为发展目标。北京航空航天大学在机器人领域一直处于行业前沿,以其亮眼的成果和优秀的师资力量,成为国内机器人领域的重要参与者和建设者。机器人操作系统是机器人…...
孤儿进程与僵尸进程
进程退出 关于进程退出有两个函数 exit和 _exit:其主要差别是在于是否直接退出。 其流程主要区别如下: 孤儿进程(不存在危害) 父进程运行结束,但子进程还在运行(未运行结束),这…...
redis的基础命令01
1、操作库的指令 1、清除当前库---flushdb 2、清除所有库---flushAll 2、操作key的指令 最常用的指令get、set 1)set key value 2)get key 基础指令 1、del 删除单个:del key 、批量删除:del key1 key2 key3 2、exists 判断key是否…...
批量将excel文件合并
要批量合并多个Excel文件,可以按照以下步骤进行操作: 1. 导入所需的Python库:首先,您需要导入pandas库来处理Excel文件。 import pandas as pd 2. 定义文件路径和输出文件名称: input_folder "your_input_fo…...
关于Vue与服务器端的通信:如何实现登录鉴权
随着前后端分离开发模式的流行,Vue作为一种轻量级的JavaScript框架,被广泛用于前端开发。Vue可以与服务器进行通信来获取数据和进行鉴权,本文将探讨如何实现登录鉴权的过程,并给出相应的代码示例。 一、前端登录请求的发送与接收…...
GrapeCity Documents for Excel, .NET Crack
GrapeCity Documents for Excel, .NET 增加了对双面打印的支持。 GcExcel.NET支持PrintOutOptions类中的Duplex枚举,以启用/禁用页面上的双面打印。 枚举中有四个选项,用户可以相应地使用它们来打印工作簿: 双面打印。Default表示打印机的默认…...
wordpress网站Ajax留言评论+自定义评论字段
前端代码,下面的电话,公司,为自定义字段。 <form method"post" id"commentform" class"comment-form shansubmit" ><lable>用户</lable><input id"author" type"text&qu…...
AJAX-笔记(持续更新中)
文章目录 Day1 Ajax入门1.AJAX概念和axios的使用2. 认识URL3.URL的查询参数4.常用的请求方法和数据提交5.HTTP协议-报文6.接口文档7.form-serialize插件8.案例用户登录 Day2 Ajax综合案bootstrap弹框图书管理图片上传更换背景个人信息设置 Day3 AJAX原理XMLHttpRequestPromise封…...
模板复用和文章详情页(Go搭建qiucode.cn 之七)
模板复用其实就是动态内容驱动着部分变化的区域,公共区域是整个网站页面都在共用的内容,这便是模板复用的妙处。 模板复用 作为服务端编程语言的Golang,在web模板渲染引擎上当然也不逊色于其他同类型的服务端语言,它同样也有属于自己的那一套模板渲染引擎。 更为确切的叫…...
Android 使用SQLite的案例详解
1、说明 sqlite是个轻量级的数据库,可用于嵌入式。有时候做本地的web开发的时候,我会把sqlite作为内置数据库,这样便于部署,直接启动应用即可。 这里主要是将android中的使用过程记录一下。主要包含,数据如何初始化,在不同的activity中如何使用,以及增删改查的实现。 …...
linux 命令--查看网络端口命令
使用 netstat 检查端口 netstat 是一个命令行工具,可以提供有关网络连接的信息。 netstat - atulnp会显示所有端口和所有对应的程序,用grep管道可以过滤出想要的字段 -a :all,表示列出所有的连接,服务监听ÿ…...
python一个请求chatgpt3.5模型例子
当然可以!你可以使用OpenAI的 openai.ChatCompletion.create() 方法来请求 ChatGPT 3.5 模型的回复。以下是一个使用Python进行请求的示例代码: python import openai# 设置OpenAI API的访问密钥 openai.api_key YOUR_API_KEY# 发送请求给ChatGPT模型 …...
数据结构:栈的实现(C实现)
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》 文章目录 前言一、栈的实现思路1. 结构的定义2. 初始化栈(StackInit)3. 入栈(StackPush)4. 出栈(StackPop)5. 获取栈顶元素(StackTop)6. 检查栈是否为空(StackEmpty)7. 销毁栈(StackDestroy) 二、…...
v-md-editor自定义锚点(生成目录)数组转树结构
接前两篇博文,最终方案终于定了,也把之前做的编辑器模式给否决了,原因是系统中有老的文档需要平替,因此就不能通过编辑器这种模式了,太麻烦了。 最终方案:线下手动pandoc word转markdown,然后将…...
java 11 新特效解读(2)
目录 全新的HTTP 客户端API 更简化的编译运行程序 废弃Nashorn引擎 ZGC 优势: ZGC的设计目标是: 在当前JDK中看不到什么? 一个标准化和轻量级的JSON API 新的货币API 展望 全新的HTTP 客户端API HTTP,用于传输网页的…...
linux patch 和 git patch
一、Linux patch 文件生成和应用 生成方式1:patch #多文件打 patch diff -uparN file1 file2 > xx.diff diff -uparN folder1 folder12 > xx.diff ------------------------------------------------------- diff --help -u 显示有差异行的前后几行(上下文)…...
【vue Dplayer】播放hls视频流
准备工作 安装Dplayer和hls.js npm install dplayer --save npm install hls.js --save准备测试流 hls测试地址:(截止2023.08.08有效) http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8 <template><d…...
给不蒜子(busuanzi)统计数据增加初始值
背景 最近把个人博客迁移到了Hexo框架,并使用了Butterfly主题,得益于博客框架的易用性和主题功能的丰富程度,感觉非常的香。我对比了很多Hexo主题,这一个算是在功能、审美、文档等各方面几乎完美符合我需求的。 Butterfly很贴心…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...











