10개국 96개 세일링 클럽의 75,693건의 실제 Sailwave 결과에 대한 Flying Start 채점 엔진의 독립적 비교.
75,693건의 개별 비교에 걸쳐 Flying Start 채점 엔진은 Sailwave와 99% 일치율로 일치합니다. 채점 버그는 발견되지 않았습니다. 모든 불일치는 테스트 데이터 품질 또는 결과에 영향을 미치지 않는 사소한 반올림 차이로 설명됩니다.
Sailwave 결과 데이터를 가져와 Flying Start 채점 엔진을 통해 실행하고 모든 계산된 값을 Sailwave가 생성한 값과 비교하는 자동화된 테스트 하네스를 작성했습니다. 테스트는 레이스당 선수당 세 가지를 확인합니다:
비교는 두 가지 검증 모드를 사용합니다:
소스 데이터에 경과 시간과 핸디캡 등급이 포함된 경우, 적절한 공식(PY, IRC, YTC 등)을 사용하여 수정 시간을 처음부터 재계산하고 Sailwave의 수정 시간과 비교합니다. 이는 전체 파이프라인을 검증합니다: 경과 → 수정 → 순위 → 점수.
소스 데이터에 순위와 점수만 포함된 경우(시리즈 요약 페이지에서 일반적), 순위-점수 매핑이 올바른 채점 시스템 규칙을 따르는지 확인합니다. 이는 패널티 점수 배정, 보너스 점수 계산, SCP 채점을 검증합니다.
다음을 체계적으로 크롤링하는 스크래퍼를 작성했습니다 Sailwave 공개 결과 디렉터리, 전 세계 세일링 클럽의 공개된 결과를 호스팅합니다. 각 클럽에 대해 최대 40개의 결과 페이지를 가져와 선수 데이터, 레이스 결과, 패널티 코드를 추출한 후 검증을 위한 구조화된 형식으로 변환했습니다.
6개의 Falmouth Sailing Week 2025 선단에 대해 전체 경과 시간과 수정 시간이 포함된 개별 레이스 페이지를 수동으로 스크래핑하여 심층 수정 시간 검증이 가능했습니다.
| 출처 | 파일 | 레이스 | 비교 건수 | 일치 | 주요 | 경미 |
|---|---|---|---|---|---|---|
| 스크래핑됨 (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 (Racing Rules of Sailing) 기능을 구현합니다. 테스트 중 모두 실행되었습니다:
| 기능 | 적용 범위 |
|---|---|
| PY 핸디캡 (영국 딩기) | 60개 이상의 영국 클럽에서 테스트됨 |
| IRC 핸디캡 (국제 요트) | Falmouth Week IRC1/2/3 선단으로 테스트됨 |
| YTC 핸디캡 (영국 크루저) | Falmouth Week YTCE/YTCQ 선단으로 테스트됨 |
| Low Point 채점 | 4,144개 모든 레이스에서 테스트됨 |
| 보너스 포인트 채점 | 클럽이 사용하는 곳에서 테스트됨 |
| DNS / DNF / DNC 패널티 | 모든 클럽에서 테스트됨 |
| OCS / DSQ / RET / UFD / BFD | 결과에 나타나는 곳에서 테스트됨 |
| RRS Rule A5.3 (선택적 패널티 채점) | 모든 테스트 실행의 기본값 — 구역 참가 보트 수 + 1 대 참가 보트 수 + 1 |
| SCP (채점 패널티) | 클럽이 비율 패널티를 적용하는 곳에서 테스트됨 |
| 폐기 프로필 | 시리즈 순위 비교를 통해 테스트됨 |
| RRS Appendix A8 동점 처리 | 동점 선단에서 순위 비교를 통해 테스트됨 |
지리적으로나 조직적으로 넓은 범위에서 의도적으로 테스트했습니다. Solent에서의 클럽 레이싱은 웨일스 저수지에서의 수요일 저녁 레이싱이나 호주 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).
Bay 코스의 6개 선단 — IRC 1, IRC 2, IRC 3, YTC Cruiser, YTC Quarter-Tonner, Firebird — 다음에 호스팅된 개별 레이스 페이지에서 스크래핑된 전체 경과 시간 및 수정 시간 포함 sailwave.com/results/FSW.
75,693건의 비교 중 1,090건이 정확히 일치하지 않았습니다. 다음은 모든 불일치 범주, 원인, 그리고 중요성 여부입니다.
세 가지 모두 채점 엔진 버그가 아닌 테스트 데이터의 데이터 품질 문제입니다.
불일치: 점수 — 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는 수요일에 시리즈 나머지(1080)와 다른 YTC 등급(1054)으로 항해했습니다. 우리 XML은 모든 레이스에 1080을 사용했습니다. 수정 시간 공식은 elapsed × 1000 ÷ rating, 따라서 다른 등급 = 다른 수정 시간입니다.
판정: 두 공식 모두 올바릅니다. 차이는 계산이 아닌 핸디캡 데이터에 있습니다.
1,087건의 경미한 불일치 모두 두 가지 범주에 속합니다:
중간 반올림으로 인한 Sailwave와 Flying Start 간의 1~3초 차이. 예를 들어 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 버전은 내부적으로 약간 다른 부동소수점 정밀도를 사용하는 것 같습니다.
영향: 무시할 수 있습니다. 이러한 소수 차이는 두 완주 순위 사이의 간격보다 작기 때문에 순위를 절대 바꾸지 않습니다.
테스트 중 Sailwave의 동작이 클럽에 따라 일관되지 않은 한 가지 영역을 발견했습니다. 이것이 버그라고 주장하는 것이 아닙니다 — 의도적인 구성 옵션일 수 있습니다 — 하지만 Sailwave에서 마이그레이션하는 경기 임원을 위해 문서화할 가치가 있습니다.
Sailwave는 사용합니다 TLE 를 제한 시간 내에 완주하지 못한 보트의 패널티 코드로. 이 코드는 Racing Rules of Sailing (RRS)에 나타나지 않습니다. RRS 동등 코드는 DNF (Did Not Finish)입니다.
Sailwave가 다른 클럽에 걸쳐 TLE를 일관되지 않게 처리한다는 것을 발견했습니다:
starters + 1 (DNF와 동일)last finisher's position + 1Flying Start는 TLE를 DNF와 동일하게 처리합니다 (starters + 1), 이는 가장 일반적인 Sailwave 동작과 일치하며 출발했지만 완주하지 못한 보트는 다음을 받는다는 RRS 원칙과 일치합니다 starters + 1 점수.
이 불일치는 경미한 불일치의 일부를 차지합니다. 클럽이 특정 채점 규칙으로 TLE를 사용한다면 알려주세요 그러면 Flying Start가 귀하의 관행과 일치하도록 하겠습니다.
4,144개의 레이스를 테스트했음에도 불구하고, Sailwave가 RRS 규칙에 따라 잘못된 결과를 생성하는 경우를 발견하지 못했습니다. 모든 불일치는 반올림, 데이터 품질, 또는 위에서 설명한 TLE 모호성으로 설명됩니다. Sailwave는 20년 이상 업계 표준이었으며 그 이유가 있습니다 — 수학적으로 올바릅니다.
또한 비교의 대부분(75,693건 중 74,391건)이 시리즈 요약 페이지의 점수 전용 비교라는 점에 주목합니다. 심층 수정 시간 검증은 Falmouth Week의 1,302건의 비교를 다룹니다. 이 검증을 강화하기 위해 경과 시간과 수정 시간이 공개된 더 많은 이벤트에 대한 접근을 환영합니다.
테스트 하네스, 스크래핑된 데이터, 전체 결과는 전용 오픈 소스 저장소에 공개되어 있습니다:
github.com/IDSTUK/SW-FS-Scoring-Engine-Verification
채점 엔진 소스 • 검증기 • 테스트 하네스 • 1,266개 스크래핑된 데이터 소스
| 경로 | 설명 |
|---|---|
| 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와 제휴 관계가 없습니다.