Sejarah rekayasa perangkat lunak

Rekayasa perangkat lunak telah berkembang sejak pertama kali diciptakan pada tahun 1940-an hingga kini. Fokus utama pengembangannya adalah untuk mengembangkan praktik dan teknologi untuk meningkatkan produktivitas para praktisi pengembang perangkat lunak dan kualitas aplikasi yang dapat digunakan oleh pemakai.

1945 - 1965: Awal[sunting | sunting sumber]

Istilah software engineering digunakan pertama kali pada akhir 1950-an dan awal 1960-an. Saat itu, masih terdapat debat tajam mengenai aspek engineering dari pengembangan perangkat lunak.
Pada tahun 1968 dan 1969, komite sains NATO mensponsori dua konferensi tentang rekayasa perangkat lunak, yang memberikan dampak kuat terhadap perkembangan rekayasa perangkat lunak. Banyak yang menganggap bahwa dua konferensi inilah yang menandai awal resmi profesi rekayasa perangkat lunak. jangan pernah menganggap kalau software itu akn menjadi yang terbaik karena itu adalah sebuah karya yang bersifat sementara.

1965 - 1985: krisis perangkat lunak[sunting | sunting sumber]

Pada tahun 1960-an hingga 1980-an, banyak masalah yang ditemukan para praktisi pengembangan perangkat lunak. Banyak projek yang gagal, hingga masa ini disebut sebagai krisis perangkat lunak. Kasus kegagalan pengembangan perangkat lunak terjadi mulai dari projek yang melebihi anggaran, hingga kasus yang mengakibatkan kerusakan fisik dan kematian. Salah satu kasus yang terkenal antara lain meledaknya roket Ariane akibat kegagalan perangkat lunak.

1985 - kini: tidak ada senjata pamungkas[sunting | sunting sumber]

Selama bertahun-tahun, para peneliti memfokuskan usahanya untuk menemukan teknik jitu untuk memecahkan masalah krisis perangkat lunak.
Berbagai teknik, metode, alat, proses diciptakan dan diklaim sebagai senjata pamungkas untuk memecahkan kasus ini. Mulai dari pemrograman terstruktur, pemrograman berorientasi object, perangkat pembantu pengembangan perangkat lunak (CASE tools), berbagai standar, UML hingga metode formal diagung-agungkan sebagai senjata pamungkas untuk menghasilkan software yang benar, sesuai anggaran dan tepat waktu.
Pada tahun 1987, Fred Brooks menulis artikel No Silver Bullet, yang berproposisi bahwa tidak ada satu teknologi atau praktik yang sanggup mencapai 10 kali lipat perbaikan dalam produktivitas pengembangan perangkat lunak dalam tempo 10 tahun.
Sebagian berpendapat, no silver bullet berarti profesi rekayasa perangkat lunak dianggap telah gagal. Namun sebagian yang lain justru beranggapan, hal ini menandakan bahwa bidang profesi rekayasa perangkat lunak telah cukup matang, karena dalam bidang profesi lainnya pun, tidak ada teknik pamungkas yang dapat digunakan dalam berbagai kondisi.

Perkembangan utama rekayasa perangkat lunak[sunting | sunting sumber]

Kata Pengantar

Segala puji bagi Tuhan yang telah menolong hamba-Nya dengan penuh kemudahan. Tanpa pertolongan Nya mungkin blog sederhana ini tidak akan sanggup tampil dengan baik. 
Blog ini dibuat agar pengunjung dapat Kemudahan Berkreasi Pada Blog, yang saya sajikan berdasarkan pengamatan dari berbagai sumber. Blog ini saya buat dengan berbagai rintangan. Baik itu yang datang dari diri saya maupun yang datang dari PC dan Network. Namun dengan penuh kesabaran dan terutama pertolongan dari Tuhan akhirnya blog ini dapat dibuat.
Blog ini memuat tentang Cara Sederhana Membuat Gadget, Widget, Serba-serbi Pada Blog mudah-mudahan yang sangat membantu sobat blogger sekalian. Walaupun blog ini mungkin kurang sempurna tapi juga memiliki detail yang cukup jelas bagi pengunjung.
Saya mengucapkan terima kasih kepada sobat blogger yang menjadi inspirasi saya yang telah membantu saya dapat mengerti tentang bagaimana cara saya membuat blog ini.
Semoga blog ini dapat memberikan wawasan yang lebih luas kepada pengunjungnya. Walaupun blog ini tidak memiliki kelebihan dan banyak kekurangan. Saya mohon untuk saran dan kritiknya. Terima kasih.

