安全开发进阶(1)|典型开发模式的演进

阅读量270129

发布时间 : 2023-03-28 16:23:41

近年来,为顺应信息技术的飞速发展与数字化转型的浪潮,软件的研发迭代速度不断提升。然而,这种飞速发展也带来了安全风险的加剧,因此保障软件开发过程中的安全性,践行“安全左移”理念成为备受企业关注的话题。为了更好地分享我们对安全开发的探索和实践,我们编写了三篇进阶内容,为大家分享开发模式演进、安全开发工具链及前瞻性技术在安全开发中的应用,欢迎关注、分享!

1948年,英国计算机科学家Tom Kilburn编写了世界上第一个软件,这一历史性的事件标志着软件开发时代的开启 。自20世纪60年代起,随着科技的飞速发展,软件开发项目的规模和复杂性也不断攀升。为了更好地实施项目研发,软件开发流程也在不断革新,并催生了多种不同的软件开发模型。在这篇文章中,我们将为您概述这些典型的开发模式的演进,并深入探讨演进背后的逻辑。

瀑布模型

1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,也被称为线性顺序生命周期模型。在90年代之前,它一直是最被广泛采用的软件开发模型。其理念是基于线性顺序过程,开发过程的每个阶段都必须在下一阶段开始之前完成,并且开发过程中的任何阶段只有在前一步完成后才会开始。

通常,在“瀑布模型”中,软件开发的整个过程被分成不同的阶段。如图1 所示:

① 需求收集与分析:收集和定义软件项目的需求,包括功能和非功能需求。软件需求规范(SRS)文档用于记录此阶段的输出。

② 设计:将从SRS获得的需求转换为可以用编程语言进行编程的格式。它包括高级设计和详细设计,以及总体软件架构。此外,它还包括编程语言选择、数据库选择、冗余备份、故障转移功能等。该阶段的工作记录在软件设计文档 (SDD)中。

③ 实施:根据系统设计的输入,系统首先在称为单元的小程序中开发,这些单元被集成到下一阶段。开发和测试每个单元的功能,这被称为单元测试。

④ 测试:通过Alpha测试、Beta测试、验收测试等类型的测试活动对整个系统进行测试,以验证系统是否存在任何故障。

⑤ 部署:一旦完成功能和非功能测试,产品部署在客户环境中或投放市场。

⑥ 维护:维护软件并进行任何必要的更新或错误修复。

瀑布模型是一个简单明了且定义明确的过程,非常适合具有明确需求的项目,但对于经常变化的项目而言,难以落地。而且,在项目后期出现问题时很难及时发现和解决。为了应对这些问题,经过改进的瀑布V模型进入了公众的视野。

瀑布V模型同标准瀑布模型一样,在完成需求分析后便进入总体设计阶段,但除总体设计外,需求分析还有一条虚线指向系统测试。瀑布V模型的优点是能够确保开发团队在项目的不同阶段中有明确的目标和任务,并且在每个阶段中能够对软件进行详细的测试和验证,以确保软件质量和可靠性。

然而,瀑布V模型的弊端也比较明显。由于该模型基于阶段性开发,因此它对需求变更的响应能力比较差,如果在项目的后期阶段发现了需求变更,可能需要重新回到前面的阶段进行修改和调整,这将导致项目进度延迟和成本增加。正是因为瀑布模型在软件开发过程中存在这些问题和局限性,开发方法逐步演进成敏捷模型。

敏捷模型

敏捷模型是一种在20世纪90年代后期引入的软件开发方法,该模型的目标是适应变化,灵活调整以实现更快的交付。在敏捷模型中,团队协作非常重要,包括开发人员、测试人员、项目经理以及客户在内的各方都应该密切合作、相互支持,共同完成项目。该模型还强调通过快速迭代的方式,让开发团队在短时间内不断构建、测试和交付软件,从而让客户能够参与到整个开发过程中,并不断提供反馈和意见,以便于持续优化和改进软件产品。

在敏捷模型中通常会采用规范化的流程和工具,例如Scrum、XP、Kanban等等,来协助团队进行软件开发。这些流程和工具通常是依据团队的具体情况、项目的需求、开发方式等进行量身定制的,以便能够更好地满足开发需求和客户的要求。

