关系逻辑

白盒测试的逻辑覆盖

不想你离开。 提交于 2019-11-29 16:57:53
符号说明:   ^ 代表逻辑运算符 && 或者 ||      T 代表 True F 代表 False      A / B 代表条件表达式 六种逻辑覆盖的强弱关系: 在外面很多的教程都认为这六种逻辑覆盖从弱到强的排列顺序是: 语句覆盖->判定覆盖->条件覆盖->判定-条件覆盖->条件组合覆盖->路径覆盖 但经过上面的分析,它们之间的关系实际上可以用下图表示 语句覆盖 每条语句至少执行一次。 测试用例条件: A ^ B = T 判定覆盖(分支覆盖) 分支执行一致 测试用例条件:        A ^ B = T        A ^ B = F 条件覆盖 每个条件取到各种可能的值 测试用例条件:        A=T     A=F        B=T     B=F 判定/条件覆盖 判定覆盖、条件覆盖 测试用例条件:        A ^ B = T    A ^ B = F        A=T     A=F        B=T     B=F 条件组合 每个判断语句中条件结果的所有可能组合至少出现一次 测试用例条件:        A= T    B= T        A= T    B= F        A= F    B= T        A= F    B= F 路径覆盖 覆盖程序中所有可能的执行路径 优点:这种覆盖方法可以对程序进行彻底的测试用例覆盖

Saga分布式事务

人盡茶涼 提交于 2019-11-29 16:33:07
一、简介 与分布式事务TCC一样,目的都是为了在各个服务中正常使用事务。和TCC相比,Saga没有“预留”动作,操作都是直接提交到库。其中: 每个Saga由一系列sub-transaction Ti 组成 每个Ti 都有对应的补偿动作Ci,补偿动作用于撤销Ti造成的结果 既然Saga的操作都是直接提交到库中,那么当后续的服务操作失败时,我们需要一种方法将已被改变的值更改为之前的状态。 为此Saga定义了两种恢复策略: backward recovery:向后恢复,补偿所有已完成的事务,如果任一子事务失败,则撤销掉之前所有成功的sub-transation,使得整个Saga的执行结果撤销。 forward recovery:向前恢复,重试失败的事务,假设每个子事务最终都会成功。适用于必须要成功的场景,此处不需要补偿事务。 显然,向前恢复没有必要提供补偿事务,如果你的业务中,子事务(最终)总会成功,或补偿事务难以定义或不可能,向前恢复更符合你的需求。 注意事项: 对于服务来说,实现Saga有以下这些要求: Ti和Ci是幂等的。假设在执行Ti的时候超时了,如果采用重传策略则会再次发送Ti,那么就有可能出现Ti被执行了两次,所以要求Ti幂等。而如果Ci也超时了,就会尝试再次发送Ci,那么就有可能出现Ci被执行两次,所以要求Ci幂等。 Ci必须是能够成功的,如果无法成功则需要人工介入

移动端布局

柔情痞子 提交于 2019-11-29 16:27:13
一. viewport 什么是viewport 简单来讲,viewport就是浏览器上,用来显示网页的那一部分区域了,也就是说,浏览器的实际宽度,是和我们手机的宽度不一样的,无论你的手机宽度是320px,还是640px,在手机浏览器内部的宽度,始终会是浏览器本身的viewport。如今的浏览器,都会给自己的本身提供一个viewport的默认值,可能是980px,或者是其他值。就以手机来说吧,目前,新版本的手机浏览器,绝大部分是以980px作为默认的viewport值的。我这里对新版本的不同平台下的浏览器做了测试,经过测试,iphone下的默认viewport为980px,安卓下的浏览器,目前主流的最新浏览器(比如chrome,还有很多国产的像qq,uc)的viewport也是980px了。 viewport是用来干什么的 viewport的默认值,一般来说是大于手机屏幕的。这样就可以做到当我们在浏览桌面端网页的时候,可以让桌面端端网页正常显示(我们普通页面设计的时候,一般页面的主区域是以960px来做的,所以980px这个值,可以做到桌面端网页的正常显示)。但是,其实我们手机的屏幕宽度是没有960px的,因此浏览器会出现横向滚动条。同时,即使是基于980的viewport,我们在移动端浏览我们的桌面页面的体验其实也并不好,所以,一般的,我们会专门给浏览器设计一个移动端的页面。

Struts2,Spring,Hibernate框架的优缺点

