How I Write Software These Days : The CallBlocker Example

Waktu diajarin GW-BASIC di kelas 4SD dulu, coding-nya pake pensil dan nulis di buku tulis. Terus kasih ke Ibu Guru (yes my GW-BASIC teacher is a lady), kalo benar boleh keluar kelas atau baca2 buku lainnya. Kalo salah, happy debugging deh dengan pensil dan kertas.

Waktu bikin aplikasi perpustakaan pake TurboPascal, coding-nya langsung di DOS, debugging-nya langsung di DOS juga. Ibu Guru nggak bilang salah atau benar lagi, cuman "Good", "Nice", "OK", "Thank you".

Waktu bikin aplikasi buat Kedutaan, tempat bokap bekerja dulu, coding-nya "hajar bleh" pake VB 5. Tarik textbox, dobel-klik, langsung coding..

Sekarang apakah ada perubahan di tingkah laku coding saya? Ada, dan drastis sekali...berikut struktur Solution Explorer project2 saya sekarang... karena yg non-NDA cuman CallBlocker, pake contoh yg ini aja yah...

02

Version Control System

Dahulu kala, cara saya source-control adalah dengan memblok bagian kode itu dengan comment. Atau kalo lebih besar perubahannya, saya copy-paste ke file baru, comment semuanya, terus kasih comment diatas "Versi 2: Ini implementasi yg pake Heap Data Structure loh". Sempat diajarin CVS sama dosen Unix, tapi dulu teknologi virtualization masih lambat... jadi males aja setup 2 komputer buat FreeBSD dan Windows.

Sekarang sudah ada VisualSVN Server di Windows: http://www.visualsvn.com/server/. Download .exe-nya (6MB), dobel-klik installer, tunggu sampai selesai. Hasilnya adalah sebuah Subversion server ter-setup dengan HTTPS buat security. Harganya? Gratis :)

Coba bandingkan dengan Team Foundation Server (TFS). Silakan mencoba, teman saya Mas Fuady, mempunyai 17 PDF Files yg menjelaskan cara instalasi TFS. Harganya? TFS Server-nya $2473 dan per komputer yg ingin koneksi ke TFS harus punya Device Client Access License (Device CAL) seharga $469. Untuk integrasi TFS dengan Visual Studio, Team Explorer tersedia gratis di installer Visual Studio.

Untuk integrasi Subversion dengan Visual Studio, download VisualSVN Addin: http://www.visualsvn.com/visualsvn/ dan TortoiseSVN: http://tortoisesvn.net/. Tortoise gratis, sedangkan VisualSVN harganya $49 per user.

Bukan berarti saya anti-TFS loh... TFS punya tempat-nya, yaitu di enterprise. Dan fitur Load-Testing nya keren banget. Tapi saya sedang tidak membangun the next Facebook, so pick the right tool for the current job, not for the future job :)

 

Interface-Oriented Design

Kalo belum baca, silakan baca post saya tentang "Cat is not a Mammal". Di posting besok2 saya akan jelaskan tentang IRI (Interface-Responsibilites-Interactions) yg mirip dengan CRC (Class-Responsibility-Collaboration) cards.

 

Separation of Different Presentation Styles

Pisahkan Logic dengan Presentation. Dalam gambar diatas, semua logic ada di CallBlockerDLL.

Dan dalam kasus CallBlocker, di Smartphone tidak ada Listbox, sedangkan di PDA ada. Tapi itu bukan masalah, karena yang penting tidak perlu perubahan Logic.

Dalam project lainnya, ada presentation dengan Winforms, dan ada presentation dengan WPF.

 

Unit Testing

Jika Anda belum membiasakan diri untuk unit-testing, biasakan dari sekarang!

Dua programmer dengan coding skill yang sama: Mendekati deadline, yg satu bisa pulang jam 5 sore dan bersenang2 dengan keluarga di weekend. Yang satu pulang malam terus dan harus kerja di weekend.

Bedanya karena yg satu biasa unit-testing, sedangkan yg satu terbiasa nge-test setelah semua komponen aplikasi terkumpul dan aplikasi dijalankan. Happy debugging deh tuh orang... mirip seperti cerita R.A.M tentang debugging aplikasi di sebuah bank :)

Dari unit-testing, saya bisa tahu bahwa RegistryRegistration yg implement IRegistration tidak berjalan dengan baik... untung belum di-deploy ke device, bisa2 ngerusak registry device saya.

 

Console Tester

Ini extensi dari Unit Testing... dari Unit Testing saya tahu bahwa ada masalah dengan RegistryRegistration, tapi saya tidak tahu dimana. Saya copy-paste kode method dari RegistryRegistration yg bermasalah ke ConsoleTester, terus pasang beberapa instrumentasi dengan Console.WriteLine biar ketawan lagi ngapain aja tuh kode...

Eh ella ella ella, ternyata error-nya di algoritma Encryption... baca2 literatur lagi, coding ulang lagi, alhamdulillah jalan. Buru-buru commit ke Subversion beserta comment error dan solusinya, sebelum saya ganti algoritma Encryption dan menemui masalah yg sama.

Saya juga pake Console Tester untuk menge-test sebuah ide... dan juga kadang2 buat nge-test kode-kode snippet dari hasil Googling :)

 

Separation of Installer

Ini common sense. Ngapain bikin a-la Lord of the Rings: One Installer to Rule them All... wong smartphone user tidak perlu .cab buat PDA, dan begitu pula sebaliknya. Pula, di Smartphone ada 3 versi logo ZeddyLabs karena ada 3 versi display size. Di Smartphone cuman ada 1 logo.

Heran kenapa Microsoft nggak nerapin seperti ini. Lihat blog Alex tentang VS2008 SP1, yg isinya semua installer buat x86, x64, dan IA64. Don't give users what they don't need.

 

Pembagian Tugas

Nah kalo struktur-nya udah seperti diatas, gampang deh bagi2 tugas:

  • Dev Lead kerja di CallBlockerDLL (Core).
  • Junior Programmer kerja di bagian CallBlockerPDA dan CallBlockerSmartphone (Presentation).
  • Tester kerja di bagian TestCallBlockerDLL dan ConsoleTester (Testing)
  • Implementor atau ITPro kerjanya ngambil setup.exe dan nge-test di Virtual Machine atau install di tempat Customer.

Dan semua bisa kerja secara parallel karena

  • Semua masalah merging di-handle oleh Version Control System.
  • Programmer Code to Interface, bukan ke implementation, jadi dia nggak perlu nunggu Dev Lead selesai dengan Default Implementations-nya. Lihat code CallBlockerSmartphone berikut:
    public partial class frmSplash : Form
    {
        private IRegistration _regChecker;
    
        public frmSplash()
        {
            InitializeComponent();
    
            // Sambil nunggu Dev Lead selesai dgn implementasi-nya,
            // RegistryRegistration adalah Mock Object/Stub
            _regChecker = new RegistryRegistration();
        }
    
        private void mnuTrial_Click(object sender, EventArgs e)
        {
            // Check Registry for installed date
            // If > AllowedDays, allow app
            // Else notify expiry and exit
            if (_regChecker.IsTrialExpired())
            {
                MessageBox.Show("Your Trial Period has Expired. This software will now exit.");
                this.Close();
        }
    ...

 

Ah... indahnya programming jaman sekarang...

Share this post: | | | |
Published Wednesday, August 20, 2008 12:42 PM by zeddy
Filed under: ,

Comments

No Comments
Powered by Community Server (Commercial Edition), by Telligent Systems