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

とあるOSSを継続可能にするための取り組みについて / OSS Refactoring Pro...

bun
September 17, 2024

とあるOSSを継続可能にするための取り組みについて / OSS Refactoring Process

JaSST nano vol.40(https://jasst-nano.connpass.com/event/328652/) にて発表させていただいた資料です。

私の自己承認欲求がリファクタリングに向かい、まっとうなプロセスでリファクタリングをしていきましたので手順などをご紹介します

bun

September 17, 2024
Tweet

More Decks by bun

Other Decks in Technology

Transcript

  1. 自己紹介 bun913 • 職種: SDET
 ◦ Software Development Engineer in

    Test
 • ISTQB AL TA/TTA/TM 取得 
 • AWSと開発も少しだけできる 
 • 英語猛烈学習中

  2. どんなツールか? • Postman によるAPIテストの結果を TestRail に取り込むツール
 • Postman
 ◦ APIテスト実行できる


    • TestRail
 ◦ テストマネジメントツール。 API連携で色々 できて便利
 • TestRailでテストケースを管理。その テストケースに対する結果を自動で取 り込むイメージです。
 そのツール APIテスト実行 結果を加工 結果を送信(保存)
  3. 取り組んだステップ • Step1: 現状を把握する
 • Step2: メインとなる機能のテストを追加
 • Step3: 一旦パッケージを公開する


    • Step4: リファクタリングのためにテストを追加
 • Step5: リファクタリングを実施
 ※ その時の気持ちや経過をZennにまとめる

  4. • まだオリジナルのツールのソースを移植しただけの段階
 • テストコマンドがあったのでテストを実施するも、テストが一つも通らな い状態
 ◦ テストは過去にあったが、メソッド名が変わって「そんなメソッドないよ」みたいなエ ラーが出ている状態 
 ◦

    またテストはメインとなる機能の一部の処理に対してのみ書かれていた模様 
 • ソースコードも結構複雑で継続的開発が難しそうな印象(すばらしい ツールなのは強調したい)
 Step1: 現状を把握する
  5. • 内部構造が複雑で関数やクラスも大きいのでテストも追加しにくいのでリファクタ リングしたい
 • リファクタリング
 ◦ 「システムや機能の振る舞いを変えずに 内部構造を改善する」 
 ◦

    変えてないことを保証するためにもテストが欲しいというジレンマ 
 • 「友達を作るための服を買いに行く服がない」のような状況
 
 Step4: リファクタリングのためにテストを追加
  6. • ブランチカバレッジ
 ◦ 63% → 81.73%
 • 本来は機能の振る舞いを検証したいが、テストがちょっとしにくい構造であるため 「この関数をこの引数で呼んでいる」といったテストも許容しながら追加していく
 •

    仕様の理解が深まっていく
 ◦ 「この環境変数を設定した時の挙動はこうなのか」 
 ◦ 「まさか Logger というクラスが結果に影響を与えるとは思っていなかったぜ」 
 • リファクタリングをしていく自信がついた
 
 
 1週間の進捗
  7. • リファクタリングに取り組むステップ
 ◦ まずは大きな関数の一塊の意味を持つ処理を 自分のクラスの小さな関数として切り出す 
 ◦ 既存のテストの結果を確認しながら、切り出した関数のテストを書く 
 ◦

    ある程度切り出しが終わったら「特定の責務を持つクラスとして切り出しができないか」検討し て、クラスを分ける
 ◦ 既存のテストの結果を確認しながら、切り出したクラスのテストを書く 
 • プロダクションコードとテストコードに「意図」を持たせる
 ◦ 例: なぜ文字列を `C` の後の任意の数字を持つ部分とそうでない部分で分割するの? 
 ◦ → テストケースのIDをタイトルから取得して TestRailに送信するためのデータを準備するため 
 ◦ そういった「一塊のプロセス」に名前をつけながら、意図をわかりやすくしていく 
 取り組み方針
  8. • SDET(Software Development Engineer in Test) として、開発ができる (はずの)「テストマン」として、自分が一番やるべきだという使命感から始まっ た活動でした
 •

    プライベートでリファクタリングをするのは貴重な体験でした
 • もっと大きなOSSのコントリビューターの方々への感謝が増大しました
 • みなさん「いいな」と思ったらGitHubにそっとスターをつけましょう。きっと大き なモチベーションになりますよ
 やってみて思ったこと