第1章 初识开发安全
1.1 软件开发与SDLC
1.1.1 软件开发方式的革新与SDLC
在数字经济时代,软件已经成为社会正常运转的基础组件。工业和信息化部(以下简称“工信部”)2021年印发的《“十四五”软件和信息技术服务业发展规划》明确提出,软件是新一代信息技术的灵魂,是数字化经济发展的基础,是制造强国、网络强国、数字中国建设的关键支撑。在数字经济时代背景之下,软件及相关供应链正以各种形式服务于金融、电信、能源、制造、交通、政务等各个重点领域,并越来越深地融入国家重要信息系统与关键基础设施建设。
软件最早诞生于20世纪50年代,早期主要是由使用软件的专业技术人员或特定机构自主开发,基本处于自给自足的情况。彼时软件的通用性非常有限,软件开发也没有可遵循的系统流程,设计过程即开发人员头脑风暴的过程,可参考内容除了源代码之外,没有对应的需求说明、架构设计说明、使用说明等文档。随着软件需求日趋复杂化,软件开发若仍然沿用早期无序的开发方式,不免会出现无法贴合用户需求、软件质量良莠不齐、维护难度高等问题,由此导致软件产品寿命缩短,甚至夭折,使得软件开发活动失败率较高。我们一般称这种由于落后的软件生产方式无法满足日益增长的软件需求而使软件开发与运营过程出现一系列严重问题的现象为“软件危机”(Software Crisis)。
北大西洋公约组织科学委员会(NATO Science Commitiee)于1968年10月7日至11日在联邦德国加尔米施(Garmisch)召开的第一届软件工程会议(Software Engineering Conference)上第一次正式提出“软件危机”的概念,并就如何克服当时的软件危机(即“第一次软件危机”)提出了“软件工程”(Software Engineering)的概念,以期借工程方法解决那次软件危机中存在的一系列问题。
随着相关理论和实践的不断发展,软件工程已经成为覆盖面相当广的综合性学科。一般认为,今天的“软件工程学”主要涉及软件开发技术和软件工程管理两方面内容。而软件开发技术又可细分为软件开发方法学、软件工具和软件工程环境,软件工程管理又可细分为软件工程管理学和软件经济学。其中,软件开发方法学旨在回答软件开发过程中“怎么做”的问题,可以理解为一门专门研究软件开发方法的学问,主要为软件开发提供方法论支撑;软件工具是指向以软件开发方法论为依据的软件开发活动提供半自动化或自动化的支撑工具;软件工程环境是指软件开发过程中所需要搭建的开发框架或平台。在软件工程管理中,软件工程管理学主要是指对软件项目的开发管理,故通常也称软件项目管理;软件经济学则是一门研究软件工程和软件产业关系的学问,主要研究软件工程在经济发展中的作用、软件开发项目的经济效益评价等。
在软件工程中,针对软件危机中的具体问题,将软件开发工作划分为更小的、并行的或连续的步骤或子过程并按照既定安排(即路线图)进行设计改进和产品管理,是解除软件危机进而交付高质量软件产品的重要保障。软件开发中所遵循的路线图又被称为软件开发过程(Software Development Process),或简称为软件过程。
过程是活动的集合,活动是任务的集合。为了获得高质量的软件产品,软件过程要涵盖为达成该目标所需要完成的一系列任务以及完成各项任务的工作步骤。在相关实践中,人们通常以软件开发过程模型(Software Development Process Model,习惯上称为软件开发模型)来描述软件过程。典型的软件开发模型有瀑布式模型、增量模型、基于构件的开发模型等。任何软件开发模型都可以被看作一种软件开发过程、活动和任务的结构框架。因此,换个角度不难发现,软件过程也可以认为是一种软件生命周期。
事实上,软件开发生命周期(Software Development Life Cycle,SDLC,简称“软件生命周期”)指的是软件从产生到消亡的全生命过程。软件生命周期是软件工程中的重要概念,它的提出对软件工程的发展产生了深远影响。伦敦南岸大学教授Geoffrey Elliott认为软件生命周期是最早被确定下来的软件开发方法论。
软件生命周期对软件工程范畴下的软件开发方法论及软件项目管理等的形成和发展均具有重要且深远的指导意义。一般认为,软件生命周期的相关指导意义在于:指导开发人员将具有复杂结构的大规模软件开发项目进行阶段划分,以便明确各阶段的开发目标和分工职责。待每个阶段顺利通过审查才能开启下一个阶段,否则退回到上个阶段直至审查通过。这种方式使得项目易于控制和管理,从而在保质保量的前提下高效地实现软件研发和迭代。