在我看来,这两个领域有很多共同点。例如,这两个流程都侧重于调查不当行为的结果及其原因和影响,以及相关的记录保存和文档实践。
一年前,我收到了一份在 inDriver 担任 QA 手动工程师的职位。但在那之前,我花了七年时间在各个执法单位和机构调查刑事案件。在我任职期间,我处理了范围广泛的刑事犯罪,从危及人的生命和健康的严重犯罪到跨地区性质的经济犯罪。在我上一份工作中,我的职位是:“萨哈共和国(雅库特)内政部调查局打击有组织犯罪调查司高级调查员”。
现在我的工作是设置回归测试,编写移动 UI 自动测试,并处理许多其他旨在加快向用户提供新功能的过程而不会降低产品质量的事情。
正如刑事调查始于检查犯罪现场一样,错误报告始于对发现缺陷的环境的描述。通过这种方式,我们收集了一些可靠的数据。然后,以这些数据为基础,应用演绎方法,以及我们对环境或产品的了解,我们可以缩小调查范围,开始计划进一步的行动并发展我们的假设。
一旦我们得到原始数据,我们就面临着信息的多样性。现在重要的是制定一个行动计划。时间是我们这里的第一资源。检查名称输入字段中从 -2,147,483,648 到 2,147,483,647 的所有值以定位缺陷几乎不是一个好主意。同样,调查人员没有能力询问镇上的所有居民,也没有能力将每一个家庭用具或物品送去进行分子基因检测。
为了解决这个问题,QA 工程师应用了侧重于边界值、等价类和成对的测试设计技术。相比之下,调查人员将采用策略和组合,使他们能够尽可能有效地计划进一步的步骤。
假设我们收到一份谋杀报告,大意是我们的应用程序发生了崩溃。根据我作为调查员的经验,我知道几乎 90% 的谋杀案都以某种方式与受害者的丈夫、妻子、亲戚、朋友或邻居有关。应用程序也是如此……我们以产品知识为指导:假设我们拿出一个嗅探器,检查发出的请求和我们得到的答案。到目前为止,没有什么有趣的事情:所有家庭成员都有不在场证明,服务器的响应包含“200”。这里的一切似乎都井然有序。
此外,我们知道一个头脑健全的人不会无故杀人。基于此,我们可以将无限的嫌疑人名单缩小到与受害者有经济联系或与工作相关或其他一些联系的人。同样,在应用程序中,我们可以识别缺陷开始传播的发布版本,并就代码中的哪些更改可能导致错误出现做出假设。
接下来,我们尝试确定犯罪之前的所有事件,以追踪一些有罪的证据:
我们观看摄像机的镜头。
我们询问邻居是否听到打斗的声音或看到任何可疑的人。
我们确定受害者在犯罪发生前不久通过电话与谁交谈。
在处理缺陷时,我们还会收集证据:
在这个过程中,我们发现一名男子 NullPointerException 在犯罪发生前不久进入了公寓。邻居们认出他是当地的小流氓,有犯罪记录,经常喝醉,大楼里的所有租户都害怕他。
让我们假设,一旦提供了有罪的证据,该男子就承认了罪行。调查并没有就此结束。我们必须确保犯罪的是他,他的认罪是出于悔恨,而不是害怕破坏调查员的情绪。
为此,在犯罪现场核实证据,要求被指控的肇事者透露犯罪的全部细节,并叙述任何未参与犯罪的当事方不知道的情况。犯罪。因此,通过确定重现缺陷的稳定方案,我们获得了确凿的证据,证明我们已经找到了我们正在寻找的合适的一方。
一旦犯罪的所有情节都确定了,纠正缺陷就不是侦查员的工作了。他将收集到的证据整理成刑事案件卷宗,起草起诉书,提交给法院。关于量刑、如何修复错误或是否将此错误声明为无辜功能的决定是在测试过程之外做出的。
为了防止今后发生类似的犯罪,调查人员必须确定促成被审查犯罪的实施情况并采取相关行动。例如,他或她必须说明为什么以前没有针对有关犯罪者行为的报告采取任何措施,或者为什么对他采取的措施未能防止犯罪。
在测试的情况下也是如此:当在 PROD 上检测到错误时,确定导致其出现的因素并没有什么坏处:
显然,调查员和测试员的工作是不一样的。尽管有一些共同特征,但它们之间的差异仍然远大于相似之处。但是,如果出于任何原因,您发现自己想要从根本上改变您的职业轨迹,您可以从我们的合作伙伴那里找到合适的课程,这是可能的。即使在完全不同的领域,你也可以找到需要类似心态的活动——这将使你更容易实现你为自己设定的目标。
也在这里发布