Piramida Pengujian NextPDF
Spec: ISO/IEC/IEEE 29119-4 ISO/IEC/IEEE 29119-4 Spec: ISO/IEC 25010 ISO/IEC 25010 Evidence: Test-backed PHPStan: Level 10
Sekilas pandang
Bagian berjudul “Sekilas pandang”NextPDF tidak hanya mengandalkan satu jenis pengujian. Ada lima tingkat, dan masing-masing menjawab pertanyaan berbeda tentang mesinnya. Alasannya: sebuah PDF dapat lolos uji unit, tetapi tetap menjadi berkas yang rusak secara struktural di disk. Halaman ini menjelaskan kelima tingkat tersebut beserta hal yang menjadi tanggung jawab masing-masing untuk dibuktikan.
Mengapa ini penting
Bagian berjudul “Mengapa ini penting”Sebuah mesin PDF memiliki ruang kegagalan yang luar biasa luas. Jalur kode yang sama dapat benar pada tingkat fungsi dan benar sebagai aliran bita, tetapi tetap menghasilkan berkas yang ditolak oleh pembaca yang patuh standar. Mesin itu juga dapat menghasilkan berkas yang dirender keliru secara halus hanya pada pemisah halaman. Jika mesin diuji hanya pada satu tingkat kerincian, keyakinan yang Anda peroleh juga hanya berlaku pada tingkat itu, bukan pada tingkat lain.
Standar menyatakan hal ini dengan jelas. Teknik perancangan pengujian berbasis spesifikasi dan berbasis struktur tidak saling menggantikan, dan strategi pengujian disarankan menggunakan lebih dari satu kriteria, dengan setidaknya satu kriteria fungsional dan satu kriteria struktural (ISO/IEC/IEEE 29119-4, Annex A). Satu tingkat saja bukan versi mini dari strategi yang baik. Itu adalah strategi yang berbeda, dan strategi yang tidak lengkap.
Versi singkat
Bagian berjudul “Versi singkat”NextPDF menata pengujiannya ke dalam lima tingkat, dari dasar hingga puncak:
- Unit — satu kelas atau fungsi, secara terisolasi. Dasar yang lebar.
- Integrasi — unit-unit yang berkolaborasi melintasi batas modul.
- Struktural — graf objek PDF, tabel referensi silang, dan trailer yang dihasilkan berbentuk baik dan patuh standar.
- Visual — halaman yang dirender sesuai dengan rujukan yang telah disetujui dalam toleransi yang dinyatakan.
- Golden — fikstur ujung-ke-ujung yang dipatok untuk menangkap pergeseran tak disengaja pada keluaran akhir. Inilah puncaknya.
Setiap tingkat membuktikan hal yang tidak dapat dibuktikan oleh tingkat di bawahnya. Tidak satu pun di antaranya sekadar hiasan. Bentuk piramida ini menyangkut kuantitas — banyak uji unit yang murah, lebih sedikit uji ujung-ke-ujung yang mahal — bukan tingkat kepentingan.
Bagaimana NextPDF menanganinya
Bagian berjudul “Bagaimana NextPDF menanganinya”Tingkat-tingkat ini nyata, bukan sekadar aspirasi. Konfigurasi PHPUnit dalam repositori mendeklarasikan masing-masing sebagai suite pengujian bernama yang dipetakan satu-ke-satu ke sebuah direktori. Karena itu, sebuah tingkat adalah target yang dapat dijalankan dengan test runner, bukan label pada slide. Suite yang akan familier bagi insinyur senior antara lain Unit, Integration, Golden, Snapshot, Reproducibility, Conformance, Standards, dan Performance, masing-masing dengan profil eksekusinya sendiri (isolasi, anggaran waktu, dan apakah dijalankan secara default dalam integrasi berkelanjutan).
Pemisahan itu disengaja. Tingkat dasar yang cepat (Unit) dijalankan pada setiap perubahan dengan anggaran satu detik per pengujian. Tingkat-tingkat yang lebih lambat dan peka terhadap lingkungan — rendering visual, konformansi penuh, performa — bersifat opsional (opt-in) atau dijalankan setiap malam. Hal ini menjaga jalur kerja umum tetap cepat dan deterministik tanpa mengorbankan pemeriksaan yang lebih mendalam. Pengetikan ketat (strict typing) menjadi landasan seluruh tumpukan. Mesin menjalankan analisis pada Spec: PHPStan, Level 10 PHPStan Level 10 dengan anggaran galat dikunci pada nol, sehingga satu kelas besar cacat bahkan tidak pernah sampai ke tahap pengujian.
- Tier 1 of 5 Unit Isolated behaviour of a single class or function; the broad base.
- Tier 2 of 5 Integration Collaborating units across a module boundary.
- Tier 3 of 5 Structural The emitted PDF object/xref structure is well-formed and conformant.
- Tier 4 of 5 Visual Rendered output matches an approved reference within tolerance.
- Tier 5 of 5 Golden End-to-end byte/lossless fixtures pinned as the contract; the apex.
Apa yang dikatakan bukti
Bagian berjudul “Apa yang dikatakan bukti”Evidence: Test-backed Kelima tingkat tersebut hadir sebagai suite pengujian PHPUnit yang dideklarasikan dalam konfigurasi mesin, masing-masing terikat pada direktori dan profil eksekusinya sendiri. Kosakata tingkat pada halaman ini adalah kosakata yang sama dengan yang digunakan infrastruktur pengujian.
Evidence: Standard-backed Alasan untuk memiliki lebih dari satu tingkat berakar pada Spec: ISO/IEC/IEEE 29119-4, Annex A ISO/IEC/IEEE 29119-4 Annex A : kriteria cakupan tidak semuanya saling berkaitan, dan sebuah strategi disarankan untuk menggabungkan teknik fungsional dan struktural. Yang terpenting, lampiran yang sama mencatat bahwa urutan subsumsi antara kriteria cakupan tidak memberi indikasi apa pun tentang kemampuan kriteria tersebut untuk mengungkap cacat — efektivitas pengujian (ISO/IEC/IEEE 29119-4, §C.2.4). “Lebih banyak cakupan” bukanlah klaim yang sama dengan “pengujian yang lebih baik”.
Evidence: Standard-backed Pilihan tentang properti mana yang akan dibuktikan dipetakan ke karakteristik kualitas produk Spec: ISO/IEC 25010 ISO/IEC 25010 : ketepatan fungsional (unit, integrasi), serta properti tingkat berkas yang membuat sebuah PDF benar-benar dapat digunakan di hilir (struktural, visual, golden). Model kualitas tersebut secara eksplisit menyatakan bahwa karakteristik yang berbeda penting dalam konteks penggunaan yang berbeda.
Contoh praktis
Bagian berjudul “Contoh praktis”Tingkat-tingkat ini dapat dipanggil dari skrip milik mesin itu sendiri. Perubahan pada satu pemformat (formatter) diverifikasi di dasar. Perubahan pada fasad dokumen diverifikasi lintas tingkat:
<?php
declare(strict_types=1);
// Tier 1 — Unit: one unit, isolated, fast.// composer test:unit → phpunit --testsuite Unit
// Tier 2 — Integration: collaborating units across a boundary.// composer test:integration → phpunit --testsuite Integration
// Tier 3 — Structural: the emitted PDF object graph is well-formed.// vendor/bin/phpunit --testsuite Conformance
// Tier 4/5 — Visual + Golden: rendered/serialized output vs a pinned// reference (golden is byte/structure-pinned, never auto-updated).// vendor/bin/phpunit --testsuite Golden
// A change to the document facade touches every API, so the routing// guidance escalates it from "unit only" to the full unit + integration// surface — the tier you run is a function of blast radius, not habit.Inti contoh ini adalah logika peruteannya, bukan perintah-perintahnya. Tingkat yang Anda jalankan dipilih berdasarkan apa yang dapat dirusak oleh perubahan tersebut. Infrastruktur menjadikan setiap tingkat sebagai target first-class yang dapat dijalankan secara terpisah.
Kesalahpahaman umum
Bagian berjudul “Kesalahpahaman umum”Piramida ini sering dibaca sebagai peringkat — uji unit di bawah karena paling tidak penting, uji ujung-ke-ujung di atas karena paling penting (atau sebaliknya). Keduanya keliru. Sumbu vertikalnya kira-kira menggambarkan biaya dan kuantitas: banyak uji unit yang cepat dan murah membentuk dasar yang lebar; semakin ke atas, jumlahnya semakin sedikit, lebih lambat, dan fidelitasnya lebih tinggi. Uji golden tidak “lebih baik” daripada uji unit. Ia menangkap jenis kegagalan yang berbeda, lebih lambat, lebih mahal, dan akan menjadi pengganti yang buruk bagi ribuan pemeriksaan cepat di bawahnya.
Kesalahpahaman kedua adalah bahwa angka cakupan yang tinggi berarti piramidanya kokoh. Tidak demikian. Cakupan mengukur eksekusi, bukan deteksi. Standar-standar tersebut secara eksplisit menolak menyamakan urutan cakupan dengan kemampuan menemukan cacat. Celah inilah yang hendak disingkap oleh keberadaan pengujian mutasi.
Batasan dan ruang lingkup
Bagian berjudul “Batasan dan ruang lingkup”Halaman ini menjelaskan bentuk dan maksud strategi tersebut, bukan hasilnya saat ini. Jumlah pengujian, persentase cakupan, dan skor mutasi sengaja tidak dicantumkan di sini. Semua itu adalah sinyal kualitas yang terus berubah, yang dihasilkan dari artefak integrasi berkelanjutan. Angka-angka terkini dipublikasikan bersama build. Jika dibekukan ke dalam prosa, semuanya akan menjadi usang tanpa terlihat. Satu-satunya angka yang dinyatakan — PHPStan Level 10 — adalah fakta konfigurasi yang stabil, dapat diverifikasi dalam konfigurasi analisis statis mesin, bukan pengukuran.
Nama tingkat adalah kosakata arsitektur yang stabil. Kumpulan suite yang persis beserta profil eksekusinya akan berkembang bersama mesin dan diatur oleh konfigurasi pengujian; konfigurasi itulah otoritasnya jika suatu saat berbeda dari penjelasan ini. Halaman ini tidak menyatakan tingkat kelulusan tertentu dan tidak membandingkan strategi ini dengan strategi pengujian pustaka mana pun.
Dokumen terkait
Bagian berjudul “Dokumen terkait”- Pengujian berkas golden — bagaimana tingkat puncak mematok keluaran rujukan dan menjaganya tetap dapat dipercaya.
- Pengujian mutasi, dijelaskan — mengapa angka cakupan tidak membuktikan bahwa pengujian pada tingkat-tingkat ini benar-benar bekerja.
- Tipe ketat, di mana-mana — bagaimana PHPStan Level 10 menyingkirkan satu kelas cacat sebelum tingkat mana pun dijalankan.
Glosarium
Bagian berjudul “Glosarium”- Tingkat pengujian — level strategi yang membuktikan satu jenis properti (misalnya, perilaku unit atau validitas struktural). NextPDF menggunakan lima.
- Uji struktural — pemeriksaan bahwa graf objek, tabel referensi silang, dan trailer dari PDF yang dihasilkan berbentuk baik dan patuh standar, bukan sekadar memeriksa nilai kembalian.
- Uji visual — pemeriksaan bahwa halaman yang dirender sesuai dengan citra rujukan yang telah disetujui dalam toleransi yang dinyatakan.
- Uji golden — pemeriksaan ujung-ke-ujung terhadap keluaran rujukan yang dipatok dan tidak pernah diperbarui secara otomatis; kontrak bahwa “keluaran tidak berubah”.
- Efektivitas pengujian — kemampuan sekumpulan pengujian untuk mengungkap cacat, yang oleh ISO/IEC/IEEE 29119-4 dibedakan dari cakupan. Catatan akronim: MSI (Mutation Score Indicator) didefinisikan pada halaman pengujian mutasi.
- PHPStan Level 10 — level analisis statis paling ketat; NextPDF menjalankannya dengan anggaran galat yang dikunci pada nol.