Algoritma

Dalam matematika dan ilmu komputeralgoritma adalah prosedur langkah-demi-langkah untuk penghitungan. Algoritma digunakan untuk penghitungan,pemrosesan data, dan penalaran otomatis.
Algoritma adalah metode efektif diekspresikan sebagai rangkaian terbatas [1] dari instruksi-instruksi yang telah didefinisikan dengan baik [2] untuk menghitung sebuahfungsi[3] Dimulai dari sebuah kondisi awal dan input awal (mungkin kosong), [4]instruksi-instruksi tersebut menjelaskan sebuah komputasi yang, bila dieksekusi, diproses lewat sejumlah urutan kondisi terbatas [5] yang terdefinisi dengan baik, yang pada akhirnya menghasilkan "keluaran" [6] dan berhenti di kondisi akhir. Transisi dari satu kondisi ke kondisi selanjutnya tidak harus deterministik; beberapa algoritma, dikenal dengan algoritma pengacakan, menggunakan masukan acak. [7]
Walaupun algorism-nya al-Khawarizmi dirujuk sebagai aturan-aturan melakukan aritmatika menggunakan bilangan Hindu-Arab dan solusi sistematis dan persamaan kuadrat, sebagian formalisasi yang nantinya menjadi algoritma modern dimulai dengan usaha untuk memecahkan permasalahan keputusan(Entscheidungsproblem) yang diajukan oleh David Hilbert pada tahun 1928. Formalisasi selanjutnya dilihat sebagai usaha untuk menentukan "penghitungan efektif[8] atau "metode efektif"; [9] formalisasi tersebut mengikutkan Godel-Herbrand-Kleene fungsi rekursif-nya Kurt Godel - Jacques Herbrand - Stephen Cole Kleene pada tahun 1930, 1934, dan 1935, kalkulus lambda-nya Alonzo Churchpada tahun 1936, "Formulasi 1"-nya Emil Post pada tahun 1936, dan Mesin Turing-nya Alan Turing pada tahun 1936-7 dan 1939. Dari definisi formal dari algoritma di atas, berkaitan dengan konsep intuituf, masih tetap ada masalah yang menantang.

SISTEM NUMERIK DAN KONVERSI

Bilangan dapat disajikan dalam beberapa cara. Cara penyajiannya tergantung pada Basis (BASE) bilangan tersebut. Terdapat 4 cara utama dalam penyajian bilangan 

1.5.1 Sistem Bilangan Desimal 

Manusia umumnya menggunakan bilangan pada bentuk desimal. Bilangan desimal adalah sistem bilangan yang berbasis 10. Hal ini berarti bilangan – bilangan pada sistem ini terdiri dari 0 sampai dengan 9. Berikut ini beberapa contoh bilangan dalam bentuk desimal :
12610 (umumnya hanya ditulis 126)
1110 (umumnya hanya ditulis 11) 

1.5.2 Sistem Bilangan Biner 

Bilangan dalam bentuk biner adalah bilangan berbasis 2. Ini menyatakan bahwa bilangan yang terdapat dalam sistem ini hanya 0 dan 1. Berikut ini contoh penulisan dari bilangan biner :
11111102
10112

1.5.3 Sistem Bilangan Oktal 

Bilangan dalam bentuk oktal adalah sistem bilangan yang berbasis 8. Hal ini berarti bilangan – bilangan yang diperbolehkan hanya berkisar antara 0 – 7. Berikut ini contoh penulisan dari bilangan oktal :
1768
138

1.5.4 Sistem Bilangan Heksadesimal

