Rabu, 06 Juni 2012

Software Configuration untuk Software Engineers

[Tulisan ini dibuat untuk Calon Mahasiswa Informatika, para mahasiswa program studi informatika dan khalayak umum yang ingin mengetahui kompetensi dasar seorang software engineers; untuk tulisan saya sebelumnya yang terkait dengan bagian ini, dapat dilihat disini:
1) Problem Solving untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/problem-solving-untuk-software.html
2) Matematika Dasar untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/matematika-dasar-untuk-software.html
3) Dasar Komputasi untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/dasar-komputasi-untuk-software.html
4) Software Construction untuk Software Engineers disini:
5) Software Modelling untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/software-modelling-untuk-software.html
karena tulisan ini merupakan tulisan bersambung mengenai topik Kompetensi Yang Harus dimiliki seorang Software Engineers]

Seorang software engineers secara umum, harus memiliki keahlian dalam SOFTWARE DEVELOPMENT atau pengembangan perangkat lunak. Software Development dapat dibagi menjadi beberapa bagian utama, yakni:
  • Software Construction (Konstruksi Software)
  • Software Engineering Models and Methods (Pemodelan dan Metode Software)
  • Software Maintenance (Perawatan Software)
  • Software Configuration (Konfigurasi Software)
Pada bagian ini saya akan menulis tentang Software Configuration atau Konfigurasi Perangkat Lunak. Apa yang dimaksud dengan software configuration? Konfigurasi perangkat lunak mengacu pada "interaksi" sebagai sistem pada perangkat lunak. Interaksi ini menyangkut setiap elemen yang mendukung, sehingga perangkat lunak bisa berfungsi sesuai peruntukannya. 
Dalam konteks konfigurasi perangkat lunak, maka karakteristik fisik dan fungsi lingkungan implementasi dan dokumentasi menjadi perhatian utama. Termasuk diantaranya adalah kumpulan spesifik (dalam versi tertentu) dari hardware, software dan firmware yang turut digunakan untuk pengembangan perangkat lunak. Fokus lainnya adalah "pengelolaan" dari konfigurasi sistem perangkat lunak tersebut. Misalnya pengelolaan perubahan persyaratan perangkat lunak ataupun traceability konfigurasi pada daur hidup pengembangan perangkat lunak.
IEEE/ISO/IEC 2010 mengartikan software configuration management sebagai
" A discipline applying technical and administrative direction and surveillance to: identify and document the functional and physical characteristics of a configuration item, control changes to those characteristics, record and report change processing and implementation status, and verify compliance with specific requirements"

Software Configuration meliputi aspek-aspek manajemen perangkat lunak, yang meliputi perencanaan, analisis dan perancangan, pengembangan, perawatan dan jaminan kualitas. Seperti pada Gambar diatas, ditampilkan dengan lengkap berbagai aspek yang terkait dengan kompetensi software engineers ini.

Berikut adalah topik bahasan yang terkait dengan Software Configuration Management (SCM):
1. Management Proses SCM, meliputi pembahasan: Organizational Context for SCM; Constraints and Guidance for SCM Process; Planning for SCM; SCM Plan; and Surveillance of SCM.
2. Software Configuration Identification, meliputi pembahasan: Identifying Items to be Controlled, Software Library.
3. Software Configuration Control, terkait dengan: Requesting, Evaluating and Approving Software Changes; Implementing Software Change; dan Deviation and Waivers.
4. Software Configuration Status Accounting, berkaitan dengan: Software Configuration Status Information; Software Configuration Status Reporting.
5. Software Configuration Auditing, membahas tentang: Software Functional Configuration Audit; Software Physical Configuration Audit, In-Process Audits of a Software Baseline.
6. Software Release Management and Delivery, terkait dengan topik-topik seperti: Software Building; Software Release Management
7. Software Configuration Management Tools

Software Modelling untuk Software Engineers


[Tulisan ini dibuat untuk Calon Mahasiswa Informatika, para mahasiswa program studi informatika dan khalayak umum yang ingin mengetahui kompetensi dasar seorang software engineers; untuk tulisan saya sebelumnya yang terkait dengan bagian ini, dapat dilihat disini:
1) Problem Solving untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/problem-solving-untuk-software.html
2) Matematika Dasar untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/matematika-dasar-untuk-software.html
3) Dasar Komputasi untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/dasar-komputasi-untuk-software.html
4) Software Construction untuk Software Engineers disini:
karena tulisan ini merupakan tulisan bersambung mengenai topik Kompetensi Yang Harus dimiliki seorang Software Engineers]