旧巷老猫 提交于 2019-11-29 14:55:59
Struts2,Spring,Hibernate框架的优缺点 分类: SSH框架整合 2010-05-26 21:27 5432人阅读 评论(0) 收藏 举报 strutsspringhibernate框架daomvc 开源是3个框架共有的优点 Struts2框架(MVC框架)的优点如下: 1) 实现了MVC模式,层次结构清晰,使程序员只需关注业务逻辑的实现; 2) 丰富的标签库,大大提高了开发的效率; 3) Struts2提供丰富的拦截器实现 3) 通过配置文件,就可以掌握整个系统各个部分之间的关系; 4) 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做相应的处理; Spring框架的优点如下: 1) 无入侵性(在业务逻辑代码中感觉不到Spring框架的存在); 2) 各个组件之间的耦合极为松散; 3) 无需程序员自己实现singleton模式; 4) 通过AOP,可以实现事务管理和日志管理; 5) 整合其他的框架,如:struts框架和hibernate框架; Hibernate框架(ORM框架)的优点如下: 1) 对象/关系数据库映射(ORM), 使用时只需操纵对象,使开发更加面向对象化; 2) 无入侵性; 3) 简洁的HQL语句,减少了JDBC与SQL操作数据库的代码量; 4) 移植性好; 缺点如下: 1) 对批量更新,删除的支持不好; 什么是SSH2框架

块存储、文件存储、对象存储的优缺点、应用场景

橙三吉。 提交于 2019-11-29 14:53:38
参考文章链接: 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储): https://blog.csdn.net/wangmingshuaiguo/article/details/92628036 Ceph介绍及原理架构分享: https://www.jianshu.com/p/cc3ece850433 Red Hat Ceph存储—《深入理解Ceph架构》: http://ceph.org.cn/2018/06/29/red-hat-ceph%E5%AD%98%E5%82%A8-%E3%80%8A%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3ceph%E6%9E%B6%E6%9E%84%E3%80%8B/ ceph IO切割成对象和对象名的组成(块存储): https://blog.csdn.net/a1454927420/article/details/78134554 三种存储类型比较-文件、块、对象存储: https://blog.csdn.net/sinat_27186785/article/details/52032431 块存储就是在物理层这个层面对外提供服务,使用它的系统,有用自己的文件系统格式化。这样一旦被一个系统使用,就独占了。 文件存储,就是在文件系统一层对外提供服务,系统只用访问文件系统一级就可以

常见的关系运算符(if else和case语句)

会有一股神秘感。 提交于 2019-11-29 10:58:09
写在前面的话 说起关系运算符,真的是满心伤痕,这里有一个优先级的问题:关系运算符的优先级别低于算数运算符的优先级别。 关系运算符种类 (1) a<b a小于b (2) a>b a大于b (3) a<=b a小于或者等于b (4) a>=b a大于或者等于b 关系运算符使用意义 在进行关系运算时,如果申明的关系是假的( false),则返回值是0,如果申明的关系是真的(true),则返回值是1,如果某个操作数的值不定,则关系是模糊的,返回值是不定值。 关系运算符与算数运算符优先级 所有的关系运算符都有着相同的优先级别。关系运算符的优先级别低于算数运算符的优先级别。见下例: //表达意义相同 a<size-1 a<(size-1) //表达意义不同 size-(1<a) size-1<a 当表达式 size-(1<a)进行运算时,关系表达式先被运算,然后返回值0或1被size减去。而表达式size-1<a进行运算时,size先被减去1,然后再同a相比。 if-else 条件分支语句 if-else 条件分支语句的作用是根据指定的判断条件是否满足来确定下一步要执行的操作。它在使用时可以采用如下三种形式: ( 1)if(<条件表达式>) 语句或语句块; 在 if-else 条件语句的这种使用形式中没有出现else项,这种情况下条件分支语句的执行过程是: 如果指定的 <条件表达式>成立

逻辑卷增加根目录空间

旧城冷巷雨未停 提交于 2019-11-29 10:31:30
1. 前言 自动分区安装centos7系统,使用过程中经常会碰到根目录分区不足,而home分区过剩的情况,需要匀一些home的空间给根目录,下面的操作的前提是home和根目录分区都是做的逻辑卷。 2. 本文分析内容安排 逻辑卷介绍 本机环境 具体操作 3. 逻辑卷介绍 3.1 LVM基本术语 物理卷(PV, Physical Volume):物理卷就是指磁盘,磁盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介质(如分区、磁盘等)比较,却包含有与LVM相关的管理参数。 卷组(VG, Volume Group):LVM卷组类似于非LVM系统中的物理硬盘,其由物理卷组成。可以在卷组上创建一个或多个“LVM分区”(逻辑卷),LVM卷组由一个或多个物理卷组成。 逻辑卷(LV, Logical Volume):LVM的逻辑卷类似于非LVM系统中的硬盘分区,在逻辑卷之上可以建立文件系统。 3.2 LVM各术语关系 VG卷组石油PV物理磁盘卷组成的,同时可以在卷组上新建逻辑卷。卷组相当于一个集中了所有物理卷存储空间的大池子,当需要建立lv逻辑卷时通过lvcreate建立就好,默认情况下新建的逻辑卷使用的是卷组中的剩余空间。 4. 本机环境 4.1 xfs文件系统 不同于ext系列的resize2fs命令,xfs文件系统的空间只能通过xfs

