软件可以被认为是经过一个生命周期,即连续的开发阶段。主要阶段如下图所示。
生命周期的每个阶段都可以或多或少地实现自动化。自动化可以采取完全由自动化流程替代手动流程的形式,也可以采取由团队的不同成员协作共享工作的形式。在现代成熟的软件开发团队,大多数流程都是自动化的。
Automation Consultants 在构建和修改由各种不同的工具组成的自动化开发堆栈方面拥有丰富的经验。
需求
需求表达了相关软件应该做什么。在敏捷开发中,它们的表现形式为“epics”(史诗)和“stories”(故事)。需求管理通过 Atlassian Confluence 和 IBM Rational DOORS Next Generation 等协作工具实现自动化。这些工具允许不同的团队成员编写需求,且始终可以看到最新版本的团队需求。如果没有此类工具,通常要在文字处理器中编写需求,并在相关参与者之间通过电子邮件进行发送,这样效率非常低。其他功能可用于对需求进行审查和批准,并将需求自动转换为开发任务。
设计
在较高层级,即体系结构级别,软件设计通常是人工构思的,尽管它们通常在 Atlassian Confluence 等协作工具中进行存储和审查。
开发
软件开发通常由协作项目管理工具进行管理,多数情况下为敏捷项目管理工具。该行业的领导者是 Atlassian Jira 软件开发选项。每个开发人员都在自己的集成开发环境 (IDE)(例如 Eclipse、Xcode 和 Visual Studio)的实例中编写代码。源代码存储在源代码存储库中,该存储库会在开发时跟踪不同版本的代码。团队的代码存储在中央源代码存储库中,该存储库以及跟踪版本可解决可能由于多个开发人员处理同一段代码引起的任何冲突。开发人员的 IDE 链接到一个或多个源代码存储库。在某些情况下,开发人员将代码直接提交到中央存储库。在其他情况下,他们将代码存储在本地存储库中,并定期将代码从本地存储库提交到中央存储库。领先的源代码存储库是 Git。Git 本身是免费的开放源代码。多位供应商提供了基于 Git 的在线或本地存储库系统,包括 GitHub、Atlassian Bitbucket 和 Gitlab。其他源代码存储库包括 Microsoft Team Foundation 版本控制 (TFVC)、Subversion 和 IBM Rational 团队协作系统 (RTC) 源代码控制。
测试
软件测试有助于实现自动化,而且是生命周期中最先实现自动化的领域之一。测试通常分为几个阶段,下面总结了其中最常见的阶段。
测试阶段 | 描述 | 自动化 |
---|---|---|
单元测试 | 开发人员对小的代码单元进行测试,如单个类和方法。 | 通常使用像 JUnit 这样的工具来实现自动化。在某些项目中,必须对所有代码进行单元测试。 |
系统集成测试 (SIT) | 测试人员使用界面(用户界面及其他界面)对迄今为止开发的整个软件产品进行测试 | 自动化在敏捷项目中很普遍,但在传统(瀑布式)项目中却不那么普遍。自动化的主要优点在于回归测试,即重新测试整个产品,确保新功能不会破坏以前工作的产品部分,即不会导致它们“退步”。HP UFT、Rational 功能测试系统、eggPlant 和 Selenium 之类的工具可用于 SIT。 |
用户验收测试 (UAT) | 最终用户通常在交付之前对整个软件产品进行测试。 | 大多采用人工测试。 |
非功能测试(例如性能测试)通常使用性能测试工具自动完成。
部署
作为持续集成/持续部署 (CI/CD) 的一部分,自动化部署在成熟的开发团队中很常见。Bamboo 和 Jenkins 等 CI/CD 工具可以存储和执行构建正在开发的软件所需的脚本,然后将其部署到所需的环境中。它们实时监控项目的源代码存储库,并且在每次提交新代码后,它们会立即构建该代码并将生成的可执行文件部署到一个或多个环境中,以进行测试。然后,它们可以触发一系列自动化测试,存储测试结果,并向指定的相关参与者发出测试结果警报。
运营
一旦软件产品被认为适合使用,便会发布该软件产品并进行正常运营。基于服务器的应用程序的管理可以通过许多不同的方式实现自动化。对于管理大量服务器的机构(比如大型技术公司)来说,自动化是必不可少的,而且其他大型机构和许多小型机构也在广泛采用自动化。DevOps 一词广泛涵盖了这些工具和技术。DevOps 是一个非常大的话题。下面列出了一些非常高级的亮点。
DevOps 技术 | 描述 | 主要工具 |
---|---|---|
虚拟化 | 服务器是虚拟机 (VM),而不是物理机。也就是说,它们在模拟物理服务器的软件中运行。 | VMWare、Hyper-V |
容器 | 与虚拟机类似,但更轻量化。它们针对运行单个应用程序进行了优化,并且开销更小,因此在容器中运行应用程序通常比在虚拟机中更高效。 | Docker、Mesos |
容器管理 | 用于管理大量容器的工具。 | Kubernetes、Docker Swarm |
基础设施即代码 (IaS) | 将整套基础设施、服务器、网络、操作系统和应用程序存储为代码。可以运行该代码,在几分钟内创建整个环境。 | Terraform、CloudFormation |
配置管理 | 存储和管理服务器集的配置。配置管理和基础设施即代码之间存在一些重叠,但一般来讲,配置管理在更低、更详细的级别上工作。 | Chef、Puppet、Saltstack、Ansible、Vagrant |
监视 | 实时监视基础设施和应用程序,并在违反预定义阈值时触发警报。 | App Dynamics、New Relic、Splunk、Dynatrace |