软件测试周刊(第54期):管他乐观还是悲观,都滚蛋,干就完了。

编辑:国薇、一口锅、菜菜、静怡、小淑子、夏至、CC

欢迎来到第 54 期!这里记录过去一周我们看到的软件测试及周边的行业动态,周五发布。

本期看点:自如的埋点自动化测试工具是怎样设计的?如何使⽤ Selenium 测试 Electron 应⽤?网易云音乐 Android 隐私合规静态检查是怎么做的?如何通过用例驱动体验设计,让你的设计更严谨?效能指标「研发浓度」在项目度量中是如何应用的?如何优化 SQL 语句?2022年十大科技应用趋势是什么?何时登陆火星?往返一趟火星多少钱?何时实现 L4 级的FSD?企业数智化转型的五部曲是什么?

·

阅读愉快!

🐞 软件测试

1. 自如的埋点自动化测试工具是怎样设计的?

张茹

数据埋点是数据采集的一种重要方式,主要用来记录和收集终端用户的操作行为,当用户的行为满足某种条件的时候,会自动触发记录和存储,然后这些数据会被收集并被传输到终端提供商。通过埋点收集到的信息,可以进行汇总分析,推动产品优化或指导运营。

埋点测试的现状:

  • 同一个 APP 版本中,埋点需求分布于不同的需求文档,不好管理;
  • 在每一次的迭代过程中,难以找到历史版本已经存在哪些埋点,容易有重复的需求;
  • 当前需求的埋点如果有修改,如果沟通不及时,也容易发生遗漏;
  • 每次都会在功能测试后再进行埋点测试,埋点测试占用时间也比较多。
  • ...

为了将埋点事件统一管理起来,提高埋点测试的效率和准确性,及早发现问题,自如设计开发了埋点测试工具,他们具体是怎么做的呢?

原文地址:

埋点自动化测试工具的设计与实践

2. 如何使⽤ Selenium 测试 Electron 应⽤?

360质量效能

Electron 利⽤ Chromium 和 Node.js ,为使⽤ JavaScript,HTML 和 CSS 构建跨平台的桌⾯应⽤程序,可以实现代码⼀次编译,多端运⾏的效果,可以⽣成 mac app, windows exe 等。

如何使用 Selenium 测试 Electron 应用呢?

原文地址:

使⽤selenium 操作 electron 应⽤

3. 网易云音乐 Android 隐私合规静态检查是怎么做的?

烧麦

目前,国内对应用程序安全隐私问题监管变的越来越严格。各个应用市场对 APP 上架也有比较严格的检查。

开发在平时写代码的时候一般不会使用敏感的API。大部分的敏感 API 调用都在一些三方 SDK 里面,或者一些敏感级别不是很高的 API。

为了避免这类问题拖累 APP 上架,也为了提升检查的准确性和效率。

作者是怎么做的呢?

原文地址:

Android 隐私合规静态检查

Android 隐私合规静态检查(二)

🐴 质量效能

1. 如何通过用例驱动体验设计,让你的设计更严谨?

同舟( 酷家乐用户体验设计)

用例(Use Case)是什么?

是参与者与系统交互的一系列活动的集合。

用例驱动体验设计是什么?

是借用例的概念来定义问题和范围,并使用 UML 来分析问题,使整个设计过程变得有序、系统、严谨,在应对复杂系统、多链路多角色的业务时较为有效。

用例在整个设计过程中是核心的存在,一旦模糊就会出现偏差,引入无关内容,同时也会失去对用户价值的把控。

用例的获取很不容易,而精准统一的用例更难,涉及到颗粒度、抽象层次、参与者、受众等等内容,本文仅专注在用例如何驱动设计过程。

原文地址:

用例驱动设计,让你的设计更严谨!

2. 效能指标「研发浓度」在项目度量中是如何应用的?

费解(有赞coder)

有赞效能改进团队经过不断探索,定义了「研发浓度」指标,作为研发效率的度量。该指标融合吞吐率、研发周期和资源利用率,反映了「为缩短项目周期而投入资源」的决策收益。

计算公式如下:

研发浓度 = 项目工作量人日 ÷ ( 研发周期 × 参与人数 ) × 100%

「研发浓度」的优势在于,它是一项领先指标,能直接体现任意项目的研发效率,并在过程中进行度量,发现问题可以随时介入并进行改进。

有赞是如何应用研发浓度进行效能改进的呢?

原文地址:

效能指标「研发浓度」在项目度量中的应用

🦧 技术同频

1. 如何优化 SQL 语句?

苏三说技术

SQL 优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到。

