Perangkat lunak saat ini memiliki peran ganda sebagai produk dan sarana untuk mengirimkan produk. Sebagai produk, perangkat lunak memiliki potensi komputasi yang bergantung pada perangkat keras komputer atau jaringan komputer yang dapat diakses melalui perangkat keras lokal seperti ponsel atau komputer mainframe. Sebagai transformator informasi, perangkat lunak dapat menghasilkan, mengelola, memperoleh, memodifikasi, menampilkan, atau mengirimkan informasi dari berbagai sumber independen, termasuk presentasi multimedia yang kompleks. Sebagai sarana untuk mengirimkan produk, perangkat lunak berfungsi sebagai dasar untuk pengendalian komputer (sistem operasi), komunikasi informasi (jaringan), dan pembuatan serta pengendalian program lain (alat dan lingkungan perangkat lunak).
Perangkat lunak memberikan kontribusi paling penting dalam hal informasi pada zaman kita saat ini. Perangkat lunak ini dapat mengubah data pribadi seperti transaksi keuangan individu agar data tersebut lebih bermanfaat dalam konteks lokal. Selain itu, perangkat lunak juga dapat mengelola informasi bisnis untuk meningkatkan daya saing. Selain itu, perangkat lunak menyediakan akses ke jaringan informasi di seluruh dunia seperti Internet, serta menyediakan sarana untuk memperoleh informasi dalam berbagai bentuknya.
Dalam setengah abad terakhir, peran perangkat lunak komputer telah mengalami perubahan yang signifikan. Perkembangan pesat pada kinerja perangkat keras, perubahan besar dalam arsitektur komputasi, meningkatnya kapasitas memori dan penyimpanan, serta peningkatan variasi pilihan input dan output yang tidak lazim, semuanya berkontribusi pada percepatan sistem komputer yang semakin canggih dan kompleks. Meskipun sistem yang canggih dan kompleks dapat memberikan hasil yang luar biasa ketika berhasil, namun pada saat yang sama, juga dapat menimbulkan masalah besar bagi mereka yang membangun sistem yang kompleks tersebut.
- Apa yang menyebabkan perangkat lunak memakan waktu yang cukup lama untuk diselesaikan?
- Apa yang menyebabkan biaya pengembangan menjadi begitu tinggi?
- Mengapa tidak mungkin bagi kami untuk menemukan semua kesalahan sebelum memberikan perangkat lunak kepada pelanggan?
- Apa yang membuat kita mengeluarkan banyak waktu dan upaya untuk menjaga program yang sudah ada?
- Mengapa kami selalu mengalami kesulitan dalam mengukur kemajuan ketika perangkat lunak sedang dalam proses pengembangan atau pemeliharaan?
1.1 Defining Software
Pada saat ini, banyak dari para profesional dan anggota masyarakat umum merasa bahwa mereka sudah memahami perangkat lunak. Namun, apakah benar-benar demikian?
Sebuah deskripsi buku teks mengenai perangkat lunak mungkin memiliki format seperti ini:
"Perangkat lunak adalah: (1) kumpulan instruksi (program komputer) yang ketika dijalankan memberikan fitur, fungsi, dan kinerja yang diinginkan; (2) struktur data yang memungkinkan program untuk memanipulasi informasi secara setara, dan (3) informasi deskriptif yang menjelaskan operasi dan penggunaan program dalam bentuk hard copy maupun virtual."
Tidak diragukan lagi bahwa definisi yang lebih komprehensif dapat disediakan.
Meskipun definisi formal yang lebih terperinci mungkin dapat diberikan, hal itu tidak selalu meningkatkan pemahaman Anda secara signifikan. Sebaliknya, untuk memahami perangkat lunak dengan lebih baik, kita harus mempertimbangkan karakteristik unik yang membedakannya dari benda buatan manusia lainnya. Berbeda dengan sistem fisik, perangkat lunak lebih bersifat logis, sehingga memiliki ciri-ciri yang berbeda dengan perangkat keras:
Meskipun terdapat beberapa kesamaan antara pengembangan perangkat lunak dan pembuatan perangkat keras, kedua kegiatan tersebut secara mendasar berbeda. Kualitas yang baik dicapai melalui desain yang baik dalam kedua kegiatan, namun fase pembuatan perangkat keras dapat menimbulkan masalah kualitas yang tidak muncul atau lebih mudah diperbaiki dibandingkan dengan perangkat lunak. Kedua kegiatan ini tergantung pada orang, namun hubungan antara pelaku dan pekerjaan yang dilakukan berbeda. Meskipun keduanya memerlukan pembuatan "produk", pendekatannya berbeda. Biaya pengembangan perangkat lunak terpusat pada rekayasa, sehingga proyek pengembangan perangkat lunak tidak bisa dikelola seperti proyek manufaktur.
Dalam Gambar 1.1 terlihat bahwa tingkat kegagalan perangkat keras sangat bergantung pada waktu penggunaannya. Hubungan ini dikenal sebagai "bathtub curve". Pada awal masa pakai, tingkat kegagalan cenderung lebih tinggi karena kesalahan desain atau manufaktur, tetapi setelah perbaikan dilakukan, tingkat kegagalan menjadi lebih stabil dan relatif rendah selama beberapa waktu. Namun, seiring berjalannya waktu, tingkat kegagalan kembali meningkat karena akumulasi kerusakan dari faktor lingkungan seperti debu, getaran, penyalahgunaan, suhu yang ekstrem, dan lain-lain. Dalam kata lain, perangkat keras akan mengalami kerusakan karena penggunaannya secara terus-menerus.
Dibandingkan dengan perangkat keras, perangkat lunak tidak rentan terhadap penyakit lingkungan yang menyebabkan kerusakan perangkat keras. Oleh karena itu, secara teori, kurva tingkat kegagalan untuk perangkat lunak harus mengikuti "idealized curve" yang ditunjukkan pada Gambar 1.2. Awalnya, cacat yang belum terdeteksi dapat menyebabkan tingkat kegagalan yang tinggi pada program, tetapi cacat tersebut kemudian diperbaiki sehingga kurva tingkat kegagalan turun menjadi lebih stabil. Walaupun kurva ideal tersebut terlalu disederhanakan, implikasinya adalah bahwa perangkat lunak tidak akan menjadi usang. Meskipun demikian, kualitas perangkat lunak dapat memburuk seiring berjalannya waktu.
Gambar 1.2
Dapat dijelaskan dengan baik dengan mempertimbangkan kurva sebenarnya pada Gambar 1.2 bahwa kontradiksi yang terlihat. Ketika perangkat lunak mengalami perubahan selama masa hidupnya, kemungkinan kesalahan diperkenalkan dan menyebabkan lonjakan pada kurva tingkat kegagalan, seperti yang ditunjukkan pada "actual curve" di Gambar 1.2. Sebelum kurva dapat kembali ke tingkat kegagalan kondisi-mapan semula, perubahan lain diminta yang mengakibatkan lonjakan pada kurva tersebut. Lama-kelamaan, tingkat kegagalan minimum mulai meningkat, dan perangkat lunak memburuk karena adanya perubahan.
Perbedaan antara perangkat keras dan perangkat lunak dapat dijelaskan melalui aspek keausan yang berbeda. Ketika komponen perangkat keras aus, dapat diganti dengan suku cadang. Namun, perangkat lunak tidak memiliki suku cadang yang dapat diganti. Setiap kegagalan perangkat lunak menunjukkan adanya kesalahan dalam desain atau dalam proses penerjemahan desain ke dalam kode yang dapat dieksekusi mesin. Oleh karena itu, pemeliharaan perangkat lunak yang mengakomodasi permintaan perubahan jauh lebih kompleks dibandingkan dengan pemeliharaan perangkat keras.
Dalam perkembangan disiplin teknik, diciptakanlah koleksi komponen desain standar. Ada ribuan komponen standar yang dapat digunakan oleh insinyur mekanik dan listrik dalam merancang sistem baru, termasuk sekrup standar dan sirkuit terpadu siap pakai. Komponen yang dapat digunakan kembali dibuat untuk memungkinkan insinyur berfokus pada elemen desain yang benar-benar inovatif, seperti bagian dari desain yang mewakili sesuatu yang baru. Di dunia perangkat keras, penggunaan kembali komponen sudah menjadi bagian alami dari proses rekayasa, namun di dunia perangkat lunak, ini masih menjadi hal yang baru dan baru mulai dicapai secara luas.
Perancang perangkat lunak harus membuat komponen yang dapat digunakan kembali di banyak program. Komponen modern yang dapat digunakan kembali meliputi data dan pemrosesan data, yang memungkinkan insinyur perangkat lunak membuat aplikasi baru dari komponen yang sudah ada. Sebagai contoh, antarmuka pengguna interaktif saat ini dibuat dengan komponen yang dapat digunakan kembali seperti jendela grafis, menu tarik-turun, dan mekanisme interaksi lainnya. Struktur data dan detail pemrosesan yang diperlukan untuk membangun antarmuka terkandung dalam pustaka komponen yang dapat digunakan kembali untuk membangun antarmuka.
1.2 Software Application Domains
Sekarang ini, ada tujuh kategori besar perangkat lunak komputer yang menimbulkan tantangan yang berkelanjutan bagi insinyur perangkat lunak:
- Kategori pertama adalah perangkat lunak sistem, yang terdiri dari kumpulan program yang ditulis untuk melayani program lainnya. Beberapa perangkat lunak sistem memproses struktur informasi yang kompleks tetapi pasti, sedangkan yang lain memproses data yang tidak pasti. Kategori ini dicirikan oleh interaksi yang berat dengan perangkat keras komputer, penggunaan berat oleh banyak pengguna, operasi bersamaan yang membutuhkan penjadwalan, pembagian sumber daya, manajemen proses yang canggih, struktur data yang kompleks, dan beberapa antarmuka eksternal.
- Kategori kedua adalah perangkat lunak aplikasi, yaitu program berdiri sendiri yang digunakan untuk memecahkan kebutuhan bisnis tertentu. Perangkat lunak aplikasi digunakan untuk memproses data bisnis atau teknis untuk memfasilitasi operasi bisnis atau manajemen/pengambilan keputusan teknis. Selain aplikasi pemrosesan data konvensional, perangkat lunak aplikasi juga digunakan untuk mengontrol fungsi bisnis secara real-time.
- Kategori ketiga adalah perangkat lunak teknik/ilmiah, yang dicirikan oleh algoritme "pengolah angka". Aplikasi dalam kategori ini berkisar dari astronomi hingga vulkanologi, dari analisis tegangan otomotif hingga dinamika orbit pesawat ulang-alik, dan dari biologi molekuler hingga manufaktur otomatis. Namun, aplikasi modern dalam bidang teknik/ilmiah telah mulai menggunakan karakteristik perangkat lunak sistem waktu-nyata dan bahkan telah menjauh dari algoritme numerik konvensional.
- Kategori keempat adalah perangkat lunak tertanam, yang terdapat di dalam produk atau sistem dan digunakan untuk mengimplementasikan dan mengontrol fitur dan fungsi untuk pengguna akhir dan untuk sistem itu sendiri. Perangkat lunak tertanam dapat melakukan fungsi terbatas dan esoteris atau menyediakan fungsi dan kemampuan kontrol yang signifikan.
- Kategori kelima adalah perangkat lunak lini produk, yang dirancang untuk memberikan kemampuan khusus untuk digunakan oleh banyak pelanggan yang berbeda. Perangkat lunak lini produk dapat berfokus pada pasar terbatas dan esoterik atau mengatasi pasar konsumen massal.
- Kategori keenam adalah aplikasi web, yang mencakup berbagai jenis perangkat lunak berbasis jaringan. Dalam bentuknya yang paling sederhana, aplikasi web dapat berupa sekumpulan file hypertext tertaut yang menyajikan informasi menggunakan teks dan grafik terbatas. Namun, aplikasi web modern telah berkembang menjadi lingkungan komputasi canggih yang tidak hanya menyediakan fitur, fungsi komputasi, dan konten yang berdiri sendiri untuk pengguna akhir, tetapi juga terintegrasi dengan database perusahaan dan aplikasi bisnis.
- Kategori ketujuh adalah perangkat lunak kecerdasan buatan menggunakan algoritme non-numerik untuk menyelesaikan masalah kompleks yang tidak dapat dipecahkan melalui komputasi atau analisis langsung. Aplikasi dalam kategori ini meliputi robotika, sistem pakar, pengenalan pola (gambar dan suara), jaringan saraf tiruan, pembuktian teorema, dan permainan game.
- Open-world computing, Dalam waktu dekat, jaringan nirkabel yang berkembang pesat akan memungkinkan terjadinya komputasi terdistribusi yang meluas. Para insinyur perangkat lunak memiliki tantangan dalam mengembangkan sistem dan aplikasi perangkat lunak yang dapat memfasilitasi komunikasi antara perangkat seluler, komputer pribadi, dan sistem perusahaan melalui jaringan yang luas.
- Netsourcing, Dalam waktu singkat, World Wide Web telah berkembang menjadi suatu mesin komputasi dan sumber konten. Para insinyur perangkat lunak dihadapkan dengan tantangan untuk mengembangkan aplikasi yang mudah dipahami dan diperlakukan, seperti perencanaan keuangan pribadi, dan pada saat yang sama menghasilkan manfaat yang signifikan bagi pasar pengguna akhir di seluruh dunia.
- Open source, Salah satu tren yang semakin populer adalah distribusi kode sumber untuk aplikasi sistem (seperti sistem operasi, database, dan lingkungan pengembangan), yang memungkinkan lebih banyak orang untuk berpartisipasi dalam pengembangan perangkat lunak tersebut. Tantangan bagi para insinyur perangkat lunak adalah membuat kode sumber yang mudah dipahami dan dikenali, serta mengembangkan teknik yang memungkinkan pelanggan dan pengembang untuk memahami perubahan yang dilakukan dan dampaknya pada perangkat lunak.
Ada ratusan ribu program komputer yang masuk ke dalam tujuh domain aplikasi yang dibahas di bagian sebelumnya. Sebagian besar program ini adalah aplikasi canggih yang baru dirilis untuk pengguna individu, industri, dan pemerintah. Namun, ada juga program yang sudah ada selama bertahun-tahun, bahkan beberapa di antaranya sudah sangat usang.
Sejak tahun 1960-an, program-program komputer lama, yang sering disebut sebagai legacy software, telah menarik perhatian yang terus menerus. Menurut Dayani-Fard dan rekan-rekannya, legacy software ini telah dijelaskan sebagai:
"Lecacy Software, yang dikembangkan beberapa dekade yang lalu, terus dimodifikasi untuk menjawab perubahan kebutuhan bisnis dan platform komputasi."
Liu dan timnya memperluas penjelasan ini dengan menyatakan bahwa "sebagian besar Legacy Software masih sangat dibutuhkan untuk menjalankan fungsi bisnis inti dan sangat penting bagi bisnis." Karena itu, Legacy Software memiliki umur yang panjang dan penting dalam menjalankan bisnis.
Legacy Software memiliki karakteristik tambahan yang kurang menguntungkan seperti kualitas yang buruk. Beberapa sistem lama memiliki desain yang tidak dapat diperluas, kode yang rumit, kurangnya atau tidak adanya dokumentasi, dan kurangnya pengarsipan kasus uji dan hasil, serta pengelolaan riwayat perubahan yang buruk. Namun, meskipun demikian, sistem ini masih mendukung "fungsi inti bisnis dan sangat diperlukan untuk bisnis". Pertanyaannya adalah bagaimana mengatasinya?
Satu-satunya solusi yang masuk akal adalah tidak melakukan tindakan apa pun, setidaknya sampai sistem lama mengalami perubahan yang signifikan. Jika Legacy Software memenuhi kebutuhan penggunanya dan berjalan secara andal, maka perangkat lunak tersebut tidak rusak dan tidak memerlukan perbaikan. Namun, seiring berjalannya waktu, sistem warisan sering mengalami perkembangan karena satu atau beberapa alasan sebagai berikut:
- Perlu dilakukan penyesuaian pada perangkat lunak agar sesuai dengan tuntutan lingkungan atau teknologi komputasi terbaru.
- Perlu dilakukan peningkatan pada perangkat lunak agar dapat memenuhi persyaratan bisnis yang baru.
- Perangkat lunak harus ditingkatkan agar dapat terintegrasi dengan sistem atau database yang lebih modern dan baru.
- Diperlukan perubahan desain pada perangkat lunak agar sesuai dengan lingkungan jaringan.
Comments
Post a Comment