Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CakePHPのバージョンアップ戦略

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

 CakePHPのバージョンアップ戦略

Avatar for shiro seike

shiro seike PRO

May 16, 2020
Tweet

More Decks by shiro seike

Other Decks in Programming

Transcript

  1. 自己紹介
 清家史郎
 @seike460
 - 清家史郎 (@seike460)
 - Fusic Co., Ltd.

    / evangelist / Engineer
 - バックエンド寄りフルスタック
 ▪ PHP,Go,AWSが得意、Serverlessに興味 
 - 技術コミュニティに関わるのが好き
 - カンファレンス登壇多数
 - PHPカンファレンス福岡 2020
 ▪ 幻の実行委員長
 - Serverless Days Fukuoka 2019
 ▪ co-chair
 4

  2. 8
 バージョンアッププロジェクト状況
 状況 1
 現職で初めて携わった受託開発プロジェクト(圧倒的エクスキューズ) 
 
 
 状況 3


    PHP, PostgreSQL, CakePHPのバージョンアップ工数は潤沢ではない 
 状況 2
 Unitテストは途中から書き始めたので新機能部分しかない(CI環境は整備済) 

  3. 10
 バージョンアッププロジェクト状況
 状況 1
 現職で初めて携わった受託開発プロジェクト(圧倒的エクスキューズ) 
 
 
 状況 3


    PHP, PostgreSQL, CakePHPのバージョンアップ工数は潤沢ではない 
 作戦
 - 最小工数で広い範囲をカバーできるテストを書く 
 - 機械的な作業に落とし込む
 状況 2
 Unitテストは途中から書き始めたので新機能部分しかない(CI環境は整備済) 

  4. 12
 テストのスコープを決める
 • UI
 ◦ 担保出来る範囲は一番広い
 ◦ メンテナンスコストが高い
 ◦ 実行時間が長い(PHPUnit+αが必要)


    • Service
 ◦ PHPの一連の動作は担保出来る
 ◦ メンテナンスコストは中程度⚠
 ◦ 実行時間も短め(PHPUnit内で完結)
 • Unit
 ◦ 担保出来る範囲は極小(メソッド単位)
 ▪ 一方で詳細まで確認可能
 ◦ メンテナンスコストは非常に低い
 ◦ 実行時間も短い
 テストピラミッド
 
 上に行くほど
 - 再現度は高い
 - 実行時間が長い
 - 保守、デバッグの労力増大
 
 一般的にUnit部分を充実させる

  5. 13
 テストのスコープを決める
 • UI
 ◦ Cypress or phpunit-selenium
 ▪ 実行時間やテストピラミッドの原則


    カバレッジ率がわからない
 • Service ⭕ここの充実を選択
 ◦ CakePHPのControllerを網羅
 ▪ 広範囲のカバレッジを確保出来る
 • Unit
 ◦ CakePHPのModel等を網羅
 ▪ カバレッジの確保には工数が必要
 Controller網羅後
 - UIは手動テストを実行
 - カバレッジや優先順位を元にUnitテストも増やす
 ※変更し辛いタイミングなので諸刃の剣

  6. 16
 grep | xargs sedで一括置換
 • scrutinizerにて修正内容は確定してくるので関数を変更していきます
 $ grep -rl

    'hoge' src | xargs sed -i -e 's/hoge/getHoge/g' • 一括変換の結果はgit diffで確認しながら意図した置換になってるかを確認
 ◦ 特に get〇〇、set〇〇系の修正はミスが発生しやすいので注意
 間違えていた場合は一つ一つ手作業で丁寧に変更していきます
 • 全てを手作業だと 気が狂いそう 効率が悪いので一斉置換を行います。
 みんな大好きsedコマンドを利用します。
 
 

  7. 17
 まとめ
 Point 1
 開発工数が限られている為、テストピラミッドの原則にとらわれず 
 テストのスコープを決めて、手動テストと組み合わせて品質を確保 
 Point 2


    scrutinizerを利用して、修正箇所及び修正内容を確認。 
 一括置換を行うことにより機械的な修正 
 summary
 「正論」だけでは戦えない状況も現実と向き合い、 
 現状に即した施策で少しづつ改善していく事が大事 
 extras
 fixtureをDB + Fakerで自動生成したりもしたが時間の関係で割愛 
 associationを参照しながらFakerでデータ保護したfixture生成Shellを書いた