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

PHPerが再利用可能な情報提供でオフショア先とコード品質向上に取り組む / PHPer try improve the code quality

Y-KANOH
September 25, 2022

PHPerが再利用可能な情報提供でオフショア先とコード品質向上に取り組む / PHPer try improve the code quality

~ オフショア先のコード品質向上は難しい ~

オフショアの場合、遠隔地であることだけでなく言語や文化、環境が違うため、お互いに意図を理解できているかや共通の認識を持てているかどうかが怪しくなってしまいます。
特に、コード品質向上のために行ったコードレビューのフィードバックについては、

・正しく内容を理解してもらえているか
・フィードバック内容を次回のコーディングに活かしてもらえるか

など、オフショア先との意思疎通が障壁となって、改善が行えない場合が多くあります。

そこで、私のチームではコードレビュー時に「再利用可能な」情報を提供することで、サービス全体のコード品質向上に取り組んでいます。
このセッションでは、

・どのようにしてオフショア先のコード品質向上に取り組めばいいのか
・オフショア先のモチベーションを保ちながらどのように改善を行っていくのか

などを、PHPのコードを紹介しながらお話しします。

Y-KANOH

September 25, 2022
Tweet

More Decks by Y-KANOH

Other Decks in Technology

Transcript

  1. PHPerが

    再利用可能な

    オフショア先と



    取り組む

    株式会社ラクス

    加納悠史

    コード品質向上に

    で

    情報提供


    View Slide

  2. 宣伝:来週火曜!!

    https://rakus.connpass.com/event/258493/ 


    View Slide

  3. 宣伝:来週火曜!!

    https://rakus.connpass.com/event/258493/ 

    後で読んで!!


    View Slide

  4. 加納 悠史
 レガシーシステムの開発

    @Ykanoh65

    株式会社 ラクス

    所 属

    お仕事

    その他

      Twitter

    PHPer ダイビング 観葉植物 

    カノウユウジ

    オフショア窓口 / イベント登壇


    View Slide

  5. 会社で

    オフショアやってるよ

    🙋


    View Slide

  6. オフショアチームの

    タスク範囲

    ▰ 要件定義後の設計

    ▰ バグの調査 / 修正方針検討

    ▰ 実装 〜 単体テスト

    ▰ 受入テスト作成 / 実施

    ▰ 結合テスト作成 / 実施

    ▰ 脆弱性診断 etc...

    6

    View Slide

  7. オフショアチームの

    タスク範囲

    ▰ 要件定義後の設計

    ▰ バグの調査 / 修正方針検討

    ▰ 実装 〜 単体テスト

    ▰ 受入テスト作成 / 実施

    ▰ 結合テスト作成 / 実施

    ▰ 脆弱性診断 etc...

    7
    仕様理解がすごい
    たまに仕様の矛盾を指摘される ...
    不明点はバンバン質問くれる
    バグの数は多くない
    全くないわけではない
    ブラックボックステストはしっかりやってくれる

    View Slide

  8. そんな

    ベトナムチームの

    弱点...


    View Slide

  9. コード品質


    View Slide

  10. コード品質が悪い例 

    ▰ 何重ものif文

    ▰ 参照渡しの引数

    ▰ せっかくのクラスに条件分岐追加

    悪意があるわけではない。 

    むしろバグを出さないことには気を使ってくれている。 

    function hoge($user, $isNeedXxxFlag ) {
    if ($nanika == $NANIKA_TEISUU ) {


    if ($isNeedXxxFlag ) {
    //なにか特別な処理
    }


    return true;
    }
    return false;
    }

    View Slide

  11. レガシーシステムから脱却をしたい


    しかし 実装の主力 であるベトナムチームの

    コード品質はよろしくない


    いくらリファクタリングの工数をとっても

    逆リファクタリングされちゃあね...


    View Slide

  12. よし


    View Slide

  13. ベトナムチームの

    コード品質を

    上げよう!!


    View Slide

  14. まずは原因分析

    コード品質がよくない理由

    1.既存コードがよくない

    ▰ 20年以上継ぎ足されたコード

    ▰ フレームワーク未使用

    ▰ トランザクションスクリプト

    ▰ 神共通関数ファイル

    2.ベトナムに情報がない

    ▰ 参考書はほぼ英語

    ▰ ドキュメントは充実してない

    ▰ 既存コードが教科書


    View Slide

  15. まずは原因分析

    コード品質がよくない理由

    1.既存コードがよくない

    ▰ 20年以上継ぎ足されたコード

    ▰ フレームワーク未使用

    ▰ トランザクションスクリプト

    ▰ 神共通関数ファイル

    2.ベトナムに情報がない

    ▰ 参考書はほぼ英語

    ▰ ドキュメントは充実してない

    ▰ 既存コードが教科書

    すぐの対応は不可能

    View Slide

  16. まずは原因分析

    コード品質がよくない理由

    1.既存コードがよくない

    ▰ 20年以上継ぎ足されたコード

    ▰ フレームワーク未使用

    ▰ トランザクションスクリプト

    ▰ 神共通関数ファイル

    2.ベトナムに情報がない

    ▰ 参考書はほぼ英語

    ▰ ドキュメントは充実してない

    ▰ 既存コードが教科書

    すぐの対応は不可能

    View Slide

  17. まずは原因分析

    コード品質がよくない理由

    1.既存コードがよくない

    ▰ 20年以上継ぎ足されたコード

    ▰ フレームワーク未使用

    ▰ トランザクションスクリプト

    ▰ 神共通関数ファイル

    2.ベトナムに情報がない

    ▰ 参考書はほぼ英語

    ▰ ドキュメントは充実してない

    ▰ 既存コードが教科書

    英語

    英語

    英語

    英語

    日本語

    英語


    View Slide

  18. まずは原因分析

    コード品質がよくない理由

    1.既存コードがよくない

    ▰ 20年以上継ぎ足されたコード

    ▰ フレームワーク未使用

    ▰ トランザクションスクリプト

    ▰ 神共通関数ファイル

    2.ベトナムに情報がない

    ▰ 参考書はほぼ英語

    ▰ ドキュメントは充実してない

    ▰ 既存コードが教科書

    → 学習材料が足りていない!!

    すぐの対応は不可能

    View Slide

  19. 戦 略


    View Slide

  20. 戦 略

    日本からのフィードバックを

    学習材料 にしてもらう


    View Slide

  21. フィードバックを

    次に活かす

    コードレビュー時にFBを行う
    FB内容を元に学習をしてもらう
    次回の実装で学習内容を活かす
    FB:フィードバック


    View Slide

  22. フィードバックを

    次に活かす

    コードレビュー時にFBを行う
    FB内容を元に学習をしてもらう
    次回の実装で学習内容を活かす
    FB:フィードバック

    キーポイント

    日本からのFBを

    増やす!!


    View Slide

  23. 現状日本からのFBは不十分

    ▰ 母国語が違うので丁寧に指摘しないと齟齬発生!



    → 齟齬を恐れて FB をためらう

    メイン:ベトナム語 サブ:英語をちょっと

    メイン:日本語 サブ:英語をちょっと
    日本
    チーム
    ベトナム
    チーム
    翻訳
    チーム
    日本とベトナムチームのやりとり

    翻訳チームを挟む

    ▰ コード納品 = 結合フェーズ手前の忙しい時期

    → 忙しいと FB を諦めてしまう


    View Slide

  24. できるだけ

    フィードバックを増やす

    対策が必要だった


    View Slide

  25. 対策1

    フィードバック阻害要因を除去

    FB と 修正要否 を分離

    ▰ 修正は不要な FB もOK!!

    → 納期を気にせず FB できる

    Need Fix
    以下の修正をお願いします。
    ~~
    ~~
    Not Need Fix
    以下は確認のみお願いします
    ~~
    ~~
    FB イメージ


    View Slide

  26. ▰ 「ガード節とは」

    ▰ 「変数名の命名について」

    ▰ 「責務を単一にする方法」

    対策2

    繰り返し使える事例集を用意


    View Slide

  27. ▰ FBでは事例集を指し示す

    ▰ “ガード節 の意図は ここを見てください”

    ▰ “変数名 で防げるバグについては ここを参照”

    ▰ “単一責務 について ここにまとまっています”

    対策2

    繰り返し使える事例集を用意

    指摘の説明が省略できる!!


    View Slide

  28. レビュアーを 楽 に

    事例集検索ツールを配布

    レビュアーから

     「資料読んでないから使えないよ」

    と言われないように

    利用しているChrome拡張


    View Slide

  29. FBに事例集を使う

    もう一つの理由

    繰り返しの学習効果

    ▰ 反復してFBを行う

    ▰ 修正によるアウトプットを行う

    → 反復学習による知識の定着


    View Slide

  30. 実際にやってみて

    レビュアー

     もやもやしてたコードにコメントできるようになった


    ベトナムチーム

     可読性の高いコードについての質問があった!!


    View Slide

  31. 効果はすぐには出ない

    ただし、

    ▰ 結果が出るのはおそらくもっと先...

    ▰ 根気よく続ける必要がある


    View Slide

  32. まとめ

    オフショア先のコード品質で悩んでいませんか?

    ▰ FBの阻害要因を排除

    ▰ オフショアチームの情報源になる教材を用意

    ▰ レビュー時には教材を指し示してFB

    ▰ 根気よく手を抜かずに続けていく


    View Slide

  33. 宣伝:来週火曜!!

    https://rakus.connpass.com/event/258493/ 


    View Slide