Bilangan dalam sistem heksadesimal adalah sistem bilangan berbasis 16. Sistem ini hanya memperbolehkan penggunaan bilangan dalam skala 0 – 9, dan menggunaan huruf A – F, atau a – f karena perbedaan kapital huruf tidak memiliki efek apapun. Berikut ini contoh penulisan bilangan pada sistem heksadesimal :
7E16
B16


Tabel 1.3. Bilangan heksadesimal dan perbandingannya terhadap desimal 



Berikut adalah perbandingan keseluruhan sistem penulisan bilangan: 

Tabel 1.4. Contoh Konversi Antar Sistem Bilangan 
 

1.5.5 Konversi

1.5.5.1 Desimal ke Biner / Biner ke Desimal

Untuk mengubah angka desimal menjadi angka biner digunakan metode pembagian dengan angka 2 sambil memperhatikan sisanya. Ambil hasil bagi dari proses pembagian sebelumnya, dan bagi kembali bilangan tersebut dengan angka 2. Ulangi langkah – langkah tersebut hingga hasil bagi akhir bernilai 0 atau 1. Kemudian susun nilai – nilai sisa dimulai dari nilai sisa terakhir sehingga diperoleh bentuk biner dari angka bilangan tersebut.

Sebagai Contoh : 12610 = ? 2
Dengan menuliskan nilai sisa mulai dari bawah ke atas, didapatkan angka biner 11111102.
Konversi bilangan biner ke desimal didapatkan dengan menjumlahkan perkalian semua bit biner dengan perpangkatan 2 sesuai dengan posisi bit tersebut.

Sebagai Contoh : 11001101? 10
Angka desimal 205 diperoleh dari penjumlahan angka yang di arsir. Setiap biner yang bernilai 1 akan mengalami perhitungan, sedangkan yang bernilai 0 tidak akan dihitung karena hanya akan menghasilkan nilai 0.

1.5.5.2 Desimal ke Oktal/Heksadesimal dan Oktal/Heksadesimal ke Desimal

Pengubahan bilangan desimal ke bilangan oktal atau bilangan heksadesimal pada dasarnya sama dengan konversi bilangan desimal ke biner. Perbedaannya terletak pada bilangan pembagi. Jika pada konversi biner pembaginya adalah angka 2, maka pada konversi oktal pembaginya adalah angka 8, sedangkan pada konversi heksadesimal pembaginya adalah 16.

Contoh konversi Oktal : 12610 = ? 8 

Dengan menuliskan nilai sisa dari bawah ke atas, kita peroleh bilangan oktal 1768

Contoh konversi Heksadesimal :
12610 ? 16 

Dengan menuliskan nilai sisa dari bawah ke atas, kita peroleh bilangan Heksadesimal7E16
Konversi bilangan Oktal dan Heksadesimal sama dengan konversi bilangan Biner ke Desimal. Perbedaanya hanya terdapat pada penggunaan angka basis. Jika sistem Biner menggunakan basis 2, maka pada bilangan Oktal, basis yang digunakan adalah 8 dan pada bilangan Heksadesimal adalah angka 16.
Contoh konversi Oktal : 17610 


Contoh konversi Heksadesimal :
7E16 10 


1.5.5.3 Biner ke Oktal dan Oktal ke Biner

Untuk mengubah bilangan biner ke oktal, kita pilah bilangan tersebut menjadi 3 bit bilangan biner dari kanan ke kiri. Tabel 1.5 menunjukkan representasi bilangan biner terhadap bilangan oktal :

Tabel 1.5. Bilangan octal dan perbandingannya dalam sistem biner


Sebagai contoh : 11111108

Mengubah sistem bilangan oktal menjadi bilangan biner dilakukan dengan cara kebalikan dari konversi biner ke oktal. Dalam hal ini masing – masing digit bilangan oktal diubah langsung menjadi bilangan biner dalam kelompok tiga bit, kemudian merangkai kelompok bit tersebut sesuai urutan semula.

Sebagai contoh :
176


1.5.5.4 Biner ke Heksadesimal dan Heksadesimal ke Biner

Pengubahan bilangan Biner ke Heksadesimal dilakukan dengan pengelompokan setiap empat bit Biner dimulai dari bit paling kanan. Kemudian konversikan setiap kelompok menjadi satu digit Heksadesimal. Tabel 1.6 menunjukkan representasi bilangan Biner terhadap digit Heksadesimal :

