Selasa, 15 Oktober 2013

Membahas Tentang Reverse Enginering

17.32

Konsep Reverse Engineering sebenarnya merupakan konsep yang telah lama, yakni sebuah proses analisis suatu sistem guna mendapatkan informasi mengenai identifikasi sistem, komponen sistem, dsb yang goalnya adalah menyajikan informasi tsb ke dalam bentuk abstraksi yang lebih tinggi, yakni lebih dimengerti oleh manusia. Nah  yang menjadi menarik adalah ketika beberapa litelatur menyajikan teknik reverse engineering dalam konsep masing-masing dengan segala kelebihan dan kekuranganya. artikel ini saya tulis bersumber pada papper Chih-Wei Lu tentang reverse engineering. paper ini menggambarkan proses reverse engineering dalam empat tahapan yakni : diawali proses context parsing, componenn analyzing, design recovery dan design recontructing, dimana masing-masing proses memiliki fungsi dan tujuan yang nantinya akan berkesinambungan dengan proses selanjutnya. agar lebih jelasnya silahkan baca artikel ini.

Software System telah menjadi bisnis penting bagi banyak perusahaan. Sekarang perusahaan mengandalkan lebih pada layanan yang diberikan oleh perangkat lunak, dan setiap kegagalan layanan ini akan memiliki konsekuensi serius pada operasi bisnis sehari-hari. Sistem ini biasanya besar dan kompleks, serta telah berevolusi selama puluhan tahun. Sehingga system yang demikian dikenal sebagai sistem warisan (Legacy System).

Sistem warisan perlu dipelihara dan dikembangkan karena berbagai faktor, termasuk kesalahan, koreksi, perubahan persyaratan, perubahan aturan bisnis, struktur organisasi yang berubah, dsb. masalah mendasar dalam mempertahankan dan mengembangkan sistem warisan adalah untuk memahami subjek sistem. Namun, sebagian besar sistem warisan tidak didokumentasikan dengan baik. Sebagai sistem yang telah lama dikembangkan kebutuhan untuk dokumentasi yang sesuai dan pemahaman desain asli sangat penting sehingga modifikasi perangkat lunak dapat dibuat dengan benar.

Reverse engineering adalah proses menganalisis sistem subjek untuk mengidentifikasi sistem, komponen dan antar hubungan mereka, dan menciptakan representasi sistem dalam bentuk lain atau tingkat abstrasksi yang lebih tinggi. Reverse engineering melibatkan identifikasi atau recovery dari kebutuhan program dan / atau spesifikasi desain yang dapat membantu dalam memahami dan memodifikasi program. Tujuan utama adalah untuk menemukan fitur yang mendasari sistem, termasuk persyaratan, spesifikasi, desain dan implementasi. Dengan kata lain, reverse engineering itu ditujukan untuk memulihkan dan mencatat informasi tingkat tinggi tentang sistem, termasuk:
  • Struktur sistem - komponen dan antar hubungan mereka, seperti yang diungkapkan oleh antarmuka;
  • fungsionalitas - operasi apa yang dilakukan pada komponen apa;
  • perilaku dinamis - Sistem pemahaman tentang bagaimana input diubah menjadi output;
  • Alasan - desain melibatkan pengambilan keputusan antara sejumlah alternatif pada setiap langkah desain
  • konstruksi - modul, dokumentasi, test suite, dll.

Beberapa tujuan untuk melakukan reverse engineering dapat diklasifikasikan ke dalam beberapa klasifikasi

  •  masalah kualitas (quality issues), seperti penyederhanaan perangkat lunak yang rumit, meningkatkan kualitas perangkat lunak yang mengandung kesalahan, penghapusan efek samping dari perangkat lunak, dll.
  • masalah pengelolaan (management issues), seperti membuat standar pemrograman, memfasilitasi teknik manajemen pemeliharaan perangkat lunak dengan lebih baik, dan sebagainya.
  • Masalah teknis (technical issues), seperti memungkinkan perubahan dalam perangkat lunak, menemukan dan merekam desain sistem,  menemukan dan merepresentasikan model bisnis yang ada dalam perangkat lunak, dll.

Tanpa dukungan Sarana yang tepat, biaya reverse engineering sistem perangkat lunak sangat tinggi. Tools Reverse engineering menyediakan mekanisme untuk ekstraksi data, Penciptaan model, visualisasi, dan penjelasan untuk membantu pemrogram untuk memahami sebuah sistem software.


Karakteristik / Masalah
Reverse Engineering adalah sebuah proses yang merupakan kebalikan dari Forward Engineering, untuk memahami kegiatan reverse engineering terlebih dahulu kita harus memahami tentang forward engineering, sebagai contoh forward engineering dapat kita lihat pada model pengembangan waterfall dimana pengembangan perangkat lunak disusun melalui proses analisa persyaratan, arsitektur desain, desain system, implementasi system.



