- 软件研发行业创新实战案例解析
- 茹炳晟主编
- 1161字
- 2023-11-17 17:10:00
2.2 软件工程2.0
在2008年笔者写的《软件工程导论》一书中,相对于传统软件工程,定义了现代软件工程,那时,笔者没能预见到人工智能今天的巨大力量。15年后,笔者将受互联网、开源软件运动、敏捷/DevOps 开发模式的影响,最终形成的建立在 SaaS (Software as a Service,软件即服务)、云之上的软件工程定义为“软件工程2.0”。
没有互联网,就没有云和SaaS,我们就不能将软件部署在自己的数据中心,那么持续交付(Continuous Delivery,CD)就没有意义,因为我们无法做到将包装盒形式的软件产品持续交付到客户手中,敏捷、DevOps也就难以实施,虽然可以在内部实现持续集成(Continuous Integration,CI),但其价值会大大降低。
之后的开源软件运动让我们首先认识到“软件过程”和“软件管理”并非非常重要,至少不是第一要素,因为第一要素还是人;其次是软件架构,简单且能解耦,如采用SOA(Service-Oriented Architecture,面向服务的架构)、微服务架构来解耦,更具可扩展性;再者是代码的可读性、可测试性,使代码具有可维护性,而流程和管理虽然具有价值,但作用不大。
随着市场变化越来越快,不确定性增强、市场竞争更加激烈,客户或用户始终希望我们能够按时交付高质量的产品,同时还希望软件有灵活性,能够具有随需应变的能力,也能够通过及时、必要的修改来满足业务的新需求。
除了考虑开源软件运动、市场因素,软件还是一种知识型产品,软件开发活动是智力活动,需要很高的创造性,并依赖每个开发人员的创造力、主动性等。所有这些都引导人们对软件工程进行新的思考并不断认识软件工程,从而在2001年17位软件开发轻量型流派掌门人联合签署了《敏捷软件开发宣言》,如图2-2所示。
图2-2 敏捷联盟官网的《敏捷软件开发宣言》截图
之后逐渐形成了敏捷/DevOps 开发模式、精益软件开发模式等,即软件工程进入2.0时代。软件工程2.0的特征可以简单概括为下列几点。
(1)SaaS:软件更多的是以一种服务存在。
(2)强调价值交付:只做对用户有价值的事情,加速价值流的流动。
(3)以人为本:个体与协作胜于流程和工具,充分发挥个人和团队的创造性与潜力;拥抱变化,敏捷开发或轻量级过程,加速迭代,以不变应万变。
(4)自我管理的团队:像一家初创公司一样运营,具有主动性并能够承担风险,具有自治能力,能自主建立目标和制订计划,不断反思,持续改进。
(5)持续性:阶段性不明确,持续构建、持续集成、持续测试、持续交付,以时间换空间,消除市场风险。
(6)开发、测试和运维的融合:强调测试与开发融合,开发与运维融合,推崇全栈工程师等。
(7)真正把用户放在第一位:用户、产品经理尽可能参与团队开发过程,注重用户体验,千人千面。
(8)知识管理:将软件工程纳入知识管理的范畴,强调将项目的计划、估算等工作授权给从事具体工作的开发人员,如任务安排不再由管理者下达任务,而由开发人员自主选择适合自己的任务。
(9)更有乐趣:“史诗故事”、用户故事、站会等让软件开发工作更有趣、更健康。