巨大なレガシーコードをビッグデータでテストケースに変換する
by
rugamaga
×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
巨大なレガシーコードを ビッグデータで テストケースに変換する そして 事業本部・検索チームとは何者か。 プラットフォーム事業本部カスタマーエンゲージメント部 検索チーム 永浦 尊信 2019/11/18
Slide 2
Slide 2 text
永浦 尊信 検索エンジニア 情報工学が大好きです。 数学も 不得意だけど 好きです。 イラストも 不得意だけど 好きです。 自己紹介 いつものアイコン / twitter @rugamaga
Slide 3
Slide 3 text
における検索について。 の 検索 って何?
Slide 4
Slide 4 text
検索=コンテンツ情報の配送 検索する=コンテンツを見つける インデクシング コンテンツ情報を 検索エンジンに 格納する ストレージング コンテンツ情報を 見つけ出せる可能な形で 蓄積する クエリング 見つけたい商品情報を いろんな情報を総合して 見つけ出して返す の全てに横断するコンテンツデータベース
Slide 5
Slide 5 text
検索 なしだとこうなる 検索結果じゃなくて 商品リストのページです
Slide 6
Slide 6 text
今日のタイトルを思い出す。
Slide 7
Slide 7 text
巨大なレガシーコードを ビッグデータで テストケースに変換する 2019/11/18 そして検索チームとは何者か。 プラットフォーム事業本部カスタマーエンゲージメント部 検索チーム 永浦 尊信
Slide 8
Slide 8 text
当時の検索システムの負債状況 社内最大の循環的複雑度 その値
Slide 9
Slide 9 text
だが今はだいたい 直ってる
Slide 10
Slide 10 text
どうやったのか。
Slide 11
Slide 11 text
手順は4つ。 負債システムからログを出せるようにする プロダクション環境でログを集める ログをテストケースに変換する リファクタリングする
Slide 12
Slide 12 text
実システム ビッグデータ基盤 お客様 ここが技術的負債になってるとして ……。
Slide 13
Slide 13 text
ビッグデータ基盤 実システム お客様 ロギングを導入 (AspectのWeavingを使うとよい) エンジニア
Slide 14
Slide 14 text
Weavingでロギングを導入 ビッグデータ基盤 実システム お客様 エンジニア 呼び出された関数名 関数シグネチャ 各処理の戻り値と、その時の変数状態 発行された リクエストとレスポンス値 呼び出し引数の具体的な値 このときに導入するログは何?
Slide 15
Slide 15 text
実システム ビッグデータ基盤 お客様 ログをガリガリと蓄積します。
Slide 16
Slide 16 text
実システム ビッグデータ基盤 お客様 テストケースを生成します ログベーステスト フレームワーク
Slide 17
Slide 17 text
テストケースを生成します ログベーステスト フレームワーク 実システム ビッグデータ基盤 お客様 コンストラクタ呼び出しログのたびにオブジェクト生成 呼び出し後に戻り値や変数状態をログと比較しアサーション はプロクシしてログの内容に置き換え 呼び出された関数名 引数のログからメソッド呼び出し どうやって変換するの?
Slide 18
Slide 18 text
名付けてログベーステスト
Slide 19
Slide 19 text
どんな効果があるか 実行するとログの規模に応じて数万〜数十万のテストを回せます 重すぎたらサンプリングして数を減らしても です お客様がよく使うコードほど良くテストできます 非常に安全にリファクタリングできます 仕様を全く知らない対象もテストできます
Slide 20
Slide 20 text
備考 ランダムテストじゃだめなの? 回答 実は同じモノなんです。 回答 ランダムだと 期待する値 を有意義に定義しずらい 「ログ」はある意味「動作データの 統計的 分布」です 無情報事前分布のログベーステスト=ランダムテスト 逆に「分布」が適切なランダムテスト=ログベーステスト ランダムだと「クラッシュしない」みたいな話になる とはいえ元ソースと突き合わせさせるくらいはできる 非本質的
Slide 21
Slide 21 text
実際の成果 該当の負債システムをエンジニア2人で移植完了済み 他の仕事もしながら 4ヶ月で完了 置き換え完了後にリファクタリング起因のトラブルなし
Slide 22
Slide 22 text
何より、お客様によりよい検索体験の提供ができるようになった! 情報工学 エンジニアリング で広げる夢 例 高速な商品情報配送 コンテンツ配送を 時間→ 分に改善 機械学習 文法推論 でリファクタリング済みコードの自動生成 途中 形式手法を組み合わせて仕様変更も出来るログベーステスト 実装済 もっと発展できる方向もあるし システムはクラウド に移植しているし
Slide 23
Slide 23 text
検索チームとは何者か。
Slide 24
Slide 24 text
検索チームは エンジニアリングを活用して を支えるチームです。
Slide 25
Slide 25 text
そして
Slide 26
Slide 26 text
プラットフォーム事業本部も エンジニアリングにより を支えています。