Selama proses pengembangan system kemungkinan dapat terjadi bahwa suatu informasi dalam desain yang mungkin tidak didukung oleh bahasa pemrograman tertentu menjadi hilang dalam arti system menjadi kehilangan informasi tertentu. kesulitan utama dalam pemeliharaan dan evolusi sistem warisan adalah memulihkan informasi yang hilang
tersebut.

Forward Engineering selalu diakhiri dengan sebuah produk sedangkan reverse engineering dimulai dengan produk dalam hal ini perangkat lunak seperti system warisan (legacy system). Suatu system perlu di reverse kembali ketika sistem tidak dapat meminimalkan biaya, tidak mampu mengakomodasi perubahan fungsional sehingga apabila tidak segera diperbaiki akan menimbulkan resiko baru, atau karena kebutuhan lingkungan. Kita melakukan reverse engineering dapat dikarenakan beberapa hal sebagai berikut :
  • System Understanding (pemahaman thd system)
  • Basis for maintenance and redevelopment (dasar untuk pemeliharaan dan pembangunan kembali)
  • Reuse of component (penggunaan kembali komponen)
Yang pasti bahwa titik awal untuk reverse engineering adalah untuk memahami kode, berlawanan dengan proses pengembangan dan perbaikan, reverse engineering mencoba menelusuri kembali rute dan menemukan data asli yang telah hilang selama implementasi. Source code dan dokumentasi system yang ada merupakan sumber lain yang dapat memberikan informasi desain penting. Baru baru ini notasi visual seperti kelas diagram dalam UML merupakan representasi dokumen selama pengembangan sistem menggunakan teknologi yang lebiah modern seperti paradigma berorientasi objek atau pemrograman berorientasi objek. Namun sebagian besar system warisan sangat miskin dokumentasi atau memiliki dokumentasi yang kurang lengkap, jika tidak ada maka reverse engineering akan memakan waktu. Beberapa hal yang menyebabkan reverse engineering dari system warisan sangat sulit antaralain : pemrograman yang tidak konsisten, kurangnya staff yang mengerti computer atau bahasa pemrograman, dokumentasi yang kurang memadahi atau out of date, data  tidak akurat atau tidak lengkap
Factor yang mempengaruhi biaya reverse engineering antaralain :
  1. kualitas perangkat lunak yang akan di reverse
  2. ketersediaan alat dan dukungan
  3. apabila diperlukan konversi data
reverse engineering memungkinkan kita untuk mengidentifikasi komponen sistem dan menciptakan representasi ke tingkat yang lebih tinggi dari system. Kita bisa melihat hal ini lebih baik dengan menggambarkan proses yang digunakan dalam reverse engineering.

Proses Reverse Engineering
Dalam bagian ini akan dibahas tentang proses reverse engineering dan kegiatan dari setiap tahapan proses. Proses reverse engineering dapat dibagi menjadi empat fase : Context Parsing, Component Analyzing, Design Recovering dan Design Reconstructing.




Context Parsing
Tahap pertama adalah analisis source code, ekstrak sintaksis dan semantik informasi program. Dalam tahap ini teknik yang dilakukan adalah mem-parsing kode sumber dan kemudian mengubah kode ke representasi yang lebih terstruktur sebagai bentuk peralihan misalkan pengubahan source code dari bahasa mesin ke bahasa tingkat rendah.

Component Analyzing Phase

Fase ini mengambil struktur intermediate program untuk memperlihatkan artifak komponen. Artifak termasuk bagan struktur, variabel / attribut, fungsi informasi, program slice, grafik, data flow, dan kontrol dependensi. Banyak peneliti telah menyediakan pendekatan dan tools untuk berhasil memperoleh data flow diagram, diagram alir / flowchart dan informasi terkait selama tahap ini. Namun informasi tingkat tinggi yang tertanam pada source code aslinya tidak mudah untuk ditemukan. Sebagian besar teknologi reverse engineering menyediakan alat atau metodologi yang sistematis untuk mendukung tahap ini.

Design and Recovering Phase
Salah satu hambatan utama untuk membangun tools otomatis untuk ekstraksi desain dan domain pengetahuan dari program adalah pengetahuan yang implisit dari penyebaran informasi di seluruh kode. Pendek kata mengekstraksi original requirement dan atau design knowledge dari source code selalu menjadi masalah yang sulit. Dan biasanya untuk hal ini ditangani dalam domain para ahli. Saat ini dengan teknik yang menggabungkan struktural dan representasi, penganalisa dapat menyimpulkan beberapa informasi dalam level yang lebih tinggi,