通常情况下,如图3所示,敏捷模型包括如下6个阶段:


需求收集:在此阶段,所有利益相关者(包括客户、产品负责人等)都会去收集与待开发软件相关的信息。在完成了需求收集后,开发团队需要进行可行性研究,以确定项目是否能被完成。

设计需求:在定义项目后,与利益相关者一起定义需求。负责软件高级设计的开发人员将组成设计团队,并通过上个阶段产生的SRS文档,来指导设计过程,并最终完成满足要求的体系结构。此处的高级设计是指包括用户界面、用户流程、通信设计等方面在内的基础要素。

构建/迭代:在此阶段,具有不同专业知识(例如前端和后端)的开发人员或工程师,会通过处理设计的需求,来构建和实现软件。这既能够由一个人,也可以由一个大型团队来执行,具体取决于项目的规模。后端开发人员负责构建数据库结构和其他必要组件。最后,由前端开发人员根据设计去构建用户界面,并按需与后端进行对接。在配套文档方面,为了保证良好的代码质量,适当的开发指南和政策也是必不可少的。

测试:这个阶段主要涉及质量保证团队,他们在此阶段检查产品的性能并寻找错误。

部署:在此阶段,团队为用户的工作环境发布产品。

反馈:发布产品后,最后一步是反馈。这样,团队将收到有关产品的反馈,并通过反馈进行工作。

敏捷模型作为迭代式、增量式、灵活性强的软件开发方法,更加注重迭代和增量交付。它明显的优点包括可以根据客户的需求进行灵活地调整,而且敏捷模型强调团队成员直接的协作,促进了开发团队之间的沟通和交流,使得整个迭代周期更短,可以及时发现和解决问题,从而提高软件产品的质量和稳定性。然而,敏捷模型也存在弊端,它虽然在软件开发过程中注重快速迭代、快速反馈和团队合作,但缺乏对软件交付和部署过程中的自动化、持续集成、持续交付等方面的关注。这可能导致软件交付周期变长、质量难以保证、团队效率低下以及难以适应变化等问题。正因如此,软件开发模型再次发生了迭变。敏捷模型逐渐演进成为DevOps模型,一个更侧重于自动化和持续交付,注重开发和运维之间协作和沟通的一种开发模型。

DevOps模型

DevOps模型是在2000年代后期引入的,是一种强调软件开发和IT运维之间紧密协作的方法论。该模型既强调了开发人员和运营团队之间协作的重要性,还注重自动化和持续集成与交付 (CI/CD) 技术的使用。

DevOps集文化理念、实践和工具于一身,可以提高组织高速交付应用程序和服务的能力,与使用传统软件开发和基础设施管理流程相比,能够帮助组织更快地发展和改进产品。这种速度使组织能够更好地服务其客户,并在市场上更高效地参与竞争。

通常情况下,DevOps生命周期将SDLC生命周期分为以下几个阶段:


① 持续开发:这一阶段涉及到将代码提交给版本控制工具(如Git或SVN)以维护不同版本的代码,以及将代码构建/打包成可执行文件(可以转发给qa进行测试)的工具(如Ant、Maven、Gradle)。

② 持续测试:该阶段对开发人员推送的程序进行自动化测试。如果有缺陷,消息则会被发送回集成工具(如Jenkins、QuerySurge、Travis、Selenium等),并将缺陷信息通知开发人员。

③ 持续部署:在这个阶段,代码被构建,环境或应用程序被容器化并被推送到所需的服务器上。这个阶段的关键过程是配置管理、虚拟化和容器化。

④ 持续监控:该阶段持续监控已部署的应用程序是否存在错误或崩溃。它还可以设置为收集用户反馈。然后将收集的数据发送给开发人员以改进应用程序。

DevOps模型非常适合希望提高软件开发和部署过程的速度和可靠性,并希望鼓励开发和运营团队之间协作的组织。DevOps模型的采用,对企业带来了如下几点好处:

