Tuesday, April 29, 2008

Dua Makhluk Penting Dalam Software Project

Makhluk? Iya, bukan cuma manusia. Sayangnya kita ga boleh minta bantuan jin :p

Bukan gitu maksudnya. Di dalam impian gw, mungkin saja sebagian pekerjaan dikerjakan oleh sistem yang sangat pintar. Sekarang sudah ada Case Tools, mungkin someday, cukup satu orang buat bikin software yang sangat advance :) Hmm, bukan cuma mimpi sebenernya.

Beberapa waktu ini, lagi ada kerjaan di Berlian Sistem Informasi. Di sini, project yang dikerjain canggih-canggih, dan buat perusahaan-perusahaan besar. Seru banget ngeliat fitur-fitur, teknologi, dan orang-orang yang ngerjain. Di sini, dokumentasi software development di sisi analisisnya bagus. Selama ngerjain kerjaan di sini gw berfikir tentang pembagian pekerjaan dalam software development (duh sam.. ga bosen sam?).

Menurut kesimpulan gw, ada dua makhluk yang sangat penting. Bahkan, nasib suatu project software ada di tangan mereka. Bukan artinya yang lain tidak penting, tapi dua makhluk ini yang terpenting.

Makhluk pertama bernama sistem analyst.

Apa yang seharusnya dikerjakan system analyst?
System analyst adalah penentu pertama dari gagal atau berhasilnya project software. IMHO, seorang system analyst adalah orang yang melakukan requirment gathering. Terjemahan sembaranganya, mengumpulkan kebutuhan. Yang sangat penting dipahami adalah kata "kebutuhan". Kebutuhan yang dikumpulkan sebetulnya bukan kebutuhan user akan software. Seorang sistem analyst harus bisa mengumpulkan kebutuhan calon user akan solusi.

Apa bedanya kebutuhan software dengan solusi? Kan solusi yang kita berikan ke calon user adalah solusi kan?

Betul. Begini rincinanya. Seorang analyst, harus mempelajari bagaimana suatu proses bisnis bekerja. Dan kenapa proses bisnis itu bekerja seperti itu. Setelah paham, barulah mereka berfikir, bagaimana caranya proses bisnis itu bisa dioptimasi. Sebetulnya, teknik optimasi ini dipelajari di Teknik Industri, bukan di Computer Science. Lalu sistem analyst berfikir, informasi apa yang dibutuhkan oleh setiap layer manajemen. Permasalahan informasi dari suatu bisnis adalah kebutuhan akan informasi yang cepat, akurat, dan pada waktunya.

Dengan begitu, kebutuhan calon user akan solusi dapat terpenuhi. Karena harus sangat dipahami, mereka implementasi IT itu karena mereka berfikir bahwa IT bisa menjadi solusi dari masalah mereka. Jika tidak, untuk apa? Akhirnya hanya menambah pekerjaan yang merepotkan.

Lebih baik implementasi sistem sederhana yang dapat digunakan untuk mencatat penjualan, lalu menampilkan report-report yang sangat variatif untuk kebutuhan pengambilan keputusan, daripada implementasi ERP dari A sampai Z tapi tidak memenuhi kebutuhan. Lebih baik lagi kalo implementasi ERP dari A sampai Z dan memnuhi kebutuhan :)

Yang perlu dipahami juga, kebutuhan <> keinginan. Seringkali calon user meminta bentuk report yang begini dan begitu. Sebenarnya yang perlu kita pahami adalah, kenapa calon user butuh report itu? Jika kita bisa memahaminya, mungkin kita dapat memberikan solusi yang lebih tepat untuk memenuhi kebutuhan dia. Wajar kan? System analyst ini adalah orang-orang yang berpengalaman dalam mengembangkan sistem informasi :)

Jadi, solusi = software dengan modul-modul yang tepat sasaran.

Inilah tugas system analyst. IMHO, karena tugas seberat ini, lebih baik tanggung jawab technical tidak diberikan kepada system analyst. Biarkan tugas technical diberikan pada makhluk lain.

Makhluk kedua bernama system designer atau di beberapa tempat disebut dengan senior programmer atau senior engineer. Bahkan di beberapa tempat ada yang namanya system architect yang merancang arsitektur teknologi (bukan cuma softwarenya). Namun di beberapa tempat, system designer ini tidak ada, akhirnya programmer merangkap system designer jg.