Tabel 1.6. Bilangan heksadesimal dan konversinya dalam biner 



Sebagai contoh : 1111110= ? 16 

Konversi bilangan Heksadesimal ke Biner dilakukan dengan membalik urutan dari proses pengubahan Biner  ke Heksadesimal. Satu digit Heksadesimal dikonversi menjadi 4 bit Biner.

Sebagai contoh :
7E16 

1.6.1 Algoritma

Algoritma adalah serangkaian langkah-langkah yang tepat, terperinci, dan terbatas untuk menyelesaikan suatu masalah. Langkah yang tepat artinya serangkaian langkah tersebut selalu benar untuk menyelesaikan masalah yang diberikan. Langkah yang tidak memberikan hasil yang benar untuk domain masalah yang diberikan bukanlah sebuah algoritma.

Langkah yang terperinci artinya setiap langkah diberikan secara detail dan dapat dieksekusi oleh komputer, instruksi seperti “angkat sedikit ke kiri” merupakan contoh instruksi yang tidak tepat, karena “sedikit” tidak menyatakan sesuatu yang tepat. Langkah yang diberikan harus terbatas, artinya suatu saat langkah harus berhenti, jika langkah tidak pernah berhenti (misalnya: “ambil air, masukkan ke bak mandi, ulangi ambil air, dan seterusnya”) maka serangkaian langkah itu tidak disebut sebagai algoritma (jika: “ambil air, masukkan ke bak mandi, ulangi ambil air sampai bak mandi penuh”, maka bisa disebut algoritma, namun langkah ambil air, masukkan ke bak mandi, harus diperinci).

1.6.2 Konstruktor (elemen) Pemrograman Prosedural

Konstruktor (elemen) bahasa pemrograman prosedural yang penting di antaranya adalah:
1. Program utama
2. Tipe
3. Konstanta
4. Variabel
5. Ekspresi, operator, dan operand
6. Struktur Data
7. Instruksi dasar
8. Program Moduler
9. File eksternal
10. Rekurens

Konstruktor ini tidak untuk dipelajari secara berurutan, namun semua perlu dipelajari dan dimengerti untuk dapat membuat program dengan baik.

1.6.3 Input, Proses, dan Output

Sekumpulan aksi dalam pemrograman prosedural bisa dibagi menjadi tiga bagian penting yaitu: input, proses, dan output. Bagian input, proses, dan output dikerjakan secara sekuensial, dan dalam setiap bagian mungkin akan ada input, proses, dan output.

BAHASA PEMROGRAMAN

1.3.1 Pendahuluan 

Bahasa pemrograman adalah teknik komunikasi standar untuk mengekspresikan instruksi kepada komputer. Layaknya bahasa manusia, setiap bahasa memiliki tata tulis dan aturan tertentu. Bahasa pemrograman memfasilitasi seorang programmer untuk secara spesifik apa yang akan dilakukan oleh komputer selanjutnya, bagaimana data tersebut disimpan dan dikirim, dan apa yang akan dilakukan apabila terjadi kondisi yang variatif. Bahasa pemrograman dapat diklasifikasikan menjadi tingkat rendah, menengah, dan tingkat tinggi. Pergeseran tingkat dari rendah menuju tinggi menunjukkan kedekatan terhadap ”bahasa manusia”. 

1.3.2 Kategori Bahasa Pemrograman 

Bahasa pemrograman dapat diklasifikasikan sebagai berikut:
1. Bahasa Pemrograman Tingkat Tinggi
Merupakan bahasa tingkat tinggi yang mempunyai ciri-ciri mudah dimengerti karena kedekatannya terhadap bahasa sehari – hari. Sebuah pernyataan program diterjemahkan kepada sebuah atau beberapa mesin dengan menggunakancompiler.
Sebagai contoh adalah : JAVA, C++, .NET, Matlab.
2. Bahasa Pemrograman Tingkat Rendah
Bahasa pemrograman generasi pertama. Bahasa jenis ini sangat sulit dimengerti karena instruksinya menggunakan bahasa mesin. Disebut juga dengan bahasa assembly merupakan bahasa dengan pemetaan satu – persatu terhadap instruksi komputer. Setiap intruksi assembly diterjemahkan dengan menggunakan assembler.
3. Bahasa Pemrograman Tingkat Menengah
Dimana penggunaan instruksi telah mendekati bahasa sehari – hari, walaupun masih cukup sulit untuk dimengerti karena menggunakan singkatan – singkatan seperti STO yang berarti simpan (STORE) dan MOV yang artinya pindah (MOVE). Yang tergolong dalam bahasa ini adalah Fortran