Seorang software engineers secara umum, harus memiliki keahlian dalam SOFTWARE DEVELOPMENT atau pengembangan perangkat lunak. Software Development dapat dibagi menjadi beberapa bagian utama, yakni:
  • Software Construction (Konstruksi Software)
  • Software Engineering Models and Methods (Pemodelan dan Metode Software)
  • Software Maintenance (Perawatan Software)
  • Software Configuration (Konfigurasi Software)
Pada bagian ini saya akan menulis tentang Software Engineering Models and Methods.  Aspek ini terbagi pada dua bagian besar, yakni Pemodelan Perangkat Lunak dan Metode Pengembangan Perangkat Lunak. Selain, kontruksi perangkat lunak, maka pemodelan perangkat lunak merupakan kompetensi utama yang HARUS dimiliki oleh seorang software engineers.


Metode dan Pemodelan Perangkat Lunak merupakan struktur teknik informatika yang bertujuan untuk membuat konstruksi perangkat lunak berfokus pada aktivitas yang sistematis, repeatable dan success-oriented. Model perangkat lunak memberikan pendekatan baru dalam konstruksi perangkat lunak yang lebih "problem - solving", dengan menggunakan notasi dan prosedur yang menekankan proses analis dan perancangan perangkat lunak. Metode perangkat lunak menyediakan pemahaman kerangka kerja yang mengikuti "daur hidup", sehingga menuruti prinsip logis, berurutan dan berkesinambungan. Fokus kompetensi software engineers terkait bagian ini adalah pemahaman komprehensif tentang pengembangan perangkat lunak, mulai dari perencanaan, spesifikasi, perancangan, konstruksi, pengujian hingga implementasi.

Materi kurikulum terkait Software Engineering Models and Methods menurut Software Engineering Body of Knowledge IEEE adalah sebagai berikut:
1. Modelling
Modelling terbagi atas Modelling Principles, Properties and Expression; Syntax, Semantics dan Pragmatics; Pre-conditions, Post-conditions dan Invariants,
2. Types of Models
Tipe Model Perangkat Lunak terbagi atas: Information Modelling, Behavioral Modelling, Structure Modelling.
3. Analysis of Models
Analisis Model Perangkat Lunak terdiri atas: Analisis untuk Completeness, Analisis untuk Consistency, Analisis intik Correctness, Traceabiliy (keterlacakan/keterunutan) dan Analisis Interaksi.
4. Metode Perangkat Lunak
Bagian ini terdiri dari: Metode Heuristics, Metode Formal, Metode Prototyping dan Metode Agile.



Software Construction untuk Software Engineers

[Tulisan ini dibuat untuk Calon Mahasiswa Informatika, para mahasiswa program studi informatika dan khalayak umum yang ingin mengetahui kompetensi dasar seorang software engineers; untuk tulisan saya sebelumnya yang terkait dengan bagian ini, dapat dilihat disini:
1) Problem Solving untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/problem-solving-untuk-software.html
2) Matematika Dasar untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/matematika-dasar-untuk-software.html
3) Dasar Komputasi untuk Software Engineers disini: http://stanleykarouw.blogspot.com/2012/06/dasar-komputasi-untuk-software.html
karena tulisan ini merupakan tulisan bersambung mengenai topik Kompetensi Yang Harus dimiliki seorang Software Engineers]

Setelah menulis tentang ketiga topik diatas yang merupakan kompetensi dasar utama dari seorang software engineers, maka pada bagian ini, saya akan menulis tentang kompetensi keahlian seorang software engineers. Seorang software engineers secara umum, harus memiliki keahlian dalam SOFTWARE DEVELOPMENT atau pengembangan perangkat lunak. Software Development dapat dibagi menjadi beberapa bagian utama, yakni:
  • Software Construction (Konstruksi Software)
  • Software Engineering Models and Methods (Pemodelan dan Metode Software)
  • Software Maintenance (Perawatan Software)
  • Software Configuration (Konfigurasi Software)

