Audit — chords
Accords de guitare (Windows Phone + WPF desktop + lib) · multi-ère · actif 2015-02 → dernier commit 2026-03
Carte d’identité
| Ère | windows-phone (app principale) + WPF desktop + console + EF database — 8 projets |
| Projets | GuitarChords.Phone, Chords.UI.Desktop, GuitarChords.Controls, GuitarChords.Lib (+ 2 projets de tests xUnit), GuitarChords.ConsoleApp, GuitarChords.Server.Database |
| Taille | 128 fichiers C# · 5 117 LOC (305 code-behind, 4 812 logique) |
| Stack | MvvmLight, EntityFramework, xunit |
| Tests | Oui — la lib métier est testée en xUnit (cas unique du portefeuille) |
Surface UI
4 pages/fenêtres (MainPage, BasicPage, MainWindow, Window1) réparties sur deux UI mortes ou vieillissantes (WP, WPF classique). Une seule UI Blazor les remplace toutes.
APIs plateforme → web
| Cluster | Équivalent |
|---|---|
| System.Windows (29) + Windows.UI (28) | Composants Razor (couvert par la réécriture) |
| Windows.Media (6) | Lecture des accords → <audio> / Web Audio API via JS interop — 2 j (synergie : repo WebAudioInterop existant) |
| Windows.Storage (2) | localStorage — 0,5 j |
| Windows.ApplicationModel (3) | PWA — 1 j |
Extractibilité
94 % du code (4 812 / 5 117 LOC) : le domaine musical (GuitarChords.Lib — accords, doigtés, théorie) est testé et portable tel quel. La base EF se réutilise côté serveur ou s’exporte en JSON statique.
Effort
3 + 4 × 1,5 + 3,5 = 12,5 j ≈ 13 j (tests présents : pas de majoration) → fourchette 9–17 j
Cible recommandée : Blazor WASM PWA mobile-first
L’héritière naturelle de l’app Windows Phone : installable sur mobile, hors-ligne, diagrammes d’accords en SVG, audio via Web Audio. Synergie directe avec l’écosystème musical existant (OpenJam, midiminuit, MusicTheory).
Risques & coût de l’inaction
- Windows Phone est mort depuis 2017 : l’app n’a plus aucun utilisateur possible ; la lib testée — l’actif — dort.
- Trois UI à maintenir conceptuellement (WP, WPF, console) → une seule cible web les remplace.
✅ Résultat (migration exécutée le 2026-07-22, chronométrée : 18 min)
En ligne : https://phmatray.github.io/chords/ — 17 qualités × 12 fondamentales × 33 accordages.
- 3 065 LOC portées verbatim (102 fichiers, namespaces conservés, 0 modifiée) ; l’audit « 94 % portable » tenu.
- Archéologie : 2 fichiers référencés par le csproj de 2015 jamais committés — le repo ne compilait plus depuis l’origine ; reconstruits (36 LOC) et marqués.
- Bug d’épellation de 11 ans corrigé sans toucher à la lib : les 12 tests historiques des tonalités bémolisées, jamais verts, passent via le wrapper
EnharmonicSpeller; originaux en skip documenté. - 34 tests verts, build 0/0, code nouveau couvert à 94–100 %, CI + déploiement Pages livrés, rapport généré par
scripts/report-dashboard.py. - 18 minutes au lieu des 13 j ±30 % estimés à la main : le process industrialisé (2e passage) écrase l’estimation de mutualisation.