如果某天你负责的某个线上接口,出现了性能问题,需要做优化。那么你首先想到的很有可能是优化 SQL 语句,因为它的改造成本相对于代码来说也要小得多。

那么,如何优化 SQL 语句呢?

原文地址:

聊聊sql优化的15个小技巧

2. 2022年十大科技应用趋势是什么?

腾讯研究院

腾讯研究院近期访谈了重点领域的科学探索奖获奖人、业界权威专家,以及腾讯 8 大科技实验室的科学家和重点业务方向的专家,凝练出三大类、十个有望落地的科技趋势重点方向:

  • 云原生、人工智能、云网融合、云安全、量子计算等领域的新变革有望重塑信息基础设施;
  • 星地协同智能化、能源互联网、复杂任务服务机器人与信息技术的融合正迸发出强劲的跨界创新势能;
  • 万物孪生、扩展现实将进一步连通虚实世界,为人们创造全新的体验和数字生产力,让虚拟世界更真实、让真实世界更丰富。

对十大技术趋势做了进一步的打开,根据技术成熟度和影响力,细分为IT重塑网络革命智能世界虚实共生四大领域。

原文地址:

2022年十大科技应用趋势 | 万字报告PDF

🦉 持续成长

1. 何时登陆火星?往返一趟火星多少钱?何时实现L4级的FSD?

车东西

就在几天之前,Youtube 知名科技 UP 主,拥有 143 万粉丝的大 V Lex Fridman 与马斯克进行了一场长达2小时31分47秒的深度对话,从 SpaceX 的载人飞船、猛禽火箭、殖民火星,一口气聊到特斯拉面临的自动驾驶工程难题,机器人,以及马斯克知名的第一性思考原则。

对话里也包括大量马斯克的真知灼见、反常操作、以及技术细节:

  1. 何时登陆火星?最早 5 年,最晚 10 年后。
  2. 往返一趟火星多少钱?1 万亿美元。
  1. 何时实现 L4 级的 FSD?2022 年就有希望。
  2. 特斯拉自动驾驶软件中神经网络数量不断增加,基础代码正在快速减少,让自动驾驶越来越近。
  1. SpaceX 造火箭时找不到合适的材料就自己造了几种合金……

原文地址:

马斯克:管他乐观还是悲观,都滚蛋,干就完了!

2. 企业数智化转型的五部曲是什么?

肖利华(商业评论)

  1. 基础设施云化:建立弹性、敏捷、灵活、高性价比的新架构,形成小前台+大中台+强后台+富生态,减少低水平重复建设,提升组织敏捷响应能力,更好地满足消费者的需求。
  2. 触点数字化:通过各个触点的移动化、智能化达到多维度的消费者感知、员工感知、组织感知、商品状态感知、合作伙伴感知、生态系统感知,使得企业在全链路保持连接和数据获取能力。
  1. 业务在线化:让这些数字化后的触点连接各个业务模块,从而实现业务的实时在线。各种业务在线后衍生出来的就是业务中台化,即把所有业务的数据汇集、沉淀。
  2. 运营数据化:数据既是起点,也是终点,更是在运营过程中控制运营结果的关键因素,在运营过程中根据发现的监测数据,调整运营行为。
  1. 决策智能化:企业发展战略从“业务驱动”转向“数据驱动”的实现过程

原文地址:

阿里巴巴副总裁肖利华:企业数智化转型五部曲

🐙 拥抱开源

1. JavaScript 30 天编程挑战

《JavaScript 30 天编程挑战》是在 30 天内学习 JavaScript 编程语言的分步指南,作者提供了一个可循序渐进的前端开发指南,带你一步一步入门 JavaScript 开发。

开源地址:

GitHub - Asabeneh/30-Days-Of-JavaScript: 30 days of JavaScript programming challenge is a step-by-step guide to learn JavaScript programming language in 30 days. This challenge may take more than 100 days, please just follow your own pace.

2. pinyin-pro: 纯前端实现的汉字转拼音工具

pinyin-pro 是一款纯 JS 实现的汉字转拼音工具,支持中文转拼音、拼音音调、拼音声母、拼音韵母、多音字拼音、姓氏拼音、拼音匹配。

特色功能:

  • 获取汉字、词语、句子等多种格式的拼音
  • 获取声母
  • 获取韵母
  • 获取拼音首字母
  • 获取音调
  • 获取多音字的多种拼音
  • 支持人名姓氏模式
  • 支持自定义拼音
  • 支持字符串和数组两种输出形式
  • 支持拼音文本匹配功能


开源地址:

https://github.com/zh-lx/pinyin-pro

言论