Design Reconstructing phase
Pada tahap ini, model sistem dan spesifikasi desain yang diperoleh dari fase terakhir dapat dilihat lebih jauh dan terpadu untuk merekonstruksi pandangan yang tepat dari model desain. Desain model tidak hanya menawarkan fungsi dan perilaku sistem, tetapi juga arsitektur yang benar yang dapat terdistorsi dalam implementasi. Dengan struktur desain model yang baik, pemeliharaan perangkat lunak yang efektif dan pengembangan ulang perangkat lunak dapat diproses.

Teknik dan Tools
Bagian selanjutnya  akan membahas beberapa teknik dan peralatan / tools yang digunakan untuk melaksanakan proses reverse engineering. Tema-tema tersebut akan dibagi dalam tiga bagian :
  1. meyajikan skenario dalam penelitian dan teknik reverse engineering, 
  2. memilih dan mengenalkan aplikasi atau tools yang akan digunakan, 
  3. mengindikasikan kemungkinan penelitian di masa mendatang yang akan menghasilkan teknik baru dan tools untuk reverse engineering.
  • Skenario Penelitian dan Teknik Reverse EngineeringBagian ini menyajikan klasifikasi dari penelitian reverse engineering yang ada, penelitian pada masing-masing kategori biasanya melibatkan satu atau lebih fase reverse engineering, digambarkan pada gambar dibawah ini. 
Penelitian dan keterlibatan fase reverse engineering
Penelitian dan keterlibatan fase reverse engineering

Program Understanding
Pemahaman program bertujuan untuk memfasilitasi pemahaman terhadap sistem komputasi dengan examinasi code (pemerikasaan kode). Informasi yang berguna tersebut di ekstraksi dan disajikan dalam gaya dan aturan sesuai kognisi manusia. Selain merupakan bagian ilmu komputer. Pemahaman program dimulai dari tingkat kode sumber atau source code.

Specification recovery

Spesifikasi pemulihan bertujuan untuk mengekstraksi deskripsi syarat fungsional dan nonfungsional dari suatu sistem. Deskripsi ini dibuat dalam domain aplikasi.dari sudut pandang proses, spesifikasi pemulihan harus dilakukan dengan cara bottom-up karena satu-satunya informasi yang dapat diandalkan dari sistem warisan adalah kode sumbernya. Untuk mendukung proses bottom-up maka metode dan alat-alat / tools berguna untuk menghasilkan model abstrak dari kode sumber, sebagai contoh model deskripsi formal dalam bahasa formal yang sesuai. Teknik visualisasi software dapat juga digunakan untuk memberikan pandangan yang lebih intuitif dari sebuah sistem.

Design Recovery
Tujuan dari area penelitian ini adalah untuk mendapatkan gambaran desain dari kode sumber. Terdapat beberapa strategi untuk mencapai hal ini salah satunya adalah metode dasar. Dalam metode ini komputer hanya mengambil informasi yang seluruhnya berasal dari kode sumber. Metode yang lain adalah metode berbasis pengetahuan, dimana tool-tool bertujuan untuk membuat abstraksi secara otomatis atau semi-otomatis, tools tersebut menganalisa source code dengan menggunakan informasi pada knowledge base.

Architecture Recovery
Tujuan dari area penelitian ini adalah untuk mengekstraksi arsitektur sistem warisan dari source code dan dokumentasi, karena arsitektur akan memberikan gambaran luas dari seluruh sistem. Dengan semakin populernya sistem berbasis komponen dan sistem terdistribusi membutuhkan teknik yang lebih mahir untuk arsitektur pemulihan (architecture recovery).

Businnes rules extraction  
Para peneliti pada tema ini berpandangan bahwa sistem warisan memiliki aset yang berharga             didalamnya, yakni aturan bisnis organisasi. Mengekstraksi dan menggunakan kembali aturan tersebut sangat penting untuk evolusi sistem komputasi.

Cognitive processes in human program understanding
Masalah penelitian ini berfokus pada proses di mana manusia memahami kode sumber. Dengan bekerja sama dengan teknologi komputer, studi tentang proses-proses kognitif manusia dapat meningkatkan reverse engineering dengan membuat pendekatan dan alat yang lebih mendukung pemahaman manusia

Intermediate representation of source code
Intermediate representations digunakan untuk meningkatkan efisiensi dari rekayasa ulang suatu system besar. Source code di preprosses dan kemudian informasi program disimpan dalam intermediate representation. Query dalam intermediate representation akan lebih cepat diterima daripada query dari source code secara langsung.

