软件测试周刊(第16期):戴着镣铐起舞
发布于 2021-05-11 20:03 ,所属分类:软件测试工程师学习资料
▲点击上方第二个“毕小烦”gongzhong号
这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。
本周刊开源(GitHub: SoftwareTestingWeekly ),欢迎提交 issue,投稿或推荐软件测试相关的内容。
科普
机密计算
机密计算是什么?
机密计算(Confidential Computing)是一种云计算技术,可在处理期间将敏感数据隔离在受保护的 CPU 区域中。enclave(一个被保护的内容容器) 中的内容只能由授权的编程代码访问,并且任何人(包括云提供商)都无法看到。
为何要使用机密计算?
对于数据安全而言主要包括:静态数据、传输中数据和使用中数据。
保护静态数据要使用加密或令牌化等方法,那样即使从服务器或数据库复制数据,窃贼也无法访问该信息。
保护传输中数据要确保未经授权的人看不到服务器和应用程序之间传输的信息。
这两种保护技术都比较成熟,但对于数据使用安全,
由于在数据在使用的过程中,只有明文数据(未经加密或其他保护的数据)才能在应用程序中完成计算,这就意味着在这一过程中,恶意软件可以转储内存中的内容以窃取信息,因此即便是在服务器的硬盘驱动器上对数据进行加密,结果也无济于事。
所以,保障数据存储中的安全格外困难。
机密计算就是针对数据在使用过程中的安全问题所提出的一种解决方案。
机密计算是如何实现的?
机密计算使用基于硬件的技术将数据、特定功能或整个应用程序与操作系统、虚拟机管理程序或虚拟机管理器以及其他特权进程隔离开来。数据存储在可信执行环境(TEE)中,即使借助调试器,也无法从外部查看数据或对数据执行的操作。TEE 确保只有授权的代码才能访问数据。如果代码被更改或被篡改,TEE 将拒绝操作。
TEE(可信执行环境):TEE 提供一种与不可信环境隔离的安全计算环境,正是这种隔离和可信验证机制使得机密计算成为可能。
随着公司越来越依赖公共云和混合云服务,云中的数据隐私势在必行。由于数据在使用中的安全问题,许多企业担心其敏感数据泄露,因此拒绝将一些敏感的应用程序迁移到云中,这在一定程度上阻碍了公共云的发展。但机密计算的出现,正在试图扫除这一障碍。
机密计算的主要目标是向公司提供更大的保证,确保其云中的数据受到保护,并鼓励它们将更多的敏感数据和计算工作移至公共云服务。
参考资料:
https://www.ibm.com/cloud/learn/confidential-computing
https://baijiahao.baidu.com/s?id=1672829581588945077&wfr=spider&for=pc
文章
1. 关于ToB生意你应该知道的几件事儿
刘润
To B 生意最大的特点就是流程和复杂,你要知道这几件事:
人
找对人,要和能拍板的人沟通,自上而下的管理,会更加高效。
不要相信口头承诺,企业里的人事变动频繁,白纸黑字的合同才算数。
你面对的不是一个人,而是一个系统,可能是几百个人,因此你需要一个作战地图来运筹帷幄。
钱
企业里花钱需要做预算,因此你要知道企业跟你的合作是否在预算内。
企业花钱不是冲动消费,决策流程很长,因此你不能光靠产品拿下客户,还要有 BD 有销售,去磨,去耗,去说服。
事
为了防止腐败,超过一定金额的项目,往往都要进行招标。
理解财务、法务、人事,他们是企业的底线。
加入企业的供应商名单(如果有)才能更好的合作
戴着镣铐起舞
To B 的生意,有无数的参与者,决策者。每个人都有自己的原因,有自己的利益。
所以,才有了流程、规范、制度。在这些制约下,游刃有余地影响决策者,促成合作,是必须要认识清楚的事情,也是一种本事。
2. Code Review 的最佳实践方案
宝玉
Code Review(代码审查)是软件开发中的最佳实践之一,能够及时发现代码中可能存在的问题,有效提高整体代码质量。像 Google、微软这些公司,Code Review 都是基本要求。
作者结合自己的经验,整理了 Code Review 的最佳实践。
Code Review 有什么好处?
团队知识共享的角度:
一个团队中的开发水平不同,每个人侧重的领域也有不同。
Code Review 可以帮助新人成长、领域互补、离职交接、业务互备、促进沟通。
代码质量的角度:
现实项目中总是缺人,自动化测试和代码审查的时间总被压缩,结果影响代码质量,欠下技术债务。
很多问题只能通过代码审查发现,比如代码的可读性、可维护性、代码结构、一些特定条件才触发的死循环、逻辑算法错误、安全漏洞等。
对于高手来说,让别人审查自己的代码,可以让其学习到好的实践;在给别人说明自己代码的时候,也等于对代码进行了一次审查。
团队规范的角度:
每个团队都有自己的代码规范和开发规范,然而时间一长,都会形同虚设。
通过 Code Review,就可以及时的去发现和纠正这些问题,保证团队规范的执行。
Code Review 该怎么做呢?
把 Code Review 作为开发流程的必选项而不是可选项,分支要合并到 master 有两个必要条件:
所有的自动化测试通过
有至少一个人 Code Review 通过,如果是新手的 PR,还必须有资深程序员 Code Review 通过。
好处很明显:
由于每一次合并前都要做代码审查,这样每次的代码量也不会太大,对于审查者来说压力也不大。
如果发现了问题,被审查者希望代码能尽快合并,也会积极的对审查出来的问题进行修改,不至于对结果太过抵触。
把 Code Review 变成一种开发文化而不仅仅是一种制度
先让开发人员认识到 Code Review 这件事为自己、为团队带来的好处。
再有几个人做好表率作用。
对于管理者来说,你激励什么,往往就会得到什么。
把 Code Review 作为开发任务的一部分,给审查者和被审查者都留出专门的时间去做这件事。
一些 Code Review 的经验技巧
真遇到紧急情况,来不及代码审查怎么办?
创建一个 Ticket,用来后续跟踪,确保后续补上 Code Review,并对 Code Review 结果有后续的代码更新。
代码在提交 Code Review 之前,作者要自己先 Review 和测试一遍。
PR 要小,这样就比较容易 Review,也容易发现代码中可能存在的问题。
对评论进行分级,打上不同的 Tag,如:[blocker]: 表示必须要修改。[optional]:表示可改可不改。[question]:表示对这个代码行不理解,需要澄清。
评论要友好,避免负面词汇;
有说不清楚的问题当面沟通,面对面的沟通效率更高,也容易消除误解。
3. 聊一聊代码覆盖率
皮皮哥
测试的怎么样啦?功能测完了吗?场景覆盖全了吗?代码覆盖全了吗?
当我们被问到这些问题的时候,就会想到覆盖率。
那,
① 覆盖率是什么呢?
我们通常所说的覆盖率是一个非常宽泛的概念,主要有:功能/场景覆盖率、接口覆盖率、代码覆盖率。
而今天讨论的代码覆盖率在维基百科上的定义是:
代码覆盖率(Code coverage)是软件测试中的一种度量,描述程序中源代码被测试的比例和程度,所得比例称为代码覆盖率。
代码覆盖率的分类有:函数覆盖率、行覆盖率、分支覆盖率、条件覆盖率、条件分支覆盖。粒度是由粗到细,用的比较多的是代码行覆盖率。
② 获取代码覆盖率的目的是什么?
目的是通过数字度量源代码的测试完备程度,从而提高被测系统的质量。
③ 影响代码覆盖率的因素有哪些?
来看一张图:
最外面黑色的大框是某个产品要覆盖的全部功能场景。
蓝色框是源代码覆盖的场景。
绿色框是执行测试覆盖的场景。
蓝绿框的交集,除以蓝色框的部分,就是代码覆盖率。
最终被测试发现而召回的 bug,是粉色区域;最终被泄漏出去的 bug,是红色区域;这两个区域是衡量测试能力的核心。
可以得到一些结论:
泄漏的 bug,其实是测试代码没有覆盖,被测代码也没有覆盖的场景。
召回的 bug,不仅存在于被测代码覆盖的场景中,也存在于被测代码之外。
代码覆盖率一般来说无法达到 100%。
④ 如何提高代码覆盖率?
开发代码:
配合覆盖率报告,将无用和过时的研发代码删除,或者在覆盖率统计中排除。
观察代码覆盖率最低的系统模块是哪些,然后针对性地补充用例。
找到没有被覆盖的重点分支和重点函数,分析其逻辑然后针对性地补充用例。
简单估计出当前项目应该到达的目标覆盖率。
测试代码:
永远通过的用例,这些用例对代码覆盖率的贡献很低,同时它的验收能力也很低。
覆盖率投入产出比低的用例。
思考那些永远不会触发的场景。
使用自动生成代码的方式来提升场景覆盖。
⑤ 选择静态还是动态代码覆盖率?
要更加深入的分析代码覆盖情况,动态代码覆盖率是一个有效、但实现起来较为困难的手段。
静态代码覆盖率:全量的代码都被展示出来,而被覆盖的代码行则会标记为“被覆盖”。
动态代码覆盖率:也可以称为动态代码调用链分析。代码的调用过程其实是一个树状的栈,对于不同的测试用例覆盖的是完全不同的堆栈。动态代码覆盖率,其实是更细粒度的用例级别的代码调用堆栈信息,以及入参等运行时信息。
⑥ 选择全量还是增量代码覆盖率?
增量代码覆盖率可以更为有效地描述覆盖率变化,可以更好地指导我们后续的工作;这也是目前业内代码覆盖率工程的一个新方向。
那,什么是增量代码覆盖率?
全量覆盖率:展示每次收集到的覆盖率的全量。
增量覆盖率:展示每次收集到的覆盖率与上一次覆盖率的变化情况。
覆盖率是由被测代码和测试过程相互决定的,所以增量覆盖率其实是由“被测代码变动”和“测试覆盖变动”这两项相互交叠。
⑦ 如何获得代码覆盖率?
代码插桩。简单来说,就是在每一条语句之后插入一条覆盖率用的打点语句,该打点被执行就意味着前一行代码被执行了。
每一种不同的语言都有自己的覆盖率收集工具,例如 golang 的 go coverage 以及 java 的 jacoco。
工具
1. 如何快速画出手绘风格的图形?- Excalidraw
Excalidraw 是一个线上白板,能够轻松设计出手绘风格的图形。
如下图所示:
图片来自:https://www.jianshu.com/p/16d4ea4ff106
使用地址:https://excalidraw.com/
开源地址:https://github.com/excalidraw/excalidraw
2. 优秀的 Python 程序性能监控、分析器 - Py-spy
Ckend
py-spy 是用于 Python 程序的性能监控、分析器。它使你可以直观地看到 Python 程序花费的时间,而无需重新启动程序或以任何方式修改代码。
开源地址:https://github.com/benfred/py-spy
3. 缺创意?给你一个创意大清单 - Ideas Grab
有一个收集创意的网站叫 ideasgrab,每天更新,你可以选取这些创意并应用于自己的项目。
网站地址:
https://www.ideasgrab.com/
创意如下:
方法
1. 如何提升写代码的能力?
bluedavy(阿里毕玄)
对于程序员而言,代码是展现能力的关键,一个优秀的程序员和一个普通程序员写的代码是很容易看出差别的,代码就是程序员的硬实力和名片的展示。
怎么提升写代码的能力呢?
作者谈了他代码能力提升比较大的四段经历,总结下来的经验就是:
想在哪方面精进,就给自己一个有挑战的命题,如果环境具备更好,不具备就自己创建。
如:
要学高并发的通信,可以尝试自己写一个和其他的做对比,做性能等的 PK。
要学 GC,可以尝试给自己几个题目,来控制 GC 的行为等,如果环境具备的话,确实会更加有利;
向优秀的程序员学习。
多和优秀的程序员一起工作。
从优秀的开源代码中学习。如:Netty,OpenJDK。
多参与一些优秀的开源项目。
看优秀的书。如:《Java并发编程实战》、《Oracle JRockit: The Definitive Guide》、《深入理解Java虚拟机》
多尝试解决问题/故障
自己工作里机会少的话,网上有大把,像 stackoverflow 之类的,都是很好的练习场。
2. 如何成为一个顶尖高手?
张丽俊
先搞清楚自己为什么而奋斗
你为什么而奋斗?有人为了家庭,有人为了事业,有人为了实现社会价值。虽然奋斗不一定让你成功,但是会让你感觉走在幸福的路上,让你离想要的幸福近一点。
让自己成为一个高效能的人士
成为一个高效能的人士有个“三力模型”:体力、心力和脑力。
一. 体力
如何保持体力?
情绪:保持好情绪
睡眠:保证睡眠时间
饮食:按时吃饭,自己做。
运动:每天运动,散步也行。
二. 心力
什么是心力?就像弹簧压到底的反弹力。
职场这条路很难走,好比一群猴子爬树,如果你是普通员工,往上看都是红屁股,往上爬很难。好不容易爬到管理层,成了“夹心饼干”,上面有老板,下面有员工,也不好做。
到了老板位置,前面没路了怎么办?你的压力得有多大?
没有强大的心力,我们在每个层级都会“死掉”。
锻炼心力的三个建议:
1)热爱是战胜恐惧的法宝。
2)必须有个师傅。一是名师,二是要求很严格。
3)解决问题、获得成功是心力强大的唯一路径。
三. 脑力
脑力不是智商,而是结构化思维。级别越高,每天需要判断的事情越多,你需要有个快速判断的能力。脑部训练,最重要的是做结构化训练。
成为一个顶尖高手
顶尖高手基本上有这么几个特质:
第一,纯粹。一个能大成的人,思想都很纯粹。而一个脑子很复杂的人,无法聚焦地把一件事做成。
第二,利他。理想主义在前,现实主义在后。
第三,精进。日复一日,年复一年地精进。
第四,修行。在行动中修行。
言论
1、这个「发」字该读第几声呢?
2.
我以为别人尊重我,是因为我很优秀。慢慢的我明白了,别人尊重我,是因为别人很优秀;优秀的人更懂得尊重别人。对人恭敬其实是在庄严你自己。
-- 仓央嘉措
图片
1、客户需求 VS 最终产品
2、世界公认的九大危险行为
订阅
本周刊每周五发布,会同步更新在gongzhong号。
搜索“毕小烦”或者扫描下面的ErWeiMa,即可订阅。
如果文章对你有帮助,请随手点个赞吧!
(完)
点击下方卡片毕小烦,和众多读者一起学习交流
相关资源