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

巨大なレガシーコードをビッグデータでテストケースに変換する

D189891b4c2dd98f9301baf1a5727fc4?s=47 rugamaga
November 18, 2019

 巨大なレガシーコードをビッグデータでテストケースに変換する

DMM meetup #14 ( https://dmm.connpass.com/event/152326/ ) での資料です。

レガシーコードを実環境の動作をログ化することでテストケースに変換。
それらのテストケースを活用してリファクタリングを行う技術の紹介をしました。
そしてDMMのプラットフォームチームとは何かについて。

D189891b4c2dd98f9301baf1a5727fc4?s=128

rugamaga

November 18, 2019
Tweet

Transcript

  1. 巨大なレガシーコードを ビッグデータで テストケースに変換する そして 事業本部・検索チームとは何者か。 プラットフォーム事業本部カスタマーエンゲージメント部 検索チーム 永浦 尊信 2019/11/18

  2. 永浦 尊信 検索エンジニア 情報工学が大好きです。 数学も 不得意だけど 好きです。 イラストも 不得意だけど 好きです。

    自己紹介 いつものアイコン / twitter @rugamaga
  3. における検索について。 の 検索 って何?

  4. 検索=コンテンツ情報の配送 検索する=コンテンツを見つける インデクシング コンテンツ情報を 検索エンジンに 格納する ストレージング コンテンツ情報を 見つけ出せる可能な形で 蓄積する

    クエリング 見つけたい商品情報を いろんな情報を総合して 見つけ出して返す の全てに横断するコンテンツデータベース
  5. 検索 なしだとこうなる 検索結果じゃなくて 商品リストのページです

  6. 今日のタイトルを思い出す。

  7. 巨大なレガシーコードを ビッグデータで テストケースに変換する 2019/11/18 そして検索チームとは何者か。 プラットフォーム事業本部カスタマーエンゲージメント部 検索チーム 永浦 尊信

  8. 当時の検索システムの負債状況 社内最大の循環的複雑度 その値

  9. だが今はだいたい 直ってる

  10. どうやったのか。

  11. 手順は4つ。 負債システムからログを出せるようにする プロダクション環境でログを集める ログをテストケースに変換する リファクタリングする

  12. 実システム ビッグデータ基盤 お客様 ここが技術的負債になってるとして ……。

  13. ビッグデータ基盤 実システム お客様 ロギングを導入 (AspectのWeavingを使うとよい) エンジニア

  14. Weavingでロギングを導入 ビッグデータ基盤 実システム お客様 エンジニア 呼び出された関数名 関数シグネチャ 各処理の戻り値と、その時の変数状態 発行された リクエストとレスポンス値

    呼び出し引数の具体的な値 このときに導入するログは何?
  15. 実システム ビッグデータ基盤 お客様 ログをガリガリと蓄積します。

  16. 実システム ビッグデータ基盤 お客様 テストケースを生成します ログベーステスト フレームワーク

  17. テストケースを生成します ログベーステスト フレームワーク 実システム ビッグデータ基盤 お客様 コンストラクタ呼び出しログのたびにオブジェクト生成 呼び出し後に戻り値や変数状態をログと比較しアサーション はプロクシしてログの内容に置き換え 呼び出された関数名

    引数のログからメソッド呼び出し どうやって変換するの?
  18. 名付けてログベーステスト

  19. どんな効果があるか 実行するとログの規模に応じて数万〜数十万のテストを回せます 重すぎたらサンプリングして数を減らしても です お客様がよく使うコードほど良くテストできます 非常に安全にリファクタリングできます 仕様を全く知らない対象もテストできます

  20. 備考 ランダムテストじゃだめなの? 回答 実は同じモノなんです。 回答 ランダムだと 期待する値 を有意義に定義しずらい 「ログ」はある意味「動作データの 統計的

    分布」です 無情報事前分布のログベーステスト=ランダムテスト 逆に「分布」が適切なランダムテスト=ログベーステスト ランダムだと「クラッシュしない」みたいな話になる とはいえ元ソースと突き合わせさせるくらいはできる 非本質的
  21. 実際の成果 該当の負債システムをエンジニア2人で移植完了済み 他の仕事もしながら 4ヶ月で完了 置き換え完了後にリファクタリング起因のトラブルなし

  22. 何より、お客様によりよい検索体験の提供ができるようになった! 情報工学 エンジニアリング で広げる夢 例 高速な商品情報配送 コンテンツ配送を 時間→ 分に改善 機械学習

    文法推論 でリファクタリング済みコードの自動生成 途中 形式手法を組み合わせて仕様変更も出来るログベーステスト 実装済 もっと発展できる方向もあるし システムはクラウド に移植しているし
  23. 検索チームとは何者か。

  24. 検索チームは エンジニアリングを活用して を支えるチームです。

  25. そして

  26. プラットフォーム事業本部も エンジニアリングにより を支えています。