Open Chat
  • Home
  • About Me
  • Informatika #SMK
    • Rekayasa Perangkat Lunak
    • Teknik Komputer Jaringan
  • Masalah
    • Move On
    • Mantan
  • Kelakuan Si Penulis
    • Ngasal Aja
    • Sendirian
    • Bareng Komunitas
      • BMX
      • Kancut Keblenger
  • Download Lagu #Famous
    • Famous - Kenangan
    • Famous - Tak Terlupakan

Minggu, 30 Juni 2013

Rekayasa Perangkat Lunak

11.05  Tips  Bacotan

Belajar Rekayasa Perangkat Lunak – Bagian I

Dahulu, ketika masih sekolah (SD-SMP-SMA), matematika dan fisika adalah pelajaran favorit saya. Matematika adalah cinta pertama, hingga ia menjadi terlalu abstrak bagi pikiran saya. Cinta kedua saya adalah fisika. Dalam fisika, matematika digunakan sebagai alat. Hal yang lebih penting (dan lebih menarik bagi saya) adalah pemahaman mengenai konsep dan hukum-hukum fisika.
I was pretty good at those two. Jika saya telah memahami suatu konsep fisika beserta teknik matematikanya, maka saya siap mengerjakan soal serumit apapun. Namun, hanya sebatas itulah minat saya terhadap fisika. Sama seperti matematika, konsep-konsep fisika tingkat lanjut – seperti teori relativitas dan mekanika kuantum – terlalu abstrak bagi saya. Mungkin saya bisa mendalami fisika eksperimental, namun saya tidak cakap dalam pekerjaan laboratorium.
Saya adalah tipe orang yang sensing, hanya bisa memahami sesuatu yang konkrit, atau setidaknya bisa dibayangkan dengan analogi hal-hal yang konkrit. Selain itu, saya hanya tertarik untuk mempelajari sesuatu yang mudah untuk diaplikasikan dan terlihat jelas manfaatnya di dunia nyata. Hal inilah yang mengantarkan saya pada cinta saya yang ketiga: ilmu komputer.
Ilmu komputer juga terdiri dari konsep-konsep abstrak. Sebagian besar konsepnya berasal dari matematika seperti logika, algoritma, matematika diskrit, metode formal, metode numerik, dan sebagainya. Ada juga beberapa konsep yang idenya berasal dari kehidupan nyata seperti struktur data dan pemrograman berorientasi objek. Hal yang menjadikan ilmu komputer berbeda dengan fisika adalah prakteknya: pemrograman. Pemrograman dilakukan sebagai implementasi dari solusi terhadap masalah dalam ilmu komputer. Karena prosesnya hanya dilakukan dengan duduk di depan layar monitor dan mengetik kode program, tidak seperti eksperimen fisika, saya cukup cakap dalam hal ini Description: :D.
Ketika saya kuliah, pemrograman dipelajari dalam mata kuliah Algoritma dan Pemrograman, Struktur Data, Basisdata, Pemrograman Berorientasi Objek, dan Konsep Bahasa Pemrograman. Selain itu, dalam mata kuliah yang lain sering diberikan tugas untuk membuat program. Namun, saya merasa kurang puas jika hanya membuat program untuk keperluan kuliah. Seperti yang sudah saya sampaikan sebelumnya, saya ingin membuat program yang bermanfaat dalam dunia nyata. Oleh karena itu, sembari kuliah saya juga bekerja sambilan sebagaiprogrammer. Saya sempat terlibat dalam berbagai proyek rekayasa perangkat lunak, baik dalam proyek yang saya dapatkan sendiri (dan dikerjakan bersama beberapa orang teman) maupun proyek di institusi tempat saya bekerja.
Faktanya sungguh menyedihkan: tidak satu pun perangkat lunak dalam proyek-proyek tersebut yang benar-benar digunakan oleh pengguna. Untuk kasus proyek di mana saya hanya sebagai pegawai, proyek tersebut nampaknya memang hanya untuk menghabiskan anggaran. Memang saya mendapatkan honor, namun tentu saja kepuasan batin kurang karena perangkat lunak yang saya buat tidak digunakan.
Ceritanya lain untuk kasus di mana proyek saya dapatkan sendiri. Dalam proyek tersebut, saya (dan teman-teman saya yang terlibat) bertanggung jawab secara langsung terhadap klien. Ada sebuah proyek yang terpaksa dihentikan karena jadwal sudah terlalu molor dan kami masih belum mampu untuk men-deliverperangkat lunaknya. Jadi, atas kesepakatan bersama dengan klien maka kami menghentikan proyek tersebut dan uang muka yang telah diberikan klien kami kembalikan setengahnya.
Berdasarkan pengalaman dari proyek-proyek tersebut, saya memahami bahwa kemampuan pemrograman saja tidak cukup untuk membuat suatu perangkat lunak. Hal itu sebenarnya telah saya ketahui ketika mengikuti mata kuliah Rekayasa Perangkat Lunak. Pada mata kuliah tersebut diajarkan mengenai berbagai macam proses dan metodologi dalam rekayasa perangkat lunak. Dalam metodologiwaterfall, pemrograman hanyalah aktivitas utama dalam fase implementasi. Masih ada fase lain seperti requirement definition, perancangan (design), dan pengujian (testing).
Proses rekayasa perangkat lunak di dunia nyata, khususnya di Indonesia, tidak seindah teori. Jika saya sudah mendapat materi kuliah Rekayasa Perangkat Lunak, mengapa proyek yang saya kerjakan bisa gagal? Yah, kalau kata CEO di perusahaan saya sekarang sih:

