软件工程

关于软件工程原则、最佳实践、架构、代码质量和专业开发技术的文章和资源。并说明真实成本与取舍。

真正带来改变的故障复盘

故障复盘很容易开起来,很难做得有用。会开了,文档写了,四条改进项记下来了,六个月后同一个故障又发生一次,而某个人正好在找别的东西时翻出了那份旧文档。 在讨论这件事时,注意力几乎都落在"无指责"这个词上。这条原则确实重要,但失效的地方并不在那里。有大量组织把无指责执行得一丝不苟,复盘却什么也没有改变,原因很简单:他们把复盘本身当成了交付物,而不是当成产出交付物的手段。 判断你们的复盘是否有效,有一个简单到让人难堪的测试:过去六个月记录下来的改进项,实际完成的比例是多少? 如果答案是"大部分",那么无论流程长什么样,它都在起作用。如果低于一半,你们是在开会而不是在运行一个流程,换更漂亮的模板也救不了。少数几条带负责人和期限的事项,胜过一...

真正会被读的技术文档

技术文档的失败方式非常具体,也非常好预测。有人在两周清闲的时间里写下一大堆,接着系统变了,没有人回头更新,一年之内那份文档就开始信心十足地讲着错误的内容。到了那个时候,它比什么都没有还要糟,因为相信它的读者会依据早已不成立的信息去动手。 常见的反应是号召大家多写一些,而这只会让同样的失败来得更快。有用的反应是少写,并且认真挑选写什么,因为真正的瓶颈不是写作的工夫,而是维护的工夫。文档从写完那一刻起,就开始被现实甩在后面。 判断一份文档该不该存在,唯一经得起时间的检验是: 当它变错的时候,会不会有人察觉?部署指南天天有人用,错误立刻就会浮出来。一份二十页的子系统说明只会被读一次,它的错误要等到十八个月后,有人照着它动手时才浮出来。没有...

让新人第一周就能交付的开发者入职流程

开发者入职通常是按入职培训花了几天来衡量的,而那是问题的另一头。真正重要的数字是另一个:一个新来的工程师要过多久,才能改动某个东西,并且有把握自己没有弄坏别的地方。在大多数团队里,这个数字是以月计的,而不是以天计的。 延迟很少出在人身上。它出在系统里有多少部分只存在于别人的脑子里,以及前两周里有多大一部分时间,是靠一次次打断别人,一点一点把这些东西挖出来的。 唯一值得追踪的指标:从入职到他们的第一次改动进入生产环境,需要多久。 不是第一次提交,提交可以只是改一个错别字,而是一次有意义并且真正上线的改动。如果这个时间超过一周,障碍几乎从来都不是能力。而是一份最近没有人从零走过一遍的环境搭建流程,或者一份没有人带路就找不到入口的代码库。...

经得起真实用户考验的软件测试策略

人们谈论软件测试策略时,几乎总是从覆盖率讲起,而覆盖率恰恰是整个领域里信息量最低的一个数字。一个覆盖率达到九十的代码库,照样可能在最常被走到的路径上把缺陷送进生产环境,因为覆盖率衡量的是测试运行期间哪些代码行被执行过,而不是有没有针对这些行做出任何有意义的断言。 真正信任自己测试套件的团队,并不是覆盖率百分比最高的那一批。他们是这样一群人:当东西真的坏了,测试会红;其余时候,测试保持安静。这个性质比大多数人想象的更难用钱买到。 对任何一个测试都值得问的问题: 如果它失败了,我知道该怎么办吗?因为行为改变而失败的测试,会告诉你一些东西。因为某个实现细节挪了位置而失败的测试,只能告诉你有人做了重构。这样的失败积累到一定数量,团队就不再阅...

深入解读企业级软件授权许可模式与合规管理规范指南:2026年企业商业闭源与开源协议选定深度解析

在 2026 年构建企业级应用时,选择合适的软件授权许可模式是创始人在商业布局中最重要的战略决策之一。一旦选错合同形式,可能会限制您的分发渠道、阻碍 SaaS 的扩张,甚至在法律层面上意外迫使您将核心的商业独占(闭源)代码公诸于世。因此,创始人需要在保护核心知识产权(IP)与维持运营利润率之间进行仔细权衡。本指南为您深入分析在商业软件许可中常用的法律结构、开源许可协议约束以及独占条款。 许可漏洞警告: 引入使用强传染性开源协议(如 GPL)的开源库,在法律上有可能要求您的公司向公众公开整个独占应用的全部源代码。 核心要点提炼: 科学的许可模式能妥善保护您的知识产权,并为实现可扩展的业务收入奠定基础。 商业独占许...

