2.4 文化与组织结构
过去几十年,为了提高经济效益,企业开始提倡战略性规划、质量管理和管控、工程化和缩减规模。然而,其中75%的企业改革失败或者产生了足以威胁企业生存的严重问题。在这些失败的种种原因中,最常见的就是“忽视企业文化”。企业文化说上去可能难以理解,甚至觉得虚无缥缈,但它往往是支撑甚至决定着企业战略成败的关键因素之一。企业文化看上去很大,却往往是由企业领导和团队文化决定的,所以不要觉得这个概念太大而与你无关。任何一个员工,尤其是领导的意识和行为,都决定了这个企业文化的形成。
2.4.1 DevSecOps的文化和挑战
在推动DevSecOps的过程中,很多人认为实现DevSecOps就是使用工具。这是一种非常普遍的误区,尤其在技术公司,很多技术人员都觉得文化类的概念太虚,不务实,不如工具可以直接看到效果。的确,使用工具是短期内可以见效的方式,而且也是实现DevSecOps的基础。但是,任何一个企业都不是靠工具支撑业务甚至作为业务本身的。公司的核心价值还是人,而一群人的行为就形成了文化。所以通过DevSecOps改变人的思维模式、做事和协作方式,通过员工以及他们的专业知识和经验来实行DevSecOps转型,才能使得企业的研发效能可以长远改进。
举个例子,前面讲过的代码质量分析工具(比如SonarQube),它可以很方便地把开发人员的代码质量分析并可视化出来。但是,因为代码质量作为一种技术负债,并不能对功能和业务交付产生直接的影响,开发人员可能在明知道自己代码质量的前提下,要么意识不到位,不去改进代码质量;要么交付压力大,消除技术负债一直作为低优先级的任务得不到重视,导致虽然通过工具把问题暴露出来了,但问题始终得不到解决。这样的话,即便有了工具,但因为人的意识问题,最终的结果仍然没有价值。
另外,虽然敏捷对于互联网公司的场景和业务模式有着天然的适配性,但是对于传统行业容错性成本很高的特点来说,又显示不出太多的优势。DevSecOps并不存在适不适合哪个行业或者哪家企业,而是基于行业和企业的特有场景做得好不好的问题。比如推广敏捷开发时,很多企业只是将员工组织起来进行培训,而不是影响支持这些改变的主管以及更高层。尤其在一些传统行业,单靠底层员工自觉遵循敏捷开发和DevSecOps,是非常困难的。更有效的做法是争取自上而下的驱动,找机会给管理层进行敏捷开发和DevSecOps的培训。
通过DevSecOps来实现一个高效的开发模式,往往需要改变企业的文化,而这是企业转型中最困难的挑战之一。应对文化这种无形的物质,领导者需要有各种各样的软技能来与人和团队打交道,并且把软技能和工程实践相结合,认识到这两者如何互补。
2.4.2 DevSecOps的组织结构和角色
随着DevSecOps的发展,继DevOps之后企业内部也逐渐出现一些新的角色。这些角色可能是当初DevOps角色的扩展,相比早期的DevOps角色,DevSecOps角色需要具备更多安全方面的知识和技能。DevSecOps在企业内部主要会有以下三种角色和对应的职责:
1)DevSecOps负责人:负责主导和引领DevSecOps转型和在企业内的落地。根据对开发团队DevSecOps成熟度的了解和安全部门/团队提供的服务(工具、培训、咨询等),制定相应的DevSecOps发展战略,并跟进实施进度和问题。带领DevSecOps工程师和教练在技术和管理上帮助开发团队提高研发效能和安全能力。
2)DevSecOps工程师:负责DevOps/DevSecOps工具的实现和落地。帮助开发团队搭建并维护DevSecOps自动化平台,提供CI/CD和安全测试服务(SAST、DAST、IAST、SCA)。从技术上帮助开发团队实现更快、更好质量和更安全的交付。
3)DevSecOps教练:负责向开发团队提供培训,帮助开发团队学会新的DevOps/DevSecOps工具,适应新的工作模式,以及掌握相关的技能知识和最佳实践,从而让交付速度更快,交付质量更好和更安全。
企业的DevSecOps组织结构(图2-10)可以是特定的中央DevSecOps团队形式,里面包含了上面提到的部分甚至所有角色。这有点类似中央测试团队和运维团队的性质。DevSecOps团队负责整个部门或者公司的DevSecOps战略和标准制定、DevSecOps工具服务搭建和支持、DevSecOps咨询和培训服务,以及DevSecOps文化建设等。另外一种形式即没有独立的大型DevSecOps团队,而是从各个部门或者开发团队里全职或者兼职调派出来组成虚拟DevSecOps团队。DevSecOps负责人通过协作与各个部门/团队的DevSecOps代表组成虚拟网络,进行公司级别DevSecOps战略和计划的传达和执行。
图2-10 中央和虚拟DevSecOps团队
中央DevSecOps团队的好处是资源比较集中,使用效率也会比较高,方便提供统一标准和服务。开发团队可以专心写代码,而不需要额外关心DevSecOps相关工作。但是中央团队的弊端是一旦服务不到位(比如需求反应慢)、支持力度差,那么中央团队就会变成开发团队的瓶颈。因为DevSecOps从某种意义上是去中心化,从而实现测试、运维和安全的左移,所以虚拟DevSecOps团队将DevSecOps的角色分散到各个团队中,或者在各个团队中培养具备DevSecOps角色能力的开发人员,从而实现与开发团队其他角色更好的协作。然而,这种模式的缺点是,由于不是一个真正的团队,虚拟团队从管理模式上还是比较松散的,容易各自为战,因此对于DevSecOps负责人来说,如何团结各个团队的DevSecOps角色,把公司或者部门级的DevSecOps工作做好是一个严峻的挑战。