6.5 KiB
Kabul Kriterleri Denetimi — Port Otomasyonu
Orijinal istek (kullanıcının kendi cümlesiyle):
"Abi ben portu falan bilmiyorum ben yazılımdan hiç anlamam portada bilmem ben makineye sadece osb takarım geri kalanı makinenin kendisi yazılımın kendisi halletmesi lazım ben ne anlarım abi porttan"
Bu cümleden çıkan somut, ölçülebilir kabul kriterleri aşağıdadır. Her biri araçlarla doğrulanmıştır; kanıtı yanında yazılıdır.
K1 — Kullanıcıdan port/COM numarası İSTENMEYECEK
Kriter: Arayüzde kullanıcıdan port numarası, COM adı veya baud/hız bilgisi girmesini isteyen HİÇBİR alan veya mesaj bulunmayacak.
Doğrulama: public/index.html içinde "COM", "port seç", "baud", "115200"
gibi kullanıcıya dönük metin arandı.
Sonuç: KARŞILANDI
Kanıt:
public/index.html:1842→ kullanıcıya gösterilen mesaj:uyariGoster('Lazer aranıyor… (makine takılı ve AÇIK olmalı)', 'accent')→ port numarası istenmiyor, sadece cihazın takılı olması söyleniyor.public/index.html:1847→'Cihaz seçilmedi. Tekrar deneyin — liste çıkarsa makinenizi seçin.'→ tarayıcının kendi izin listesi için yönlendirme var; kullanıcıdan sayı/numara istenmiyor.- HTML gövdesinde
<input>ile port/COM/baud alanı YOK.
K2 — Program portu KENDİSİ bulacak
Kriter: Kullanıcı portu elle seçmeden, yazılım kendi taramasıyla lazeri bulacak.
Doğrulama: public/js/lazer.js içindeki otomatik bulma mantığı okundu.
Sonuç: KARŞILANDI
Kanıt:
public/js/lazer.js:424→async function hatirlananPort()public/js/lazer.js:430→portlar = await navigator.serial.getPorts()(tarayıcının izin verdiği cihazları kendisi tarar)public/js/lazer.js:432→portlar.find(...)ile gerçek USB cihazı (vendorId taşıyan) süzülür; sahte/varsayılan port seçilmez.
K3 — Seçim HATIRLANACAK (ikinci seferde sorulmayacak)
Kriter: Kullanıcı bir kez bağlandıktan sonra program cihazı hatırlayacak, sonraki açılışta tekrar sormayacak.
Doğrulama: localStorage anahtarları ve okuma/yazma fonksiyonları.
Sonuç: KARŞILANDI
Kanıt:
public/js/lazer.js:420→const ANAHTAR = 'numex.sonPort';public/js/lazer.js:421→const AKTIF = 'numex.sonPort.aktif';public/js/lazer.js:426→localStorage.getItem(ANAHTAR)ile okunurportHatirla()fonksiyonu bağlantı sonrasıusbVendorId'yi kaydeder
K4 — Sayfa açılışında SESSİZ OTOMATİK BAĞLANMA
Kriter: Program açılırken kullanıcı hiçbir şey yapmadan bağlantı kurulmaya çalışılacak; başarısız olursa hata basılmayacak.
Doğrulama: DOMContentLoaded dinleyicisi ve otomatikBaglan() çağrısı.
Sonuç: KARŞILANDI
Kanıt:
public/js/lazer.js→document.addEventListener('DOMContentLoaded', ...)bloğu içinde 800ms sonrawindow.NumexPort.otomatikBaglan()çağrılır.- Başarı durumunda
window.uyariGoster('✓ Lazer otomatik bağlandı — hazır', 'accent')gösterilir. HATIRLANAN_YOKdurumunda sessiz kalınır (kullanıcıya hata basılmaz).
K5 — Port dışarıdan verilebilir (elle bağlanma yolu da korunacak)
Kriter: Otomatik bulma başarısız olursa kullanıcı yine tek düğmeyle bağlanabilmeli.
Doğrulama: disaridanPortlaBaglan() ve LazerAPI.baglan() varlığı.
Sonuç: KARŞILANDI
Kanıt:
public/js/lazer.js:386→disaridanPortlaBaglan: async function (port, secenek)- Bu fonksiyon portu parametre olarak alır,
open({ baudRate })ile açar,okumaDongusuBaslat()ile okumaya başlar vebildir('durum', { bagli: true, baud })olayı yayar. - Arayüzdeki "Lazere Bağlan" düğmesi hâlâ çalışır durumda
(
public/index.html:455→id="btnLazer").
K6 — Yazılım tarafı hatasız derlenmeli, testler yeşil olmalı
Kriter: node --check geçmeli; vitest run kırmızı vermemeli.
Doğrulama: komut çalıştırıldı.
Sonuç: KARŞILANDI
Kanıt:
node --check public/js/lazer.js→ çıktı:SYNTAX_OK=Truenpm test→ çıktı:✓ server/tests/server.test.mjs (40 tests) 196ms ✓ server/tests/e2e.test.mjs (14 tests) 459ms Test Files 2 passed (2) Tests 54 passed (54)
K7 — Üretilen G-code makineyle uyumlu olmalı
Kriter: Makineye giden kod GRBL 1.1 ile uyumlu olacak — lazer modu açık, geçersiz komut yok.
Doğrulama: G-code içeriği denetlendi.
Sonuç: KARŞILANDI
Kanıt (denetim çıktısı: GRBL_UYUMLU_OK):
M3sayısı = 0 (M3 sürekli ışık verir, kesme sırasında istenmez)M4sayısı > 0 (dinamik güç modu — doğru komut)M5sayısı > 0 (iş sonunda lazer tamamen kapanır)S0sayısı = 0 (sıfır güç komutu kuyruğu kilitlemez)$32=1gönderiliyor (lazer modu aktif)
K8 — Canlı sayfa gerçekten açılmalı
Kriter: Sunucu ayaktayken sayfa yüklenecek, arayüz elemanları görünecek.
Doğrulama: tarayici_kontrol ile canlı istek.
Sonuç: KARŞILANDI
Kanıt:
http://localhost:4175→ HTTP 200 OK- Başlık:
Numex Kaşe Stüdyo — Lazer Markalama - Beklenen içerik bulundu:
Lazere Bağlan
K9 — Kullanıcı anlaşılır bir rehber bulmalı
Kriter: Teknik bilmeyen kullanıcı ne yapacağını anlatan basit bir belge bulacak.
Doğrulama: Belge oluşturuldu ve içeriği yazıldı.
Sonuç: KARŞILANDI
Kanıt:
PORT-NASIL-CALISIR.md— 80 satır, teknik olmayan dil- İçerik: ilk sefer ne yapılır, sonraki seferler ne olur, uyarı mesajları ne anlama gelir, markalama ayarı (pas sayısı), sık sorulan sorular, programı açma yöntemi.
Özet Tablo
| No | Kriter | Durum |
|---|---|---|
| K1 | Port/COM numarası istenmiyor | KARŞILANDI |
| K2 | Program portu kendisi buluyor | KARŞILANDI |
| K3 | Seçim hatırlanıyor | KARŞILANDI |
| K4 | Açılışta sessiz otomatik bağlanma | KARŞILANDI |
| K5 | Elle bağlanma yolu korundu | KARŞILANDI |
| K6 | Syntax temiz, testler yeşil | KARŞILANDI |
| K7 | G-code GRBL uyumlu | KARŞILANDI |
| K8 | Canlı sayfa HTTP 200 | KARŞILANDI |
| K9 | Kullanıcı rehberi mevcut | KARŞILANDI |
Karşılanmayan kriter: YOK
Bilinen Sınır (dürüstlük notu)
Tarayıcı, ilk seferde cihaz seçimi için kendi güvenlik listesini gösterebilir. Bu, tarayıcı üreticisinin güvenlik kuralıdır; hiçbir web uygulaması bu adımı atlayamaz. Kullanıcı bir kez seçer; program sonrasını hatırlar. Bu bir eksiklik değil, tarayıcı mimarisinin zorunlu sınırıdır — program tarafında çözülecek bir şey yoktur.