V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heguangyu5
V2EX  ›  PHP

借云招 OurATS 的升级变迁来分享下 PHP 语言"动态一时爽,写好测试一直爽"的体验

  •  
  •   heguangyu5 · 123 天前 · 1286 次点击
    这是一个创建于 123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对云招 OurATS 完全不了解的网友可以看下上一篇文章/帖子:

    谈谈云招 OurATS 为什么不把开发语言从 PHP 转成 go/java/.net,而是搞了个 PHP 编译器 BPC 来实现本地部署

    简言之,云招 OurATS 是一个使用 PHP 语言开发的招聘管理系统.

    1. 动态一时爽,重构火葬场?

    经常看到有网友接手 PHP/Python 等动态语言开发的项目后,不管是加功能还是调 bug,都痛苦不不堪,直呼"动态一时爽,重构火葬场".

    确实,我本人在参与开发云招 OurATS 的前两年里也有类似的经历.

    当时面临最大的问题是,不敢轻易加需求.

    为什么?

    因为经过 2 年的开发,云招 OurATS 的代码库已经稍有规模.每添加一个需求,是否会影响到其它功能模块,都需要好好测试才放心.

    可是招聘系统的功能模块多,相互关联错综复杂,要测试的地方太多了,就一个字,累!

    当时敏捷开发、TDD 是非常流行的,尤其是 TDD 很明显可以解决我们面临的测试问题,所以当时狠花了一些时间研究怎么搞 TDD.

    也去聆听过某知名公司组织的敏捷开发分享交流会,发现方法论比较多,落地实战几乎没有.

    于是静下心来,自己搞.

    2. 写好测试用例

    核心关键点:

    1. 测试用例不好写

      那是被测试代码不容易测,需要重组代码结构,让测试用例好写

    2. 要高覆盖率吗?

      覆盖率只是一个指标/手段,不是目的.

      目的是建立对被测试代码的信心,写个1+1=2 根本不需要测试,因为我们有信心不会出错.

      核心逻辑覆盖到,在担心出错的地方多覆盖,在有信心不出错的地方少覆盖.

    3. 摆正心态,写测试用例肯定会多花点时间,但这是为了不去体验火葬场

    3. 云招 OurATS 的升级之路

    云招 OurATS 至今已经历了三次大的升级:

    1. Ubuntu 12.04 + MySQL 5.5 + PHP 5.3
    2. Ubuntu 18.04 + MySQL 5.7 + PHP 7.2 / BPC 编译发布
    3. Ubuntu 24.04 + MySQL 8.0 + PHP 8.3 / BPC 编译发布

    每次升级,都是先跑通测试用例,这时会有一些 SQL 和 PHP 的兼容性调整,但都很轻松地搞定了.

    升级后系统运行地也很平稳,利益于 PHP 近些年来的性能提升,每次升级都还能节省几台服务器.

    在 2023 年初,我们使用 PHP 编译器 BPC 成功编译了云招 OurATS.

    BPC 完全脱离了 PHP 解释器,每一个 PHP 的语法、扩展函数都重新实现了一遍,这当中如果没有测试做保障,那根本就是不可能完成的任务.

    好在 PHP 自身有完善的 phpt 测试用例,BPC 首先通过了这一层测试.

    OurATS 相关的每个项目/模块也都有写好的 PHPUnit 测试用例,BPC 也通过了这一关测试.

    测试都过了,我们很有信心 BPC 编译后的 OurATS 等价于 PHP 解释执行的 OurATS.

    如此大规模的升级都轻松搞定了,日常的小升级更不在话下.

    这十多年来,每年我们的代码库都会有相当规模的变化,但这十多年里,我们没再体验过火葬场,我们也非常自信云招 OurATS 和"屎山"不沾边.

    4. 更多关于云招 OurATS TDD 经验的分享

    1. 我本人写过一本小电子书《 PHPUnit in Action --- The Easy Way 》,介绍了云招 OurATS 的 PHPUnit 实战经验.
    2. 云招 CTO(不是我)的公众号"小马过河的思考",也分享了不少云招 OurATS 的东西.并且小马过河的文风别具一格,读来轻松幽默,配图也非常有趣,非常推荐大家关注看看.
    1 条回复
    kkk9
        1
    kkk9  
       123 天前   ❤️ 1
    99.99%的 phper 不会也没空写 testing ,一梭子写完直接 dump 看结果 OK 不 OK ,OK 就下一个需求,不然又要加班了。

    剩下 0.01%的 phper 在疑惑 composer 为啥报错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1561 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 16:45 · PVG 00:45 · LAX 08:45 · JFK 11:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.