技术标签: 学习笔记
是系统的一个或多个结构,他们由软件元素、这些元素的外部可见属性以及组件之间的关系组成,组件的外部可见性属性是指其他元素对该元素所做的假设
从下面六个方面来理解:
P31 页图片(和PPT不一样):
涉众就是对系统构建感兴趣的人或组织
如:客户、最终用户、开发人员、项目经理、维护人员、对系统进行市场营销活动的人
设计师会受到产品需求(从涉众获得)、所在开发组织的结构和目标、可利用的技术环境及自身素质和经验的影响
软件架构的影响:(下图)
软件架构的商业周期:(下图)
该商业周期的运作:
软件过程:对软件开发活动的组织、规范和管理
软件过程中涉及的活动:
风险承担者(涉众)之间的交流: 有关各方可借助它表达和协商各自的需求,并理性找到解决方案
早期设计决策
可传递、可重用的系统抽象
产品线共享一个公共的构架
系统开发可以使用大型的、由其他组织开发的元素
少就是多:限制选择范围值得
优点:重用程度更高、更易于理解和交流的简单规范的设计、更为透彻的分析、更短的选择时间、更强的可互操作性
构架使基于模板的开发成为可能
构架作为培训的基础
软件系统的质量属性是指系统在整个生命周期中所具有的特征
需求是架构设计的基础,但在需求阶段是无法弄清全部需求的,因此需求和架构设计之间的迭代是必要和有意义的
需求包括三要素
功能是构架设计的必要条件,因为不同架构具有相同的功能,它们的差别在于质量
构架设计主要考虑如何满足质量上的要求,但软件构架会限制各模块的功能划分,功能对架构设计有间接的影响
质量属性: 系统在其生命周期过程中所表现出的各种特征
必须在从设计、实现、部署的整个过程中考虑质量属性的实现
运行时可见属性
可用性: 系统正常运行时间的比例,是通过两次故障之间的时间长度或在系统崩溃情况下能够恢复正常运行的速度来衡量的
可靠性是指系统能够保持正常运行的能力,通常用平均无故障工作时间来衡量
性能: 指系统的响应能力——即对外部刺激(事件)做出反应时所需要的时间或在某段时间内所处理的事件个数
安全性: 衡量系统在向合法用户正常提供服务的情况下,阻止非授权使用和抗拒拒绝服务攻击的能力
易用性:
维护时可见属性
可修改性: 进行快速修改并使修改代价尽可能低的能力,这种能力直接受到构架的限制
更改由于商业目的的变化:
可测试性: 指通过测试(通常是基于运行的测试)揭示软件缺陷的容易程度
可测试性:指假设软件中至少有一个错误,软件在”下次“测试运行时不能正常工作的可能性
可移植性: 系统能够在不同计算环境下运行的能力, 这里所说的环境可能是硬件、软件或两者的组合
可重用性:指要合理地设计系统,使系统的结构或其某些组件能够在以后的应用开发中重复使用
可集成性: 使独立开发的系统组件能够协同运行的能力
可集成性表明了一个系统内各个组件之间相互协作的能力
互操作性衡量的则是一个系统与另一个系统的协作能力
质量属性场景就是通过对某个实体与系统的一次交互的简要描述说明一个有关质量属性的特定需求
生成质量属性场景的目的和意义:
质量场景创建的参与人员:
一致性(概念完整性):
**正确性和完整性:**构架能够满足系统的各种需求及运行时的资源要求
**可构建性:**保证能够由指定的开发小组在规定时间完成,并允许在开发过程中做某些更改
指的是构建某个所期望的系统难易程度
是对各组件类型和运行控制/数据传送模式的描述
从四个方面理解构架样式:
- 目标 是实现可重用性和可更改性
- 特点 是把系统看作是对相继输入数据的一系列变换
目标是实现可移植性
- 大型软件系统的主流构架样式
- 目标是实现系统的可更改性和可扩展性
通过解除各运算部分之间的耦合实现可更改性
二层C/S结构:
局限:
三层C/S结构:
优点:
基于构件和消息的体系结构模式,用于构建灵活的、可伸缩的软件系统
设计规则: 构件和连接件
- 构件的“顶域”与连接件的“底域”相连接
- 构件的“底域”与连接件的“顶域”相连接
- 对连接到某一个连接件上的构件数量没有限制,但构件与构件之间不能直接相连
**通信规则: ** 所有构件间的通信必须通过消息来实现
最重要的特征: 底层无关性,以连接件为中介的异步消息交换机制来实现
**体系结构风格: ** 通过连接件绑定在一起的按照一组规则运作的并行构件网络
特点:
由层和线索的构件构成
主要特征:
优点:
构架模式,参考模型和参考构架都不是构架,但都是早期设计决策的产物,都对构架设计有帮助
共性: 共同致力于使人们的设计可以被重用(计模式的思想可以在框架设计中进行应用)
区别:
特点:
砰/回声和心跳战术用来检测另一个进程的错误,异常是进程本身的错误处理
是在设计期间为模块分配责任,以把预期的变更限制在一定的范围内,以降低修改成本
修改没有直接影响到的模块也需要改变,这是由于模块间存在依赖关系
依赖关系有:
防止连锁反应的战术有:
可以允许非开发人员进行修改,也可以延迟部署时间
将用户接口与应用的其余部分分离开来
采用战术 | 敏感点 | 有风险决策 |
---|---|---|
超出限制访问量的请求放在等待队列中 | 提高了系统的稳定性和可用性,减少了崩溃的可能 | 会降低对打并发数目,使得用户的等待时间过长,可能造成用户不满 |
缓存 | 提高系统的访问速度和性能 | 单服务器提供的缓存数目有限,并发用户数多的情况下,系统处理缓慢 |
每个IP每次只允许发出一个请求 | 合理的要求,避免了非法用户的恶意攻击 | 可能降低了易用性,但系统的安全性提高了 |
数据库连接池 | 数据库连接池允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个,提高应用系统的性能 | |
容错性 | 能够对用户出现的误操作进行检测和处理,并给出相应的处理信息,提高系统的可用性 | |
系统备份与恢复 | 增强系统的容错能力 | 操作系统和数据库软件发生崩溃时,恢复时间较长 |
对需求有初步了解就可以开始设计
比较重要的功能、质量属性、商业属性
业务目标优先级较高的要求
属性驱动的设计(Attribute Driven Design, ADD)把一组质量属性场景作为输入,利用对质量属性实现与构架设计之间的关系的了解,对构架进行设计
创建骨架系统的思想是提供一种基本能力,以一种对项目有力的顺序实现系统的功能
是指凭分析者的直觉、经验,凭分析对象过去和现在的延续状况及最新的信息资料,对分析对象的性质、特点、发展变化规律作出判断的一种方法
定性技巧——提问技巧
是依据实际统计数据,建立数学模型,并用数学模型计算出分析对象的各项指标及其数值的一种方法
定量技巧
构架评审的主要指导原则如下:
目标:
特点是不仅可以揭示出构架满足特定质量目标的情况,而且可以使我们更清楚地认识到质量目标之间的联系
中心问题是对用于构架评估的有限时间进行管理
ATAM方法的表述
商业动机的表述
构架的表述
对构架方法进行分类
说明构架中涉及的样式和战术对质量的影响
生成质量属性效用树
效用树的作用是使质量属性需求具体化,从而迫使设计师和客户代表准确地定义出他们的质量需求
“效用”是效用树的根结点,表示系统的总体适宜性
中间结点是质量属性及其求精
叶结点是与质量属性对应的场景
属性效用树:
质量属性 | 属性求精 | 场景 |
---|---|---|
安全性 | 访问的安全性 | 在web服务中,应该有防火墙保护,防止网络上的非法数据请求**( M, H )** |
安全性 | 数据的完整性 | 当出现异地订票点同时需要对通一张票请求操作时,系统必须保证数据库内数据的完整性**(H, L)** |
可用性 | 异常检测和抛出 | 用户企图输入不符合系统条件的查询或者订购不存在的票务的时候,系统必须检测出,并且抛出相应的异常,转入挂起操作 |
可修改性 | 信息管理 | 为了适应变化得票务数据,系统必须提供一个后台管理界面**( M, L )** |
性能 | 等待时间 | 用户在界面上进行票务查询或者进行订购操作的时候,系统必须在规定的时间内做出反应,不能出现用户无故长时间等待的情况。( H, M ) |
分析构架方法
集体讨论并确定场景优先级
再次分析构架方法
结果的表述
最渴望使用架构文档的人是设计师
选择项目视图的过程:
- 接口就是两个独立的实体相遇并进行交互或通信的边界
- 组件接口就是其他组件可对该组件所做的假设
文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99
文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效
文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是
文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件
文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件
文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码
文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware
文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停
文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待
文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析
文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code
文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象