跳转到主要内容
Chinese, Simplified

有人说编程是一门科学,有些人说它是一门艺术,还有一些人认为它是两门艺术。无论哪个是真的,没有工程师提供的稳定的手和实际的重点,程序员只会给我们科学理论和大胆的艺术视野。得益于工程实践,我们拥有适合我们口袋的工作设备,只需轻点几下即可获得全世界的知识。

自从它是国家工程师周以来,唯一有意义的是庆祝工程学科如何使计算机变得可访问,必不可少,值得信赖和变革。我收集了自己的想法,甚至是一些个人经历​​,提出了五种必不可少的工程实践,这些实践总是落后于人类产生的最佳软件。当这些系统出现崩溃或故障时,故障可能不在于工程师,而在于喜怒无常的艺术家或云端科学家。

 

测试至关重要


每个程序员都知道进行黑客攻击是什么感觉,像机枪一样吐出一行代码。当你对这个架构有一个宏伟的愿景时,你永远不能把它变成代码。这就是米开朗基罗画西斯廷教堂时的感觉,但在一个72小时的延伸中。

虽然弯曲机的代码通常很棒,但它通常是毛茸茸的,并且在某些地方都没有完成。更糟糕的是,作者并不总是记得以后留下空隙的地方。对于所有代码的宏大艺术,它还没有准备好发货。我们将粗略的初稿转化为完成的代码的方式是使用顶级应用程序安全测试工具之一进行严格的严格测试。

在过去的十年中,测试变得比以往任何时候都更好,因为开发团队已经创建了强大的协议并构建了自动化功能来实施它们。团队正在使用新的持续集成机制,它们接受我们的代码并在我们检查后立即开始戳戳和刺激它。只要我们构建良好的单元测试 - 这是它自己的挑战类型 - 测试自动化机器人将确保我们的代码向前推进。如果我们犯错误,它会抓住它们并麻烦我们直到它们被修复。当我们的代码通过所有单元测试时,我们可以确定它不会失败 - 至少不是我们在编写测试时预期的方式。不能保证代码真正没有错误,但是测试严格确保我们得到了明显的代码。

 

存储库让我们修复我们的错误


你犯了多少次错误,并希望你能及时回过头来修复它?我们走了一条路,扯开代码并粘在新结构中,却发现这都是错误的。原始代码更好。

幸运的是,我们在编码过程中将工作提交给版本控制系统。良好的版本控制存储库(如CVS,Subversion和Git)可以实验代码并对其进行改进,而无需担心我们可能会朝错误的方向前进。存储库跟踪代码的演变,如果一切都是错误的话,让我们回过头来。

存储库还允许我们同步我们的项目工作,跟踪差异,并在时机成熟时将我们的工作与其他人合并。如果没有这种稳定,中立的服务来协同工作,团队会发现构建可靠的代码要困难得多,并且他们会害怕尝试新的功能。

 

开发方法很重要


大胆的心灵可能会跳入深渊,但是理性的头脑会形成一个战略性的计划,可以轻轻地下降到它的深处。如果没有仔细地将所有这些疯狂的直觉,直觉和梦想融合到一个理性的,完全规划的工作流程中,我们将无法构建大型或中型软件项目。

关于不同类型的编程方法存在持续的争论,其中许多方法相互对立。例如,有些人完全相信,如果没有敏捷方法的灵活性,就无法建立好的软件。然后还有其他人将敏捷抛到一边,因为它过于反复无常。就个人而言,我喜欢的敏捷过程有很多方面,但是当太多的程序员在牧场外游荡时,我发现它会误入歧途。

软件工程师一直在思考如何共同编写代码。他们尚未达成共识,但这并不意味着这些想法并非总比没有好。我们的野心如此之大,以至于我们需要数十人,如果不是数百人或数千人,他们一起工作,没有协调就会变得混乱。你可以选择你喜欢的任何一方 - 只要你选择一方。

代码必须继续存在


软件存在缺陷和局限性,但年龄不是其中之一。钢铁锈和有机材料破坏了,但软件的逻辑继续存在。正如我们所说的那样,IBM大型机运行COBOL代码,这些代码由从未长时间发送推文或在Facebook上发布状态更新的人编写。它们可能已经消失,但它们的代码依然存在。

应用程序仅在与当前系统不兼容或者当前软件产品中没有新功能和更新时才会出现与年龄相关的问题。只有代码维护才能使旧应用程序保持有用。

良好的代码维护从良好的工程开始。当团队使用模块化接口编写记录良好的代码时,他们的工作可以继续运行。软件工程使我们中的一部分人能够继续生活。这与将我们的灵魂下载到矩阵中的方式不同,但确实有相似之处。

代码分析


很久以前,我错误地对赖斯定理过于相信,赖斯定理是计算机科学的一个重要部分,它指出一个计算机程序无法分析另一个计算机程序并决定它是否具有一些非常重要的属性。而这个定理在最抽象的意义上意味着“非平凡”。如果某些程序的某些属性是真的而不是其他程序,那么它被认为是“非常重要的”。

该定理似乎表明,花费任何时间尝试编写寻找错误或发现错误的代码是徒劳的。但是这个定理实际上说机器智能不能一直正确地做到这一点。我假设没有代码可以查找错误并发现错误。

软件工程师并没有被深刻的理论结果所迷惑。他们知道编写可以扫描我们的代码并查找常见错误或不良实践的软件是可能的。好的工具可以查找诸如未初始化的变量和缓冲区溢出或SQL注入漏洞等更深层问题之类的草率错误。

这是良好工程的教训。它不需要是完美的。它不需要很深。它不需要令人惊讶。只需要勤勉而有条不紊地专注于正确性,就需要精心打造。这个过程可能永远不会纠正所有的错误,但这并不意味着我们不能乐于找到它们中的一些。如果重复这个过程,我们可以足够接近。

您认为什么是软件开发中最重要的工程实践?

原文:https://techbeacon.com/security/5-essential-software-engineering-practices

本文:http://pub.intelligentx.net/node/502

讨论:请加入知识星球和小红圈【首席架构师圈】

Article
知识星球
 
微信公众号
 
视频号