借云招 OurATS 的升级变迁来分享下 PHP 语言"动态一时爽,写好测试一直爽"的体验 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
heguangyu5
V2EX    PHP

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

  •  
  •   heguangyu5 2024-07-17 12:41:13 +08:00 1846 次点击
    这是一个创建于 532 天前的主题,其中的信息可能已经有所发展或是发生改变。

    对云招 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  
       2024-07-17 14:00:18 +08:00   1
    99.99%的 phper 不会也没空写 testing ,一梭子写完直接 dump 看结果 OK 不 OK ,OK 就下一个需求,不然又要加班了。

    剩下 0.01%的 phper 在疑惑 composer 为啥报错
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2272 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 12:21 PVG 20:21 LAX 04:21 JFK 07:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86