(gambar diatas diambil dari http://cs.anu.edu.au/student/comp2100/ )

Pada bagian ini, saya akan membahas tentang Software Construction/Konstruksi Perangkat Lunak. Secara umum, yang dimaksud dengan Konstruksi Perangkat Lunak adalah keseluruhan aktivitas menciptakan perangkat lunak yang berfungsi dan bermanfaat melalui berbagai proses kodifikasi, verifikasi, pengujian dan pemeriksaan-ulang. Konstruksi Perangkat Lunak adalah kompetensi yang terkait dengan disain perangkat lunak dan pengujian perangkat lunak.
Dari sudut pandang akademisi dan praktisi maka konstruksi perangkat lunak merupakan "bagian" proses pengembangan perangkat lunak yang memiliki "highest volume of configuration items" (atau aktivitas-aktivitas konfigurasi yang diutamakan). Konstruksi perangkat lunak berhubungan dengan penulisan kode, pengujian kode dan pemeriksaan-ulang kode sehingga tentu saja berkaitan dengan kualitas perangkat lunak itu sendiri. Secara mendasar, maka kualitas perangkat lunak itu ditentukan oleh kualitas penulisan, pengujuan dan pemeriksaan-ulang kode.
Disamping itu, konstruksi perangkat lunak juga sangat berkaitan dengan "kemampuan komputasi" (terutama pengetahuan algoritma), karena penulisan kode, pengujian kode dan pemeriksaan-kode sangat membutuhkan pemahaman komputasi dasar secara komprehensif dan mendalam.

Berikut adalah beberapa topik bahasan dalam kurikulum Teknik Informatika yang dikeluarkan oleh IEEE Software Engineering Body of Knowlede (SWEBOK IEEE):

1. Dasar-dasar Konstruksi Perangkat Lunak
Dasar-dasar konstruksi perangkat lunak ini termasuk: penyederhanaan kompleksitas; antisipasi perubahan persyaratan perangkat lunak;  konstruksi untuk verifikasi perangkat lunak; guna-ulang (atau disebut "reuse") dan standarisasi konstruksi perangkat lunak.

2. Pengelolaan Konstruksi Perangkat Lunak
Topik bahasan yang termasuk pada bagian ini adalah: 
Model Daur Hidup konstruksi perangkat lunak; Perencanaan Perangkat Lunak dan Pengukuran Konstruksi Perangkat Lunak.

3. Aspek-aspek Praktis Konstruksi Perangkat Lunak
Meliputi pembahasan tentang: Disain konstruksi perangkat lunak, bahasa pemrograman, kodifikasi, pengujian perangkat lunak, konstruksi untuk guna-ulang (dan konstruksi dengan guna-ulang), jaminan kualitas perangkat lunak dan integrasi perangkat lunak.

4. Aspek-aspek Teknis Konstruksi Perangkat Lunak
Topik bahasan bagian ini meliputi: 
Disain API dan Penggunaannya; Object-oriented Run-time; Generalisasi dan Parameterisasi; Assertion, Design by Contract, Defensive Programming; Pengendalian Error, Pengendalian Exception, dan Fault Tolerance; Executable Models; State-based dan Teknik Konstruksi Table Driven; Run-time Configuration dan Internationalization; Grammer-based Input Processing; Concurrency Primitives; Middleware; Metode Konstruksi untuk Distributed Software; Kontruksi Heterogeneous Systems; Analisis Performance dan Tuning; Platform Standards; Test-first programming.

5. Tools Konstruksi Perangkat Lunak
Terkait dengan materi ini adalah: Development Environments; GUI Builders; Unit Testing Tools; Profiling, Performance Analysis dan Slicing Tools.


Selasa, 05 Juni 2012

Problem Solving untuk Software Engineers

[Tulisan ini dibuat untuk Calon Mahasiswa Informatika, para mahasiswa program studi informatika dan khalayak umum yang ingin mengetahui kompetensi dasar seorang software engineers]

Salah satu kompetensi yang HARUS (atau SEBAIKNYA) dimiliki oleh seorang software engineers adalah kemampuan untuk menyelesaikan masalah. Karakteristik seorang engineers pada hakikatnya adalah seorang PROBLEM SOLVER, dan dalam konteks software engineers, maka kompetensi ini terkait dengan menyelesaikan masalah-masalah yang ada dalam software engineering.
(gambar diambil dari http://usf-web2.wikispaces.com/ )

Untuk menjadi seorang "problem solver" maka, software engineers harus memahami sedikitnya 3 hal:
1. Menguasai TEORI yang RELEVAN; terkait dengan kompetensi ini maka seorang software engineers harus menguasai teori matematika dasar, teori ilmu komputasi dasar dan berbagai teori software engineering lainnya (seperti misalnya teori pengembangan perangkat lunak).
2. Membangun KERANGKA BERPIKIR; terkait dengan kompetensi ini maka seorang software engineers harus dapat membangun kerangka berpikir berdasarkan metodologi penelitian yang presisi. Proses logis yang berurutan, saling-terkait, saling-kausal dengan didukung oleh paradigma keilmuan engineering harus menjadi prinsip kerangka berpikir seorang software engineers.
3. Menguasai DOMAIN MASALAH; terkait dengan kompetensi ini adalah pemahaman komprehensif (atau menyeluruh) dari keilmuan software engineering.
Penjelasan diatas saya kutip (dengan perubahan seperlunya dari seorang dosen saya: DR. Riri Satria yang memberikan "ilmu" pada saya terkait Metodologi Penelitian. Tulisan beliau tentang kompetensi problem solver seorang software engineers, dapat dibaca selengkapnya disini.
Argumentasi yang dikemukakan oleh DR Riri Satria tersebut adalah ketiga kompetensi diatas, diperlukan untuk melakukan PROSES ANALISIS DAN DISAIN, dimana hasil "proses berpikir: analisis dan disain" itu tersebut digunakan untuk MENYELESAIKAN permasalahan yang dihadapi.
Lihat Gambar dibawah ini:
(gambar diatas diambil di http://ririsatria40.wordpress.com/2010/05/01/kuliah-membahas-kasus/ )

Terkait dengan "core competency" sebagai seorang problem solver maka, dalam keilmuan software engineering, IEEE SWBOK memberikan "saran acuan" kurikulum sebagai berikut:
(a) Definisi Penyelesaian Masalah; 
(b) Formulasi Permasalahan; 
(c) Analisis Permasalahan; 
(d) Mendisain Solusi Penyelesaian Masalah


Menurut pendapat saya, untuk dapat melakukan proses thinking analisis, sintesis dan disain, maka seorang software engineers HARUS memiliki kebiasaan membaca buku. Pengalaman saya dalam mendidik para calon-calon sarjana teknik Informatika adalah mereka tidak bisa melakukan proses analisis, sintesis dan disain, bukan karena tidak mampu, TETAPI lebih dikarenakan mereka tidak cukup memiliki "data/informasi" terkait TEORI dan DOMAIN MASALAH. Menurut hemat saya, membiasakan diri (baca: MENDISIPLINKAN) untuk membaca adalah suatu kegiatan belajar yang MANDATORY untuk dilakukan para software engineers.


Dasar Komputasi untuk Software Engineers

[Tulisan ini dibuat untuk Calon Mahasiswa Informatika, para mahasiswa program studi informatika dan khalayak umum yang ingin mengetahui kompetensi dasar seorang software engineers]

Komputasi untuk Software Engineers merupakan "core competency" atau kompetensi inti. Komputasi pada dasarnya terkait dengan dasar-dasar ilmu komputer yang mendukung proses analisa, perancangan dan konstruksi dari perangkat lunak. Komputasi dasar juga akan terkait dengan proses transformasi "disain" perangkat lunak, menjadi perangkat lunak yang siap digunakan (implementasi), tools (atau alat pendukung) yang diperlukan dalam proses-proses ini dan berbagai metode pengembangan perangkat lunak.
Pada umumnya, kita menerima sebagai suatu kenyataan bahwa software engineering (atau Rekayasa Perangkat Lunak atau Teknik Informatika) "dibangun" diatas dasar-dasar ilmu komputer dan ilmu matematika. Meskipun demikian, ada beberapa ilmuwan yang tidak sependapat dengan pandangan ini. Saya berpendapat bahwa software engineering "dibangun" diatas keilmuan ilmu komputer dan matematika.

Seorang pakar ilmu komputer Andrew Tanenbaum, menulis dalam bukunya Structured Computer Organization ISBN 978-0-13-148521-1; bahwa ilmu komputer mempelajari komputer sebagai "berbagai level abstraksi perangkat keras dan perangkat lunak". Level abstraksi sistem komputer itu dapat dilihat pada Gambar dibawah ini:
(Gambar Abstraksi Komponen Sistem diatas diambil di http://kambing.ui.ac.id/bebas/v06/Kuliah/SistemOperasi/2003/41/produk/SistemOperasi/c1.html)

Software Engineers "melihat" komputer dari sudut pandang software abstraction layer dan hardware abstraction layer. Dibagian lebih dasar dari hardware abstraction layer ada layer solid-states yang merupakan bagian dari disiplin ilmu Elektro (Electrical Engineering). Dibagian lebih atas dari software abstraction layer, dapat ditambahkan layer internet, web (1.0, 2.0 dan X.X) dan komputasi awan/cloud computing. Layer ini sering disebut Teknologi Informasi.
Keilmuan software engineering meliputi "abstraksi" dari perangkat lunak dan perangkat keras. Secara kasar dapat dikatakan bahwa tidak ada perangkat lunak yang "berjalan" tanpa membutuhkan perangkat keras. Software Engineering melihat kerangka kerja perangkat lunak, perangkat keras dan konektivitas jaringan sebagai bagian level abstraksi. Abstraksi perangkat lunak dan perangkat keras dibangun berdasarkan ilmu komputasi dan matematika. Sehingga, dengan demikian setiap software engineer harus memiliki kompetensi terkait ilmu komputasi dasar, karena ilmu komputasi dasar sangat erat terkait dengan proses analisis, disain dan implementasi perangkat lunak, dalam lingkungan abstraksi seperti pada Gambar diatas.

Ilmu Komputasi Dasar meliputi bahasan seperti pemrograman, struktur data, algoritma, organisasi dan arsitektur komputer, networking, sistem terdistribusi, dan lainnya. Pemetaan ilmu komputasi dasar dengan matematika dasar, analisa dan perancangan perangkat lunak, pengembangan perangkat lunak, pengujian perangkat lunak, jaminan kualitas perangkat lunak dan pemeliharaan perangkat lunak MERUPAKAN salah satu pemahaman kunci yang harus dimiliki seorang Software Engineers.

Berikut adalah topik bahasan ilmu komputasi dasar menurut Software Engineering Body of Knowledge yang dikeluarkan IEEE:
  • Abstraksi; level abstraksi, enkapsulasi, prinsip hierarki
  • Pemrograman Dasar: proses pemrograman, paradigma pemrograman dan defensive programming.
  • Dasar Bahasa Pemrograman: Sejarah Bahasa Pemrograman, Sintaks dan Semantik Bahasa Pemrograman, Bahasa Pemrograman Tingkat Rendah, Bahasa Pemrograman Tingkat Tinggi, Bahasa Pemrograman Imperative dan Declarative
  • Teknik dan Tools Debugging: Tipe Error, Teknik Debugging, Tools Debugging.
  • Struktur dan Representasi Data: Struktur Data, Tipe-tipe struktur data dan Operasi pada Struktur Data.
  • Algoritma dan Kompleksitas: Pengantar Algoritma, Atribut Algoritma, Analisa Algoritma dan Disain  Strategis Algoritma.
  • Konsep Dasar Sistem: Karakteristik Emergent System, System Engineering, Pengantar Sistem Komputer.
  • Organisasi dan Arsitektur Komputer: Pengantar Organisasi Komputer, Sistem Digital, Logika Digital, Ekspresi Data, Central Processing Unit, Organisasi Sistem Memori, Unit Input/Output.
  • Dasar Kompilasi: Pengantar Kompilasi, Interpretasi dan Proses Kompilasi.
  • Dasar Sistem Operasi: Pengantar Sistem Operasi, Abstraksi Sistem Operasi, Fungsi Sistem Operasi dan Klasifikasi Sistem Operasi.
  • Basis Data dan Manajemen Data: entitas dan schema, sistem manajemen basis data, bahasa query basis data, manajemen data, data mining.
  • Dasar Komunikasi Jaringan: Tipe Jaringan, Komponen Dasar Jaringan, Standar dan Protokol Jaringan, Internet, Internet of Things dan Virtual Private Network.
  • Parallel dan Distributed Computing: Pengantar Parallel dan Distributed Computing, Perbedaan Parallel dan Distributed Computing, Model dan Isu terkini.
  • Basic User Human Factors: Tampilan Masukan dan Keluaran, Pesan Kesalahan, dan Software Robustness
  • Basic Developer Human Factors: Struktur, Comments
  • Secure Coding: Aspek Secure Coding, Coding Security pada Software, Persyaratan Security, Disain Security dan Implementasi Security.