10カ国96のセーリングクラブから75,693件の実際のSailwave結果と照合したFlying Startスコアリングエンジンの独立比較。
75,693件の個別比較にわたり、Flying Startスコアリングエンジンは 99%の一致率でSailwaveと一致しています。スコアリングのバグはゼロです。すべての不一致はテストデータの品質、または結果に影響を与えない軽微な丸め誤差によって説明されます。
Sailwaveの結果データを取得し、Flying Startのスコアリングエンジンを通じて処理し、計算されたすべての値をSailwaveが生成した値と比較する自動テストハーネスを作成しました。テストはレースごと、競技者ごとに3つの項目を確認します:
比較には2つの検証モードを使用しています:
ソースデータに経過時間とハンディキャップレーティングが含まれる場合、適切な計算式(PY、IRC、YTCなど)を使用して修正タイムをゼロから再計算し、Sailwaveの修正タイムと比較します。これによりパイプライン全体を検証します:経過 → 修正 → 順位 → ポイント。
ソースデータに順位とポイントのみが含まれる場合(シリーズサマリーページで一般的)、順位からポイントへのマッピングが正しいスコアリングシステムの規則に従っているかを検証します。これによりペナルティポイントの割り当て、ボーナスポイントの計算、SCPスコアリングを検証します。
体系的に Sailwave公開結果ディレクトリをクロールするスクレーパーを作成しました。世界中のセーリングクラブの公開結果をホストしているこのディレクトリから、各クラブの最大40ページの結果を取得し、競技者データ、レース結果、ペナルティコードを抽出し、検証用の構造化フォーマットに変換しました。
Falmouth Sailing Week 2025の6つのフリートについては、完全な経過時間と修正タイムを含む個別のレースページを手動でスクレイピングし、修正タイムの詳細検証を可能にしました。
| ソース | ファイル数 | レース | 比較件数 | 一致 | 重大 | 軽微 |
|---|---|---|---|---|---|---|
| スクレイピング(96クラブ) | 655 | 4,088 | 74,391 | 99% | 0 | 1,068 |
| Falmouth Week(詳細) | 6 | 56 | 1,302 | 99% | 3 | 19 |
| 合計 | 661 | 4,144 | 75,693 | 99% | 3 | 1,087 |
エンジンロジックによる重大な不一致:0件。 3件の重大な不一致はすべてテストデータのデータ品質の問題です(以下で詳しく説明)。
スコアリングエンジンは以下のRRS(セーリング競技規則)機能を実装しています。テスト中にすべてが確認されました:
| 機能 | カバレッジ |
|---|---|
| PYハンディキャップ(英国ディンギー) | 60以上の英国クラブでテスト済み |
| IRCハンディキャップ(国際ヨット) | Falmouth Week IRC1/2/3フリートでテスト済み |
| YTCハンディキャップ(英国クルーザー) | Falmouth Week YTCE/YTCQフリートでテスト済み |
| ローポイントスコアリング | 全4,144レースでテスト済み |
| ボーナスポイントスコアリング | クラブが使用している場合にテスト済み |
| DNS / DNF / DNCペナルティ | すべてのクラブでテスト済み |
| OCS / DSQ / RET / UFD / BFD | 結果に現れる場合にテスト済み |
| RRS規則A5.3(オプションのペナルティスコアリング) | すべてのテスト実行のデフォルト — エリアのボート数 + 1 vs エントリー数 + 1 |
| SCP(スコアリングペナルティ) | クラブがパーセンテージペナルティを適用する場合にテスト済み |
| 破棄プロファイル | シリーズ順位比較によりテスト済み |
| RRS附属書A8同点決定 | 同点フリートでの順位比較によりテスト済み |
意図的に広範な地理的・組織的範囲でテストしました。ソレントのクラブレースはウェールズの貯水池での水曜夕方レースやオーストラリアのO'pen Skiff選手権とは異なる特性を持っています。スコアリングエンジンはそのすべてに対応できなければなりません。
Hayling Island SC、Parkstone YC、Poole YC、Warsash SC、Torbay SC、Cardiff Bay YC、Delph SC、Mengeham Rythe SC、Burghfield SC、Oxford SC、Chichester YC、Brancaster Staithe SC、Bexhill SC、Salcombe YC、Paignton SC、Brixham YC、Medway YC、Bartley SC、Northampton SC、Largo Bay SC、RCYC、Ranelagh SC、Twickenham YC、Cambridge YC、Ogston SC、Rutland SC、Bala SC、Maylandsea Bay SC、Royal Lymington YC、Flushing SC、Chase SC、Chipstead SC、Rock SC、BCYC、YDSC、および多数のクラス協会(Solo、Osprey、Fireball、29er、ILCA UK、ITCA、UKWA、Redwings)。
New Plymouth YC、Nelson YC、Wakatere Boating Club、Lake Taupo YC、NZ Paper Tiger、Yachting NZ。
Manly YC、Perth SC、Maroochy、Hobie WA、Lake Cootharaba SC、Open Skiffクラス(全国・州選手権)。
南アフリカ(Bloemfontein YC)、スウェーデン(KSSS)、ハンガリー(hunresults経由の結果)、ポルトガル、アメリカ(KHYC — King Harbor YC)、カナダ(Whitby YC)。
ベイコースの6つのフリート(IRC 1、IRC 2、IRC 3、YTCクルーザー、YTC Quarter-Tonner、Firebird)— 完全な経過時間と修正タイムを各レースページからスクレイピング。ページはこちらでホスト: sailwave.com/results/FSW.
75,693件の比較のうち、1,090件が完全に一致しませんでした。不一致のすべてのカテゴリー、原因、影響の有無を以下に示します。
3件すべてはスコアリングエンジンのバグではなく、テストデータのデータ品質の問題です。
不一致: ポイント — Sailwaveは11、Flying Startは8。
根本原因: 水曜日のChampagne Raceには通常のシリーズにない3艇のゲストボート(Autarky、Infinity、Passion)が参加していました。スクレイピングしたXMLに含まれていなかったため、フリートサイズが13ではなく10になりました。当社のデータではPercyは10艇中8位でしたが、Sailwaveでは13艇中11位でした。
評定: 両方のスコアリングエンジンは正しいです。違いは計算ではなく入力データにあります。
不一致: ポイント — Sailwaveは12、Flying Startは9。
根本原因: 上記と同じです。ゲストボートがSailwaveのデータのフリートサイズを膨らませました。
不一致: 修正タイム — Sailwaveは1:10:13、Flying Startは1:08:32。
根本原因: Tahiniは水曜日(1054)にシリーズの他のレース(1080)とは異なるYTCレーティングで出走しました。当社のXMLはすべてのレースに1080を使用しました。修正タイム計算式は elapsed × 1000 ÷ ratingのため、異なるレーティング = 異なる修正タイムになります。
評定: 両方の計算式は正しいです。違いは計算ではなくハンディキャップデータにあります。
1,087件の軽微な不一致はすべて2つのカテゴリーに分類されます:
SailwaveとFlying Startの1〜3秒の差異で、Sailwaveの計算チェーンにおける中間丸めが原因です。例えば、IRC修正タイム = 経過 × TCC。経過 = 3,428秒、TCC = 1.072の場合:
3428 × 1.072 = 3674.816 → 3675s影響: なし。修正タイムの1〜3秒の差は決してフィニッシュ順位を変えません — ボートは通常数分差で分かれています。
Sailwaveのボーナスポイントの小数スコアまたはSCPパーセンテージ計算がわずかに異なる場合の0.1〜0.3ポイントの差異です。例えば、ボーナスポイントスコアリングの3位は正確に5.7であるべきですが、一部のSailwaveバージョンでは内部的にわずかに異なる浮動小数点精度を使用しているようです。
影響: 無視できる程度。これらの小数の差は、どの2つのフィニッシュ順位の差よりも小さいため、順位を変えることはありません。
テスト中に、Sailwaveの動作がクラブ間で一貫しない領域が1つ見つかりました。これがバグだと主張しているわけではありません — 意図的な設定オプションである可能性があります — しかし、Sailwaveから移行するレースオフィサーのために記録する価値があります。
Sailwaveは TLE を制限時間内にフィニッシュしなかったボートのペナルティコードとして使用します。このコードはセーリング競技規則(RRS)には存在しません。RRSの同等コードはDNF(フィニッシュせず)です。
Sailwaveが異なるクラブ間でTLEを一貫性なく扱っていることが分かりました:
starters + 1 (DNFと同じ)としてスコア計算last finisher's position + 1Flying StartはTLEをDNFと同等(starters + 1)として扱います。これは最も一般的なSailwaveの動作に一致し、スタートしたがフィニッシュしなかったボートが starters + 1 ポイントを受け取るというRRSの原則に沿っています。
この一貫性のなさが軽微な不一致の一部を占めています。クラブが特定のスコアリング規則でTLEを使用している場合は、 お知らせください 。Flying Startがクラブの慣行に合致するようにします。
4,144レースをテストしましたが、SailwaveがRRS規則に従って誤った結果を生成するケースは見つかりませんでした。すべての不一致は丸め、データ品質、または上記のTLEの曖昧さで説明できます。Sailwaveが20年以上業界標準であり続けているのには理由があります — 数学を正しく処理しているからです。
比較の大部分(75,693件中74,391件)はシリーズサマリーページからのポイントのみの比較であることも指摘しておきます。修正タイムの詳細検証はFalmouth Weekからの1,302件の比較をカバーしています。この検証を強化するために、経過時間と修正タイムが公開されているより多くのイベントへのアクセスを歓迎します。
テストハーネス、スクレイピングデータ、完全な結果が専用のオープンソースリポジトリに公開されています:
| パス | 説明 |
|---|---|
| scripts/soak-test.ts | CLIテストランナー — XMLを解析し、検証を実行し、レポートを生成します |
| scripts/scrape-sailwave.ts | Sailwave HTML結果ページ用ウェブスクレーパー |
| verifier/sailwaveVerifier.ts | 比較エンジン — 修正タイム、順位、ポイントを再計算します |
| scoring-engine/ | スコアリングエンジン本体 — raceScorer、seriesScorer、handicapCalculator、tieBreaker |
| data/sources.json | 1,266のスクレイピングソースURLの完全ログ |
| data/soak-results.json | ファイルごとの一致率と不一致の詳細を含む完全なテスト結果 |
| REPORT.md | 詳細な調査結果レポート |
スクレーパーは以前にスクレイピングされたURLを尊重します( sources.jsonで追跡)。新しいページのみを取得します。テストスイート全体はスクレイピングデータで60秒以内に実行されます。
すべてのSailwave結果データは公開されている結果から取得しました: sailwave.com/results。SailwaveはJon Mayallの商標です。Flying StartはSailwaveと提携していません。