避免自动化灾难的6个技巧,


2015年,高级软件工程师Benjamin Willenbring对Autodesk公司进行自动化软件测试感到兴奋。但这种兴奋却没有持续多久,这是因为自动化团队与其他部门沟通不多,而当测试进入生产阶段时,并没有带来大家所希望的结果。

Willenbring说:“我们谈论的是非决定性的失败测试,但对其测试并没有太大的信心。开始运行测试非常困难,由于没有参考的案例,需要经常沟通,并且产生大量文件,我当时真的不知道如何处理。”

自动化

自动化软件可以简化Willenbring的工作。在接下来的几年里,这些问题占据了他的大部分精力。

Willenbring的经历并不罕见。随着自动化通过IT技术的应用而迅速普及,并提供了一些宝贵的经验和教训。

从DevOps的自动化工作流到机器人流程自动化(RPA),自动化流程旨在减少繁琐的工作,并使熟练的员工解脱出来从事更高级别的任务。但是,具有缺陷的办公场所或部署不完善的项目可能会使自动化的梦想变成一场噩梦。一些IT专家对他们所听说或遭遇的自动化失败案例进行了阐述,并分享了六个技巧,以帮助企业的自动化计划避免失败的命运。

1. 自动化是每个人工作的一部分

Willenbring的自动测试面临一个关键问题:唯一了解自动测试的人员就是构建自动测试软件的人员,但通常他们并不一定在企业总部工作。

Willenbring说:“测试框架的困难之一是,当出现故障时,它无法真正提供良好的反馈。如果失败,需要做的第一件事就是通过协作应用程序Slack联系测试负责人,并问为什么会失败?然后,通过人工重新运行测试,对于框架的某些特殊版本,需要对可看到结果或将要将发生的情况进行沟通。”

DXC科技公司全球DevOps产品经理Robert Haas表示,其测试框架违反了两项基本规则,每个自动化制度都应遵守这两条规则。首先是必须记录自动化代码。Haas说:“无论企业使用像编制文档之类的现代方法,还是对Visio图表进行注释,如果有一些文档描述了最初所做的事情,那么解决问题将变得更加容易。”

如果没有文档,自动测试对Willenbring的团队是难以理解的。他们将无法理解测试结果,并且对测试和创建它们的团队失去信心。Willenbring说:“有时候开发人员可能并不在乎,认为这不可能是真正的失败。有时候,测试框架确实存在真正的失败。但是,关键问题是对测试和结果缺乏信任。”

Haas的另一个建议是:“根据需要交付的业务价值,对需要实现自动化的活动进行优先排序。”但是由于Autodesk的测试团队与开发团队如此分离,Willenbring发现他选择的代码库中的许多领域都违背了常识。他说,“需要让主题专家或了解重要内容的人员选择要测试的东西。如果只是在浏览一大堆错误记录,那么不能保证测试的数量能够准确地反映出任何有意义的东西。”

新上任的工程总监使Willenbring及其团队摆脱了这一恶性循环。工程总监要求质量测试成为每个人的工作,其中包括测试自动化,并取消集中式测试,让各个部门负责为其工作编写测试代码。Willenbring和他的团队现在可以根据自己的需求量身定制测试,并将该过程整合到他们的日常生活中。最后他说:“必须对‘那不是我的工作’的态度制定零容忍政策。”

Willenbring为此受到启发,并对其自动化之旅进行了详细的描述,其中包括人们可能感兴趣的深入材料,以及他处理的Selenium和Cypress测试框架的详细信息。

2. 为复杂性做好准备

安全和合规自动化供应商Tripwire公司最近注意到该公司的一个大型金融客户的自动化解决方案运行有些奇怪。

Tripwire的加拿大地区经理Irfahn Khimji说:“这家公司部署了自动解决方案,但却花费了很长时间,我们一直在想为什么看不到其许可证使用率显著上升?因为他们部署的速度应该很快。”

事实证明,大部分自动化的持续集成(CI)/持续部署(CD)管道的理想正在金融组织的各个业务部门工作中实现,每个业务部门都依赖于自己定制的软件组件集。

Khimji说:“他们正在尝试使用30多种应用程序,这些应用程序的商品化(在各种库中需要的模块以及类似的东西)都面临一些挑战。调整管道以处理所有这些不同的变化确实减缓了自动化过程,因为它不仅是简单的部署,还需要确保所有这些不同的技术都相互协作。”

没有什么灵丹妙药可以解决这个问题,但是需要知道,随着自动化流程中组件数量的增长,连接这些组件所需的管道数量会以指数级增长,并变得更加复杂。当过渡到自动化流程时,这种复杂性将需要更多的时间和资源。

增加这种复杂性的另一个因素不仅是要连接的组件数量,还包括它们的来源。大多数管道或机器人流程自动化(RPA)驱动的环境都包含内部组件和第三方组件的异构组合,如果出现问题将难以解决。

DXC科技公司的Haas说:“确保持续集成(CI)/持续部署(CD)管道或自动化过程的所有组件都与软件提供商签订维护合同。如果有开源组件,请进行风险评估,以确定是否应考虑使用产品的托管版本,而不是依靠开源社区的基于Web的支持。”

