Software Development
Definition Software Crisis
Software Crisis atau krisis perangkat lunak adalah masalah yang ditemukan dalam
pengembangan perangkat lunak. Masalahnya tidak hanya terbatas pada software yang tidak
berjalan sebagaimana mestinya, tetapi juga masalah yang berhubungan dengan
mengembangkan software, memelihara software, dan mengimbangi permintaan software yang
semakin besar. Hal seperti itu sudah terjadi pada era 90-an dan 00-an (saat ini):
1. Era 90-an
Pada era 90-an kebanyakan masyarakat merasa sulit untuk menggunakan dan memiliki
sebuah software dikarenakan saat itu belum mengenal namanya sebuah internet dan
pengetahuan tentang teknologi. Ilmu pengetahuan tentang teknologi tidak dapat
dimiliki oleh semua orang pada era ini, Karena pengetahuan tersebut hanya dimiliki
oleh perguruan tinggi yang dimana sudah menggunakan sebuah computer untuk
memprogram software dengan Bahasa pemrograman turbo pascal. Kurangnya ilmu
pengetahuan, kurang pesatnya penyebaran informasi, dan harga suatu tools / software
menjadi masalah utama pada software crisis di era ini. Perkembangan teknologi di era
ini terasa sangat lambat dikarenakan masalah tersebut, hingga saat dimana sistem
operasi kian berkembang yang sebelumnya berupa DOS dan UNIX bergeser menjadi
WINDOWS dan LINUX yang cara penggunaanya lebih mudah dan sederhana
dibandingkan sistem operasi sebelumnya. Dengan terus berkembangnya WINDOWS
dan LINUX kemudian muncul secara bertahap software yang dimana sistem operasi
dapat terhubung dengan informasi dan komunikasi (Email) yaitu Browser. Meskipun
kemunculan Browser ini menandai kemajuan teknologi yang baik. Namun, tidak semua
masyarakat dapat merasakan manfaatnya, dikarenakan faktor ekonomi, software, dan
komputer yang menurut beberapa kalangan masyarakat masih terbilang cukup mahal
di era ini.
2. Era 00-an
Berbeda di era 00-an yang dimana hampir seluruh masyarakat sudah mengenal
teknologi yang dimana software dan pengetahuan tentang teknologi baik itu software
maupun hardware adalah sesuatu yang mudah untuk didapat hanya dengan browsing,
software tersebut mulai dari software trial, free software, dan software commercial baik
yang berupa sewaan secara online maupun sekali bayar. Legalitas dalam suatu software
pun bukan lagi menjadi masalah bagi pengguna dikarenakan beberapa software
commercial dapat dijumpai dalam bentuk free software yang biasa disebut bajakan atau
crack. Tidak hanya software yang kita jumpai melainkan hardware seperti
smartphone, tablet, watch (iwatch apple) dan yang semisalnya juga ikut berkembang.
Diera ini memang dapat dikatakan bahwa sudah dapat ditemukan dan digunakan
dimana-mana. Namun, diera ini tetap saja masih mengalami software crisis hanya saja
bagi kalangan pengembang software. Bagi pengembang software banyak yang
mengatakannya cukup sulit dikarenakan kita berada didalam era krisis. Krisis yang
dimaksud bukan seperti diera 90-an melainkan kelebihan dalam sisi kompleksitas,
ketersedian software yang berlebih, estimasi jadwal dan biaya yang sering kali tidak
tepat, kualitas software yang kurang baik(ditandai dengan banyaknya bug), dan
Ekspektasi pengguna yang terlalu tinggi pada suatu software. Selain itu, tidak hanya
dirasakan oleh pengembang software saja tetapi pengguna / masyarakat secara tidak
langsung ikut merasakannya. Seperti misalnya, seorang yang ingin membeli sebuah
software anti-virus untuk membersihkan komputer yang dimilikinya. Namun, banyak
software anti-virus yang beredar dipasaran membuat orang tersebut merasa bingung
untuk membeli suatu software tersebut yang baik dan tepat untuk komputernya.
Software Crisis terjadi karena ketidakmampuan dalam membangun suatu proyek pembuatan
software yang diinginkan dengan semestinya dikarenakan beberapa masalah yaitu:
1. Melebihi batas waktu (Deadline)
2. Melebihi biaya/anggaran (Cost)
3. Software tidak efisien / tidak memenuhi kebutuhan user (Efficiency)
4. Sulit melakukan pemeliharaan (Maintain)
Penyebab dari software crisis ini disebabkan oleh:
1. Karakterisitik software itu sendiri
2. Kegagalan mereka yang bertanggung jawab dalam pengembangan software
Software Crisis tidak dapat hilang secara instan atau satu malam saja, melainkan harus melalui
beberapa metode pendekatan yang baik dalam mengatasi hal ini. Namun gabungan beberapa
metode seperti peralatan untuk mengautomisasi metode-metode ini, teknik yang baik untuk
mengontrol kualitas, dan filosofi untuk manajemen kontrol, serta manajemen itu terdapat pada
ilmu yang disebut Software Engineering.
Menurut Fritz Bauer, “Software Engineering adalah ilmu yang menerapkan prinsip engineering
untuk mendapatkan suatu software yang ekonomis, handal, dan bekerja secara efisien pada
mesin yang sebenarnya.
Terdapat 3 kunci pada Software Engineering, yaitu:
1. Process: Diibaratkan seperti lem yang memegang lapisan teknologi Bersama dan
memungkinkan pengembangan software yang rasional dan tepat. Dimana proses
dilakukan oleh pengembang demi mewujudkan kualitas yang baik dalam
pengembangan software. Hal itu meliputi untuk manajemen kontrol dari proyek
perangkat lunak, work product (models, documents, data, reports, form, etc),
diproduksi, membangun milestone, memastikan kualitas, dan perubahan dikelola
dengan baik.
2. Method: Memberikan teknik-teknik bagaimana membangun atau membuat
perangkat lunak (software). Dimana metode dilakukan oleh pengembang untuk
mengembangkan perangkat lunak dengan langkah-langkah teknis yang tepat. Yang
meliputi beragam tugas termasuk analysis, design, construction, testing, dan
support.
3. Tools: Memberikan automisasi atau semi-automisasi pendukung untuk process dan
method. Misalnya, dari banyak IDE harus dipilih secara tepat dengan platform
software yang akan dikembangkan nantinya
Yang memungkinan seorang Proyek Manager mengontrol proses pengembangan perangkat
lunak (software) dan memberikan praktisi dasar yang baik untuk pembentukan software
dengan kualitas yang tinggi.
Software Crisis “solution”
1. Feedback based
2. Functional and system
3. Core system
4. Automated testing
5. Testing on computer
Software Challenges
Untuk mengembangkan suatu software tidak selalu berjalan mulus melainkan ada beberapa
tantangan yang akan dihadapi oleh para pengembang yaitu:
1. Creativity : Seorang pengembang software harus mampu memberika suatu ide yang
kreatif pada produknya. Dikarenakan menjual suatu produk harus mempunyai
karakteristik yang berbeda(paling menonjol) dibandingkan produk yang lainnya.
Sehingga produk tersebut dapat bersaing dipasaran. Meskipun ini tantangan terberat
dari para pengembang. Namun, itu harus dilakukan produknya agar user tertarik untuk
menggunakannya sehingga produk kita berhasil terjual.
2. Estimation: Tantangan ini paling sering dihadapi oleh seorang Project Manager (PM)
yang dimana PM harus mampu mengestimasikan berbagai kondisi yang ada dalam
pengembangan suatu software tanpa pertimbangan maka pengembangan tersebut tidak
dapat berjalan lancar. Salah satu yang harus diestimasikan oleh seorang PM
Menurut Rob Thomsett pada buku [Link] hal. 123, “In an age of outsourcing and
increased competition, the ability to estimate more accurately.....has emerged as a
critical survival factor for many IT groups”. Jadi, estimasi resource, cost, dan schedule
untuk software development sangatlah diperlukan demi tercapainya pembuatan dan
pengembangan proyek perangkat lunak (software) menjadi lebih baik.
3. Intangible: Seorang pengembang software melakukan pengolahan barang yang tidak
berwujud, yang dikombinasikan dengan kemampuan untuk segera mengantarkan
sebuah produk (software) yang akan dijualnya ke sejumlah besar para konsumennya
melalui internet atau yang dikenal situs e-commerce. Dimana situs e-commerce
digunakan oleh para konsumen untuk mencari dan memesan secara efisien. Namun,
para pengembang harus melakukan pengiriman terhadap software yang dipesan oleh
konsumen secepat mungkin agar sampai kepada tujuannya. Misal, konsumen
menggunakan situs [Link] yang mana situs ini menjual beberapa software
intangible seperti (jurnal, majalah, ebook, dll). Ketika konsumen melakukan pencarian
dan pemesanan pada produk tersebut. Produk tersebut akan didapatkan secepat
mungkin dengan cara menunggahnya. Namun, terkadang ketika menunggah terjadi
koneksi yang tidak stabil sehingga membuat produk tersebut menjadi data corrupted.
Dalam konteks ini, seorang pengembang harus mampu memikirkan bagaimana caranya
suatu software yang dipesan oleh konsumen dapat dikirim sampai tujuan dengan
secepat mungkin dan dengan kondisi yang baik. Sebagai contoh, bisa saja pengembang
melakukan penambahan fitur pause downloading atau mengkompress memori dari
suatu produk itu. Jadi, inti dari intangible adalah bagaimana seorang pengembang
menjamin suatu file, data, atau sejenis software lainnya dapat diantar kepada konsumen
dengan kondisi yang baik dan secepat mungkin.
4. Complexity: Merancang suatu software tidaklah mudah melainkan sangat kompleks.
Hal itu terjadi karena beberapa faktor seperti kompleksitas pelanggan(customers),
proses pemesanan yang kompleks, penjualan produk yang kompleks, pencarian produk
yang kompleks, dan kompleksitas pada front-end development, back-end development,
dan architecture development. Oleh sebab itu, pengembang harus mampu
mengoptimalisasi kompleksitas tersebut menjadi lebih mudah dengan menggunakan
framework sebagai kerangka kerja dan pola desain dalam merancang suatu aliran bisnis
dan pembuatan software mereka.
Maintenance Issues
Setelah kita berhasil membangun atau mengembangkan suatu software pastinya kita harus
melakukan pemeliharaan terhadap software tersebut (maintenance). Namun, untuk melakukan
hal tersebut ada beberapa masalah yang akan dihadapinya. Berikut diantaranya:
1. Manajemen mendapatkan ide yang baru
2. Manajemen mengajukan benefit yang baru
3. User meminta untuk mengganti fitur
4. Mengganti bisnis proses
5. Ide dari developers
6. Memperbarui hardware / software
7. Mengubah peraturan
Software Development Sudden Death Situation
Untuk merancang atau mengembangkan suatu software salah satu tantangan seorang developer
adalah menjelaskan kepada customer bagaimana cara kerja suatu sistem yang dimana sistem
tersebut belum dibuat. Dikarenakan apa yang kita sampaikan belum tentu dimengerti oleh
customer tersebut. Jadi, merancang atau mengembangkan software harus menerapkan
beberapa metode-metode yang tepat. Namun, dalam menggunakan metode-metode itu tetap
mempertimbangkan beberapa kemungkinan yang akan dihadapinya. Seperti yang dikatakan
oleh Ed Yourdon, “Kegagalan dari pengembangan software lebih dari 50%”, Maka dari itu ada
beberapa faktor yang harus kita pertimbangkan yang terdapat dibawah ini:
1. Jadwal yang padat (Tight Schedule)
2. Masalah kepegawaian atau masalah anggota pada tim pengembangan (Staffing
Problem)
3. Permintaan yang terlalu tinggi dari User (Requirement is too high)
4. Masalah dalam biaya (Small Budget)
Jika ada salah satu faktor yang ditemukan seperti diatas ini dalam melakukan pengembangan
software. Maka, jangan lakukan pengembangan atau perancangan software karena akan
merugikan kita sendiri.
Software Failure Types
Ada beberapa kegagalan yang akan ditemui ketika mengembangan atau merancangan software,
yaitu:
1. Kegagalan pada proses (process)
2. Kegagalan pada koding (construction)
Main Failure Reasons
Hal itu bisa disebabkan karena beberapa alasan, alasan utama dari sebuah kegagalan adalah:
1. Kurangnya memahami suatu masalah (Insufficient understanding problems)
2. Hilangnya seorang pimpinan proyek atau project manager (Loss of the chief)
3. Mengabaikan hasil pengujian (Ignoring the result of testing)
4. Membiarkan permintaan customer untuk mengubah sistem menjadi tidak terkendali
atau mengubah alur sistem yang tidak sesuai kesepakatan (Allowing requirements to be
changed uncontrolled)
5. Metode desain tidak memadai
6. Mengimplementasikan teknologi yang lama untuk saat ini
7. Tidak dapat mengatakan tidak pada client (customer)
8. Terlalu banyak dekorasi
9. Kurangnya pengetahuan tentang teori dan teknikal engineering
4 Variables on Software Development
Semua proyek dilakukan dengan poin tertentu secara metode tradisional yang meliputi cost,
schedule, dan scope. Dimana setiap poin saling membentuk simpul, dengan quality sebagai
hasil akhirnya (Figure 1):
1. Proyek harus diselesaikan sesuai biayanya
2. Proyek harus diselesaikan secara tepat waktu
3. Proyek harus memenuhi ruang lingkup yang telah dibuat – tidak lebih, tidak kurang
4. Proyek harus memenuhi kebutuhan kualitas pelanggan
Namun, baru-baru ini hal tersebut kian berkembang yang tadinya berbentuk segitiga (triple
constraint) menjadi diamond yang dikenal dengan Project Management Diamond meliputi:
cost, schedule, quality, dan scope, dengan ekspektasi pelanggan (customers) sebagai hasil
akhirnya (Figure 2):
1. Cost: Setiap proyek memiliki biaya untuk dikeluarkan. Pelanggan(customers) bersedia
mengeluarkan sejumlah uang untuk membeli suatu produk atau layanan. Jika
mengurangi biaya proyek, maka ruang lingkup harus diperkecil dan/atau menambah
waktu pengerjaan proyek.
2. Time (Schedule): Seperti kata pepetah “Time is money” yang berarti waktu adalah uang.
Suatu proyek memiliki penjadwalan dan waktu yang berbeda-beda. Hal itu, sesuai
dengan biaya atau ruang lingkupnya. Bila pengerjaan dengan waktu dikurangi, maka
biaya harus dinaikkan dan/atau ruang lingkup diperkecil.
3. Scope: Banyak proyek yang gagal pada poin ini dikarenakan tidak semua ruang lingkup
proyek didefinisikan atau dipahami sejak awal pengembangan. Bila ruang lingkup
ditingkatkan, maka biaya akan meningkat dan/atau waktu akan meningkat
4. Quality: Inilah istilah yang digunakan untuk menentukan aspek seberapa bagus dari
suatu software yang dikembangkan. Karena kualitas dipengaruhi oleh biaya,
penjadwalan, dan ruang lingkup. Jika kualitas ingin ditingkatkan atau terlihat baik,
maka biaya akan meningkat dan/atau penjadwalan/waktu dalam pengerjaan proyek
akan bertambah dan/atau ruang lingkup suatu proyek tersebut akan meningkat.
Jadi, dapat disimpulkan bahwa dalam mengembangkan perangkat lunak harus memperhatikan
4 komponen yang menjadi aspek utama. Sehingga hasil akhirnya seperti harapan pelanggan
(customer’s expectations) dalam produk atau layanan yang ingin dibeli olehnya sesuai dengan
kualitasnya sedangkan kualitas mempengaruhi ruang lingkup, ruang lingkup mempengaruhi
penjadwalan/waktu, dan penjadwalan/waktu mempengaruhi dengan biaya dalam
pengembangannya. Dengan kata lain, setiap poin dalam komponen tersebut saling terkait
antara satu dengan yang lainnya. Jika salah satu poin kita tidak memperhatikannya dengan baik
maka akan mempengaruhi aspek terpenting dalam pengembangan dan menjadikannya tidak
sesuai harapan pelanggan.
Reason to Fail on Software Industry
1. Tida ada diferensiasi (No differentiation)
2. Fitur yang hilang (Missing / misplaced features)
3. Kurang pemeliharaan (Less maintain)
4. Kurang keamanan (Less security)