1.4 Alur Pembuatan Program

Berikut ini langkah – langkah sistematis dasar dalam menyelesaikan permasalahan pemrograman :
1. Mendefiniskan masalah
2. Menganalisa dan membuat rumusan pemecahan masalah
3. Desain Algoritma dan Representasi
4. Pengkodean, Uji Coba dan pembuatan dokumentasi 

Untuk memahami langkah dasar dalam pemecahan masalah dalam sebuah komputer mari kita mendefinisikan sebuah permasalahan yang akan diselesaikan langkah demi langkah sebagaimana metodologi pemecahan masalah yang akan dibahas selanjutnya. Masalah yang akan kita selesaikan akan didefinisikan pada bagian selanjutnya.

1.4.1 Definisi Permasalahan 

Seorang programmer umumnya mendapatkan tugas berdasarkan sebuah permasalahan. Sebelum sebuah program dapat terdesain dengan baik untuk menyelesaikan beberapa permasalahan, masalah – masalah yang terjadi harus dapat diketahui dan terdefinisi dengan baik untuk mendapatkan detail persyaratan input dan output. 

Sebuah pendefinisan yang jelas adalah sebagian dari penyelesaian masalah. Pemrograman komputer mempersyaratkan untuk mendefiniskan program terlebih dahulu sebelum membuat suatu penyelesaian masalah.
Mari kita definisikan sebuah contoh permasalahan :
”Buatlah sebuah program yang akan menampilkan berapa kali sebuah nama tampil pada sebuah daftar” 
  
1.4.2 Analisis Permasalahan

Setelah sebuah permasalahan terdefinisi secara memadai, langkah paling ringkas dan efisien dalam penyelesaian harus dirumuskan.
Umumnya, langkah berikutnya meliputi memecahkan masalah tersebut menjadi beberapa bagian kecil dan ringkas. 

Contoh masalah :
Menampilkan jumlah kemunculan sebuah nama pada daftar
Input Terhadap Program :
Daftar Nama, Nama yang akan dicari
Output Dari Program :
Jumlah kemunculan nama yang dicari 

1.4.3 Desain Algoritma dan Representasi 

Setelah kita mengetahui dengan baik dan jelas mengenai permasalahan yang ingin diselesaikan, langkah selanjutnya yaitu membuat rumusan algoritma untuk menyelesaikan permasalahan. Dalam pemrograman komputer penyelesaian masalah didefinisikan dalam langkah demi langkah. 

Algoritma adalah urutan langkah – langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Logis merupakan kunci dari sebuah algoritma. Langkah – langkah dalam algoritma harus logis dan bernilai benar atau salah. 

Algoritma dapat diekpresikan dalam bahasa manusia, menggunakan presentasi grafik melalui sebuah FlowChart (diagram alir) ataupun melalui PseudoCode yang menjembatani antara bahasa manusia dengan bahasa pemrograman. 

Berdasarkan permasalahan yang terjadi pada bagian sebelumnya, bagaimanakah kita dapat memberikan solusi penyelesaian secara umum dalam sebuah alur yang dapat dengan mudah dimengerti? 

Berikut ini adalah cara-cara penyelesaian masalah melalui pembuatan program komputer yang umum dilakukan oleh seorang programmer. 

a. Mengekspresikan cara penyelesaian melalui bahasa manusia :
1. Tentukan daftar nama
2. Tentukan nama yang akan dicari, anggaplah ini merupakan sebuah kata kunci
3. Bandingkan kata kunci terhadap setiap nama yang terdapat pada daftar
4. Jika kata kunci tersebut sama dengan nama yang terdapat pada daftar, tambahkan nilai 1 pada hasil perhitungan
5. Jika seluruh nama telah dibandingkan, tampilkan hasil perhitungan (output)