遗留 PHP 现代化:2026 指南

遗留 PHP 应用往往是软件版本的"扩建过十几次的老楼":它能运行,业务依赖它,却没人愿意去碰。老旧的 PHP 版本、没有测试、职责混杂,以及多年累积的临时凑合,让每一次改动都充满风险。好消息是,遗留 PHP 现代化并不需要一次性的彻底重写,而后者通常是所有选项中风险最高的一个。本指南给出一条更安全、循序渐进的路径。 要点速览(TL;DR) 彻底重写是最诱人也最危险的选项;渐进式现代化更安全,并能更早交付价值 先从评估代码、升级到受支持的 PHP 版本,以及围绕关键行为搭建一张测试安全网开始 引入 Composer、自动加载与现代化结构,然后朝着清晰的职责分离进行重构 使用 strangler fig 模式逐步采用 Symfony ...

2026年软件开发生命周期详解

软件开发生命周期(通常缩写为SDLC)是团队将软件从一个想法推进到可运行、可维护产品所遵循的结构化流程。无论是开发软件还是委托开发,理解这一流程都至关重要,因为流程的质量在很大程度上决定了结果的质量、成本和及时性。本指南清晰阐释软件开发生命周期:每个阶段及其内容、敏捷与瀑布方法的区别、项目通常在哪里出问题,以及良好的流程如何控制成本和风险。 要点总结 软件开发生命周期是规划、构建、测试、部署和维护软件的结构化流程 经典阶段包括规划、需求、设计、实现、测试、部署和维护 敏捷和瀑布是通过这些阶段的两种方式:迭代式与顺序式 大多数软件失败可追溯到薄弱的早期阶段,尤其是理解不清晰的需求 良好的SDLC通过在问题还容易修复时及早发现,降低风险...

什么是软件开发?2026年英国指南

什么是软件开发?最简单地说,软件开发是设计、构建、测试和维护在计算机、手机、服务器和设备上运行的程序的过程。这是想法变成可运行应用程序的方式。但这个一行定义隐藏了很多内容,如果您是委托开发软件的企业主,或者正在考虑进入这个领域的人,细节才是最重要的。本指南解释了2026年软件开发实际上涉及什么、主要类型、背后的语言和角色,以及工作如何从概念推进到发布。 简要概述 软件开发是将需求转化为可运行、可维护软件的结构化过程 它涵盖的远不止编写代码:规划、设计、测试、部署和持续维护都是其中的一部分 主要类型包括Web、移动、桌面、嵌入式和企业软件开发 现代软件由团队构建,开发人员、设计师、测试人员和项目负责人各自扮演角色 优秀的软件开发衡量标...

COBOL 迁移到 C++: 遗留系统现代化实用指南

COBOL 迁移到 C++ 是企业可以开展的最具影响力的现代化项目之一,同时也是最容易被忽视的项目之一。如今仍有大约 2200 亿行 COBOL 代码在生产环境中运行。银行通过它处理数万亿美元的交易。政府靠它运行养老金系统、税收征管和医疗保障。航空公司用它来预订机票。而每一年,懂得维护这些代码的人都在步步逼近退休年龄,几乎没有新人能够接替他们。 几十年来,企业都知道自己需要进行现代化改造。但成本太高,风险太大,而 COBOL 系统一直在正常运转。如今情况变了。大型机许可费用在不断攀升。开发者人才库正在迅速萎缩。遗留系统与现代基础设施(云、容器、CI/CD、API)之间的差距每年都在拉大。 问题已经不再是 “...

C++ 与 Rust 的内存安全——现代 C++ 实用示例对比

C++ 与 Rust 之间的内存安全讨论已成为软件工程领域最活跃的话题之一。政府机构纷纷发表了意见,各类技术会议为此设立了专题演讲,双方阵营都持有强烈的观点。 我先表明立场:Rust 是一门优秀的语言。 它的所有权模型和借用检查器确实具有创新性,能够在编译时捕获整类缺陷。如果你正在启动一个新项目,且 Rust 适合你的团队和技术生态,那是一个很好的选择。 与此同时,C++ 依然是全球性能要求最苛刻的软件的基石:操作系统内核、游戏引擎、浏览器、数据库和金融系统。这并非偶然,也不是因为这些团队没听说过 Rust。 我在这篇文章中想探讨的,是争论中经常被忽视的一个要点:现代 C++(C++11 及之后的版本)提供了编写内存安全代码的强大工...