1)加快软件交付速度:DevOps模型可以大幅缩短软件开发和交付的周期,实现快速交付,满足客户需求的变化和快速反馈。

2)提高软件质量:DevOps强调自动化和持续测试,这有助于在开发过程的早期发现错误和其他问题。这可以提高质量并减少生产中的故障。

3)加强协作和沟通:DevOps鼓励开发和运营团队之间的协作和沟通,打破孤岛并提高整体生产力。

4)更好的成本管理:DevOps可以通过自动化手动任务、减少手动干预的需要以及减少生产事件的数量来帮助组织降低成本。

然而,随着网络安全问题的不断增加和复杂化,软件开发和交付过程中的安全问题也变得越来越重要,因此DevOps模型逐渐演变为DevSecOps模型。DevSecOps模型是DevOps模型的延伸,它强调在软件开发和交付的过程中将安全性纳入考虑范围,将安全性作为一项持续性的工作来执行。在DevSecOps模型中,开发人员、运维人员和安全人员之间的协作和沟通更加密切,通过采用自动化测试、安全审计和持续监测等工具和技术,来确保软件产品的安全性。

DevSecOps

DevSecOps是一种文化,一种策略,是一种结合开发(Dev)、安全(Sec)和运营(Ops)的软件开发方法论,旨在将安全性融入到整个软件开发生命周期中。DevSecOps的目标是在快速交付高质量的软件的同时,确保软件的安全性、稳定性和可靠性。DevSecOps通过在软件开发的全生命周期中引入安全性来实现这一目标。这包括对代码质量、漏洞扫描、漏洞修复、安全审计等进行持续的集成、测试和部署。通过在整个软件开发周期中始终关注安全性,DevSecOps可以更有效地减少安全漏洞,提高软件质量,并减少安全威胁对软件的影响。

通常情况下,软件开发中DevSecOps的实践方法包括如下5种:

① 早期引入安全性

DevSecOps强调在软件开发生命周期的早期引入安全性。这意味着开发团队必须在开发过程的早期考虑安全性。这可以通过代码审查、漏洞扫描和安全测试等方式实现。在早期引入安全性可以帮助团队更好地管理安全风险,从而减少后期的漏洞修复成本。

② 持续集成、持续交付

DevSecOps强调持续集成和持续交付。这意味着开发团队必须将安全性考虑为持续集成和持续交付流程的一部分。例如,在每次提交代码之前,可以进行自动化的代码质量和安全性扫描,以确保代码符合标准和最佳实践。

③ 自动化测试和部署

DevSecOps强调自动化测试和部署。这意味着开发团队必须使用自动化工具和流程来测试和部署软件。这可以帮助团队更快地交付软件,并确保软件的安全性和质量。

④ 安全文化

DevSecOps强调建立安全文化。这意味着开发团队必须将安全性视为整个团队的责任,并鼓励团队成员参与安全决策和实践。这可以帮助团队更好地识别和管理安全风险,从而提高软件的安全性和质量。

⑤ 安全培训

DevSecOps强调安全培训。这意味着开发团队必须接受安全培训,了解最佳安全实践和标准,以及如何识别和管理安全风险。这可以帮助团队更好地理解和实践DevSecOps的目标和实践方法。

软件开发中的安全模型经过不同阶段的不断演进,逐步演进成现阶段比较受关注的DevSecOps模型,而最适合使用的模型取决于软件开发项目的具体要求。不管哪种开发模型,都需要考虑项目的安全性,确保软件上线前的安全。当下DecSecOps盛行的情况下,安全性的实现需要安全工具的支撑,具体内容会在安全开发进阶(2)|DevSecOps工具链简介中为大家细数,敬请期待!

云起无垠(https://www.clouitera.com) 是新一代智能模糊测试领跑者,采用新一代Fuzzing技术全流程赋能软件供应链与开发安全,基于智能模糊测试引擎为协议、代码、数据库、API、Web3.0等应用提供强大的软件安全自动化分析能力,从源头助力企业自动化检测并助其修复业务系统安全问题,为每行代码安全运行保驾护航。

本文由云起无垠原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/287770

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
云起无垠
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66