テスト¶
扱うこと: 品質の関門の一覧、Office の実機での結合テスト(手動)。扱わないこと: 関数ごとの単体テストの内容(インデックスと検索・インデックス作成・Office・検査と道具・画面)、テストの実行・CI(テストの実行と CI・CI)。先に読むページ: 設計の概要。
このページは、tebunko の品質をどう確かめているかをまとめる。コードを変えたときに何が自動で確かめられ、何を手で確かめるかが分かる。
| 知りたいこと | 節 |
|---|---|
| 品質の関門(どこで何を止めるか)の一覧 | 品質の関門の一覧 |
| 関数ごとに何をテストしているか | インデックスと検索・インデックス作成・Office・検査と道具・画面 |
| Office の実機で確かめたこと | 結合テスト(手動) |
| テストの置き場所・タグ・実行のしかた・カバレッジ | テストの実行と CI |
| CI のワークフローとマージの必須チェック | CI |
| コミット時のフック | コミット前に動く検査 |
| 個人情報・文字コードの検査 | コミット前に動く検査 |
品質の関門の一覧¶
変更は、手元のコミット → PR → main → リリースの順に、次の関門を通る。main へは PR 経由でしか入れられず(ブランチ保護)、必須チェックが通らないとマージできない。
flowchart LR
C["コミット"] --> H1["pre-commit フック<br>check_commit.ps1 -Staged<br>run_commit_tests.ps1"]
C --> H2["commit-msg フック<br>check_commit_message.ps1<br>check_signoff.ps1"]
H1 & H2 --> PR["PR"]
PR --> R1["test(test.yml)"]
PR --> R2["pr-title(title.yml)"]
PR --> R3["docs(docs.yml)"]
PR --> R4["analyze(codeql.yml)"]
PR --> R5["gui-smoke(gui.yml)<br>必須ではない"]
R1 & R2 & R3 & R4 --> M["main へ squash merge"]
M --> T["v* タグ"] --> REL["release.yml<br>test を再実行して配布 zip とインストーラーを公開"]
| 関門 | 何を止めるか | 仕組み | 必須 |
|---|---|---|---|
| 単体テスト(Unit・Io・Meta) | 関数の動きの誤り、構成の決まりの違反 | tests/run.ps1(Pester 5.9.0)。単体テスト・テストの実行と CI |
CI の test |
| カバレッジの下限 | テストされない処理が増えること | tests/coverage.baseline(90.0%)を下回ると -Ci が失敗する。テストの実行と CI |
CI の test |
| 構成・安全性のメタテスト | 層の決まり(判断層・状態層が画面に触らないこと、画面以外の読み込み口が ui/ を読み込まないこと)・文字コード・危険な処理(Invoke-Expression・通信・実行時コンパイルなど)の混入 |
tests/meta/。テストの実行と CI |
CI の test |
| 画面のスモークテスト | 画面の起動・タブ・検索・インデックスの作成・ワークスペースの変更・閉じるの流れが壊れること(XAML の読み込み・イベントの配線・ダイアログの開閉・後片付けの例外) | gui.yml(gui-smoke。tests/gui/・タグ Gui)。手元は .\tests\run.ps1 -Tag Gui。画面のスモークテスト |
–(必須にしない) |
| 静的解析 | PSScriptAnalyzer の全規則(ベースラインより増えない)・5.1 に無い書き方と、安全性にかかわる 14 ルールの指摘 | test.yml(版は 1.25.0 に固定)と tests/meta/safety.Tests.ps1 |
CI の test |
| 検索とインデックス作成の速さ | 検索・本文インデックスの作成・取り込み(.docx・.pptx)が、ランナーで測った数字から決めた上限より遅くなること | perf-check.yml(search・ingest)。PR にラベル perf-check を付けたときと main への push で流す。perf-check.yml |
―(流した PR で落ちていればマージしない) |
| 個人情報・文字コード | 利用者名入りのパス・メールアドレス・Office ファイルの作成者名、BOM・CRLF でないスクリプト | tools/check_commit.ps1。公開してはいけない内容の検査 |
フックと CI の test |
DCO(Signed-off-by) |
作者の署名の無いコミット | tools/check_signoff.ps1 |
フックと CI の test |
| リリースのタグ | 形が v<メジャー>.<マイナー>.<パッチ> でないタグ、指すコミットが main の履歴に無いタグ |
tools/check_release_tag.ps1 |
release.yml の guard(公開前) |
| コミット・PR のタイトル | Conventional Commits の形でないもの | tools/check_commit_message.ps1 |
フックと CI の pr-title |
| 設計書のリンク | リンク先のファイル・見出しが無いこと | mkdocs build --strict(docs/ の中)、メタテスト links(git で管理する全 .md) |
CI の docs・test |
| ワークフローの静的解析 | 信頼できない入力を run に埋め込む書き方など |
CodeQL | CI の analyze |
| サプライチェーンの採点 | ―(採点だけでマージは止めない) | OpenSSF Scorecard | ― |
| Office の実機での確認 | COM を使うインデックス作成の不具合 | 手動の結合テスト。結合テスト(手動) | ― |
結合テスト(手動)¶
Excel・Word・PowerPoint の COM を使うインデックス作成は、実機の Office を要するため自動テストの対象外。残った Office の終了は、記録を読んで止めるまでの流れを、偽のプロセス(EXCEL.EXE の名前にした別の実行ファイル)で自動に確かめる(tests/gui/leftover_real.Tests.ps1)。実機の Excel・Word・PowerPoint を止めることだけが手動に残る。以下のテストデータで手動の結合テストを行い、動作を確認済み。
| テストデータ | 確認内容 | 関連 |
|---|---|---|
[確定] を含むブック名、[1] を含むツール配置フォルダ |
インデックス作成・検索できる | インデックス作成・検索 |
| 表示 / 非表示 / 完全に非表示 / 空 のシート | 表示かつ内容のあるシートのみ TSV になる | インデックス作成 |
セル内改行・"・: を含むセル、離れた位置のセル |
1 行にまとまる。検索結果で行が途切れない | インデックス作成・検索 |
セル内容.xlsx(D5 から始まる表・空行・300 列の行・セル内改行を含む 5 シート)を TC10 で検索し、結果を Excel に貼り付け |
71 行 × 300 列の各セルが、元のシートの「行番号・列」のセルの表示値と一致する(位置のずれ 0 件。表示形式の和暦の順序と、CR だけの改行が LF になる点のみ値が異なる) | インデックス作成・検索 |
Word の行(" で始まるセル、途中に " を含むセル、表の行)を含む検索結果を Excel に貼り付け |
各セルが元のまま貼り付けられ、後続の行がずれない | 検索 |
サブフォルダ(空白を含む)内の .xls |
相対フォルダ付きで検索結果に出る | 検索 |
| パスワード付きブック | ダイアログを出さずに失敗として記録される | インデックス作成 |
~$ で始まるロックファイル |
取り込み対象にならない | インデックス作成 |
| 2 回目の実行 / 元ファイルの更新 | 取り込み済みはスキップ、更新したファイルのみ再取り込み | インデックス作成 |
| インデックス作成後の Excel プロセス | 残らない | インデックス作成 |
複数ページ・表・テキストボックス・ヘッダー/フッター・脚注・変更履歴(削除)を含む .docx([確定] を含むファイル名) |
ページごとに分かれ、表は行ごと、削除した文字は出ない | インデックス作成・検索 |
旧形式 .doc、中身が .doc の .docx |
Word で変換して同じ内容を読める | インデックス作成 |
Excel のブック・Word 文書を埋め込んだ .docx、.pptx |
埋め込みの中の文字が [埋め込みN] の場所で検索でき、[図形も検索]をオフにすると出ない |
インデックス作成・検索 |
並べ替えたスライド・非表示スライド・表・グループ・ノートを含む .pptx、旧形式 .ppt |
表示順のスライド番号、非表示・ノートが分かれる | インデックス作成・検索 |
パスワード付きの .docx / .doc / .pptx |
ダイアログを出さずに失敗として記録される | インデックス作成 |
テンプレート .dotx、~$ で始まる .docx |
取り込み対象にならない | インデックス作成 |
| インデックス作成後の Word・PowerPoint プロセス | 残らない(利用者が使用中の Word には触れない) | インデックス作成 |
テストデータの作り方と、各ファイルで確かめる内容は tests/testdata/README.md にある。