物理卷PV,逻辑卷LV,卷组VG,分区、LVM卷简明教程

本秂侑毒 提交于 2019-11-29 10:28:02
之前对这些概念一直懵懵懂懂,现在由于需要便看了很多文章,做了一下总结,写下自己的理解,如有不对之处,还希望各位不吝赐教! 基本术语 物理磁盘(物理硬盘) 就是你电脑上那块(或多块)沉得可以砸死人的东西 虚拟磁盘 使用RAID技术组合的多个物理磁盘组称为一个虚拟磁盘,此时电脑将多个物理磁盘看成一个,这一个我们成为虚拟磁盘。 逻辑磁盘 虚拟磁盘可以在逻辑上再次进行划分,划分出的磁盘称为逻辑磁盘。比如,有4个各100G大小的物理磁盘,通过RAID技术组合成一个虚拟磁盘,这个虚拟磁盘有400G大小,但是操作系统不需要这么大的磁盘,所以,又再可以对这个虚拟磁盘进行划分,将它划分成4个逻辑磁盘,每个各100G大小,这里有一个问题,划分前和划分后都是4个各100G大小的磁盘,那还不如不划分呢,何必浪费功夫?实际上,划分后的这100G大小的逻辑磁盘,可能并不一定位于同一块物理磁盘上,它可能各占了每个磁盘的25G,又或者各占了其中两个硬盘的50G,也就是说它可能是跨多个物理磁盘的,这样提高了IO效率。 分区 分区和逻辑磁盘并不是同一个概念,实际上操作系统看到的磁盘是一个单独的物理磁盘或者是一个逻辑磁盘,OS会认为自己看到的就是一个物理磁盘(而不管它实际可能是一个逻辑磁盘),在此基础上,操作系统可以对这个自己看到的物理磁盘(实际上可能是逻辑磁盘)进行分区、格式化等操作。 以Windows操作系统为例

电商课题:RBAC权限控制

左心房为你撑大大i 提交于 2019-11-29 09:50:57
@郑昀汇总 名词解释: RBAC:Role-Based Access Control,基于角色的访问控制 关键词: RBAC,Java Shiro,Spring Security, 一. RBAC 要解决的 常见问题 问题一: 对某一个用户只授予一些特殊的权限 描述:既不希望扩大某一个角色的权限,也不希望因此创建出很多零碎的、只为一个用户而存在的角色。 问题二: 性能问题 描述:B/S 下,菜单、页面、页面元素、dataset的列,这些层层权限判断过于复杂,容易造成系统访问非常缓慢。 问题三: 如何减少 HardCode(硬编码) 描述: 问题四:系统上线后,某个页面增加一个新HTML控件或数据集,这种细粒度权限控制如何以最快速度添加? 描述:对一个 Resource 的 Privilege ,如何快速增加定义?如何快速分配权限?页面如何控制? 问题五:系统上线后,增加一个新细粒度权限控制,运营部门如何最快速度将其应用到已存在角色和帐号上? 描述:对于系统中已存在的成百上千角色、成千上万帐号甚至于无数用户组,一个运营部门的管理人员,如何能以最小代价,通过界面,将此权限分配出去。 二. 一个在权限逻辑和业务逻辑之间做切割的设计原则 2.1.细粒度是否算权限系统的范畴 先解释两个概念: 粗粒度 :表示类别级。即仅考虑对象的类别,不考虑对象的某个特定实例。譬如,用户管理中,增删改查

揭秘 TiDB 新优化器:Cascades Planner 原理解析

心不动则不痛 提交于 2019-11-29 08:07:39
作者:MingCong Han 在《 十分钟成为 Contributor 系列 | 为 Cascades Planner 添加优化规则 》中,我们简单介绍了 Cascades 的相关背景知识,本文将为大家深入介绍 TiDB 新的优化器——Cascades Planner 的框架及原理。 TiDB 当前优化器简介 关系型数据库中查询优化器的作用是为一个 SQL 在合理的开销内产生一个合适的查询计划, TiDB 源码阅读系列文章(六)Select 语句概览 中介绍过 TiDB 当前优化器的基本组成,TiDB 当前的优化器将优化过程主要分为逻辑优化(Logical Optimize)和物理优化(Physical Optimize)两个阶段。逻辑优化是将一棵逻辑算子树(LogicalPlan Tree)进行逻辑等价的变化,最后的结果是一棵更优的逻辑算子树;而物理优化则是将一棵逻辑算子树转换成一棵物理算子树(PhysicalPlan Tree)。这棵物理算子树就是我们说的物理执行计划,将交由 TiDB 执行引擎去完成后续的 SQL 执行过程。 逻辑优化 TiDB 中,一个 SQL 在进入到逻辑优化阶段之前,它的 AST(抽象语法树)已经转换成了对应的逻辑算子树,因此逻辑优化就是将一个逻辑算子树进行逻辑上等价变换的过程。逻辑优化是基于规则的优化(Rule-Based Optimization