3. 当心“黑盒”

金融机构一直是希望部署机器人流程自动化(RPA)和聊天机器人的机构之一,Aisera公司的首席执行官兼联合创始人Muddu Sudhakar警告说,他在这些环境中经常看到这样一种情况:流程被视为一个单一的整体功能单元,成为了一个“黑盒”,其内部操作很难被排除在故障之外。

他说:“在整体结构中,客户将检查其帐户的状态,如果要提取并转移这笔费用,这一切都将一步到位。如果出了问题,并且没有经过审计的步骤监控,那么在灾难性失败中取回资金的唯一方法是致电客户服务部门,也许需要亲自去银行取款。”

对于Sudhakar来说,这种设计通常是企业早期采用自动化的标志。只要一切都按计划进行,这样的项目就可以产生良好的结果。但是如果不是这样,企业通常必须回来拆分这些黑盒。最好从一开始就避免使用它们。

他说:“将每个过程分解为多个构建块,其中每个构建块都是可审核和可监控的。”

4. 建立制衡机制

Ari Meisel是Less Doing公司创始人,也是一位对自动化工作特别感兴趣的生产力教练。他经常为生活方便开发一些自动化软件。但当他试图避免停车罚单时,采用自动化软件却遭遇了一个沉痛的教训。

Meisel拥有一辆皮卡车,从技术上讲是一辆商用车,而在他居住的纽约市,这种汽车的拥有者很容易对罚单提出异议:“可以向当地财务部门发送信函辩解说,‘我正在送货。'”

他承认,他的这种做法并不完全合法的:他创建了一种自动化软件系统,可以随机生成发票,并将发票和信函发给当地财政部门,以对取消罚单进行辩解。他表示这种方法开始奏效,但却出现了问题,因为该系统发送了100多次完全一样的信函和发票,财务部门威胁要把我送进监狱,为此我找到律师进行辩护,最终结果我为此花费了3.6万美元。”

他意识到,他的自动化处理软件需要的是一个防错措施。这个术语的意思是“防错”,在丰田公司的汽车生产体系中,采用过程的步骤,这个步骤被分成了两个步骤,第二个步骤的运行依赖于第一个步骤。虽然增加步骤但反而提高了效率,这好像有些自相矛盾,但如果没有排除错误将会影响生产线运行。Meisel说,在他的逃避罚单的计划中,如果自动运行程序将每一张发票与之前发送的发票进行比较,查看内容是否相同。这是一件很容易做到的事。”

这扩展了Aisera的Sudhakar的建议:每个自动化步骤不仅应该是可以审核的,而且还应由其他自动化步骤不断进行审核。在AIOps领域中,自动化平台承担了工程师的IT管理负担。Sudhakar说:“我称之为美国航天局(NASA)方法。NASA必须假设将要发生的故障,必须采用具有制衡功能的AIOps解决方案。”

但是,除非亲身经历了自动化的失败,否则很难看到它的价值,Meisel说:“人们在90%的时间内都会出问题。他们表示,不会采用这种永远不会真正受益的自动化技术,然后却发现他们确实需要它。”

5. 不要忽视安全

自动化的持续集成(CI)/持续部署(CD)管道有一个秘密:许多用于解决安全性要求的管道最初是作为影子IT推出的。Tripwire的Khimji说:“开发者想继续下一次迭代(开发代码)。因此,当严格的IT和安全流程陷入困境时,他们认为,‘我可以在云平台中生成这些映像,并且我可以规避它们。”

这并不意味着这些管道天生就不安全,但是应该调查哪些安全实践是为了提高自动化效率而放弃的。此外,需要记住,任何自动化进程都代表了攻击的另一个向量。自主操作的进程可能具有提升的权限,使它们成为诱人的目标。Aisera公司的Sudhakar说,他了解一些称之为“黑天鹅”的例子:例如一个竞争对手在一家公司内部使用DevOps管道将恶意软件注入代码库,使其传播到生产环境中,使其系统无法运行。

6.不要廉价地自动化

Tesults公司首席开发人员和创始人Ajeet Dhaliwal发现,不当的炒作会带来误解。许多企业都有一个“自动化测试”的愿景,但它与最佳实践大相径庭。在没有技术背景的小型组织中尤其如此。由于他们了解人工测试,因此从逻辑上讲,自动测试应该只是无需人工干预即可进行的人工测试的一种版本。

因此,Dhaliwal说,“他们鼓励那些没有软件开发背景的传统质量保证(QA)测试人员执行人工测试,使测试实现自动化。有时这意味着使用工具,只记录人工用户界面(UI)测试,以便以后重复进行。这些方法的健壮性和灵活性与开发人员在自动化方面能够实现的目标不匹配。”

Dhaliwal补充说:“自动化测试开发人员还需要成为软件工程师。有一些初级开发人员参与是可以的,但是这些公司需要一些经验丰富的开发人员来领导这项工作,而他们没有这样的人员。”

而且,正如Autodesk的Willenbring所说,软件工程师还需要了解如何构建自动化流程。他说:“这只是开发人员将拥有的技能之一。当企业可以使用这些技能时,希望这些技巧将有助于企业的自动化项目获得成功。”

相关内容