Software Engineering

Menurut Fritz Badar, software engineering adalah disiplin ilmu yang menerapkan prinsip-prinsip engineering agar mendapatkan software yang ekonomis yang dapat dipercaya dan bekerja lebih efisien pada mesin yang sebenarnya.
Krisis software tidak dapat hilang dalam satu satu malam, di mana tidak ada suatu pendekatan yang baik dalam mengatasi krisis software, namun gabungan dari metode untuk semua fase dalam pengembangan siftware seperti peralatan yang lebih baik untuk engautomatisasi metode-metode ini, tehnik yang lebih baik untuk mengontrol kualitas, dan filosofi untuk koordinasi kontrol, serta manajemen dipelajari dalam suatu disiplin ilmu yang kita sebut software engineering.
Software engineering terdiri dari 3 elemen kunci yang memungkinkan manajer mengontrol proses pengembangan software dan memberikan praktisi dasar yang baik untuk pembentukan software berkualitas tinggi., yaitu :

1. Metode,

Metode software engineering memberikan tehnik-tehnik bagaimana membentuk software.
Metode ini terdiri dari serangkaian tugas :
à Perencanaan & estimasi proyek
à Analisis kebutuhan sistem dan software
à Desain struktur data
à Arsitektur program dan prosedur algoritma
à Coding
à Testing dan pemeliharaan

2. Peralatan (tools)
Peralatan software engineering memberikan dukungan atau semiautomasi untuk metode.
Contohnya :
à CASE (Case Aided Software Engineering), yaitu suatu software yang menggabungkan
software, hardware, dan database software engineering untuk menghasilkan suatu
lingkungan software engineering.
à Database Software Engineering, adalah sebuah struktur data yang berisi informasi penting
tentang analisis, desain, kode dan testing.
à Analogi dengan CASE pada hardware adalah : CAD, CAM, CAE

3. Prosedur,
Terdiri dari :
à urut-urutan di mana metode tersebut diterapkan
à dokumen
à laporan-laporan
à formulir-formulir yang diperlukan
à mengontrol kualitas software
à mengkoordinasi perubahan yang terjadi pada software

Dalam paradigma model software engineering dikenal ada 4 metode yang luas dipergunakan,
yaitu :

A. System Engineering and Analysis

Karena software merupakan bagian terbesar dari sistem, maka pekerjaan dimulai dengan
cara menerapkan kebutuhan semua elemen sistem dan mengalokasikan sebagian kebutuhan tersebut ke software. Pandangan terhadap sistem adalah penting, terutama pada saat software harus berhubungan dengan elemen lain, seperti :
à Hardware
à Software
à Database

B. Analisis kebutuhan software
Suatu proses pengumpulan kebutuhan software untuk mengerti sifat-sifat program yang dibentuk software engineering, atau analis harus mengerti fungsi software yang diinginkan, performance dan interface terhadap elemen lainnya. Hasil dari analisis ini didokumentasikan dan direview / dibahas / ditinjau bersama-sama customer.

C. Design
Desain software sesungguhnya adalah proses multi step (proses yang terdiri dari banyak langkah) yang memfokuskan pada 3 atribut program yang berbeda, yaitu :
à Struktur data
à Arsitektur software
à Rincian prosedur
Proses desain menterjemahkan kebutuhan ke dalam representasi software yang dapat diukur kualitasnya sebelum mulai coding. Hasil dari desain ini didokumentasikan dan menjadi bagian dari konfigurasi software.

D. Coding
Desain harus diterjemahkan ke dalam bentuk yang dapat dibaca oleh mesin

E. Testing
Segera sesudah objek program dihasilkan, pengetesan program dimulai. Proses testing difokuskan pada logika internal software. Jaminan bahwa semua pernyataan atau statements sudah dites dan lingkungan external menjamin bahwa definisi input akan menghasilkan output yang diinginkan.

F. Maintenance
Software yang sudah dikirim ke customer data berubah karena
à Software mengalami error
à Software harus diadaptasi untuk menyesuaikan dengan lingkungan external,misalnya adanya sistem operasi baru atau peripheral baru.
à Software yang lebih disempurnakan karena adanya permintaan dari customer.

G. Paper Prototype
Menggambarkan interaksi manusia dan mesin dalam sebuah bentuk yang memungkinkan user mengerti bagaimana interaksi itu terjadi.