Apa yang seharusnya dilakukan system designer?
Software yang memenuhi kebutuhan user saja tidak cukup. Statement yang aneh, tapi itu bener. IMHO, software yang dibuat, selain harus memenuhi kebutuhan user, juga harus memenuhi kebutuhan tim development. Lebih aneh lagi statementnya :(

Maksudnya begini, jika suatu produk software dikerjakan, software itu pasti harus dimaintain. Memperbaiki erorr jika ada, menambah fitur jika dibutuhkan, integrasi dengan sistem lain dsb dsb dsb. Software dengan design yang baik, dan source code yang mengikuti standar akan memudahkan tim developer untuk memahami source code software tersebut. Dengan begitu, tahapan maintenance dan pengembangan berikutnya akan lebih baik. Penjelasan ini, berkaitan dengan atribut understandability dan modifiability di posting sebelumnya tentang kualitas software.

Pada saat mendisain software, system designer harus selalu berfikir tentang understandability dan modifiability ini. Hal ini bukan hal mudah. Namun sangat terbantu dengan adanya design pattern yang bisa kita temukan di banyak buku.

Kesimpulan dari tulisan ini, ada dua makhluk penting dalam software development, yang satu mikirin apa yang harus dibuat (system analyst), yang satu mikirin gimana dibuatnya (system designer).

Apakah selain dari mereka berdua penting? Ya sangat penting. Intinya, jika di dalam tim software ada dua makhluk di atas yang berkemampuan tinggi, maka pekerjaan software development kita akan lebih banyak dihiasi senyuman :)

NB:
Duh, bikin sistem informasi mulu, jadinya kalo ngomong software itu maksudnya sistem informasi. Semoga pembaca bisa mengerti. Hehe.

Saturday, April 19, 2008

Kualitas Software

Menurut Robert L Glass (Facts and Fallacies od Software Engineering, Addison Wesley, 2002), kualitas software adalah mengenai sekumpulan atribut yang seharusnya dimiliki oleh suatu produk software. Atribut-atribut tersebut adalah:
1. Portability. Kemudahan pemindahan software ke platform lain.
2. Reliability. Software dapat diandalkan untuk melakukan apa yang seharusnya dilakukan.
3. Efficiency. Software dapat melakukan pekerjaan dengan waktu kerja dan penggunaan resource yang ekonomis.
4. Human Engineering. Software dapat digunakan dengan mudah dan nyaman.
5. Testability. Software mudah untuk diuji.
6. Understandability. Software mudah dipahami sehingga memudahkan proses pemeliharaan.
7. Modifiability. Software mudah dipelihara (maintain) dan diubah.

Portability pada software, sangat tergantung kepada teknologi yang digunakan. Pemilihan teknologi didasari oleh pertimbangan yang matang berdasarkan hasil analisis terhadap calon pengguna. Jika calon pengguna menggunakan platform yang heterogen, maka portability adalah hal yang sangat penting. Namun portability akan berkurang prioritasnya ketika calon pengguna menggunakan spesifikasi teknologi yang seragam.

Reliability adalah atribut yang tidak dapat ditawar. Hal ini dapat dicapai dengan melakukan proses analisis kebutuhan calon pengguna dengan baik. Proses analisis kebutuhan seringkali dipandang sebagai proses menyimpulkan kebutuhan calon pengguna terhadap software. Seharusnya, proses analisis dipandang sebagai proses yang dilakukan untuk menyimpulkan solusi untuk masalah pengguna. Perbedaan pandangan ini sangat penting, karena sering kali calon pengguna menjelaskan kebutuhan modul yang dibutuhkanya, namun modul tersebut bukanlah solusi yang terbaik dari masalah yang dihadapinya. Dengan menganalisa masalah calon pengguna, lalu menyimpulkan solusi dari sisi kita maka engineer dapat lebih menjamin reliability dari suatu software.

Efficiency seringkali tidak diperhatikan. Umumnya hal tersebut terjadi, karena tim fokus kepada spesifikasi fungsional sistem. Ketika spesifikasi fungsional sudah terpenuhi, maka modul software dianggap telah mencapai kualitas yang baik. Efficiency seringkali tidak terasa dibutuhkan pada aplikasi sistem informasi yang tidak melakukan proses yang rumit. Namun untuk proses yang rumit, efficiency menjadi hal yang sangat penting untuk diperhatikan. Efficiency dapat dicapai dengan disain yang baik dan code review terhadap hasil implementasi disain yang dilakukan. Selain itu, pada saat pengujian (testing), perlu dilakukan stress testing, suatu proses pengujian yang menekankan pada kemampuan software pada saat melakukan proses pada keadaan yang tersulit (e.g. data yang sangat banyak).

Human engineering dapat dicapai dengan melakukan perancangan antar muka software dengan baik. Hal ini juga berkaitan dengan efficiency jika software melakukan proses yang rumit, karena pengguna akan merasa tidak nyaman jika proses yang dilakukan terlalu lama.

Testability akan berpengaruh terhadap reliability. Engineer dapat menyimpulkan bahwa suatu software sudah cukup reliable untuk direlease adalah berdasarkan hasil pengujian. Karena itu, testability adalah atribut yang sangat penting dalam pengembagan software.