Discovery of reusable components
Area penelitian ini bertujuan untuk mendapatkan kembali komponen-komponen reusable yang ada. Untuk mengetahui hubungan antar komponen serta kualitas komponen apabila akan di gunakan kembali. Isu penelitian pada area ini meliputi:
  1. criteria untuk mengevaluasi reusable komponen.
  2. proses untuk mengidentifikasi potensi resuable komponen
  3. bagaimana cara ekstraksi komponen secara tepat dan memahami komponen yang telah ditemukan.

Knowledge-based analysis
Sebagai kebutuhan untuk perangkat lunak rekayasa ulang meningkat secara dramatis, muncul kesadaran bahwa desain dari suatu tools perangkat lunak rekayasa ulang yang efektif harus cukup pintar sehingga domain pengetahuan yang sering digunakan dapat dipulihkan secara otomatis dari source code . ini mengarah ke trend  analisa berbasis pengetahuan untuk reverse engineering.

Tools
Beberapa tools sudah tersedia untuk beberapa area penelitian reverse engineering, tool-tool tersebut digambarkan pada tabel dibawah ini berdasarkan fungsinya dalam area penelitian.


Tools dan hubungan terkait dengan area penelitian
Area Penelitian Masa Mendatang
Masih ada studi yang akan dilakukan untuk membuat teknik reverse engineering menjadi lebih praktis. Kemungkinan wilayah penelitian antaralain :
Universal intermediary
Kebanyakan beberapa assistans tools reverse engineering menekankan tahapan dalam proses reverse engineering, dan biasanya menghasilkan hasil yang terkait dalam bentuk diagram yang mereka pahami sendiri. Meskipun beberapa representasi banyak digunakan namun belum ada standar yang diterima. Sehingga diperlukan perantara yang universal, XML (Extendsible Markup Language) mungkin menjadi calon perantara universal tersebut. XML memiliki fitur extendsibility, deskripsi struktur, dan validasi. Tujuan awal XML adalah untuk menyediakan sebuah format yang standar pada dokumen WWW. XML memungkinkan pengguna menentukan format dokumen sendiri dan menyajikan informasi suatu dokumen melalui standarisasi.

Dynamic analysis
Sebagian besar reverse engineering tools biasanya menganalisa program dalam bentuk static dan bukan perilaku dinamis program saat runtime, namun perilaku dinamis juga penting. Meningkatnya jumlah aplikasi berbasis website dan aplikasi berorientasi objek membuat isu analisa dinamis semakin penting.

New software technologies
Banyak teknologi perangkat lunak modern  diajukan untuk memcahkan masalah perkembangan perangkat lunak, seperti pengembangan berbasis komponen dan integrasi system, design pattern dan system objek terdistribusi. Aplikasi yang bertujuan untuk reverse engineering jenis ini masih jarang
Web Application
Aplikasi berbasis web sangat cepat popular dengan memanfaatkan teknologi Internet. Sehingga aplikasi berbasis web akan tumbuh sebagai sebagai target utama bagi reverse engineering generasi mendatang. Aplikasi berbasis web menghubungkan masing-masing sub-segmen dengan hyperlink
Referensi :

Chih-Wei Lu, *William C. Chu, Chih-Hung Chang,Yeh-Ching Chung, **Xiaodong Liu and Hongji Yang, “Reverse Engineering”

Abd-El-Hafiz, S; Basili, V.R., “Documenting Programs Using a Library of Tree Structured Plans”, Proceedings of the International Conference on Software Maintenance, IEEE Computer Society Press, pp. 152-161, 1993.

Anger, F.D.; Rodriguez, R.V.; Young, M., “Combining Static and Dynamic Analysis of Concurrent Programs”, Proceedings of the International Conference on Software Maintenance, IEEE Computer Society Press, pp. 89-98, 1995.

 Antonini, P.; Benedusi, P.; Cantone, G.; Cimitile, A., “Maintenance and Reverse Engineering: Low-Level Design Documents Production and Improvement”, Proceedings of the Conference on Software Maintenance, IEEE Computer Society Press , pp. 91-100, 1987.

 Bachman, R., A CASE for Reverse Engineering, Cahners Publishing Company, July 1988. Reprinted from DATAMATION.

Balmas, F., “Toward a Framework for Conceptual and Formal Outlines of Programs”, Proceedings of the Fourth Working Conference on Reverse Engineering, IEEE Computer Society, pp. 226-235, 1997.

Written by

We are Creative Blogger Theme Wavers which provides user friendly, effective and easy to use themes. Each support has free and providing HD support screen casting.

0 komentar:

Posting Komentar

 

© 2013 I'Learning. All rights resevered. Designed by Templateism

Back To Top