软件开发的现代原则
软件开发的定义是什么?
如今,手机、电视、汽车、自动售货机、咖啡机,甚至宠物玩具都具有基于软件的功能。所有这些物品都是由一群人开发的,他们团结在一起,目的是让电信号以可预测的方式运行。简而言之,软件开发是指将软件项目从创意到完成的整个过程。
软件交付品的开发过程包括设计、文档、编程、测试和持续维护。这些元素组合成一个工作流程管道,这是一组操作,遵循这些操作可以产生高质量的软件输出。这个过程称为软件开发生命周期。
软件开发领域存在多种不同的思想流派。以下讨论并非旨在成为一个全面的指南,而只是对最常用策略的总结。如今,软件开发通常伴随着敏捷项目管理方法。这种方法在软件开发生命周期的第 3 阶段和第 4 阶段发挥作用。
在定期计划期间,会陈述期望、处理依赖关系并概述任务。在冲刺会议期间,任务会被完成和更改。在整个冲刺时间范围内,这些任务会在接近完成时进行更新。Jira 是一种任务跟踪软件程序,用于在整体冲刺视角中跟踪各个任务的状态。
软件开发生命周期
创意阶段 − 开发、确定优先级和设想项目。在此阶段,Confluence 是创建产品研究论文和共享设计资产的绝佳工具。
路线图/计划 − 确定利益相关者、建立预算并请求基础设施。创意阶段的设计文件会被分解成可操作的任务。这些任务列表使用 Jira 和 Trello 进行管理、跟踪和组织。
编写代码、审查代码,然后测试代码 − 开发团队努力提供能够满足用户需求和反馈的生产就绪型软件。CI/CD 管道确保开发人员拥有积极的体验。Bitbucket 为代码审查流程添加了 CI/CD 管道和协作代码审查工具。
部署/发布/托管 − 代码经过授权和合并后,就可以准备发布了。使用 Bitbucket 的 CI/CD 管道,部署就像按下按钮一样简单。实时生产代码需要一个存放位置。考虑使用 Amazon AWS、Google Cloud Platform 或 Microsoft Azure 进行云托管。
IT 支持 − 正在进行的软件项目需要持续的支持和维护。Jira Service Management 是一套用于捕获、分类和解决客户服务请求的复杂工具。
事件处理 − 软件开发最佳实践包括弃用和生命周期结束操作,例如客户沟通和迁移。
软件开发的未来
一些基本理念正在推动软件开发的近期未来:自动化、透明度和民主化。总的来说,这些发展正在降低新项目开发的成本,并降低非技术团队成员参与软件开发的门槛。
一些最成功的企业软件公司已经实施了以下方法。了解您的团队如何利用这些策略来加速增长,可以让您在竞争中占据优势。这些是使软件公司能够实现其下一代产品愿景和交付的趋势和方法。
切换功能或功能标记
功能标记是一种以受控方式发布新代码的技术。以前,团队会将完整的功能作为例行代码发布的一部分部署给所有生产用户。功能标记通过在生产环境中提供安全的功能验证(在将它们暴露给所有实时消费者之前),从而降低了部署风险。一旦功能标记发布已成功且私下确认,就可以快速将其推送到外部并实时更改。
微服务
许多现代网络应用程序都采用了微服务架构 (MSA) 框架。MSA 是一种分布式网络设计,允许网络弹性和水平扩展。微服务实现将应用程序根据业务需求划分为离散的部署。这些业务需求只是一些示例,例如支付、身份验证和分析。
函数式编程
上个世纪被遗忘和未充分利用的函数式编程概念正在复兴。新一代开发人员正在重新发现 Ocaml、Haskell 和 Lisp 等语言。现在正在讨论语言设计中的错误。人们一直在讨论面向对象编程是否是一个错误。
组织表示,更高质量、设计良好的用户同理心编程语言为更高质量、设计良好的用户同理心商业产品生产奠定了基础。这些更高质量的服务可以通过函数式语言提供,这些语言包括减少开发人员处理和维护代码库的认知负担的功能。因此,问题更少,软件质量更高。
形式化验证是指在底层系统中建立或反驳算法正确性的技术。它类似于根据数学验证代数语句。为算法实现提供正式的属性规范,并且可以使用静态分析等方法来建立实现的准确性。
代码可以自行编写的激进概念源于形式化验证的想法。预先给定一个设计良好的正式业务领域类型规范和一个类型良好的语言。可以使用生成工具来开发适合正式要求的代码库。这些概念在 Idris、coq 和 agda 等语言中进行了探讨。
持续交付和持续集成
持续集成和持续开发是自动化效用的两个最突出的例子。CI/CD 创建了障碍,使开发人员能够将新代码和功能发送到生产环境,然后自动部署这些功能。在 CI/CD 兴起之前,合并代码和部署是一个耗时得多的过程。
团队需要协调和计划何时合并功能,以及如何最大程度地减少团队成员之间代码修改的争端。团队必须在部署期间手动在服务器之间复制数据,并且网络可能会失败或导致集群中的部署不同步。版本控制系统、自动化测试和监控工具是使 CI/CD 成为可能的保障措施。
基于结果的开发
结果驱动开发 (ODD) 是一种促进快速轻量级软件开发的工作流程。ODD 不是分配任务,而是指定目标并将这些目标的所有权分配给一个团队,该团队将负责满足和实施这些目标。如果您曾经参加过团队计划会议,并且普遍意见是“我们为什么要开发这个?”,那么您就知道我在说什么。结果驱动开发可能是解决方法。
容器化
容器化是 DevOps 中一个不断增长的趋势,它自动化了托管和部署任务(开发人员支持职责的自动化,如基础设施管理)。在容器化出现之前,开发人员无法保证他们的程序在所有计算机上都能以相同的方式运行。在云机器或托管服务提供商之间迁移应用程序是一个危险且耗时的过程。现在,团队可以将整个系统级依赖堆栈捆绑为可移植的容器,这些容器可以在任何计算机上启动。
无服务器函数
基于云的基础设施的出现使得安装标准服务器软件堆栈变得更加容易。现在可以使用这种新的托管范式直接上传和执行单个代码函数。开发人员可以创建和发布一个接受输入并输出结果的基本代码函数。
然后,无服务器平台会将此代码函数发布为可用于访问它的 URL。由于采用了这种新程序,开发到生产的发布管道已大大简化。
敏捷环境中的软件开发
2001 年,一群对旧的繁重管理结构感到不满的软件专业人员撰写了敏捷宣言。
“敏捷”方法是当今世界中广泛使用的软件开发范式。敏捷源于对以前庞大方法的不满。像瀑布模型和全面质量管理这样的方法论诞生于物理产品制造中行动缓慢、容错性较差的部门。
制造业的最终产品比软件更具包容性和灵活性。敏捷利用了这些特性,并提供了一种补充它们的管理技术。之前描述的功能(如 CI/CD、特性标志和微服务)的开发正是由敏捷推动的。
敏捷开发方法的采用导致了新的软件开发学科的出现。DevOps 是软件开发的一个现代分支,专注于非开发软件的支持和自动化。DevOps 团队主要负责协助和提高软件开发人员的效率。DevOps 团队提供技术来自动化和管理常规的软件开发任务,例如基础设施维护。
敏捷在简化开发流程方面提供了巨大帮助。敏捷原则和文化已被证明非常有效,现在正被应用于公司的其他部门,例如设计和产品开发。
其他软件开发方法
极限编程 −极限编程是敏捷方法的一个分支。在极限编程中,客户满意度被强调为开发迭代周期的指导因素。极限编程基于一个五步迭代过程。规则包括计划、管理、设计、编码和测试。您可以在极限编程官方网站上了解更多关于极限编程规则的信息。
精益开发 −精益软件开发,通常称为 LSD,是精益制造理念和方法的延伸。丰田生产系统启发了 LSD。由于得到精益亚文化的支持,它在敏捷社区中越来越受欢迎。精益提供了一个强大的概念框架、价值观和原则,以及源于经验的最佳实践,以帮助企业变得更加敏捷。
瀑布模型 −瀑布模型是一种在建筑和制造行业发展起来的开发方法。它是一个高度计划化的过程,尽可能地从一个阶段过渡到下一个阶段。物理环境中执行阶段的不合理成本是这种限制的驱动力。当应用于软件时,这些限制可能会让人感到压抑和无效。
如何学习软件开发(以及为什么)
学习软件编程可能是扩展就业机会的好方法。在软件开发公司,能够识别和讨论技术性软件开发主题可以增强您的工具包。
对软件开发的基本理解正变得越来越有用。了解软件的设计和实现方式可以帮助个人在个人和职业生活中都更加高效地工作。人机交互存在于几乎所有当前的业务流程中。
观察或参与一个成功的开源项目(例如 Git)是入门最好的练习之一。这些项目可能基于您当前使用和喜欢的软件。它们将包括贡献标准,以及用于讨论和实施的公开留言板。此外,仅仅阅读本文就表明您已准备好迈出第一步并开始行动!