背景
在OP时代,大多数软件产品公司的研发流程基本都类似,只不过在执行过程中会有所差异。这里介绍一下SAP在传统OP时代的研发过程,供有兴趣的读者参考。
云时代,SAP 的传统研发模式在某些方面与云原生 SaaS 开发不完全匹配,但也有可借鉴的优势,也有明显的劣势。SAP面对这些挑战,积极做了转型,优化组织,优化流程,优化人才结构等等。
一、OP时代SAP的开发“流水线”
通常,新产品或新版本的诞生,在SAP需要走过六道“工序”,这就是产品规划阶段(Product Planning)、需求形成阶段(Specification)、设计阶段(Design)、实现阶段(Implementation)、测试阶段(Test)和技术支持阶段(Maintenance)。
事实上,这六道工序并不像一般硬件产品的流水线那样,这六个阶段或者交叉,或者平行,总之构成了一个复杂的统筹项目。
当然,SAP 的研发流程不仅是简单的线性流水线,而是一个多阶段交叉并行的复杂统筹项目。这种方式确保了产品从需求收集到最终维护的每一步都具有明确目标和高效协作。
1、2、规划与需求形成
由于SAP提供的各种解决方案要面对不同用户千差万别的功能需求,在项目开始之前,需要进行非常详尽的规划,以决定功能的取舍和增强,这一阶段决定着产品的发展方向,也是项目成败的关键。同时,这一工作也要求参加项目的SAP和非SAP人员进行充分的交流沟通,从而为将来的开发打下基础。特别是对于那些比较复杂、跨模块的项目,需要在模块间的功能开发和工作进度上做出统一的规划,以避免重复开发和集成问题。
通常,规划阶段的工作可以按三个步骤进行。
第一步是收集和评估开发需求,为新产品或升级现有产品而从各种渠道收集用户需求和意见。
如果是升级现有产品,则由开发组对开发请求进行评估,并作为新版本开发的基础;
如果是新应用模块开发,则由项目的产品管理小组和开发经理对实际应用和流程进行分析,并提供粗略的开发计划,为下一步的决策做必要的准备。
第二步则是开发规划的决策阶段
主要是分析整个项目的可行性,以及确定项目开发的优先级,对于比较重要的或者是策略性的项目,通常是由部门主管或执行董事参与决策。
第三步,则需要制定详尽的开发计划,包括功能划分、工作分配、进度控制等。
走完规划阶段,项目组以及产品经理则开始对软件产品进行分析,确定各种用户需求的优先级,并决定哪些功能将在系统中实现,以及实现的程度和方式。
这一阶段的工作需要与用户及咨询顾问进行大量的面对面交流,在得到用户需求的同时,也需要将项目的进展及时通报,以得到反馈。
需求形成阶段作为开发阶段的基础,最终形成的需求文档需要从用户的角度对产品进行描述,对各种功能模块的描述要尽量明了,因为此文档也将是产品实现和测试的基础。
同时,文档还要就产品可用性、运行性能等方面进行规定。
产品规划阶段 (Product Planning)
重点:评估市场和用户需求,决定功能取舍。 参与角色:
产品经理:负责需求收集、功能优先级设定。 高层管理者(部门主管/执行董事):评估项目的战略价值与可行性。 跨部门团队:研发、销售和客户代表参与规划。
关键工具:
需求收集平台(用户反馈系统)。 项目管理工具,用于确定优先级、预算和资源分配。
需求形成阶段 (Specification)
目标:生成具体的需求文档,明确功能和性能指标。 工作流程:
与用户和咨询顾问进行频繁的沟通,确保需求真实反映市场需求。 形成高质量的需求文档,涵盖功能、性能、用户体验和模块间的接口定义。
关键点: 文档易读性:从用户角度描述需求,便于开发、测试和维护。 模块间的协调:跨模块需求需要特别处理以避免冲突。
3、设计阶段
当项目组拿到了具体详尽的需求文档后,设计阶段开始启动。
在设计阶段,由各功能模块的负责人组织小组成员,一起建立模型(如数据模型、功能模型、过程模型、对象模型等),创建必要的数据结构和函数,同时对程度元素的命名原则、开发规范及模块间的接口等做出定义。
由此形成的设计文档成为项目实现的基础,并且是软件维护的重要参考,所以,此文档应当尽量详细。此阶段的工作以用户需求为基础,为用户提供有效的解决方案,设计的好坏将直接影响到系统的功能和性能。
当某种功能比较复杂时,设计文档通常可以分成两类:一类是粗略设计,参考系统中现有的过程、工具和函数库,以确定可以复用的对象,使用系统中现有的对象和技术可以提供新功能的可靠性,降低开发成本;
第二类是详细设计,包括对数据字典、程序对象、用户界面、处理流程以及各个对象之间的接口定义进行详细的设计。
设计阶段 (Design)
核心任务:转化需求文档为技术方案。 细化步骤:
粗略设计:评估复用现有模块和工具的可能性。 详细设计:定义数据结构、功能逻辑、接口标准和用户界面。
成果:生成高质量的设计文档,为开发和测试提供依据。
4、开发实现阶段
设计阶段之后,就进入了具体的开发阶段,即实现阶段。
实现阶段是以设计文档为基础来创建数据字典和程序对象。SAP对ABAP/4程序开发有比较完整的指导文档,并要求开发人员按照SAP的开发规范创建用户界面。
在R/3项目开发中,规范性与技术同样重要,由于一个项目通常是由很多开发人员协同完成的,程序的可读性和详细文档对于项目来讲是非常重要的。
在开发的同时,文档开发人员为相应的功能模块创建在线文档、培训教材等必要的用户文档,这需要开发人员的密切协作。
此阶段同时也是开发测试阶段,开发人员需要对新的模块进行测试、代码检查、可用性测试等,并进行开发人员间相互测试,以便在开发阶段保证模块的质量。
开发实现阶段 (Implementation)
核心任务:基于设计文档完成模块开发和初步测试。 工作流程:
遵循 SAP 的开发规范 (ABAP/4),确保代码可读性和一致性。 开发阶段即开始自测和模块间相互测试。
协作特点: 文档开发人员和程序开发人员密切合作,确保功能文档与代码同步。
5、测试阶段
实际的测试阶段从具体的开发阶段就开始了,此谓开发测试,而正式的测试则是在质量经理(QM)主持下,由质量管理小组、产品管理小组及用户共同参与进行非常完整、细致的测试。
它不只面对单一功能单元,而是根据用户需求文档、设计文档并按用户实际流程设计出测试文档,对系统的可用性、性能、用户界面、表达统一性、文档、翻译等进行全面测试。
同时开发人员需要密切配合,及时修改发现的错误。测试阶段的工作是软件提供给用户前的最后一道工序,它直接关系到软件的质量。所以,此工作需要非常周密的安排,就这个意义而言,QM也担负着保证软件质量的责任。
测试阶段 (Test)
目标:全面验证系统功能和性能,发现并修复缺陷。 流程细节:
开发测试:开发人员在开发过程中进行基础测试。 正式测试:由质量经理 (QM) 主持,质量管理团队、产品管理团队和用户联合参与。
覆盖范围:单元测试、集成测试、性能测试、用户界面测试。 关键点:
测试文档的质量和全面性。 开发和测试团队的紧密配合,快速修复问题。
6、运维阶段
SAP的技术支持分成三级:当地支持(Local Support)、区域支持(Regional Support)和开发支持(Development Support)。
当用户遇到的问题无法由前两级完成时,这个问题就会送达开发人员,由开发人员确认错误来源,并提供正确的响应。
这一过程可以包括在用户系统中修改程序、文档,如果问题所涉及的功能比较广泛,SAP内部相关的开发人员会协同工作,共同解决问题。随后的分析会对问题或需求有更加深层的总结,一旦需要,新的需求会被包括在新版本的开发中。SAP还会提供Hot Packages和Hot News,以帮助用户及时处理系统中的错误。
运维阶段 (Maintenance)
支持体系:SAP 的三级支持结构(本地、区域、开发)确保用户问题得到快速响应。 反馈机制:
用户问题的分析总结可能反向推动需求的完善。 通过 Hot Packages 和 Hot News 提供即时更新和指导。
SAP认为做管理软件并不需要追求技术的时髦,SAP看中的是:满足需求,在功能、流程、速度、稳定性上的表现要优先于其他。基于ABAP/4语言的技术平台可以使SAP的产品与各种系统无缝集成。
二、流程背后的组织架构与岗位分工
SAP 的产品研发流程是以清晰的组织架构和岗位职责为基础的:
组织架构
跨模块团队:复杂项目由跨模块团队主导,负责协调模块间的功能开发和进度管理。 产品管理部门:在需求规划和优先级设定中发挥核心作用,是研发与市场、销售之间的桥梁。 质量管理团队 (QM):负责测试阶段的整体把控和质量评估。
关键岗位职责
产品经理:从市场需求中提炼核心需求并制定功能优先级,是整个流程的发起者和协调者。 开发经理:负责技术可行性分析、开发计划制定、资源调配和进度控制。 测试工程师:根据需求和设计文档制定测试用例,确保产品符合预期功能和性能指标。 支持工程师:在维护阶段处理用户反馈,分析问题并推动解决方案的实施。
三、Cloud 和 SaaS 对 SAP 传统开发模式的挑战
SAP这套严谨的开发体系与流程,缔造了伟大的ERP产品。但是,汹涌而来的Cloud技术,对SAP 的传统研发模式提出了显著挑战,特别是在云原生 (Cloud-native) 的 SaaS (软件即服务) 环境中,SAP 需要对其传统研发流程和开发模式进行调整和优化。
3.1 开发节奏与交付频率
传统挑战:
SAP 的传统开发模式以大版本为主,每个版本的规划、需求、设计到交付周期较长,通常是按季度或年度交付。
在云环境下,用户期望快速迭代和持续交付 (CI/CD),以便产品能够迅速响应市场需求和用户反馈。
挑战:如何缩短开发周期,同时维持 SAP 产品的一贯质量和稳定性。
3.2 灵活性与个性化
传统挑战:
SAP 的模块化架构能够应对复杂的企业需求,但在传统模式下,大量功能模块和接口的开发需要高度协调,较少考虑用户自定义需求的实时适配。
在云原生 SaaS 模式中,用户更倾向于订阅制和即插即用功能,需要极高的灵活性和个性化服务。
挑战:如何提供灵活且模块化的 SaaS 服务,同时确保集成性和定制化能力。
3.3 技术基础架构
传统挑战:
SAP 的研发模式深度依赖于 ABAP/4 和传统的企业 IT 基础架构(如本地部署的 R/3 或 S/4HANA)。 云原生环境采用容器化 (Kubernetes)、微服务架构、DevOps 等技术,与传统的开发语言和技术平台有根本性的差异。 挑战:如何将传统架构迁移到云原生技术栈,同时确保现有客户的平稳过渡。
3.4 用户体验与开发流程
传统挑战:
SAP 传统开发模式注重后端功能完整性和模块集成性,用户体验(UI/UX)通常为次要考虑。 在云原生 SaaS 中,用户对友好、直观、快速响应的用户界面有更高的期望。 挑战:如何在复杂功能开发与现代化用户体验之间找到平衡。
3.5 运维和更新
传统挑战:
传统模式的维护以 Hotfixes 和版本更新为主,需要用户手动部署和升级。 SaaS 模式要求持续的无中断更新和自动维护。 挑战:如何提供不影响用户业务运行的自动化维护和更新。
四、 SAP 的传统模式是否适合云原生 SaaS 开发?
SAP 的传统研发模式在某些方面与云原生 SaaS 开发不完全匹配,但也有可借鉴的优势。
4.1 传统模式的优势
模块化设计:SAP 一贯的模块化和功能划分思想,与云原生中微服务架构的理念有一定相通之处。可通过进一步拆解,将模块转化为云原生微服务。 需求驱动开发:SAP 长期以来注重用户需求的全面收集和分析,这种用户导向的开发模式在 SaaS 中仍然适用。 严谨性和质量:SAP 的高标准质量管理体系可以在云环境中延续,确保企业级 SaaS 产品的可靠性。
4.2 传统模式的局限性
长周期开发:不适合 SaaS 所需的快速迭代和持续交付。 技术栈限制:传统 ABAP/4 平台需要向云原生技术栈(如 Java、Python、Kubernetes 等)迁移。 用户需求的动态适配:难以快速响应 SaaS 用户实时变更需求的特点。
五、 SAP 如何应对挑战并适应云原生 SaaS 开发?
SAP 正在通过以下策略调整其研发模式,适应云原生 SaaS 的需求:
5.1 转向持续交付 (CI/CD)
策略:将传统的长周期开发模式转向敏捷开发和持续交付模式。 实施:
推行 DevOps 文化,缩短需求到交付的周期。 利用自动化测试、代码质量检查和部署工具,实现快速迭代。
5.2 微服务架构与模块化改造
策略:将传统的大型单体架构分解为云原生的微服务架构。 实施:S/4HANA Cloud 已采用部分微服务化,将独立功能模块迁移为容器化服务。为新功能开发提供松耦合架构,方便用户按需订阅和扩展。
5.3 云平台与技术栈转型
策略:构建基于云原生技术的开发环境。 实施:推出 SAP Business Technology Platform (BTP),支持 Kubernetes 和 Serverless。 提供多语言开发支持,降低对 ABAP 的依赖。
5.4 用户体验 (UI/UX) 优化
策略:提升用户界面的易用性和一致性。 实施:
采用 SAP Fiori 设计语言,提供统一且现代化的用户体验。 增强低代码/无代码工具,让用户能够快速自定义应用。
5.5 自动化运维
策略:增强 SaaS 的自动化更新和自愈能力。 实施: 利用 AI 和自动化工具实现系统监控、补丁发布和版本升级的无缝处理。
5.6 开放生态与合作
策略:通过开放 API 和生态系统吸引合作伙伴共建应用。 实施:
推出 SAP App Store,让用户可以访问第三方 SaaS 解决方案。 增强与 AWS、Azure、GCP 等云服务提供商的合作。
六、总结
SAP 的传统开发模式在严谨性和模块化设计上与云原生 SaaS 开发有部分契合点,但需要在以下方面进行深刻变革:
从大版本发布向持续交付过渡,提升开发和迭代速度。 重构技术架构,采用微服务、容器化和云原生技术。 增强灵活性,提供用户可配置的功能和模块化订阅服务。 优化用户体验,采用现代化设计语言和工具提升交互体验。 SAP 已经通过 BTP 和 S/4HANA Cloud 开始向云原生 SaaS 转型,其努力方向表明其传统开发模式正在逐步适应这一新环境。