Sudah ada jawaban yang sangat baik oleh Aaronaught, tetapi karena ada jawaban lain, sekarang dihapus, yang benar-benar salah tentang apa persyaratan non-fungsional, saya pikir akan berguna untuk menambahkan beberapa penjelasan untuk menghindari kesalahan tentang apa yang persyaratan non-fungsional adalah.
Persyaratan non-fungsional adalah "kualitas atau properti yang harus dimiliki produk" ¹. James Taylor mengatakan bahwa persyaratan non-fungsional "[...] adalah [tetap] persyaratan, dan itu penting bagi pelanggan — kadang-kadang bahkan lebih penting daripada persyaratan fungsional" . Dia kemudian memberikan dua contoh: logo produk, dan keakuratan dan keandalan peralatan. Kedua contoh itu menunjukkan dengan sangat baik bahwa:
- Persyaratan non-fungsional bukan jibber-jabber pemasaran seperti: "Internet penting saat ini dan kami ingin memiliki situs web".
- Persyaratan non-fungsional menjadi perhatian pelanggan, karena mereka dapat sangat mempengaruhi produktivitas dan kemampuan itu sendiri untuk menggunakan produk.
- Persyaratan non-fungsional sepenuhnya objektif.
Poin terakhir sangat penting. Jika persyaratan bersifat subjektif, maka tidak ada hubungannya dalam daftar persyaratan. Tidak mungkin membangun tes validasi dari sesuatu yang subjektif . Satu-satunya tujuan dari daftar persyaratan adalah untuk menyebutkan harapan pelanggan yang tidak ambigu. "Saya ingin kotak ini berwarna merah" adalah persyaratan. "Saya ingin kotak ini memiliki warna yang bagus" adalah keinginan yang membutuhkan penjelasan.
Ingat bahwa daftar persyaratan seperti kontrak (dan dalam kebanyakan kasus adalah bagian dari kontrak). Itu ditandatangani oleh pelanggan dan perusahaan pengembangan, dan dalam kasus litigasi, itu akan digunakan secara legal untuk menentukan apakah Anda telah melakukan pekerjaan Anda dengan benar. Bagaimana jika saya memesan produk perangkat lunak untuk Anda, tentukan bahwa "produk itu harus hebat", dan menolak untuk membayar ketika produk itu dibuat, karena bagi saya, apa yang sebenarnya Anda lakukan bukanlah produk yang hebat ?
Jadi, mari kita lihat beberapa contoh.
1. Produk perangkat lunak responsif kepada pengguna akhir.
Ini bukan persyaratan. Bukan fungsional. Bukan yang non-fungsional. Itu hanya bukan keharusan. Sama sekali. Ini memiliki nilai nol. Anda tidak dapat memeriksa apakah sistem perangkat lunak memenuhi persyaratan ini selama pengujian validasi. Baik Anda - departemen QA, maupun pelanggan.
2. Memuat ulang statistik pengguna melakukan 90% dari waktu di bawah 100 ms. ketika diuji pada mesin dengan kinerja yang ditentukan dalam lampiran G bagian 2 dan beban di bawah 10% untuk CPU, di bawah 50% untuk memori dan tidak ada operasi disk R / W aktif.
Itu adalah persyaratan. Jika lampiran G bagian 2 cukup tepat, saya dapat membawa mesin dengan perangkat keras yang sama dan melakukan tes validasi di departemen QA, dan saya akan selalu mendapatkan hasil biner: lulus atau gagal.
Apakah ini persyaratan fungsional? Tidak. Tidak menjelaskan apa yang harus dilakukan sistem. Mungkin ada persyaratan fungsional sebelumnya, yang menyatakan bahwa aplikasi perangkat lunak harus dapat memuat ulang statistik pengguna.
Apakah ini persyaratan non-fungsional? Ini. Ini menentukan properti yang harus dimiliki suatu produk, yaitu waktu respons maksimum / rata-rata, berdasarkan ambang batas persentase.
3. Aplikasi ini ditulis dalam C #.
Apakah ini persyaratan? Kami tidak benar-benar tahu tanpa konteks. Mungkin keinginan pengembang utama, yang ingin, dengan memasukkan persyaratan ini, untuk menghindari kemudian diskusi dengan rekan-rekannya tentang bahasa yang akan digunakan. Mungkin juga persyaratan berdasarkan perangkat keras / lunak, warisan atau elemen kompatibilitas. Kami tidak tahu.
4. C # basis kode produk mengikuti Microsoft Minimum Recommended Rules dan Microsoft Globalization Rules.
Ini hal yang aneh. Secara pribadi, saya lebih suka tidak menyebutnya sebagai persyaratan, dan memasukkannya ke dalam dokumen terpisah yang menetapkan standar dan praktik terbaik.
5. Jendela utama aplikasi memiliki perbatasan 10px biru (# 00f) dengan lingkaran diisi merah muda (#fcc), lingkaran-lingkaran itu ditempatkan di tepi bagian dalam perbatasan dan berdiameter 3px, dipisahkan oleh 20px satu sama lain.
Ini adalah persyaratan, dan yang non-fungsional. Ini menentukan sesuatu yang dapat kami uji selama pengujian validasi, dan itu menentukan properti produk, bukan apa yang dimaksudkan untuk dilakukan produk.
6. Sistem pelacakan kendaraan mengukur kecepatan dengan ketelitian ± 0,016 mph.
Juga persyaratan non-fungsional. Ini memberikan ambang batas terukur dari presisi sistem. Itu tidak memberi tahu apa yang harus dilakukan sistem, tetapi mengatakan seberapa tepat kerjanya. Tapi tunggu? Ini memberi tahu bahwa sistem pelacakan kendaraan mengukur kecepatan, bukan? Jadi itu persyaratan fungsional juga? Ya, tidak, karena kita aksen pada ketepatan pengukuran, bukan pada fakta bahwa pengukuran dilakukan.
7. Sistem pelacakan kendaraan mengukur kecepatan kendaraan.
Sekarang ini persyaratan fungsional. Tidak tahu bagaimana sistem bekerja, tetapi apa yang dilakukannya. Melalui persyaratan fungsional, kita dapat belajar bahwa sistem pelacakan kendaraan mengukur kecepatan, daya baterai, tekanan Saya tidak tahu apa dan apakah lampu menyala atau tidak.
8. Halaman situs web membutuhkan 850 ms. untuk memuat.
Ini bukan persyaratan. Mencoba menjadi satu, tetapi sama sekali tidak valid. Bagaimana Anda akan menghargai ini? Halaman apa? Semua? Diuji melalui jaringan 1Gbps lokal pada mesin klien quad-core dan server delapan-core dengan SSD yang digunakan sebesar 2%, atau melalui modem dari laptop tua dan jelek saat situs web di-host oleh server kecil yang digunakan sebesar 99% ? Apa yang dimaksud dengan "memuat"? Apakah itu berarti mengunduh halaman? Mengunduh dan menampilkannya? Mengirim permintaan POST dengan beberapa data besar, lalu memuat respons dan menampilkannya?
Untuk menyimpulkan, persyaratan non-fungsional selalu merupakan persyaratan, yang berarti persyaratan non-fungsional menggambarkan sesuatu yang benar-benar objektif dan dapat diperiksa melalui tes validasi otomatis atau manual, tetapi alih-alih memberi tahu apa yang dilakukan sistem, itu menjelaskan bagaimana sistem sedang melakukan sesuatu atau bagaimana sistem itu sendiri .
¹ Mengelola Proyek Teknologi Informasi: Menerapkan Strategi Manajemen Proyek untuk Inisiatif Perangkat Lunak, Perangkat Keras, dan Integrasi, James Taylor, ISBN: 0814408117.