content |
'<p data-vmark="af83">之前, 小编在《从瀑布式到 DevOps, 开发流程经历了什么?》一文中, 梳理了软件开发流程的大致演变过程。</p><p data-vmark="fd20">其实, 在早期软件开发还是"小作坊"作业的时候, 没有形成所谓的开发流程方法论, 开发特别倚重个人能力, 大多都杂乱无章, 所以效率也不高。</p><p data-vmark="8dca">20 世纪 70 年代, 从瀑布式开发开始, 开发流程有了一套自己的方法论。一路发展演进, 先后涌现了敏捷和 DevOps 等新兴理念。可以看出的是, 软件开发规模越来越大, 要求的速度却越来越快。</p><p data-vmark="c14d">01 开发流程正在"提效"路上一去不回头</p><p data-vmark="283c">上世纪 50 年代, 一种项目管理三角 (也称的三重约束、铁三角或项目三角) 的模型开始被人们广泛使用。</p><p data-vmark="f19b"></p><p data-vmark="a4a0">三角模型被用来约束项目的发展过程, 它认为:</p><p data-vmark="0190">质量工作是由该项目的预算、时间和功能来限制;</p><p data-vmark="fb93">项目经理可以约束之间的平衡;</p><p data-vmark="afef">一个约束的变化需要其他约束的变化来补偿, 否则质量将受到影响。</p><p data-vmark="41ae">例如, 可以通过增加预算或缩小范围来更快地完成项目。同样, 增加范围可能需要相应增加预算和进度。削减预算而不调整时间表或范围会导致质量下降。也就是说, 好、快、便宜 (范围、时间和成本), 只能选择两个。</p><p data-vmark="e651">在早期, 瀑布式开发与三角模型相关联, 由此表明: 软件开发可以由应用程序创建或构建所花费的时间长度来定义。</p><p data-vmark="b03f">然而, 在当时, 创建、测试和部署软件通常需要很长时间, 因为在开发过程中没有制衡。结果是软件质量不佳, 存在缺陷和错误以及未满足的时间表。因此, 瀑布式开发的重点是软件项目的长期计划。</p><p data-vmark="b421">这种思维方式来自制造和工程, 其中线性过程是有意义的 -- 你先建墙, 再建屋顶。同样, 软件开发问题被视为可以通过计划解决的问题。从开始到结束, 开发过程都由路线图明确定义, 路线图将导致产品的最终交付。</p><p data-vmark="30e5">但是, 瀑布式被认为是对软件开发有害的, 因为通常直到项目周期的最后阶段才能确定其价值, 并且在许多情况下项目都失败了。此外, 客户直到项目结束才能看到可运行的软件。</p><p data-vmark="570a">事情在敏捷时代发生了改变。</p><p data-vmark="782d">敏捷采取了一种不同的方法, 不再规划整个项目, 承诺预计日期, 并对计划负责。而是假设并拥抱不确定性, 改变被认为是满足客户需求的一种方式。</p><p data-vmark="61c0">它定义了以下 12 条原则:</p><p data-vmark="5112">(引用)</p><p data-vmark="88fe">1.我们的首要任务是通过早期和持续交付有价值的软件来满足客户。</p><p data-vmark="fb47">2.欢迎不断变化的需求, 即使是在开发后期。</p><p data-vmark="127d">3.敏捷流程利用变化来获得客户的竞争优势。</p><p data-vmark="425d">4.频繁地交付可工作的软件, 从几周到几个月不等, 优先考虑较短的时间范围。</p><p data-vmark="752a">5.业务人员和开发人员必须在整个项目中每天一起工作。</p><p data-vmark="4484">6.围绕积极的个人建立项目。</p><p data-vmark="419b">7.为他们提供所需的环境和支持, 并相信他们会完成工作。</p><p data-vmark="5c95">8.向开发团队和在开发团队内部传达信息最有效的方法是面对面交谈。</p><p data-vmark="a241">9.工作软件是进度的主要衡量标准。</p><p data-vmark="766a">10.敏捷流程促进可持续发展。赞助商、开发者和用户应该能够无限期地保持恒定的步伐。</p><p data-vmark="58e6">11、对卓越技术和良好设计的持续关注可提高敏捷性。</p><p data-vmark="8e0d">12、团队定期反思如何提高效率, 然后相应地调整和调整其行为。</p><p data-vmark="e293">详情可查看敏捷宣言网页:<span>https://agilemanifesto.org/principles.html</span></p><p data-vmark="2822">从敏捷开始, 短时间和高效率成为开发理念中的一个重点。而 DevOps 则更进一步。</p><p data-vmark="7d39">某种程度上,DevOps 是一种文化、一种心态、一种软件开发或基础架构的方式, 以及一种构建和部署软件和应用程序的方式。其中的精髓是: 开发和运维之间没有墙; 它们同时工作, 没有孤岛。</p><p data-vmark="2163">DevOps 正是基于精益和敏捷两个实践领域。虽然敏捷和 DevOps 有很多不同之处, 但它们都寻求解决复杂问题、提高质量并围绕软件设计进行创新。</p><p data-vmark="c3da">与此同时,DevOps 加快了开发和运维人员之间的工作, 还减少了 Dev 和 Ops 之间的分工。这是因为 DevOps 要求持续部署、交付和集成。团队合作是一体的; 问题和故障由开发、运维和其他实体共同拥有, 例如质量保证 (QA)、测试、自动化等。</p><p data-vmark="a678"></p><p data-vmark="fb29">敏捷与 DevOps 的区别</p><p data-vmark="25f7">总的来说, 无论是敏捷还是 DevOps, 都旨在帮助团队更快、更高效地工作, 更快地交付高质量产品和提高客户满意度。</p><p data-vmark="a83d">02 天下武功唯快不破!</p><p data-vmark="fb2c">在敏捷时代, 一批轻量的软件工程方法和框架相继诞生, 它们共同的特点是, 相对传统软件工程, 都遵循演进和迭代的模型, 过程更加轻量灵活, 以 Scrum 和极限编程 (ExtremeProgramming) 为代表。</p><p data-vmark="f611">早期的敏捷专注的是研发交付阶段, 站在业务的角度, 它的目标是帮助产品和研发团队提升敏捷响应能力。但在 DevOps 时代,IT 不仅要保证产品的开发和交付, 系统部署和运行同样重要。在敏捷开发的理念之上, 又补上了运维的部分。</p><p data-vmark="234b">目前,DevOps 仍处于高速发展阶段。南京大学软件研发效能实验室发布的 DevOps・云原生 2021 年度中国调查报告》显示,2021 年国内企业的 DevOps 工具的普及程度较 2019 年有明显上升趋势。</p><p data-vmark="1223">因此, 为了达到更快更好的开发目标, 不断有新式的开发工具涌现出来。</p><p data-vmark="4995">一方面, 不同工具在各领域全面开花, 一起助推 DevOps 的落地。比如 JIRA、Trello 等敏捷开发工具,Maven、NPM、Gradle 等持续交付工具,Zabbix、Elastic、Grafana、Kafka、Ansible、Logstash、Prometheus 等自动运维工具等等。</p><p data-vmark="18ba">另一方面, 一些集大成的工具也同时应用自动化、AI 等技术, 以更好地实现功能。其中, 飞算 SoFlu 全自动软件工程平台便是其中的一个代表。</p><p data-vmark="5b6b">飞算 SoFlu 是近年发布的新一代 JAVA 开发工具, 截至目前已在包括医疗、金融、制造、零售等在内的多个行业使用。</p><p data-vmark="ba70">全自动平台可以通过降低准入门槛、人力成本和沟通成本, 来极大提升企业的开发效率。以工具为核心, 制订好管理流程, 利用科学的管理方法, 让程序员在操作工具时有规可循, 从而降低管理风险和沟通风险。</p><p data-vmark="c79e">以某大型国有企业开发的"百万人使用级别的电商平台"项目为例。此前, 该企业组建数十人团队完成开发, 上线后却在功能性、稳定性、安全性等方面问题不断, 且无法在短期内修复。在使用飞算 SoFlu 全自动软件工程平台后, 该企业仅投入 6 位研发人员 45 天就高效完成开发、测试、联调、上线全流程任务。</p><p data-vmark="29ba">具体来说, 单就 Excel 表格文件解析这个高频开发功能, 这在之前, 即使是一个经验丰富的程序员, 也至少需要花费半天时间。但是飞算能够将时间压缩到以分钟计算:</p><p data-vmark="6033">1.编程逻辑流程化, 十分钟完成开发, 完全不用敲代码, 拖拉拽即可完成后端开发。</p><p data-vmark="aea0">2.丰富的组件支持, 涵盖数据库、redis、api、mongoDB、子流程组件等, 支持循环、条件判断、函数调用, 通过拖拉拽的方式以及参数配置实现等同编写复杂代码的业务逻辑。</p><p data-vmark="070d">3.函数齐全, 各种 API 函数应有尽有, 快速解决业务及功能上的各种需求。</p><p data-vmark="8b92"></p>' |
related |
array (
1 =>
array (
'id' => '1',
'pid' => '0',
'pids' => '0',
'name' => '手游',
'dirname' => 'show',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 1,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'html' => 0,
'urlrule' => 1,
),
'displayorder' => '0',
'acount' => '4732',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '1',
'catids' =>
array (
0 => '1',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-1',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
2 =>
array (
'id' => '2',
'pid' => '0',
'pids' => '0',
'name' => '游戏资讯',
'dirname' => 'record',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 2,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'html' => 0,
'urlrule' => 1,
),
'displayorder' => '0',
'acount' => '1972',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '2',
'catids' =>
array (
0 => '2',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-2',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
3 =>
array (
'id' => '3',
'pid' => '0',
'pids' => '0',
'name' => '游戏攻略',
'dirname' => 'movie',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 3,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'urlrule' => 1,
'html' => 0,
),
'displayorder' => '0',
'acount' => '8168',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '3',
'catids' =>
array (
0 => '3',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-3',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
4 =>
array (
'id' => '4',
'pid' => '0',
'pids' => '0',
'name' => '电视游戏',
'dirname' => 'tv',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 4,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'urlrule' => 1,
'html' => 0,
),
'displayorder' => '0',
'acount' => '0',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '4',
'catids' =>
array (
0 => '4',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-4',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
5 =>
array (
'id' => '5',
'pid' => '0',
'pids' => '0',
'name' => '单机游戏',
'dirname' => 'music',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 5,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'urlrule' => 1,
'html' => 0,
),
'displayorder' => '0',
'acount' => '35499',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '5',
'catids' =>
array (
0 => '5',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-5',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
6 =>
array (
'id' => '6',
'pid' => '0',
'pids' => '0',
'name' => '网络游戏',
'dirname' => 'cartoon',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 6,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'urlrule' => 1,
'html' => 0,
),
'displayorder' => '0',
'acount' => '18837',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '6',
'catids' =>
array (
0 => '6',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-6',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
7 =>
array (
'id' => '7',
'pid' => '0',
'pids' => '0',
'name' => '科技资讯',
'dirname' => 'keji',
'pdirname' => '',
'child' => 0,
'disabled' => '0',
'ismain' => '1',
'childids' => 7,
'thumb' => '',
'show' => '1',
'setting' =>
array (
'disabled' => '0',
'linkurl' => '',
'getchild' => '0',
'notedit' => '0',
'seo' =>
array (
),
'template' =>
array (
'pagesize' => '20',
'mpagesize' => '20',
'list' => 'list.html',
'category' => 'category.html',
'search' => 'search.html',
'show' => 'show.html',
),
'cat_field' => NULL,
'module_field' => NULL,
'html' => 0,
'urlrule' => 1,
),
'displayorder' => '0',
'acount' => '43426',
'mid' => 'article',
'pcatpost' => 1,
'topid' => '7',
'catids' =>
array (
0 => '7',
),
'is_post' => 1,
'tid' => 1,
'url' => 'https://www.dh3g.com/list-7',
'total' => '请使用count标签查询',
'field' =>
array (
),
),
) |