1.http和https区别,SSL
https=http+SSL
- http是超文本传输协议,明文传输,默认工作在TCP协议80端口;
- https是超文本安全传输协议,能够加密信息,以免敏感信息被第三方获取,需要到CA(数字证书认证机构)申请证书;默认工作在443端口。
- http页面响应速度比https快,http使用tcp三次握手建立连接,客户端和服务器需要3个包,而https还要加上ssl握手需要的9个包。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全
HTTPS的优缺点 优点: (1)使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器; (2)HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。 (3)HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。 缺点: (1)HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电; (2)HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响; (3)SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用。 (4)SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗。 (5)HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。 TSL/SSL协议 传输层协议,使用了非对称加密、对称加密以及hash散列算法。
- 浏览器将自己支持的一套加密规则发送给网站。
- 网站从中选出一组加密算法与HASH算法,并将自己的身份信息以证书的形式发回给浏览器。证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。
- 浏览器获得网站证书之后浏览器要做以下工作:
a) 验证证书的合法性(颁发证书的机构是否合法,证书中包含的网站地址是否与正在访问的地址一致等),如果证书受信任,则浏览器栏里面会显示一个小锁头,否则会给出证书不受信的提示。 b) 如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串随机数的密码,并用证书中提供的公钥加密。 c) 使用约定好的HASH算法计算握手消息,并使用生成的随机数对消息进行加密,最后将之前生成的所有信息发送给网站。 - 网站接收浏览器发来的数据之后要做以下的操作:
a) 使用自己的私钥将信息解密取出密码,使用密码解密浏览器发来的握手消息,并验证HASH是否与浏览器发来的一致。 b) 使用密码加密一段握手消息,发送给浏览器。 浏览器解密并计算握手消息的HASH,如果与服务端发来的HASH一致,此时握手过程结束,之后所有的通信数据将由之前浏览器生成的随机密码并利用对称加密算法进行加密。 非对称加密 | 对称加密 | 散列算法 -------- | ------------- | ----- 身份验证、密钥协商 | 数据加密 | 数据完整性校验 RSA,DSA | 3DES,AES,RC4 | MD5,SHA1,SHA256 SSL证书 SSL证书和我们日常用的身份证类似,是一个支持HTTPS网站的身份证明,SSL证书里面包含了网站的域名,证书有效期,证书的颁发机构以及用于加密传输密码的公钥等信息,由于公钥加密的密码只能被在申请证书时生成的私钥解密
2.生产者消费者
item B[k];
semaphore enpty,empty=k;
semphore full, full=0;
semphore mutex,mutex=1;
int in=0;
int out=0;
begin
process produce
{
while(true)
{
P(empty);
P(mutex);
produce();
apeend to B[in];
in=(in+1))%k;
v(mutex);
V(empty)
}
}
process customer
{
while(true)
{
P(full);
P(mutex);
take() from B[out];
consumer();
out=(out+1)%k;
V(mutex);
V(full);
}
}
3.语句覆盖、分支覆盖、路径覆盖、条件覆盖
测试用例:测试脚本+既定输入+正确输出 白盒测试:基于程序的数据结构和控制逻辑而执行的测试。又称为结构性测试。 语句覆盖:使程序中每个可执行语句至少执行一次。 由于这种测试方法仅仅针对程序逻辑中显式存在的语句,但对于隐藏的条件是无法测试的。如在多分支的逻辑运算中无法全面的考虑。语句覆盖是最弱的逻辑覆盖。 判定覆盖:程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足。 往往大部分的判定语句是由多个逻辑条件组合而成,若仅仅判断其整个最终结果,而忽略每个条件的取值情况,必然会遗漏部分测试路径。 条件覆盖:使每个判断中每个条件的可能取值至少满足一次。 条件覆盖不一定包含判定覆盖。例如,我们刚才设计的用例就没有覆盖判断M的Y分支和判断Q的N分支。条件覆盖只能保证每个条件至少有一次为真,而不考虑所有的判定结果。 判定-条件覆盖:判断条件中的所有条件可能至少执行一次取值,同时,所有判断的可能结果至少执行一次。 判定/条件覆盖准则的缺点是未考虑条件的组合情况 条件-组合覆盖:使得所有可能的条件取值组合至少执行一次。 线性地增加了测试用例的数量 路径覆盖:覆盖程序中的所有可能的执行路径
黑盒测试:基于程序的功能描述而执行的测试 等价类划分:根据程序规格说明书对输入范围进行划分,把所有可能的输入数据,即程序输入域划分为若干个互不相交的子集,称为等价类,然后从每个等价类中选取少数具有代表性的数据作为测试用例,进行测试。 - 有效等价类:检验程序是否实现了规格说明预先规定的功能和性能 - 无效等价类:检查软件功能和性能的实现是否有不符合规格要求的地方 边界值分析法 输入变量的最小值(min),稍大于最小值(min+),域内任意值(nom),稍小于最大值(max-),最大值(max) 健壮性边界值分析 取min,min+,nom,max-,max五个边界值外,还要考虑采用一个略超过最大值(max+)以及一个略小于最小值(min-)的取值,看看超过极限值时系统会出现什么情况。 因果图 决策表:决策表是把作为条件的所有输入的各种组合值以及对应输出值都罗列出来而形成的表格。
单元测试:又称模块测试,是指测试一个代码单元,以发现其中的逻辑、算法和数据结构等方面的缺陷。 集成测试:测试当多个代码模块集成为子系统之后所表现出的整体功能 系统测试:依据既定需求规约文档验证软件系统的功能特征、特别是它的质量属性。 性能测试 :在一定的负载情况下,系统的响应时间等特性是否满足特定的性能需求。 - 时间特性,响应及处理时间,吞吐率 - 资源利用性 - 效率依赖性 内容:
- 负载测试:发现系统的负载极限
- 压力测试:测试服务器的高负载情况下是否能够稳定工作
- 容量测试:获取不同数量级别的服务器性能指标,以确定数据库的最佳容量和最大容量。和负载测试的区别在于,容量测试主要关心how much,而负载测试同时强调how much 和how fast.
- 网络性能测试:测试网络带宽、延迟、负载和端口的变化对用户的响应时间的影响,主要是测试用户数目与网络带宽的关系
指标 - 响应时间:在某数据量的情况下,完成某功能模块所需要的时间
- 吞吐量:反映单位时间内能够处理的事务条目
- 服务器资源占用:反映在负载下系统的资源利用率
- 网络
压力测试:测试系统在不同压力情况下的效率状况,以及系统可以承受的压力情况 验收测试:测试用户接受目标软件的程度,即测试软件的用户满意度。
|