Belajar Rekayasa Perangkat Lunak – Bagian II

Pelajaran yang bisa dipetik dari Belajar Rekayasa Perangkat Lunak – Bagian Iadalah bahwa mahir di bidang pemrograman bukanlah jaminan bahwa kita akan sukses mengerjakan proyek rekayasa perangkat lunak (ini keyakinan jahiliyah saya waktu masih mahasiswa, jangan ditiru yah . Pemrograman hanyalah salah satu pekerjaan (task) dalam rekayasa perangkat lunak. Setelah mengingat kembali proyek-proyek yang saya pernah terlibat di dalamnya, saya menyimpulkan bahwa proyek-proyek tersebut gagal karena kelemahan dalam hal-hal berikut:
1.      Manajemen Proyek
Mungkin kesalahan saya dulu adalah tidak mengambil mata kuliah Manajemen Proyek sehingga proyek-proyek saya jadi gagal semua . Jadi apa itu manajemen proyek? Kalau menurut saya, secara singkat manajemen proyek adalah mengenai bagaimana kita bisa merencanakan dan menjalankan proyek agar hasilnya sesuai dengan tujuan proyek, tentunya dalam waktu yang sesuai jadwal dan biaya yang sesuai anggaran.
Teorinya, pertama-tama kita tentukan dulu tujuan proyek (seperti apa hasil atau produk yang diharapkan dari proyek). Selanjutnya, kita tentukan pekerjaan-pekerjaan apa saja yang perlu kita lakukan untuk mencapai tujuan tersebut. Untuk setiap unit pekerjaan, kita perkirakan berapa lama waktu dan orang yang dibutuhkan untuk menyelesaikan pekerjaan tersebut. Setiap orang dapat memiliki “tarif” yang berbeda (bisa juga sama, ini masalah bisnis) per satuan waktu (bisa jam, hari, atau bulan). Dengan menggunakan informasi waktu yang dibutuhkan dan “tarif” setiap orang yang terlibat dalam keseluruhan pekerjaan proyek, maka kita dapat menentukan biaya proyek untuk bagian sumber daya manusia (SDM). Untuk mendapatkan biaya total proyek kita dapat menambahkan biaya-biaya lain (kalau ada) seperti biaya lisensi perangkat lunak dan transportasi. Jangan lupa juga menambahkan margin keuntungan yang ingin kita peroleh .
Setelah semua rencana mengenai tujuan proyek, unit-unit pekerjaan, jadwal, SDM, dan anggaran kita mulai menjalankan proyek. Selama proyek berjalan, kita evaluasi secara berkala apakah pelaksanaan proyek sesuai dengan rencana atau tidak.
Teorinya sih seperti itu . Kenyataan di lapangan seringkali tidak sesederhana teori yang saya ceritakan. Langkah pertama, menentukan tujuan proyek, merupakan salah satu faktor utama penyebab kegagalan proyek. Seringkali tujuan proyek terlalu abstrak atau high-level, atau sering juga tujuan proyek tersebut berubah-ubah selama proyek berjalan. Penentuan unit pekerjaan dan perkiraan waktu juga merupakan hal yang sulit dilakukan jika proyek tersebut merupakan proyek pertama kita dalam suatu domain. Yang saya maksud domain di sini bisa dari segi bisnis maupun teknologi. Dari segi bisnis misalnya: biasanya kita membangun perangkat lunak untuk industri retail, namun dalam proyek saat ini klien kita adalah rumah sakit. Demikian juga jika kita sebelumnya biasa menggunakan platform Java dan untuk proyek saat ini kita harus menggunakan platform .NET.
Sebenarnya, manajemen proyek tidak hanya membahas mengenai masalah tujuan proyek, membagi unit pekerjaan, memperkirakan jadwal, menentukan SDM yang diperlukan, dan menghitung anggaran. Rujukan otoritatif mengenai manajemen proyek dapat Anda baca di A Guide to the Project Management Body of Knowledge (PMBOK). Ada 9 knowledge area dari PMBOK, yaitu: integrasi, scope, waktu, biaya, kualitas, SDM, komunikasi, resiko, dan procurement. Mungkin saya akan membahas PMBOK pada tulisan yang terpisah karena akan terlalu panjang jika disampaikan di sini.
Jika pembaca ingin mempelajari manajemen proyek lebih lanjut, saya juga merekomendasikan buku The Mythical Man-Month. Frederick P. Brooks, Jr. menulis buku ini dengan gaya bercerita sehingga enak untuk dibaca, tidak seperti buku teks kuliah. Selain itu, saya juga sering membaca artikel dari blog Endy Muhardin, pemilik perusahaan pengembang perangkat lunak Artivisi. Beliau memiliki banyak pengalaman dalam bidang manajemen proyek rekayasa perangkat lunak dan untungnya, beliau banyak membagi ilmunya melalui blog .
2.      Penerapan Metodologi Rekayasa Perangkat Lunak yang Benar
Kalau faktor kedua ini saya sudah mengambil mata kuliahnya . Dari mata kuliah Rekayasa Perangkat Lunak saya mengetahui mengenai metodologiwaterfall, spiral, iteratif, prototyping, Rapid Application Development (RAD), danobject-oriented. Selain semua itu, ada juga suatu kelompok metodologi yang baru saya ketahui secara otodidak: Agile. Terdapat banyak metodologi yang termasuk dalam kelompok Agile, di antaranya adalah Scrum, Extreme Programming (XP), Rational Unified Process (RUP), dan Test-Driven Development (TDD). Metodologi-metodologi dalam kelompok Agile ini lahir sebagai kritik terhadap metodologi-metodologi sebelumnya yang kebanyakan berbasis waterfall. Para pencetus Agile secara garis besar menyampaikan kritik mereka dalam Agile Manifesto.
Teori dan metodologi dalam rekayasa perangkat lunak itu ada banyak sekali. Dan dalam prakteknya metodologi rekayasa perangkat lunak juga tidak semudah teori karena:
1.      Tidak semua ahli sepakat mengenai bagaimana metodologi rekayasa perangkat lunak yang benar.
2.      No Silver Bullet, tidak ada suatu metodologi yang cocok diterapkan untuk semua kasus rekayasa perangkat lunak.
3.      Jadwal, jumlah SDM, dan biaya dari suatu proyek kadang-kadang berbenturan dengan metodologi yang digunakan. Yang ini merupakan permasalahan bisnis.
Sebenarnya masih ada lagi 2 hal yang menjadi penyebab utama kegagalan proyek-proyek saya, yaitu bagaimana berhubungan dengan klien/pengguna dan pemahaman akan proses bisnis klien. Kedua hal tersebut memang tidak diajarkan dalam kuliah. Saya akan membahas kedua hal tersebut dalam tulisan saya selanjutnya (kalau masih semangat nulis .

Kirimkan Ini lewat EmailBlogThis!Bagikan ke XBerbagi ke FacebookBagikan ke Pinterest
Posting Lebih Baru Posting Lama Beranda

0 komentar:

Posting Komentar

Langganan: Posting Komentar (Atom)
  • Popular Post
  • Label
  • Blog Archives
  • 26 Maret 2013
  • HTS (Hubungan Tanpa Status)
  • Mantan !
  • Move On
  • Tanda-Tanda Kalau Mantan Masih Cinta
  • HTS ( Hubungan Tanpa Status ) #2
  • Menyemai Cinta Ala LDR
  • Tips Mencari Pacar

Blog Archive

  • ▼  2013 (25)
    • ►  Desember (1)
      • ►  Des 20 (1)
    • ►  Juli (6)
      • ►  Jul 29 (1)
      • ►  Jul 05 (2)
      • ►  Jul 04 (3)
    • ▼  Juni (7)
      • ▼  Jun 30 (2)
        • Teknik Komputer Jaringan
        • Rekayasa Perangkat Lunak
      • ►  Jun 23 (3)
      • ►  Jun 07 (1)
      • ►  Jun 05 (1)
    • ►  Maret (8)
      • ►  Mar 26 (1)
      • ►  Mar 19 (1)
      • ►  Mar 16 (1)
      • ►  Mar 13 (2)
      • ►  Mar 12 (1)
      • ►  Mar 11 (1)
      • ►  Mar 10 (1)
    • ►  Februari (1)
      • ►  Feb 05 (1)
    • ►  Januari (2)
      • ►  Jan 31 (1)
      • ►  Jan 23 (1)

Categories

Cinta Kelakuan Gue Sahabat Tentang #KK Tentang Anak Tips Ulang Tahun Temen
Obrolan

Part OF Member

Banner By Rinaldi Santoso. Diberdayakan oleh Blogger.

Followers

SoundCloud

Penulis

Related Posts Plugin for WordPress, Blogger...

 
  • Jumlah Pengunjung

    count all hits
    Anda Pengunjung ?

  • Profile Si Penulis

    Foto saya
    Rinaldi Santoso
    Bandung, Jawa Barat, Indonesia
    Lihat profil lengkapku
Copyright © @Rinaldi_Sant | Powered by Blogger
Design by Rinaldi Santoso | Blogger Theme by @Rinaldi_Sant