Understandability dan modifiability. Kedua atribut tersebut bisa diacapai dengan melakukan proses disain yang baik dan kontrol terhadap kode yang dihasilkan oleh programmer. Pada pengembangan software, terdapat suatu framework yang digunakan oleh seluruh engineer dalam mengembangkan modul. Kode program yang dihasilkan perlu direview agar dapat dipastikan bahwa programmer telah menulis kode sesuai dengan standar yang sudah ditetepakan di framework. Dengan perancangan dan penulisan kode yang sesuai dengan standar yang ada, maka disain dan kode yang dihasilkan oleh engineer akan mudah untuk dipahami oleh engineer lain. Hal ini menjadi atribut yang sangat penting untuk diperhatikan, terutama jika engineer yang mengerjakan sering berganti.

Thursday, April 17, 2008

Kopi BSI


Semenjak ngerjain kerjaan bsi jd minum kopi tiap hari. Ini test blogging pake k530i.

Wednesday, April 02, 2008

6 Prinsip Bisnis Yang Harus Diketahui oleh Manajemen

Beberapa waktu belakangan ini, lagi baca buku judulnya The Complete Ideal's Guide MBA Basic, karangan Tom Gorman. Buku ini sudah dalam bahasa Indonesia. Yang ternyata, versi bahasa ingrris judulnya The Complete Idiot's Guide to MBA Basics (menyedihkan skali :( ). Tapi isi buku itu bener-bener bagus dan enak di baca. Memang Idiot's series itu emang didisain untuk mudah dibaca. Untuk liat bab-bab lengkapnya, silahkan masuk ke link amazon tadi dan klik link Search Inside The Book.

Di bab pertama buku itu, dijelaskan "6 prinsip bisnis yang harus diketahui oleh manajemen profesional". Sebetulnya bukan hanya enam, pasti masih banyak lagi. Tapi 6 prinsip ini sangat penting. Begini kira-kira prinsipnya,

  1. Nilai (value). Bisnis melakukan perubahan dari sumber daya yang ada menjadi nilai. Sumber daya bisa berupa bahan mentah, tenaga kerja, tenaga listrik dan lain sebagainya. Pada dasarnya, nilai inilah yang dibeli oleh customer. Contoh yang ada di buku itu, Mc Donald membuka tempat makan yang murah yang mudah dijangkau. Itulah nilai yang mereka jual. Kami di sini, menjual kemampuan untuk membuat software, dan produk software yang telah kita buat untuk membantu pekerjaan orang.
  2. Pengorganisasian (Organizing). Maksud dari pengorganisasian adalah mengatur. Manajemen perlu tau caranya mengatur seluruh proses perubahan nilai yang terjadi di dalam bisnis. Untuk memudahkan pengaturan, biasanya dibuat struktur perusahaan sehigga adanya manajer produksi, manajer keuangan, CEO, CFO, etc etc. Masalah struktur ini tergantung culture dari bisnisnya. Misalkan untuk perusahaan manufaktur, struktur yang hirarkis sangat penting. Namun untuk perusahaan yang lebih banyak kreatif, struktur yang lebih longgar lebih baik. Inti utamanya bukan pada struktur, tapi pada pengorganisasian.
  3. Kontrol. Tidak pernah ada jawaban "tidak tahu". Artinya, seorang manajer harus dapat melakukan kontrol (mengendalikan) perusahaan-nya. Kontrol perusahaan dapat dilakukan berdasarkan informasi yang didapat. Bayangan-nya begini, andai kita sedang menyeetir mobil. Mobil dikendalikan dengan setir, gas, kopling, dan rem. Untuk dapat mengendalikan mobil kita perlu informasi yang kita dapat dari kaca mobil, speedometer, ukuran bensin dsb dsb. Dengan demikian, kita dapat sampai di tujuan kita.
  4. Keunggulan kompetitif. Setiap perusahaan memiliki keunggulan kompetitif-nya masing-masing. Keunggulan kompetitif dapet beupa macam-macam bentuk. Keunggulan dari sisi kualitas, dari sisi harga, dari sisi service dan lain sebagainya. Namun tidak ada perusahaan yang memiliki seluruh komponen keunggulan kompetitif. Manager harus mengetahui ini, dan mengendalikan perusahaan untuk konsentrasi pada keunggulan kompetitif ini, sehingga bisa bersaing dengan perusahaan-perusahaan lain.
  5. Profitabilitas. Tujuan bisnis adalah menghasilkan profit untuk pemilik bisnis. Sehebat apapun yang dilakukan, tidak ada manfa'atnya jika tidak menghasilkan profit. Tujuan utama dari bisnis adalah profit.
  6. Etika. Masalah ini terjadi pada beberapa perusahaan di Amerika. Salah satu contohnya adalah Enron, yang dituntut karena praktek saham yang tidak benar. Masalah ini sering muncul karena godaan untuk menghasilkan profit yang lebih tinggi.
Begitulah, prinsip bisnis yang baru dibaca. Rasanya sangat bermanfaat, setidaknya buat manager pemula seperti sayah :)