精华内容
下载资源
问答
  • 2020-01-28 20:06:25

    网络系统设计过程一般可认为有如下几个阶段:

    ⒈需求分析阶段

    开发人员准确地理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应的需求规格说明的过程。

    ⒉逻辑网络设计

    网络逻辑结构设计是体现网络设计核心思想的关键阶段,在这一阶段根据需求规范和通信规范选择一种比较适宜的网络逻缉结构,并基于该逻辑结构实施后续的资源分配规划、安全规划等内容。网络的逻辑结构设计来自于用户需求中描述的网络行为和性能等要求。逻辑设计要根据网络用户的分类和分布,选择特定的网络技术,形成特定的网络结构。网络结构大致描述了设备的互联及分布,但是不对具体的物理位置和运行环境进行确定。

    附:逻辑网络设计——三层网络结构(核心汇聚接入)学习心得

    ⒊物理网络设计

    物理网络设计是对逻辑网络设计的物理实现,通过对设备的具体物理分布、运行环境等的确定,确保网络的物理连接符合逻辑连接的要求。在这一阶段,网络设计者需要确定具体的软硬件、连接设备、布线和服务。

    附:物理网络设计——结构化综合布线系统

    ⒋实施阶段

    依据物理网络设计阶段的成果,实现网络综合布线

    ⒌系统测试与验收

    ⒍网络安全、管理与系统维护


    我是根据软考中的考点写的这篇博客。

    软考的考察重点在于逻辑网络设计中的三层网络结构(接入层汇聚层核心层) 和物理网络设计中的 结构化布线系统的六个子系统。这些我都写了自己的学习心得并以博客链接的方式附在了对应的阶段下面。

    更多相关内容
  • PDCA循环的四个阶段、八个步骤 PDCA循环,也称戴明环,是由美国著名质量管理专家戴明(W、E、...计划阶段包括以下四个步骤: 第一步,分析现状,找出存在的质量问题。 第二步,分析原因和影响因素。针对找出的质量

    PDCA循环的四个阶段、八个步骤

    PDCA循环,也称戴明环,是由美国著名质量管理专家戴明(W、E、Deming)首先提出的。这个循环主要包括四个阶段:计划(Plan)、实施(Do)、检查(Check)和处理(Action),及八个步骤,八个步骤是四个阶段的具体化。

    一、 计划(P)阶段

    计划是质量管理的第一阶段。通过计划,确定质量管理的方针、目标,以及实现该方针和目标的行动计划和措施。

    计划阶段包括以下四个步骤:

    第一步,分析现状,找出存在的质量问题。

    第二步,分析原因和影响因素。针对找出的质量问题,分析产生的原因和影响因素。

    第三步,找出主要的影响因素。

    第四步,制定改善质量的措施,提出行动计划,并预计效果。在进行这一步时,要反复考虑并明确回答以下问题:

    1)为什么要制定这些措施(Why)?

    2)制定这些措施要达到什么目的(What)?

    3)这些措施在何处即哪个工序、哪个环节或在哪个部门执行(Where)?

    4)什么时候执行(When)?

    5)由谁负责执行(Who)?

    6)用什么方法完成(How)?

    以上六个问题,归纳起来就是原因、目的、地点、时间、执行人和方法,亦称5W1H问题。

    二、实施(D)阶段。该阶段只有一个步骤,即第五步:

    第五步,执行计划或措施。

    三、检查(C)阶段 。这个阶段也只包括一个步骤,即第六步:

    第六步,检查计划的执行效果。通过做好自检、互检、工序交接检、专职检查等方式,将执行结果与预定目标对比,认真检查计划的执行结果。

    四、处理(A)阶段。包括两个具体步骤:

    第七步,总结经验。对检查出来的各种问题进行处理,正确的加以肯定,总结成文,制定标准。

    第八步,提出尚未解决的问题。通过检查,对效果还不显著,或者效果还不符合要求的一些措施,以及没有得到解决的质量问题,不要回避,应本着实事求是的精神,把其列为遗留问题,反映到下一个循环中去。

    处理阶段是PDCA循环的关键。因为处理阶段就是解决存在问题,总结经验和吸取教训的阶段。该阶段的重点又在于修订标准,包括技术标准和管理制度。没有标准化和制度化,就不可能使PDCA循环转动向前。

    PDCA循环,可以使我们的思想方法和工作步骤更加条理化、系统化、图像化和科学化。

    什么是PDCA循环管理

    PDCA循环是由美国统计学家戴明博士提出来的,它反映了质量管理活动的规律。P(Plan)表示计划;D(Do)表示执行;C(Check)表示检查;A(Action)表示处理。PDCA循环是提高产品质量,改善企业经营管理的重要方法,是质量保证体系运转的基本方式。

    PDCA是指以下四个阶段,这四个阶段是环环相扣的,这个周期是周而复始的:

    P Plan 计划

    D Do 实施

    C Check 检查

    A Action 总结、再优化

    PDCA分以下八上步骤

    计划阶段

    1、分析现状

    2、找出问题的原因

    3、分析产生问题的原因

    4、找出其中的主要原因

    5、拟订措施计划

    实施阶段

    6、执行技术组织措施计划

    检查阶段

    7、把执行结果与预定目标对比

    总结、再优化阶段

    8、巩固成绩,进行标准化

    PDCA循环是由美国统计学家戴明博士提出来的,它反映了质量管理活动的规律。P(Plan)表示计划;D(Do)表示执行;C(Check)表示检查;A(Action)表示处理。PDCA循环是提高产品质量,改善企业经营管理的重要方法,是质量保证体系运转的基本方式。

    PDCA循环的特点PDCA表明了质量管理活动的四个阶段,每个阶段又分为若干步骤。

    在计划阶段,要通过市场调查、用户访问等,摸清用户对产品质量的要求,确定质量政策、质量目标和质量计划等。它包括现状调查、原因分析、确定要因和制定计划四个步骤。

    在执行阶段,要实施上一阶段所规定的内容,如根据质量标准进行产品设计、试制、试验,其中包括计划执行前的人员培训。它只有一个步骤:执行计划。

    在检查阶段,主要是在计划执行过程之中或执行之后,检查执行情况,看是否符合计划的预期结果。该阶段也只有一个步骤:效果检查。

    在处理阶段,主要是根据检查结果,采取相应的措施。巩固成绩,把成功的经验尽可能纳入标准,进行标准化,遗留问题则转入下一个PDCA循环去解决。它包括两个步骤:巩固措施和下一步的打算。

    PDCA循环四阶段各步骤。

    1.PDCA循环一定要按顺序进行,它靠组织的力量来推动,像车轮一样向前滚进,周而复始,不断循环。

    2.企业每个科室、车间、工段、班组,直至个人的工作,均有一个PDCA循环,这样一层一层地解决问题,而且大环套小环,一环扣一环,小环保大环,推动大循环。

    这里,大环与小环的关系,主要是通过质量计划指标连接起来,上一级的管理循环是下一级管理循环的根据,下一级的管理循环又是上一级管理循环的组成部分和具体保证。通过各个小循环的不断转动,推动上一级循环,以至整个企业循环不停转动。通过各方面的循环,把企业各项工作有机地组织起来,纳入企业质量保证体系,实现总的预定质量目标。因此,PDCA循环的转动,不是哪一个人的力量,而是组织的力量、集体的力量,是整个企业全体职工推动的结果。

    3.每通过一次PDCA循环,都要进行总结,提出新目标,再进行第二次PDCA循环,使质量管理的车轮滚滚向前。PDCA每循环一次,质量水平和管理水平均提高一步。

     

     

    展开全文
  • 文章目录分布式系统设计前言一、什么是分布式系统二、CAP理论三、中间件、常见分布式问题解决方案及举例(真正的解决方案改天有空写写吧)总结 前言 此文章内容仅供参考,起因是我面试一家公司被问到了 如果让你...

    分布式系统设计


    前言

    此文章内容仅供参考,起因是我面试一家公司被问到了

    如果让你设计一个分布式系统,你会如何设计?

    这个问题问的我哑口无言,不知所云,讲不出话
    所以就,,就总结了一些,提供给那些也被这么面试过的人看看
    文章没写啥实际的解决方案(实际的解决方案我是懂的,就是写出来的话还是需要时间构思一下),先就是提供一套说词,如果被问到,应该从什么方面讲,如何才能讲的好


    一、什么是分布式系统

    首先谈一下什么是分布式系统?分布式系统是由许多计算机节点组成,为了完成单个计算机无法完成的任务,通过网络通信,共同协调,组成一个复杂的系统,利用更多的计算机节点,处理更大的数据量和更高的并发量。(面试的时候可以不用扯太多这方面的,不是重点,大家都懂

    二、CAP理论

    分布式系统的设计,离不开一个理论,CAP理论。C是一致性,保证在某个时间读取到的数据是一致的,比如事务的一致性,缓存的一致性,多副本的一致性等。A是可用性,就被叫做可达性,在高并发或者系统性能不足的情况下,出现超时等情况,导致客户端的请求不可达,系统无法提供可靠的服务。P是分区容错性,系统变成分布式之后,就有了多个节点,节点之间的需要进行网络通信,就可能存在网络超时,网络中断等情况。在分布式的环境下,P是一个必须要存在的条件,一般是CP或者AP,之间权衡,CP保证数据的强一致性,但是牺牲了性能,比如zookeeper,AP保证系统高可用,但牺牲了一定的一致性,如数据库主从复制,kafka副本机制。

    基于CAP理论,我们可以知道分布式系统的设计,存在以下几个问题

    1. 高并发场景下的性能问题
    2. 高可靠问题,如何尽量减少故障发生的次数
    3. 高可用问题,如何保证发生了故障后能尽快的恢复
    4. 分布式事物问题,如何保证缓存数据库,两个数据库,两个服务,两个文件等数据的一致性
    5. 多副本一致性问题,kafka副本机制,zookeeper leader节点与flower节点的数据同步等等
    6. 跨域容灾,异地多活

    而我们做分布式系统,为什么会引发这些问题呢,还得从我们引入的模块与中间件说起(引出一些问题,说明你有去做思考

    三、中间件

    介绍一下我们系统中所使用到的一些组件(每个人因为项目不同这方面都不同,可以针对自己使用的组件介绍一下,最好做一下技术选型的对比,比如消息队列为什么你们最终选了kafka,注册中心为什么是nacos)(这里引出中间件,就是因为加了这么些中间件,才引发的那些问题,最后才有解决问题的说法,然后也可以谈谈中间件怎么引入,总不能一直说怎么解决那些问题吧,很枯燥,面试官可能也没兴趣) :

    • 底层架构:以springcloud为基础架构,用dubbo做统一数据中台rpc调用层(一般是给flink等计算的中间件调用的)
    • 负载均衡:nginx,高性能,高并发的web服务器,提供反向代理,静态资源缓存,访问控制,限流等功能
    • 服务网关:用来做请求的过滤和校验,限流以及监控功能。zuul或者gateway,gateway框架较新,支持websocket,支持集成hystrix,sentinel做负载均衡,基于异步非阻塞io,底层netty写的,性能更好,zuul是老式框架才会用的,现在我们系统中基本已经废弃
    • 注册中心:用来做服务注册与发现,常见的有zookeeper,支持强一致性,eureka,基于高可用,以及nacos可以在两种类型中自由切换,并且支持分布式的配置中心功能
    • 服务熔断,限流,降级组件,hystrix和sentinel,sentinel界面更加美观,轻松配置,现在我们系统中集成的是这个
    • 分布式链路追踪:skywalking(这个分布式链路追踪被问过好多回)
    • 消息队列:异步解耦削峰,同时带来了消息一致性,持久性,幂等性等问题,保证吞吐量可以使用kafka或者rocketmq,保证低延迟首选rabbitmq,我们系统中大部分做大数据处理的,所以采用了kafka
    • 分布式缓存:缓存已经不局限于单节点服务器中,开始用一个专门的中间件来做了,一般是redis
    • 数据库:mysql,大数据量的情况下需要进行分库分表,集群部署,也带来了分布式事物,多副本一致性问题
    • 搜索引擎:针对大量文档,做到搜索的毫秒级响应,自带去中心化集群,简单容易上手,elasticsearch肯定是首选的,以前的使用的solr集群部署,字段添加删除依赖zookeeper,对开发及其不友好,已废弃
    • 日志:elk,flume等日志解析架构,日志埋点
    • 大数据平台:针对单表超过亿级或者数据量达到TB级的,我们都选择用大数据框架进行存储,由原先的CDH平台架构,升级到现在的kettle,flink,doris数仓架构,借用分布式调度工具,数据同步工具,实现对数据的离线或者实时分析
    • 容器化部署:docker,k8s

    四、常见分布式问题解决方案及举例(真正的解决方案改天有空写写吧)

    正是因为引入了那些中间件,所以出现了很多分布式的问题,下面谈谈一些分布式问题的具体解决方案和举例吧(引出解决问题,我这里就大致列了一些问题,没有谈具体的解决方案,大家可以自己去查阅资料或者我有空会写一写或者看看我文章末尾发的git,里面都有,最近忙于面试,没啥时间):

    • 分布式事务问题解决方案:两阶段,三阶段,tcc,消息队列(事务消息,本地消息列表),同步双写+异步对账,阿里云seata
    • 分布式线程安全问题:数据库CAS更新,redis或者zookeeper的分布式锁
    • 缓存与数据库一致性问题:延迟双删,CDC变更数据捕获机制
    • 多副本一致性问题:mysql半同步复制数据不一致问题,kafka数据丢失问题,paxos,raft,zab算法
    • 单点故障问题:故障探测,故障转移,master选举,redis sentinel集群举例
    • 集群脑裂问题:mysql HMA架构,master节点隔离的方式解决集群脑裂方式,es解决集群脑裂
    • 高可用依赖的连环套问题:redis sentinel集群,互相探测心跳
    • 侧重于并发读系统与侧重于并发写系统的分析
    • 跨域容灾,异地多活怎么做

    总结

    只是提供一个说法和思路,真正面试的时候,还是要自由发挥,这不是八股文,自己背是肯定背不下来,一问就倒,还是要深入去理解一些东西,看看书吧,推荐一本我看的,现在这个年代,要是不会分布式,真的搞不了。

    架构设计2.0:大型分布式系统架构方法论与实践

    还有分享最近自己准备面试然后准备的八股文以及答案,我都是写java代码里面,有兴趣自己clone看看

    https://gitee.com/you-jianming/code.git

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 软件工程 | 第系统设计

    万次阅读 2020-04-13 16:36:44
    软件工程 系列为本学期(2020春季)软件工程...1.软件设计的两阶段 2.软件设计的目标 3.软件设计中的信息流 4.软件设计的指导性原则 二、软件设计的基本原理 (一)模块化 (二)抽象 (三)逐步求精 ()信息...

    软件工程 系列为本学期(2020春季)软件工程以及软件工程实践课程笔记整理~

    天朗气清,惠风和畅,空气里渐渐飘起了调皮的柳絮

    今天软工老师终于上课啦,来更新一波笔记~

    目录

    一、软件设计的目标的任务

    1.软件设计的两个阶段

    2.软件设计的目标

    3.软件设计中的信息流

    4.软件设计的指导性原则

    二、软件设计的基本原理

    (一)模块化

    (二)抽象

    (三)逐步求精

    (四)信息隐藏

    (五)模块的独立性

    启发式设计规则(不属于普遍遵循的原理)

    三、软件体系结构设计

    1.软件体系结构的概念

    2.软件体系结构的重要性

    3.软件体系结构风格

    4.软件体系结构设计方法 

    四、系统设计方法(实现设计模型的手段和方法) 

     (一)程序流程图

    (二)盒图(N-S图)

    (三)问题分析图(problem analysis diagram, PAD)

    (四)HIPO图(Hirearchy plus input/processing/output)

    (五)判定表

    (六)判定树

    (七)过程设计语言(Process design language,PDL)

    (八)Jackson图

    五、用户界面设计

    1.设计原则

    2.设计过程

    3.设计方法


    软件设计:根据需求分析的“做什么”来确定系统该“怎样做”。需要有经验的软件设计师完成、设计方法遵循一系列的原则和策略、经过专家和用户的评审

     

    一、软件设计的目标的任务

    1.软件设计的两个阶段

    (1)概要设计

    • 包含数据设计、体系结构设计、接口设计、过程设计
    • 任务-->将需求分析转化为软件的系统结构和数据结构
      • 分解独立的软件部件
      • 建立模块之间的层次结构、调用关系、模块间的接口、人机交互界面

    (2)详细设计-->对概要设计阶段建立的模型进行详细的定义和说明

    • 确定每个模块的具体算法
    • 模块内部数据结构和数据库的物理结构
    • 模块接口的具体实现
    • 每个模块设计测试用例
    • 文档->复审

    2.软件设计的目标

    通过一系列迭代过程生成一个要构造的实体的模型/表示

    3.软件设计中的信息流

    在需求分析基础上,将分析模型中的数据、功能、行为模型-->设计模型中的数据设计、体系结构设计、接口设计、构件设计

    (1)体系结构设计:软件主要结构性元素及其之间的关系,从需求规约、分析模型和分析模型定义的系统交互中导出

    (2)数据设计:将信息模型(E-R图定义的对象和关系、数据字典中的详细数据内容)-->数据结构/数据库结构

    (3)接口设计:内部模块之间、软件和外部系统之间、软件和人之间的通信   基于数据流图和控制流图

    (4)过程设计(构件设计):描述软件构件的内部实现细节

    4.软件设计的指导性原则

    (1)可跟踪性:设计阶段的单独一个元素可跟踪到需求的一个或多个方面

    (2)一致性:一致的概念、符号、术语;一致的内部接口、软硬件接口

    (3)可靠性:即使遇到异常数据、事件、操作也可以平滑巧妙地降级

    (4)简单性

    (5)适应性:构件具有良好的可扩展性

    (6)清晰性

     

    二、软件设计的基本原理

    (一)模块化

    1.模块

    • 由一个总体标识符来代表的,包含输入/输出、逻辑处理功能、内部信息以及运行计划的语句集合
    • 模块是构件的一种形式,eg:过程、函数宏、子函数
    • 特点:接口、功能、逻辑(功能的实现方法)、状态(运行环境和调用关系)

    2.模块化

    • 将软件系统划分为可独立命名、单独访问的模块,每个模块具有特定的功能属性,模块集成到一起即可构成满足用户需求的软件系统
    • 可提高代码的可使用、可重用、可理解性;简化软件维护

    3.Merey标准-->如何分解、模块大小如何设计

    • 模块可分解性
    • 可组装性
    • 可理解性:不参照其他模块可单独理解
    • 连续性:修改软件模块时只对少数模块进行修改,且修改后不影响整体功能
    • 保护性:模块出现错误异常时只影响自身

     

    (二)抽象

    1.抽象方法:从考虑的问题出发,撇开事物现象的、外部的、偶然的东西,抽出事物本质的、内在的、必然的东西,从空间形式和数量关系上揭示客观对象的本质和规律。

    2.软件生命周期过程中每前进一步都是对软件抽象层次的进一步细化。抽象的最低层次是源程序代码。

    3.两种常用的抽象手段:

    • 过程抽象-->任何一个完成明确功能的操作都可被当做单个实体
    • 数据抽象-->定义数据类型和对该类型的操作、限制对象值的范围

     

    (三)逐步求精

    1.是一种自顶向下的设计策略,逐步细化问题的实质和细节,最终完善地解决问题

    2.在软件设计中,逐步求精就是把软件设计中的问题按照优先级和层次进行排队,并逐步对各个问题进行解决

    3.抽象和逐步求精是互补的过程,层次结构的上一层是下一层的抽象,下一层是上一层的求精

     

    (四)信息隐藏

    1.信息隐藏:模块内的数据和过程对不需要这些信息的模块是不能进行访问的

    2.使模块更具有独立性;使软件维护相对容易

     

    (五)模块的独立性

    1.模块独立性:每个模块只完成系统要求的独立子功能,在数据和信息交互与其他模块没有或者极少关联

    2.具有独立性的模块容易开发-->功能分隔彻底使得接口简单  容易测试和维护-->错误传播的范围小

    3.衡量独立程度的度量:耦合 内聚 -->目标:高内聚 低耦合

    4.耦合-->软件系统内部不同模块之间的相互关联程度的度量,耦合的强弱取决于模块间接口的复杂程度、调用模块的方式、组件间通信接口方式

     

    (1)非直接耦合

    模块具有完全的功能上的独立性,模块之间不存在数据信息传递,仅依靠调用关系实现软件功能

    (2)数据耦合

    模块间的调用关系通过传递数据实现 eg:函数输出值的传递

     

    (3)特征耦合

    一个模块向另一个模块传递非全局的数据结构

    (4)控制耦合

    模块间不仅传递数据,还传递对运行过程有影响的控制信号

    使一个模块的执行直接影响到接受控制信号模块的运行

    (5)外部耦合

    一组模块均访问同一个全局简单变量 eg:extern型的外部变量

    (6)公共耦合

    多个模块共同引用公共数据环境(全局数据结构、共享通信区、内存公共覆盖区、介质上共享文件)

    (7)内容耦合

    一个模块直接修改、操作另一模块的内部数据,或者直接转入另一个模块

     

     

    5.内聚-->模块内部数据和过程等信息之间的紧密程度。各元素联系越紧密,内聚性越高。

    (1)偶然内聚

    模块内各处理元素之间没有任何关系,对其修改需谨慎

    (2)逻辑内聚

    逻辑相关的功能被放在同一模块中,eg:一个模块读取各种不同类型外设的输入

    逻辑内聚模块各元素在功能上并无关系

     

    (3)时间内聚

    模块完成的功能必须在同一时间内执行,功能只因为时间因素关联在一起。Eg: 系统初始化

    (4)过程内聚

    模块内各个元素必须按照一定的顺序执行,主要与程序的执行过程有关,而与功能无关   Eg:主模块

    弱点:超越了模块的功能界限-->可能包含某一级模块的功能,同时包含更低层模块的功能

    (5)通信内聚

    模块内所有处理元素都在同一数据结构上操作   Eg:事务处理系统

    (6)顺序内聚

    各处理元素都密切相关与同一功能,且必须按照顺序执行

    弱点:模块完成多个功能或部分功能-->模块功能不单一

    (7)功能内聚

    模块内所有元素共同完成一个功能,缺一不可

    好处:界面清晰、容易理解,复用性较好

     

    启发式设计规则(不属于普遍遵循的原理)

    1.改进软件结构提高模块独立性:通过模块分解/合并-->降低耦合 提高内聚

    2.模块规模适中

    3.深度、宽度、扇入、扇出合理

    • 深度:软件结构中控制的层数,粗略表示一个系统的大小和复杂程度
    • 宽度:软件结构中同一层次上模块总数的最大值,宽度越大系统越复杂
    • 扇入:直接调用当前模块的上级模块数目,扇入越大表明模块的使用效率越高

    • 扇出:一个模块直接控制的模块数目,扇出过大意味着模块过分复杂

    • 模块扇出过大时,可以增加中间层次的控制模块

     

    4.模块的作用域应该在控制域内

    作用域:受该模块内的判定影响的所有模块的集合

    控制域:模块本身及其所有直接或间接从属与它的模块的集合

    所有受判定影响的模块都从属于做出判定的模块

    5.力争降低模块接口的复杂程度

    6.设计单入口单出口的模块

    7.模块功能可以预测-->输入数据相同时输出相同

     

    三、软件体系结构设计

    1.软件体系结构的概念

    • Dewayne Perry、Alex Wolf

    具有一定形式的结构化元素,即构件的集合,包括处理构件(对数据加工)、数据构件(被加工的信息)、连接构件(组合连接不同部分)

    • Mary Show 、David Garlan

    处理算法与数据结构之上关于整体系统结构设计和描述方面的一些问题,eg:全局组织和全局控制结构、关于通信 同步 与数据存取的协议

    • Kruchten

    概念角度-->系统的主要构件及其之间的关系

    模块角度-->功能分解与层次结构

    运行角度-->描述系统的动态结构

    代码角度-->代码和库函数在开发环境中的组织

    • Bass 、Cements、Kazman

    一个程序/计算机系统的软件体系结构包括一个/一组 软件构件、软件构件外部可见特性(构件提供的服务、性能、特性、错误处理、共享资源的使用等)、及其相互关系

    • 整理

    软件体系结构为软件系统提供了一个结构、行为、属性的高级抽象

    由构成系统的元素的描述、元素的相互作用、指导元素集成的模式、模式的约束组成

    指定了系统的组织结构和拓扑结构,显示了系统需求和构成系统的元素之间的对应关系

     

    2.软件体系结构的重要性

    • 是软件风险承担者沟通的手段
    • 突出早期设计决策的选择,对后续的设计实现以及最终成功产生直接影响
    • 具有可复用性

     

    3.软件体系结构风格

    定义了用于描述系统的术语表和一组指导构件系统的规则

    软件体系结构设计的核心问题-->能否到达软件体系结构级别的软件重用

    • 分层体系结构

    (1)系统被组织成一个层次结构,每一层高度内聚并为上层服务。每一层只对相邻的层可见,上层通过下层提供的接口调用下层的功能-->松散耦合的结构模型

     

    (2)优点

    • 支持基于抽象程度递增的系统设计:开发设计人员在设计某一层时只需关注该层使用的技术及其功能
    • 支持功能增强:功能改变最多影响相邻两层,便于系统功能的扩展
    • 支持重用:提供的服务接口不变时,同一层的不同实现可以交换使用

    (3)缺点

    • 并不是每个系统都能容易划分为分层的模式
    • 难以找到合适、正确的层次抽象方法
    • 系统进行数据传输时需要经过多个层次-->性能和效率的下降
    • 程序调试相对困难

     

    • C2体系结构风格

    (1)一系列相互协作的、由连接件连接起来的构件

    构件相对独立,构件之间的通信通过以连接件为中介的异步消息交换机制实现,构件可将任意复杂的功能封装在一起。

    (2)遵守的规则

    • 组织规则-->结构构建以构件、连接件为基础

    • 通信规则-->构件间通信必须通过消息实现
      • 构件的顶端域:可以对哪些通知做出响应、可以发出哪些请求
      • 构件的地段域:可以向下层发送哪些通知,可以响应下层哪些请求
      • 只感知层次高于自己的构件提供的服务

     

    • C/S体系结构风格

    (1)客户机、服务器是两个独立的逻辑系统,服务器负责数据管理,客户机负责数据显示、用户交互和逻辑处理

    (2)两层C/S体系结构的组成

    • 客户机程序:包括用户界面、业务处理程序;负责向服务器发送请求消息、接收和分析从服务器返回的数据
    • 服务器程序:包括数据库、数据查询、数据存储、数据更新程序;负责管理客户机程序的数据、调度管理、事务处理计算、共享资源管理
    • 二者的关系
      • 用户通过客户机的用户交界面提出操作请求,客户机的请求把用户的操作转换成通信协议要求的表达方式。通过服务器在客户机的代理,客户提出操作请求并获得服务器返回信息。
      • 服务器端的服务器接口提供客户机与服务器联系的标准

     

    (3)优点

    • 客户机、服务器构件位置透明,利于分布式数据组织
    • 可分别运行在不同的操作系统之上,便于异构平台的不同开发技术的融合匹配
    • 构件之间充分隔离并彼此独立-->软硬件环境具有极大的灵活性,具有良好的可扩展性

    (4)缺点

    • 开发成本高:软硬件配置要求比较高
    • 客户机程序设计复杂
    • 数据安全性不好:客户端可以直接访问数据库服务器
    • 单一服务器且以局域网为中心,难以扩展至大型企业广域网、Internet
    • 维护和升级成本高

     

    • 三层C/S体系结构风格

    (1)组成

    表示层负责处理用户的输入和向客户的输出,用于系统和用户之间的交互;功能层负责建立数据库连接,根据用户的请求生成访问数据库的SQL语句,并把结果返回给客户机;数据层负责实际的数据库存储和检索,响应功能层的数据处理请求,并将结果返回给功能层。

    • 表示层:系统和用户间的接口,实现系统与系统应用之间的对话
    • 功能层:负责处理具体的业务逻辑
    • 数据层:负责对数据库数据的读写操作

    (2)优点

    • 合理划分三层结构的功能-->逻辑上保持相对独立,系统的逻辑结构更清晰
    • 更灵活、有效地选用相应的平台和硬件系统
    • 各层可进行自主语言的选择并且 可以并行开发
    • 充分利用功能层隔离表示层和数据层,增强数据安全性

     

    • B/S体系结构风格

    (1)是三层C/S结构的一种实现方式,由浏览器、Web服务器、数据库服务器组成

    (2)优点

    • 系统维护和升级方式简单:主要工作在服务器端,客户端不需要维护
    • 成本低,选择多:服务器可以选择多个操作系统,客户机可以选择多个浏览器

    (3)不足

    • 缺乏对动态页面支持能力,没有集成有效的数据库处理能力
    • 系统扩展能力差,安全性难以保障
    • 数据查询等的响应速度低于C/S

     

    • 正交体系结构风格

    (1)正交体系结构风格是一种由组织层和线索组成的层次化结构

    每一个组织层都包含具有相同抽象级别的构件

    线索:不同的功能模块,由完成不同层次功能的构件通过相互调用来组成,每一条线索完成整个系统中相对独立的一部分功能

    完全正交:线索之间无关,同一层的构件之间不存在调用关系

    (2)特征

    • 正交体系结构由完成不同功能的n个线索组成,n>1
    • 系统有m个不同抽象级别的层次,m>1
    • 线索之间保持相对的独立性(正交性)
    • 公共顶层-->驱动线索的运行;公共底层-->为线索提供公共的构件和使用数据

    (3)优点

    • 结构清晰,容易理解-->线索功能相互独立,不进行相互调用
    • 易修改,可维护性强-->变更局部化,缩小了变更范围,减少了修改的工作量
    • 可移植性强

     

    • 数据共享体系结构风格(仓库风格)

    (1)包含两种构件:中央数据结构(资源库)-->表示系统当前的状态;独立构件的集合-->对中央数据结构进行操作

    (2)根据中央数据单元和构件之间信息交换方式的不同:

    • 根据输入事务选择何种处理
    • 由中央数据结构的当前状态决定何种处理-->黑板体系结构

     

    • MVC体系结构风格

    (1)为需要为同样数据提供多个视图的应用程序设计,实现了数据层与表示层的分离,适合开发与GUI有关的应用程序

    (2)组成

    • 模型:维护数据并提供数据访问方法
    • 视图:绘制模型的部分数据或所有数据的可视图
    • 控制器:进行事件的处理

    (3)优点

    • 多个视图可以对应一个模型-->可减少代码复制和维护的工作量
    • 降低各层间的耦合,提供了应用的可扩展性
    • 更符合软件工程化管理的精神-->不同的层各司其职

    (4)问题

    • 增加了系统结构和实现的复杂性
    • 视图与控制器的连接过于紧密
    • 视图对模型数据的访问效率低

     

    • 异构体系结构的集成

    多种体系结构并存并相互融合,eg:B/S C/S体系结构的组合

    • “内外有别”
      • 企业内部人员利用C/S架构通过局域网访问企业数据库,可提高系统查询和修改的响应速度
      • 外部通过B/S架构从Internet上通过Web服务器浏览企业内部数据库,保证数据库的安全,但响应速度慢
    • “查改有别”
      • 对数据库浏览查询:采用B/S
      • 对数据库维护修改:采用C/S

     

    4.软件体系结构设计方法 

    • 工件驱动的软件体系结构设计方法

    (1)软件过程每经历一个阶段,就会发生一次知识转换的过程,最终编码人员把知识固化在软件产品中。

        软件成型前,知识的主要载体是文档和模型-->工件

    (2)过程

     

    • 用例驱动的软件体系结构设计方法

    (1)用例建模:使用用例描述系统需求的过程

        用例模型:所有用例组合在一起,描述系统的全部功能,获取系统的功能需求

    (2)迭代构建软件体系结构

    • 根据软件领域范围建立临时的软件体系结构
    • 选取重要的用例,使体系结构支持用例
    • 选取更多用例,建立更加完美的体系结构
    • 每次迭代,选取并实现一组用例-->确认体系结构,每次迭代结束时进行评估

    (3)软件开发项目分成如下几个阶段:

    • 初始阶段:设定产品功能范围,建立初始业务案例,从业务角度表明项目的可行性
    • 细化阶段:建立体系结构基线,捕获大多数需求
    • 构造阶段:开发系统,保证产品可移交给客户,即产品达到最初的可操作能力
    • 移交阶段:却被得到准备向用户社团发布的产品

    体系结构主要是在细化阶段的迭代过程中发展起来的

     

    • 模式驱动的软件体系结构设计-->从模式导出体系结构抽象 

     

    • 领域驱动的软件体系结构设计DSSA

    (1)基本思想

    • 对具体领域的一系列相似系统可重用信息进行识别、提取、收集和组织
    • 对可利用信息进行整理和再加工-->规范化 标准化,有利于重用
    • 软件体系结构模型的建立参考并使用规范化可重用信息
    • 是多系统范围内的体系结构,从一组系统中导出

    (2)设计过程

     

    • 需求驱动的软件体系结构设计方法

    描述解决的问题和解决方案之间的动态关系

     

    (1)问题空间:定义所解决的问题

    (2)需求分析前期阶段:理解问题,考虑组织和非功能需求;后期阶段:描述系统的相关功能和属性

    (3)体系结构设计

    根据组件或者子系统之间的数据、控制及其他依赖关系描述系统全局结构设计;

            1)把体系结构看做抽象的组件通过连接交互的整体,基于细化的需求模型,确定组件满足的非功能需求和功能需求(用场景表示)

    2)通过描述组件和连接的抽象属性,得到软件体系结构的抽象模型;

    3) 从需求分析模型确定的解决空间中发现体系结构设计方案,得到具体的体系结构实例;

    4)进行评价-->在选定解决方案的同时建立场景模型。

     

    四、系统设计方法(实现设计模型的手段和方法) 

     (一)程序流程图

     1.基本符号

     2.控制结构

    3.存在的问题

    (1)表示程序控制流程的箭头不受任何约束,容易造成程序控制结构的混乱;

    (2)难以描述逐步求精的过程,导致过早考虑细节而忽略全局;

    (3)只描述执行过程,难以表示数据结构;

    (4)符号繁多,记忆不便

     

    (二)盒图(N-S图)

    1.基本控制结构

     2.在N-S图中,每个处理步骤(语句或者语句序列)使用一个盒子表示;盒子可以嵌套另外一个盒子;只能从盒子上边进入、下边走出,限制了随意的控制转移。

    3.优点

    (1)形象直观,具有良好的可见度,容易理解设计意图,为编程、复查、选择测试用例、维护带来了方便

    (2)强制设计人员采用结构化程序设计方法进行思考并描述设计方案,有效保证了设计质量

    (3)简单 易学 易用

    (4)容易表现嵌套关系并且不限制嵌套深度

    4.问题:手工修改麻烦

     

    (三)问题分析图(problem analysis diagram, PAD)

    1.PAD是面向高级程序设计语言设计的,使用二维树形结构表示程序的控制流

    2.基本符号

     

    3.图例

    4.优点

    (1)更容易表示结构化程序控制图。

    (2)程序层次增加,PAD向右延伸,每增加一个层次,向右扩展一条竖线。竖线的总数就是程序的层次数量。

    (3)表现程序逻辑易读易懂-->程序从图中最左竖线的上端节点开始执行,自上而下、自左向右遍历所有结点。

    (4)可以使用工具软件自动转换成高级语言源程序。

    (5)支持自顶向下、逐步求精的方法。

     

    (四)HIPO图(Hirearchy plus input/processing/output)

    1.表示软件系统结构的设计工具

    H图-->描述软件模块层次结构

    IPO图-->描述每个模块的输入、输出数据、处理功能、模块调用的详细情况

    HIPO图是以模块分解的层次性以及模块内输入、处理输出三大基本部分为基础构建的

    2.H图说明软件系统由哪些模块组成以及其控制层次结构

    3.IPO图描述模块输入、输出和处理细节,以及与其他模块间的调用和被调用关系

    (五)判定表

    1.判定表是分析和表达多逻辑条件下执行不同操作情况的工具

    适合:某些操作的实施依赖多个逻辑条件的组合,即针对不同的逻辑条件组合值,分别执行不同的操作。

    2.例子

     

    3.判定表的组成

    (1)条件桩-->问题的所有条件

    (2)动作桩-->问题规定可能采取的操作

    (3)条件项-->在所有可能情况下的真假值

    (4)动作项-->在条件项的各种取值情况下采取的动作

     

    4.判定表的建立

    (1)确定规则个数,对于n个条件,有2n种规则

    规则:一个条件组合的特定取值以及相应执行的操作称为规则,判定表中贯穿条件项和动作项的一列就是一条规则

    (2)列出所有条件桩、动作桩

    (3)填入条件项

    (4)填入动作项

    (5)合并相似规则

     

    (六)判定树

    更加直观表示逻辑判断问题

    树根:加工明

    中间:各项条件

    最右侧:行动

     

    (七)过程设计语言(Process design language,PDL)

    1.用于描述模块中算法和加工的具体细节,具有严格的关键字外部语法,用于定义控制结构和数据结构

    2.语法包括外层语法、内层语法

    外侧语法:描述程序的结构,采用与一般编程语言类似的关键字

    内层语法:描述操作,采用任意自然语句

    3.优点

    (1)可以作为注释插入源代码-->促使维护人员在修改程序的同时修改PDL注释,保持文档和程序的一致性

    (2)易于被计算机处理和存储

    (3)可以自动产生程序

     

    (八)Jackson图

    1.是面向数据结构的设计方法,即以数据结构作为程序设计的基础

    2.基本结构

    (1)顺序

     

    (2)选择

     

    (3)重复

    3.改进-->增加判定条件

     

    4.Jackson方法-->构建Jackson图

     

    (1)确定输入数据和输出数据的逻辑结构

     

    (2)找输入数据、输出数据结构中有对应关系的数据单元

     

    (3)导出Jackson图

    针对有对应关系的,在相应层次画处理框

    输入数据中剩余的数据单元,在相应层次画处理框

    输出数据中剩余的数据单元,在相应层次画处理框

     

    (4)列出操作和条件 使用伪代码表示程序

     

    五、用户界面设计

    1.设计原则

    (1)以用户为中心的可视性原则

    系统的设计决策结合用户的工作和应用环境,理解用户对系统的需求,同时给出可视性效果良好的界面设计

    (2)一致性原则

    系统内部具有相似的界面外观、布局、相似的人机交互方式以及信息显示格式

    (3)交互性原则

    体现系统的状态反馈信息(用户在人机操作过程中,用户从软件系统得到的信息),并对人的操作进行适当的反应

    (4)重要性原则

    按照管理对象在控制系统中的重要性和全局性水平,设计人机界面的主次菜单、对话窗口的位置和凸显性

    (5)功能原则

    设计分功能区多级菜单、分层提示信息、多项对话框并举的窗口

    (6)合理性原则

     

    2.设计过程

    (1)创建系统需求功能的外部设计模型

    设计模型考虑软件的数据结构、总体结构、过程性描述

    需要充分了解不同类型用户的详细情况、基本需求

    (2)确定完成此系统功能的人、计算机分别完成的任务

    (3)构建人机界面原型

    (4)评估界面设计

     

    3.设计方法

    (1)迭代设计

    初步设计-->创建第一级原型-->用户试用并评估-->根据修改意见设计并实现下一级原型

    (2)以用户为中心

    使用户充分理解设计者的指导意图,正确进行实验操作;设计者从使用者那里得到有效的反馈信息以改进界面,二者有效地实现双向互动

     

    展开全文
  • B. 系统架构设计步骤

    千次阅读 2019-05-02 11:51:44
    系统架构设计步骤 架构设计三原则 合适原则:合适原则宣言:“合适优于业界领先”再好的梦想,也需要脚踏实地实现!这里的“脚踏实地”主要体现在下面几方面。 1. 将军难打无兵之仗 2. 罗马不是一天建成...
  • 嵌入式Linux系统移植的四大步骤

    万次阅读 多人点赞 2018-08-25 20:34:28
    最近在学习系统移植的相关知识,在学习和调试过程中,发现了很多问题,也解决了很多问题,但总是对于我们的开发结果有一种莫名其妙的感觉,纠其原因,主要对于我们的开发...在做每一个步骤的时候,首先问问自己,...
  • 基于C语言的小型文件系统设计与实现

    千次阅读 多人点赞 2022-03-12 12:18:25
    计算机成为了许多人日常生活中必不可少的一部分,不管是个人办公娱乐还是企业员工协作,都无一不用到了计算机的信息管理、文件管理技术,其中文件系统就是计算机上有着良好功能设计的一个系统、它通过良好的文件信息...
  • 基于深度学习的人脸识别考勤系统设计

    万次阅读 多人点赞 2020-06-03 22:34:43
    基于深度学习的人脸识别考勤系统
  • 【操作系统】简易文件系统设计

    千次阅读 2021-09-02 21:22:43
    尝试自行设计C语言小程序,使用步骤1分配的100M空间(共享内存或mmap),然后假设这100M空间为一空白磁盘,设计简单的文件系统管理这空白磁盘,给出文件和目录管理的基本数据结构,并画出文件系统基本...
  • 摘 要 随着每年高校大学生不断的扩招,人数的增加导致宿舍管理压力...本系统主要采用spring开发框架制。使用的技术有mysql数据库、mybatis驱动框架以及tomcat服务端部署,用到的集成开发工具主要是IDEA和jdk1.8。 该
  • 手把手教你用Java设计并实现一城市公交查询系统

    万次阅读 多人点赞 2020-12-19 10:11:33
    为了使得我国公交乘客出行及查询有关信息更方便,本文运用JAVA语言技术,Jsp技术,Mysql数据库开发了B/S结构的城市公交查询系统。 该系统顺应了时代发展且具有以下优点:首先,方便乘客的出行,乘客不用询问站牌工作...
  • 1.2设计思想 1 1.3研究内容 1 二、 关键技术介绍 3 2.1 系统开发工具 3 2.2 JSP技术 3 2.3 MYSQL数据库 4 2.4 B/S结构 4 三、系统分析 6 3.1开发目标 6 3.2可行性分析 6 3.2.1 技术可行性 6 3.2.2 操作可行性 6 ...
  • 消息推送系统设计思路

    万次阅读 2018-01-06 12:54:40
    一、消息推送系统设计需求 1、高性价比,在有限的硬件资源下,尽可能的提高消息系统的性能和可用性。 2、提高数据的一致性。 二、分析 消息推送,按数据量划分,包括两类: 1)持续的大量数据...
  • 之前毕业设计选题的时候,在两题目之间徘徊,一是车牌识别系统,另外一就是今天的主题银行卡号识别系统,思考良久,还是决定将它做出来,不仅会对加深在计算机视觉方面的理解,也会巩固自己学习过的知识。...
  • 3 系统的需求分析与设计 7 3.1可行性分析 7 3.2需求分析 7 3.2.1系统总体概述 8 3.2.2功能性需求 8 3.2.3非功能性需求 9 3.2.4流程图设计 9 3.2.5系统ER图设计 10 3.3 数据库设计 11 3.3.1数据库设计的原则 11 3.3.3...
  • linux系统移植步骤

    万次阅读 多人点赞 2018-07-13 22:52:08
    最基本的Linux操作系统应该包括:引导程序、内核与根文件系统三部分。 嵌入式Linux系统移植主要由四大部分组成: 一、搭建交叉开发环境 二、bootloader的选择和移植 三、kernel的配置、编译、...
  • 本文首先阐述了职业健康体检信息管理系统的总体设计思路,接着对系统的主要流程和软件功能进行了详细的研究,旨在系统地介绍如何设计健康体检信息管理系统,进一步规范体检流程,提高医护人员的工作效率。...
  • 学生信息管理系统 C语言程序设计

    千次阅读 2021-06-03 10:09:58
    本课程我们学习了Linux C程序设计,学习在Linux系统下使用C语言编程。那么,我们就可以使用C语言来开发应用程序。 我们使用C语言来开发一“学生信息管理系统”,可以管理学生的信息。 那么,在这软件系统中,...
  • 快节奏的生活环境,漫天飞舞数据信息,微电子技术也不比从前,办公手段的落后与低效逐步被打中所淘汰,信息管理被时代推向了一新高潮。但是,信息是看不到摸不到的一种新型资源,却尤为重要。管理和操控信息则成为一种...
  • 它的主要作用是:数字电路系统设计者利用这种语言可以用上层到下层(从抽象到具体)逐步描述自己的设计思想,用一系列分层次的模块来表示及其复杂的数字系统。 2.目前世界上符合IEEE标准的硬件描述语言有两种?...
  • 电商秒杀系统设计思路和实现方法

    万次阅读 多人点赞 2017-05-26 00:06:35
    1 秒杀业务分析 正常电子商务流程 (1)查询商品;(2)创建订单;(3)扣减库存;...假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对
  • 使用Java语言设计简单的“学生信息管理系统

    万次阅读 多人点赞 2019-07-22 17:24:28
    学生都应该包含学号、姓名、性别、联系电话、家庭地址等信息,其中学号还应该具有唯一性。 2.设计过程 2.1 编写学生类 学生类之中应该包含学生的相关属性以及设置和获取相关属性值的方法,类的无参和有参构造...
  • 同时J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,因此文中设计了一基于J2EE 架构的超市综合管理信息系统。根据J2EE 架构的多层应用程序方案和超市管理信息系统的特点,系统采用以Web 为中心的应用程序...
  • 实验八 数字系统综合设计——路抢答器的设计 一、实验目的 掌握一般数字电路的设计方法,理解电路开发的步骤,更好的结合理论知识来设计电路,深刻理解理论知识,锻炼自己动手能力。 二、实验任务 规定功能:设计...
  • 摘 要 随着科技与经济的不断发展,在各大中小学校,用计算机管理学校的信息已经越来越普遍了。用计算机不但可以提高工作效率,而且还...通过实现和完善东软信息学院的梦想启航梦想启航梦想启航学生信息管理系统,学生就
  • 火车订票系统设计与实现

    千次阅读 2021-03-13 18:04:20
    摘 要:针对火车站的订票实际情况,按照软件工程的结构化设计思想,本次课程设计经过项目的可行性研究和需求分析、总体设计、详细设计,以及编码实现和调试等步骤设计开发了火车站网上订票系统。并运用数据流图和...
  • 系统分析和设计方法之系统分析

    千次阅读 2019-01-11 15:41:47
    虽然讲解的内容是以过程的形式进行介绍的,但是具体的每操作基本都是以系统操作为基础的。   什么是系统分析 系统分析方法 范围定义阶段 问题分析阶段 需求分析阶段 逻辑设计阶段 决策分析...
  • 1、掌握面向对象分析与设计思想与方法。 2、使用UML进行系统的面向对象分析与设计:用例图,类图,顺序图,状态图,活动图,组件图等。 3.系统功能用Java或C++语言实现,并与后台数据库连接,实现系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,399
精华内容 54,559
关键字:

系统设计思路包括哪四个步骤