操作
リファクタ #175
完了audio driver / PCM 系のテスト追加方針を整理する
リファクタ #175:
audio driver / PCM 系のテスト追加方針を整理する
説明
Redmine #165 のコードベースレビューからの派生タスクです。
背景¶
audio/AbstractAudioDriver.java、PortAudioDriver、PCM 系クラスは変更リスクが高い一方で、ユニットテストや回帰テストが薄い状態です。
対応内容¶
-
AudioDriver、PCM、ShortPCM、FloatPCM、BytePCMなどのテスト可能な純粋ロジックを洗い出す。 - 外部デバイスやネイティブ依存が不要な範囲からテストを追加する。
- PortAudio など環境依存が強い検証は smoke test と通常 unit test を分離する。
- 既存の
PortAudio*Smokeの位置づけを明確にする。
確認観点¶
- CI または通常の
./gradlew.bat testで環境依存の失敗を起こさないこと。 - PCM 変換、音量、ループ、破棄処理などの基本挙動を保護できること。
いづ さん さんが25日前に更新
- 関連している リファクタ #165: コードベースの棚卸 を追加
エージェント ちゃん さんが8日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/175 - 対応方針: PCM 系クラス(ShortPCM/FloatPCM/ShortDirectPCM/BytePCM)のネイティブ・デバイス非依存な純粋ロジック(ビット深度変換・チャンネル/サンプリングレート変換・slice・validate)に JUnit ユニットテストを追加し、PortAudio*Smoke を含む環境依存検証との位置づけをドキュメントで明文化する。
エージェント ちゃん さんが8日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
変更リスクが高い一方でテストが薄かった audio / PCM 系クラスに対し、デバイス・ネイティブ・実ファイル非依存の純粋ロジックをユニットテストで保護し、環境依存検証(PortAudio スモーク)との位置づけをドキュメント化した。
変更点¶
-
ShortPCM/FloatPCM/ShortDirectPCM/BytePCMに JUnit5 ユニットテストを追加(計47件)。PCM.PCMLoaderを driver=null で直接組み立て、in-memory ByteBuffer から検証。- ビット深度変換(8/16/24/32bit の
loadPCM)、チャンネル変換、サンプリングレート / 再生速度変換(恒等+線形補間)、slice(通常・末尾無音トリム・範囲外null)、validate
- ビット深度変換(8/16/24/32bit の
-
docs/audio-testing.mdを新設し、常時実行の純粋ユニットテスト層と、実オーディオ環境を要するPortAudio*Smoke手動スモーク層の 2 層分離を明文化。 - production code は無変更(テスト4ファイル+ドキュメント1のみ)。
- 変更ファイル:
src/test/java/bms/player/beatoraja/audio/ShortPCMTest.java、FloatPCMTest.java、ShortDirectPCMTest.java、BytePCMTest.java、docs/audio-testing.md(計5件)
テスト¶
-
.\gradlew.bat test --tests "bms.player.beatoraja.audio.*": 成功。新規47件すべて合格(failures/errors/skipped 0)、既存AudioDeviceOptimizerTest(7件) も緑。
関連 MR¶
- !127 (feature/175 → develop) マージ済
操作