Skip to content

Oracle テスト

Oracle テストは、実際の Excel から取得した値と Formulon の値を比較するものです。互換性の根拠になる実証層であり、ドキュメント上の仕様ではなく、対象ワークブックとロケールで Excel が実際に何を返すか を基準にします。

用語: Oracle データ

既知のワークブック・プロファイル・Excel ビルドに対して、Excel が返した値を取得したもの。テストはそのワークブックを Formulon で再計算し、取得済みの値と比較します。食い違ったときは Excel を正とします。

用語: 受け入れ済み差分(accepted divergence)

Formulon が意図的に Excel と違う挙動をするケースです。理由(セキュリティ、決定論的な挙動、Excel 側の不具合修正など)と、最後に確認した Excel ビルドを記録します。「Excel 風」とぼかさず、明示的に管理します。

現在の結果

各 Oracle トラックの現状です。いずれもチェックイン済みのゴールデンデータに対してスイートが報告している値であり、目標値ではありません。

トラック結果記録済みの skip / divergenceゴールデンの出所
主要な数式 Oracle4423/4423 passskip 125 件(記録済み)Mac Excel 365 ja-JP(mac-365-ja_JP
条件付き書式 Oracle23/23 passMac Excel 365 ja-JP(mac-365-ja_JP
他エンジン由来コーパス(クロスチェック)12510/12510 passdivergence 168他エンジン。Excel ではない
ワークブック Oracle(ピボット + 印刷)66/66 passskip 10 件(記録済み)製品版 Windows Microsoft 365 ja-JP で検証済み(win-365-ja_JP

103 の Oracle カテゴリを定義しています。数式と条件付き書式の track は Mac Excel 365 ja-JP、workbook track は Windows Excel 365 ja-JP から再生成します。workbook の golden には capture identifier があり、全 suite を単一の検証済み Microsoft 365 セッションに固定します。

カタログ済みの 522 関数のうち 518 が6つのクロージャ条件(behaviors_declared / cases_cover_behaviors / golden_present / divergence_documented / not_in_pilot / behavior_drift)をすべて満たします。残る4つ(ARRAYTOTEXT / FILTERXML / GETPIVOTDATA / PHONETIC)が満たさないのは behaviors_declared だけで、未実装ではなく挙動の分類が不足しています。JISDBCS の alias として宣言され、closure 条件を満たします。Excel はこの ja-JP の数式バー表記を保存・評価の前に書き換えるため、JIS を直接指定する Oracle ケースは作れません。closure harness は alias 先の関数に解決して判定します。

skip はいずれも明示的な divergence、ホストサービス依存、volatile または環境依存のケース、ドライバの制約のいずれかで、黙って握りつぶしたスタブはありません。それぞれ最後に確認した Excel ビルドを tests/divergence.yaml に記録しています。

なぜ Oracle データが必要か

スプレッドシートの挙動には、丸め境界、TEXT() のロケール固有の桁表現、DATEVALUE() の 2 桁年処理、空値の型変換、結合セルとスピル衝突の相互作用など、未文書の細部が多数あります。コミット済みのゴールデンデータ(tests/oracle/*/golden)はそれらをレビュー可能な形に固定し、回帰をデプロイ前、つまり PR の時点で検出できるようにします。

失敗をどう読むか

Oracle テスト失敗Formulon ≠ Excel 取得値誤った値か?はい → Formulon の不具合: エンジンを修正し、ゴールデンデータを追加Excel ビルドが変わったか?はい → プロファイル差分:再取得して記録NOW / RAND / ネットワークに依存?はい → 揮発性のゴールデンデータ: 入力固定で再取得、または volatile として記受け入れ済み差分理由 + last-verifiedbuild を記録Oracle テスト失敗Formulon ≠ Excel 取得値誤った値か?はい → Formulon の不具合: エンジンを修正し、ゴールデンデータを追加Excel ビルドが変わったか?はい → プロファイル差分: 再取得して記録NOW / RAND / ネットワークに依存?はい → 揮発性のゴールデンデータ: 入力固定で再取得、または volatile として記録受け入れ済み差分理由 + last-verified build を記録

通常、失敗は次のいずれかです。

種類意味典型的な対応
Formulon の不具合エンジンが誤った値を返したエンジンを修正し、回帰用のゴールデンデータを追加
プロファイル差分対象 Excel ビルドが変わったゴールデンデータを再取得し、変更を記録
揮発性のゴールデンデータ取得時に NOW / RAND / ネットワーク依存を含んでいた入力を制御して取り直す、またはそのゴールデンデータを volatile として記録
受け入れ済み差分意図的に Excel と異なる差分リストに理由と最後に確認した Excel ビルドを記録

データの提供

各自の Excel 環境で Oracle データ取得フローを実行し、得られたゴールデンデータを提供すると、検証できるロケールが増えていきます。同じワークブックを win-365-ja_JPmac-365-ja_JP など複数のプロファイルで取得すれば、エンジンが検証できる範囲も広がります。取得フローは Oracle データの提供 を参照してください。

数式と条件付き書式のプライマリプロファイルは mac-365-ja_JP です。ワークブックトラックのプライマリプロファイルは、製品版 Windows Microsoft 365 で検証した win-365-ja_JP です。

次に読むもの