b. Mengekspresikan cara penyelesaian melalui Diagram alir (FlowChart): 

Gambar 1.2: Contoh Flowchart 

Mengekspresikan solusi melalui Pseudocode :
listNama = Daftar Nama
keyNama = Nama yang dicari
hitung = 0
Untuk setiap nama pada Daftar Nama lakukan :
Jika nama == keyNama
Hitung = Hitung + 1
Tampilkan Hitung 

1.4.3.1 Simbol Flowchart dan Artinya 

Flowchart adalah representasi grafis dari langkah – langkah yang harus diikuti dalam menyelesaikan suatu permasalahan yang terdiri atas sekumpulan simbol, dimana masing – masing simbol merepresentasikan kegiatan tertentu. Flowchart diawali dengan penerimaan input dan diakhiri dengan penampilan output. Sebuah flowchart pada umumnya tidak menampilkan instruksi bahasa pemrograman, namun menetapkan konsep solusi dalam bahasa manusia ataupun notasi matematis. Pada tabel 1.2 ditunjukkan simbol – simbol yang digunakan dalam menyusun flowchart, nama, dan kegiatan yang diwakili serta aturan yang diterapkan dalam penggunaan simbol tersebut. 

 Tabel 1.2. Simbol-simbol untuk Flowchart



1.4.4 Pengkodean, Uji Coba dan Pembuatan Dokumentasi

Setelah membentuk algoritma, maka proses pengkodean dapat dimulai. Menggunakan algoritma sebagai pedoman, maka kode program dapat ditulis sesuai bahasa pemrograman yang dipilih. 

Setelah menyelesaikan seluruh kode program, langkah selanjutnya yaitu menguji program tersebut apakah telah berfungsi sesuai tujuannya untuk memberikan suatu solusi untuk menyelesaikan suatu masalah. Bilamana terjadi kesalahan – kesalahan logika atas programdisebut juga sebagai bugs, maka kita perlu untuk mengkaji ulang rumusan / algoritma yang telah dibuat, kemudian memperbaiki implementasi kode program yang mungkin keliru. Proses ini disebut dengan debugging

Terdapat dua tipe kesalahan (errors) yang akan dihadapi seorang programmer. Yang pertama adalah compile-time error, dan yang kedua adalah runtime error.
Compile-time errors muncul jika terdapat kesalahan penulisan kode program. Compiler akan mendeteksi kesalahan yang terjadi sehingga kode tersebut tidak akan bisa dikompilasi. Terlupakannya penulisan semi-colon (;) pada akhir sebuah pernyataan program atau kesalahan ejaan pada beberapa perintah dapat disebut juga sebagai compile – time error

Compiler tidaklah sempurna sehingga tidak dapat mengidentifikasi seluruh kemungkinan kesalahan pada waktu kompilasi. Umumnya kesalahan yang terjadi adalah kesalahan logika seperti perulangan tak berakhir. Tipe kesalahan ini disebut dengan runtime error. Sebagai contoh, penulisan kode pada program terlihat tanpa kesalahan, namun pada saat anda menelusuri struktur logika kode tersebut, bagian yang sama pada kode tereksekusi berulang – ulang tanpa akhir. Pada kasus tersebut compiler tidak cukup cerdas untuk menangkap kesalahan tipe ini pada saat proses kompilasi. Sehingga saat program dijalankan, aplikasi atau bahkan keseluruhan komputer mengalami hang karena mengalami proses perulangan yang tidak berakhir. Contoh lain dari run-time errors adalah perhitungan atas nilai yang salah, kesalahan penetapan kondisi dan lain sebagainya. 

Untuk memudahkan dalam memeriksa suatu kesalahan suatu program ataupun memahami jalannya program, kita juga perlu membuat suatu dokumentasi dari program yang dibuat. Dokumentasi tersebut berisi informasi mulai dari tujuan dan fungsi program, algoritma, serta cara penggunaannya.