Apakah perangkat lunak itu?
Perangkat lunak merupakan program komputer, prosedur, data, dan semua dokumentasi yang berhubungan dengan operasi pada sistem komputer. Kesimpulannya adalah bahwa perangkat lunak merupakan kumpulan dari object yang membentuk konfigurasi dimana didalamnyatermasukprogram, dokumen, dan data.
PTantangan dalam pembuatan perangkat lunak adalah membuat perangkat lunak yang memperbolehkan berbagai macam mesin untuk saling berkomunikasi melewati jaringan intranet dan internet, menciptakan arsitektur aplikasi yang sederhana namun canggih sesuai dengan kebutuhan pasar di era globalisasi, mendistribusikan source code sehingga pelanggan bisa membuat modifikasi lokal sesuai dengan kebutuhannya, serta menciptakan aplikasi yang menfasilitasi komunikasi dan distribusi produk secara masal dengan menggunakankonsepyangberkembang. Umumnya program yang telah kuno namun masih bernilai dalam bisnis, program ini harus tetap dijaga namun sering kali menimbulkan masalah karena program tersebut tidak didesain untuk berubah. Padahal program harus bisa beradaptasi dengan lingkungan dan teknologi baru, selalu bisa mengimplementasikan kebutuhan bisnis yang baru, bisa berkomunikasi dengan sistem yang modern, dan lain-lain. Untuk itu perlu software evolution yaitu suatu proses dimana program melakukan perubahan bentuk, beradaptasi dengan pasar, dan menurunkan karakteristik yang ada pada program pendahulunya. Namun perubahan sendiri juga mempunyai biaya yang mahal, biaya perubahan pada tahap development membutuhkan biaya 6 kali lebih mahal dibandingkan jika perubahan dilakukan pada tahap definisi, dan meningkat 60 sampai 100 kali lipat jika perubahan dilakukan setelah perangkat lunak tersebut dirilis.
Ada beberapa salah persepsi tentang perangkat lunak, dari sisi pelanggan berpandangan bahwa pernyataan umum tentang tujuan sudah cukup, dan melengkapi detilnya di kemudian hari, dalam kenyataannya pendefinisian kebutuhan yang salah dan kurang pada tahap awal pembuatan perangkat lunak merupakan sebab utama kualitas yang buruk dan penyelesaian perangkat lunak menjadi terlambat. Pandangan lainnya yang salah adalah pelanggan menganggap bahwa perubahan bisa diakomodasi dengan mudah karena perangkat lunak itu fleksible, padahal biaya yang dibutuhkan untuk perubahan semakin besar jika mendekati tahap akhir.
Dari sisi pengembang ada beberapa mitos yang perlu diluruskan, diantaranya adalah anggapan bahwa pekerjaan developer telah selesai setelah program ditulis dan berjalan, padahal 50% sampai 70% dari kerja developer terjadi ketika program dikirim ke pelanggan. Selain itu pandangan tentang perangkat lunak yang harus dikirim adalah program perlu diluruskan, bahwa yang dimaksud perangkat lunak didalamnya termasuk dokumentasi, dan data. Pada sisi manajemen pendapat bahwa menambah programmer ketika deadline sudah didepan mata bisa membantu mempercepat waktu pengerjaan, namun pendapat itu tidak sepenuhnya benar karena orang baru membutuhkan masa transisi yang bisa jadi merusak ritme kerja tim.
Pendekatan dalam hal pengembangan, pengoperasian, dan pengelolaan perangkat lunak disebut dengan software engineering (rekayasa perangkat lunak). Rekayasa perangkat lunak dimaksudkan untuk membuat perangkat lunak yang tepat dengan metode yang tepat, karena ketepatan perangkat lunak bisa dikelola. Ada 2 hal yang perlu dipertimbangkan dalam rekayasa perangkat lunak, produknya yaitu perangkat lunak serta prosesnya. Produk terdiri dari program, dokumen, dan data, sedangkan proses terdiri dari proses manajemen dan proses teknikal.
Produk dari perangkat lunak dipantau melewati beberapa tahap pengembangan (software development life cycle / SDLC). Contoh dari SDLC antara lain model waterfall, model V, model spiral, prototyping, dan lain-lain. Sedangkan proses manajemen dalam rekayasa perangkat lunak terdiri atas manajemen proyek, configuration management, dan Quality Assurance Management. Proses teknikal merupakan metode yang diaplikasikan pada tahap tertentu dalam pengembangan perangkat lunak, yang didalamnya termasuk metode analisis, metode desain, metode pemrograman, dan metode testing.
Perbedaan antara rekayasa perangkat lunak dan ilmu komputer adalah bahwa ilmu komputer berkonsentrasi pada teori dan dasar-dasar komputer, sedangkan rekayasa perangkat lunak berkonsentrasi pada praktik dalam pengembangan perangkat lunak yang tepat.