H. Working Prototype

Adalah prototype yang mengimplementasikan beberapa bagian dari fungsi software yang
diinginkan seperti pada pendekatan pengembangan software. Model ini dimulai dengan :
à Pengumpulan kebutuhan developer dan customer
à Menentukan semua tujuan software
à Mengidentifikasi kebutuhan-kebutuhan yang diketahui
Hasil dari pengumpulan kebutuhan diteruskan pada Quick Design. Quick Design ini memfokuskan pada representasi aspek-aspek software yang dapat dilihat oleh user, misalnya format input dan output, selanjutanya dari desain cepat diteruskan pada pembentukan prototype (langkah ke 3). Prototype ini dievaluasi oleh customer / user dan digunakan untuk memperbaiki kebutuhan-kebutuhan software. Proses iterasi terjadi agar prototype yang dihasilkan memenuhi kebutuhan customer, juga pada saat yang sama developer mengerti lebih baik tentang apa yang harus dikerjakan.

Masalah yang dihadapi oleh prototyping paradigm ini adalah :

à Customer hanya melihat pada apa yang dihasilkan oleh software, tidak peduli pada hal-hal yang berhubungan dengan kualitas software dan pemeliharaan jangka panjang.
à Developer seringkali menyetujui apa yang diterangkan oleh customer agar prototype dapat dihasilkan dengan cepat. Akibatnya timbul pemilihan sistem operasi / bahasa pemrograman yang tidak tepat.

Proses pengembangan software terdiri dari 3 fase, yaitu :

1. Fase Definisi
Fase definisi memfokuskan pada “What”. Selama definisi ini, developer software
berusaha untuk :
à Mengidentifikasi informasi apa yang dikerjakan proses
à Fungsi dan performance apa yang diinginkan
à Interface apa yang dibutuhkan
à Hambatan desain apa yang ada, dan
à Kriteria validasi apa yang dibutuhkan untuk menetapkan keberhasilan sistem.

A. Sistem Analis
Sistem analis menetapkan peranan dari setiap elemen dalam sistem berbasis komputer, terutama mengalokasikan peranan software.

B. Sistem Software Planning
Dalam sistem ini, setelah lingkungan software dialokasikan, maka langkah dari sistem software planning ini adalah :
à Pengalokasian sumber / resource
à Estimasi biaya
à Penetapan tugas pekerjaan dan jadual.

C. Requirement Analysis
Penetapan lingkup untuk software memberikan petunjuk / arah. Namun definisi yang lebih rinci dari informasi dan fungsi software diperlukan sebelum pekerjaan dimulai


2. Fase Pengembangan
Fase pengembangan berfokus pada “How”. Selama pengembangan, developer software
berusaha menjelaskan :
à Bagaimana struktur data dan arsitektur software yang didesain
à Bagaimana rincian prosedur diimplementasikan ( diterapkan )
à Bagaimana desain diterjemahkan ke dalam bahasa pemrograman atau bahasa non prosedur, dan
à Bagaimana pengetesan akan dilaksanakan.

A. Desain software ( Software Design )
Desain menterjemahkan kebutuhan-kebutuhan software ke dalam sekumpulan representasi (grafik, tabel, diagram, atau bahasa yang menjelaskan struktur data, arsitektur software dan prosedur algoritma).
B. Coding
Representasi desain harus diterjemahkan ke dalam bahasa tiruan / artificial language yang menghasilkan perintah-perintah yang dapat dieksekusi oleh komputer.
C. Software Testing
Segera sesudah software diimplementasikan dalam bentuk yang dapat dieksekusi oleh mesin, software perlu ditest untuk menemukan kesalahan ( merupakan fungsi logika dan implementasi ).

3. Fase Pemeliharaan
Fase pemelihaaan berfokus pada “Change” atau perubahan. Ini dapat disebabkan :
A. Perubahan karena software error ( Corective Maintenance )
B. Perubahan karena software disesuaikan / diadaptasi dengan lingkungan external, misalnya munculnya CPU baru, sistem operasi baru ( Adaptive Maintenance )
C. Perubahan software yang disebabkan customer / user meminta fungsi tambahan, misalnya fungsi grafik, fungsi matematik, dll ( Perfective Maintenance )