1、“我的迷茫和胆怯一直都在,但我告诉自己,就算是万丈深渊,走下去也是前程万里。

——木心 《素履之往》

2、

当代年轻人的问题:我没有看到自我和个性的过剩,我看到了表达的过剩。

图片

1、 文本-图像合成新基准:一只同时坐着、站着又趴着的狗

2、

订阅

本周刊每周五发布,会同步更新在微信公众号

微信搜索“毕小烦”或者扫描下面的二维码,即可订阅。

如果文章对你有帮助,记得留言、点赞、加关注哦!

(完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我明白了。下面是一个简单的杂志订阅管理系统的代码实现: ``` #include <iostream> #include <string> using namespace std; class Magazine { protected: string name; string period; double price; public: static int count; Magazine(string n, string p, double pr) : name(n), period(p), price(pr) { count++; } virtual void display() { cout << "Name: " << name << endl; cout << "Period: " << period << endl; cout << "Price: " << price << endl; } }; class WeeklyMagazine : public Magazine { public: WeeklyMagazine(string n, double pr) : Magazine(n, "weekly", pr) {} void display() { cout << "Weekly Magazine:" << endl; Magazine::display(); } }; class MonthlyMagazine : public Magazine { public: MonthlyMagazine(string n, double pr) : Magazine(n, "monthly", pr) {} void display() { cout << "Monthly Magazine:" << endl; Magazine::display(); } }; int Magazine::count = 0; class MagazineSet { private: Magazine* magazines[100]; public: static int count; MagazineSet() {} MagazineSet(const MagazineSet& other) { for (int i = 0; i < other.count; i++) { if (dynamic_cast<WeeklyMagazine*>(other.magazines[i])) { magazines[i] = new WeeklyMagazine(*dynamic_cast<WeeklyMagazine*>(other.magazines[i])); } else if (dynamic_cast<MonthlyMagazine*>(other.magazines[i])) { magazines[i] = new MonthlyMagazine(*dynamic_cast<MonthlyMagazine*>(other.magazines[i])); } } count = other.count; } MagazineSet& operator=(const MagazineSet& other) { if (this != &other) { for (int i = 0; i < count; i++) { delete magazines[i]; } for (int i = 0; i < other.count; i++) { if (dynamic_cast<WeeklyMagazine*>(other.magazines[i])) { magazines[i] = new WeeklyMagazine(*dynamic_cast<WeeklyMagazine*>(other.magazines[i])); } else if (dynamic_cast<MonthlyMagazine*>(other.magazines[i])) { magazines[i] = new MonthlyMagazine(*dynamic_cast<MonthlyMagazine*>(other.magazines[i])); } } count = other.count; } return *this; } void addMagazine(Magazine* mag) { magazines[count] = mag; count++; } void display() { for (int i = 0; i < count; i++) { magazines[i]->display(); } } }; int MagazineSet::count = 0; int main() { MagazineSet set1; WeeklyMagazine mag1("Magazine1", 5.0); MonthlyMagazine mag2("Magazine2", 10.0); set1.addMagazine(&mag1); set1.addMagazine(&mag2); cout << "MagazineSet1:" << endl; set1.display(); MagazineSet set2 = set1; set2.addMagazine(new WeeklyMagazine("Magazine3", 3.0)); cout << "MagazineSet2:" << endl; set2.display(); return 0; } ``` 在上面的代码中,我们定义了一个Magazine类和两个子类WeeklyMagazine和MonthlyMagazine,分别表示周刊和月刊。MagazineSet类用于管理多个杂志的订阅,其中包含了一个Magazine类型的数组magazines,以及一个静态成员变量count,记录当前订阅的杂志数目。 在Magazine类中,我们定义了一个静态成员变量count,用于记录杂志的总数。同时,我们还定义了一个虚函数display,以实现多态。在子类WeeklyMagazine和MonthlyMagazine中,我们重载了这个函数,以实现不同的输出效果。 在MagazineSet类中,我们重载了复制构造函数和赋值运算符,以便正确地复制一个MagazineSet对象。在addMagazine函数中,我们将要添加的杂志指针存储到数组中,并增加count计数器。在display函数中,我们遍历数组并调用display函数输出每个杂志的信息。 在main函数中,我们创建了一个MagazineSet对象set1,并向其中添加了两个杂志对象。然后,我们复制了set1对象,并向复制的对象set2中添加了一个杂志对象。最后,我们分别输出了set1和set2对象的杂志信息。 希望这个简单的代码示例能帮助你更好地理解继承和多态的概念。如果你还有其他问题或者需要进一步的解释,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毕小烦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值