Best Practice of Working with Legacy Code


When you want to make change to legacy code, here some algorithm you can use:

  1. Identify change points.
  2. Find test points.
  3. Break dependencies.
  4. Write test.
  5. Make test
  6. Make change, refactor

The day-to-day goal in legacy code is to make changes, but not just any changes. We want to make functional changes that deliver value while bringing more of the system under test. At the end of each programming episode, we should be able to point not only to code that provides some new feature, but also its tests. Over time, tested areas of the code base surface like islands rising out of the ocean. Work in these islands becomes much easier. Over time, the islands become large landmasses. Eventually, you’ll be able to work in continents of test-covered code.

Searching pattern for user interface


Mengimplementasikan searching method untuk melakukan pencarian data bukanlah hal yang mudah. Bayangkan kita di assign task untuk mengimplementasikan searching departement dengan screen seperti dibawah ini:

Search Department
Name: [_______]
Age: from [__] to [__] year old
Budget: [ ]
{Search}

Data akses yang spesifik berhubungan dengan domain model di implementasikan dengan Repository pattern.  Cara umum yang biasa dilakukan orang adalah:

Lambda-Expression Repository

var result = departmentRepository.FindAll<Department>(
		x => x.Name.Contains(emailAddress) && x.StartDate > ageFrom
		&& x.StartDate > ageFrom && x.StartDate < ageTo || x.Budget < budget
	);

Aku suka dengan fitur Fluent diatas. Client API bisa dengan leluasa meng passing searching criteria ke parameter method tersebut. Tapi aku kurang nyaman dengan cara diatas, aku ga suka membiarkan searching criteria telanjang. Ketika aku hendak me-reuse criteria tersebut di screen lain tidak akan bisa. karena criteria di specify oleh client saat invoke method FindAll.

Continue reading

Messaging and Event Driven Architecture Example


Berdasarkan postingan sebelumnya mengenai Messaging and Event Driven Architecture. Sekarang saat nya aku membahas bagaimana cara mengimplementasikanya. Contoh aplikasi kali ini aku ambil dari ChatDownloader Aplication yang aku post sebelum nya. Namun sebelum masuk membendah contoh aplikasi tersebut ada hal-hal yang perlu aku jelaskan.

Service Oriented Architecture

Kebanyakan orang mengalihkan bahwa SOA itu berhubungan dengan Application Integration, Platform Independent, ada component software yang bisa diakses ecara remote either itu Webservice, REST, atau dalam Bentuk BPEL. Namun fokus SOA sebenarnya bukan di sisi itu.

SOA itu merupakan architectural concept dalam software development dimana software tersebut di bangun berdasarkan service service yang saling berkolaborasi untuk melakukan specific business capability.

Layaknya Object Oriented Programming yang merupkakan konsep pengembangan software dimana software tersebut dibangun berdasarkan object object yang saling berkolaborasi.

Apakah service itu ? Berdasarkan tulisan Udidahan:

A service is the technical authority for a specific business capability.

Any piece of data or rule must be owned by only one service.

Continue reading

Chat Downloader Application


ChatDwonloader merupakan OpenSource Java Application yang memungkinkan download file melalui chatting Google Talk. Ide awalnya adalah aku sebagai Software Developer yang hampir setiap hari menghabiskan waktu untuk bekerja di client. Namun kadang kala aku membutuhkan software mislakan update atau patch Websphere Application Server yang ukuranya hampir 1GB. Kalau di download dari internet client satu hari juga ga bakal kelar. Tapi kalo di download dari kantor kencang. Akhirnya dengan cara manual aku search software yang perlu di download saat jam kerja di client. Besok paginya aku datang ke kantor untuk mendownload file yang sudah aku persiapkan satu hari sebelumnya.

Terus terang cara manual diatas sangat tidak efektif, aku harus cari file nya, besoknya aku download dari kantor, besoknya aku datang lagi ke kantor untuk ambil file tersebut. Gimana jika disaat aku dapatkan url file download filenya, aku kirim sesuatu ke kantor lalu file tersebut di download automatis. Besoknya dengan santai aku datang ke kantor untuk ambil file hasil downloadtan.

Akhirnya setelah bertapa selama satu hari dan diberi wangsit oleh Ki Joko Bodo dan Hokage IV aku mendapat ide untuk download file melalui chat. Aku buatin program yang jalan di background, kerjaanya dengarin chat message download dari GTalk, ketika ada chat message download yang masuk program tersebut akan download-tin filenya, notify pengirim ketika file tersebut sudah selesai di download dari chat message juga.

Continue reading

Unit Testing


Pertama-tama mendengar unit testing, langsung kepikiran kenapa capek2 buat code program untuk ngetest aplikasi yang di develop. Buang2 waktu sebab aplikasi bisa di test manual melalui user interface aplikasi. Isi data2 yang di form aplikasi, klik tombol submit, cek apakah ada error, atau data masuk ke database.

Lama kelamaan sejalan dengan waktu aku baru sadar kalau cara itu kurang efektif. Basically developer harus mengetest code yang di develop setiap kali ada perubahaan. Untuk menjamin code yang di tulisnya berjalan dengan benar.  Akan membuang banyak waktu jika tiap kali ada perubahan harus melakukan berulang2  isi data2 yang di perlukan user interface aplikasi, submit, cek apakah ada error atau mengecek apakah data sudah masuk di database.  Seratus kali perubahaan setarus kali test manual (input data) di lakukan. Programmer membangun aplikasi untuk membantu manusia mengautomatisasi pekerjaan mereka. Jadi kenapa kita tidak membantu diri kita sendiri mengautomatisasi pekerjaan dalam hal testing aplikasi ? Continue reading