Tolong jelaskan mengenai Spesifikasi kebutuhan perangkat lunak

Spesifikasi Kebutuhan Perangkat Lunak (bahasa Inggris: Software Requirements Specification) adalah dokumen yang dibuat ketika deskripsi detail dari semua aspek perangkat lunak yang akan dibangun terspesifikasi sebelum proyek dimulai. Perlu dicatat bahwa SKPL formal tidak harus dalam bentuk tulisan. Namun, ketika perangkat lunak akan dikembangkan oleh pihak ketiga, ketika kurangnya spesifikasi akan membuat masalah kritikal dalam bisnis, atau ketika sistem sangat kompleks atau business critical, SKPL harus dijustifikasi.

SKPL adalah pernyataan resmi tentang apa yang harus diterapkan oleh pengembang sistem. SKPL harus mencakup kebutuhan pengguna untuk suatu sistem dan spesifikasi terperinci dari kebutuhan sistem. Terkadang, kebutuhan pengguna dan sistem diintegrasikan ke dalam satu deskripsi. Dalam kasus lain, kebutuhan pengguna didefinisikan dalam pengantar spesifikasi kebutuhan sistem. Jika ada sejumlah besar kebutuhan, kebutuhan sistem terperinci dapat disajikan dalam dokumen terpisah. SKPL sangat penting ketika pihak ketiga mengembangkan sistem perangkat lunak. Namun, metode agile software development berpendapat bahwa kebutuhan berubah begitu cepat sehingga SKPL sudah kedaluwarsa begitu ditulis, sehingga sebagian besar upaya sia-sia. Daripada dokumen formal, pendekatan seperti Extreme Programming  mengumpulkan kebutuhan pengguna secara bertahap dan menuliskannya pada kartu (CRC) sebagai user stories. Pengguna kemudian memprioritaskan kebutuhan untuk implementasi dalam rilis sistem selanjutnya. Untuk sistem bisnis di mana kebutuhannya tidak stabil, pendekatan ini baik untuk digunakan. Namun, tetap lebih baik lagi untuk menulis dokumen pendukung singkat yang mendefinisikan bisnis dan kebutuhan ketergantungan untuk sistem karena hal yang mudah untuk melupakan kebutuhan yang berlaku untuk sistem secara keseluruhan ketika berfokus pada kebutuhan fungsional untuk rilis sistem berikutnya.

Spesifikasi kebutuhan perangkat lunak menetapkan dasar perjanjian antara pelanggan dan pengembang tentang bagaimana produk perangkat lunak harus berfungsi (dalam proyek yang digerakkan oleh pasar, peran ini dapat dimainkan oleh divisi pemasaran dan pengembangan). Spesifikasi kebutuhan perangkat lunak adalah penilaian kebutuhan yang ketat sebelum tahap desain sistem yang lebih spesifik, dan tujuannya adalah untuk mengurangi desain ulang nanti. Ini juga harus memberikan dasar yang realistis untuk memperkirakan biaya, risiko, dan jadwal produk. Bila digunakan dengan tepat, spesifikasi kebutuhan perangkat lunak dapat membantu mencegah kegagalan proyek perangkat lunak.