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

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