随着软件即服务(SaaS)和其他新的软件交付模式的兴起,许多组织正在实践软件的完全所有权,使工程师能够在应用程序的整个生命周期中负责其工作。
在这样的组织中,可理解性采取了更强大的形式,决定了工程师能在多大程度上理解软件是如何操作的,以及应用程序的客户是如何利用它的。
因此,决定拥有这些信息的团队可以访问非常有价值的信息,如使用模式、真实世界的输入和输出,以及实际的性能和可用性统计数据。
读到这篇文章,你可能会想,这正是可维护性和监控工具的作用所在。不幸的是,事实并非如此。这些工具用于支持更传统的IT问题,重点在于:
当系统行为不正常时发出警报,并帮助识别根,以便可以恢复正常服务。
确定性能瓶颈,以便分配额外资源或通知相关团队。
这些都是IT自古以来一直在处理的很好的用例,而且由于它们的ROI非常清楚,许多供应商都在提供很好的工具来解决这些问题。然而,这些并不是软件工程团队要处理的用例,这些工具从来就不是用来帮助他们的。
所有这些IT用例的共同点是,对系统有基本工作知识的人需要确切地了解系统在特定实例中的行为方式,以便他们可以适当地响应。这意味着我们收集关于一组预定义事件的数据,这些数据往往是关于系统如何与其周围的世界交互的。
另一方面,软件工程团队对系统的内部工作有深入的了解,并希望更多地了解它是如何工作的。根据他们对系统所做的具体更改,每天(如果不是每小时)收集更改所需的数据。
随着软件规模的扩大和变化,它变得越来越复杂。这种复杂性在很大程度上是固有的,原因很简单,即业务需求的数量在不断增长。这种复杂性的其余部分是不受欢迎的,这是由于应用程序随着时间的推移而被重新定位的方式,以及糟糕的设计选择,通常被称为技术债务。
不管其来源如何,复杂性都会损害工程师理解和有效地根据需要更改软件的能力。这一问题通常会因人员流失造成的知识流失而加剧。
当然,在软件行业,必须将软件复杂性降至最低是人所共知的。软件越复杂,开发新功能的成本就越高,系统的整体质量也就越低。关于如何构建将复杂性降至最低并允许系统和团队更好地扩展的应用程序软件,已经写了很多文章。
如果您正在开发新的软件,您很可能会忽略可理解性,而偏向于它的一个代理:复杂性。通过专注于避免和降低复杂性,您自然会保持可理解性。幸运的是,软件的复杂性是无数软件开发工具和技术的焦点。
首先,也是最重要的,从高素质的劳动力开始。有才华的工程师利用他们的经验,在软件的源代码和体系结构中以简单而优雅的方式表达复杂的业务问题,创建了一个更容易理解的软件。
下一步,尽量使系统变得尽可能小,因为较小的系统本质上不太复杂,也更容易理解。通过将重点放在真正重要的业务需求上,而忽略(至少暂时)非强制性的需求,可以从“顶层”减少系统。通过使用更高级别的抽象,例如新的编程语言、高级框架和现代数据库,通常也可以从“底层”缩减系统。
最后但并非最不重要的一点是,确保搭建好脚手架,以便在复杂情况出现时进行处理。以单元测试和系统测试的形式编写自动化测试,以确保您的工程团队可以安全地重构复杂性。使用高质量的可观察性工具来帮助您更高层次地了解系统。自动化您的集成和部署管道,使您能够快速改进和迭代。
另一方面,当涉及到现有软件时,我们倾向于接受我们的工程团队未能理解代码是上帝造成的灾难。按复杂性收费不再是提高可理解性的可行方法。
通常情况下,您面临的遗留系统是使用比当前可用的工具更低级别的工具编写的,这些工具是由早已离开的人编写的,并且没有任何脚手架。抱怨你必须应付的技术债务和你的工程师无法理解的“不可读的代码”不会让你走得很远。也不会梦想很少实现的长期重构和迁移。
这就是生产调试平台大放异彩的地方。通过让您的工程师深入了解他们正在努力实现的代码,他们可以开始理解它。通过跟踪环境和用例中的cookie碎屑,他们可以一步一步地解开这种复杂性。
我们现在对软件开发中可理解性的重要性有了更好的认识。一方面,我们一直都知道保持代码的易读性和易维护性很重要,软件工程的很多工作都集中在这一壮举上。然而,我们现在更加认识到,它可以在允许软件随着时间的推移而增长和发展方面产生多大的不同。
另一方面,我们也挑战了这样的假设,即通过处理复杂性和设计和编写更好、更简单的软件,可理解性总是可以提高的。很多时候,我们发现自己在中途登上了火车,对它是如何到达那里的几乎没有控制。因此,我们必须开始跟踪和管理可理解性,将其作为自己的关键度量,最大化工程速度和质量,即使在不是最佳条件的情况下也是如此。
丽兰·海莫维奇(Liran Haimovitch)是Rookout的联合创始人兼首席技术官。他是现代软件方法论(如敏捷、精益和devops)的倡导者。Liran的激情在于了解软件的实际工作原理。当他不想编程的时候,他通常在潜水或徒步旅行。
InfoQ上上周内容的综述每周二都会发布。加入一个超过25万名高级开发人员的社区。查看示例。
选择您的国家/地区我同意InfoQ.com按照本隐私声明中的说明处理我的数据。