Beberapa hal yang perlu
diperhatikan dalam mendesai system atau software yaitu antara lain :
1. Cohesion
Cohesion berarti adalah seberapa fokus modul tersebut pada tugasnya. Kalau method methodnya mirip dalam berbagai aspek, maka dikatakan sebagai high cohesion. Cohesion akan turun dilihat bila sebuah method mengakses data yang tidak relevan dengan fungsinya.
Cohesion berarti adalah seberapa fokus modul tersebut pada tugasnya. Kalau method methodnya mirip dalam berbagai aspek, maka dikatakan sebagai high cohesion. Cohesion akan turun dilihat bila sebuah method mengakses data yang tidak relevan dengan fungsinya.
2. Complexity
Salah satu cara melihat maintainability adalah kompleksitas kode. Cara ini
sering disebut sebagai Cyclomatic Complexity, atau lebih dikenal dengan McCabe,
atau juga dikenal sebagai Path Testing. Pada McCabe, yang diperhatikan adalah
berapa banyak entry point, exit point, dan berapa banyak branch yang harus
dilakukan program. Semakin kompleks sebuah code, maka rating McCabe semakin
tinggi. Kode seperti ini biasanya tingkat kohesinya rendah. Kode yang tingkat
kohesinya tinggi, biasanya menggunakan prosedur prosedur yang cukup simple.
Pada rating McCabe yang tinggi, biasanya ada banyak return, ada banyak elseif,
dan nested if..
Program dengan rating yang tinggi, cenderung juga untuk develop bug, dan terkenal sulit diperbaiki dan dilacak bugnya. Bila melakukan sebuah hal yang kompleks, lebih baik dipecah ke beberapa tahap atau module module yang masing masing spesialis melakukan tugasnya (lihat functional cohesion)
Program dengan rating yang tinggi, cenderung juga untuk develop bug, dan terkenal sulit diperbaiki dan dilacak bugnya. Bila melakukan sebuah hal yang kompleks, lebih baik dipecah ke beberapa tahap atau module module yang masing masing spesialis melakukan tugasnya (lihat functional cohesion)
3. Extensibility
Adalah hal penting dalam maintainability. Apabila dalam suatu point, misalnya client membutuhkan untuk promosi kartu kredit yang BCA misalnya, berapa banyak code yang harus dirubah? Atau client meminta program untuk compile laporan dari beberapa divisi yang berkaitan, misalnya gudang dan retail, berapa sulit dan berapa banyak yang harus dirubah?
Adalah hal penting dalam maintainability. Apabila dalam suatu point, misalnya client membutuhkan untuk promosi kartu kredit yang BCA misalnya, berapa banyak code yang harus dirubah? Atau client meminta program untuk compile laporan dari beberapa divisi yang berkaitan, misalnya gudang dan retail, berapa sulit dan berapa banyak yang harus dirubah?
4. Scalability
Menentukan berapa lama program tersebut akan bisa bertahan seiring dengan perkembangan perusahaan. Program dengan scalability tinggi, sekali dibuat, walaupun untuk sebuah toko kelontong, tetapi akan tetap bisa digunakan sewaktu toko kelontong tersebut suatu saat menjadi sebuah hypermarket besar. Hal ini juga tidak terlepas dari peran efisiensi dari kode. Jangan banyak melakukan function function yang tidak perlu, lakukan caching, dan hindari repetition. Kalau seandainya harus ada repetition, lebih baik pisahkan menjadi subroutines yang terpisah. Perhatikan juga memory leaks, atau overflow error. Jangan ambil data yang tidak perlu. Misalnya hanya membutuhkan 1000 rows, tetapi yang difetch adalah 10000 rows pada client, kemudian melakukan join pada client program menggunakan LINQ atau HQL misalnya. Hal ini akan cepat membuat server wear-off, kecapean, dan overload, atau bahkan bisa terjadi network congestion.
Menentukan berapa lama program tersebut akan bisa bertahan seiring dengan perkembangan perusahaan. Program dengan scalability tinggi, sekali dibuat, walaupun untuk sebuah toko kelontong, tetapi akan tetap bisa digunakan sewaktu toko kelontong tersebut suatu saat menjadi sebuah hypermarket besar. Hal ini juga tidak terlepas dari peran efisiensi dari kode. Jangan banyak melakukan function function yang tidak perlu, lakukan caching, dan hindari repetition. Kalau seandainya harus ada repetition, lebih baik pisahkan menjadi subroutines yang terpisah. Perhatikan juga memory leaks, atau overflow error. Jangan ambil data yang tidak perlu. Misalnya hanya membutuhkan 1000 rows, tetapi yang difetch adalah 10000 rows pada client, kemudian melakukan join pada client program menggunakan LINQ atau HQL misalnya. Hal ini akan cepat membuat server wear-off, kecapean, dan overload, atau bahkan bisa terjadi network congestion.
5. Reliability
Definisi reliability adalah kemungkinan terjadinya error dalam environment yang ideal untuk waktu yang tertentu. Kalau kemarin ada yang bilang mengenai virus tidak termasuk, maka kalau program dia bisa berfungsi tanpa henti tanpa error, itu termasuk dalam reliability testing. Pada intinya, adalah bagaimana program bisa berfungsi dalam situasi yang ideal.
Definisi reliability adalah kemungkinan terjadinya error dalam environment yang ideal untuk waktu yang tertentu. Kalau kemarin ada yang bilang mengenai virus tidak termasuk, maka kalau program dia bisa berfungsi tanpa henti tanpa error, itu termasuk dalam reliability testing. Pada intinya, adalah bagaimana program bisa berfungsi dalam situasi yang ideal.
6. Robustness
Ini adalah tahap berikutnya dari reliability, atau bisa dikategorikan bagaimana reliability program pada situasi yang TIDAK ideal. Test yang dilakukan biasa disebut sebagai fuzzy test. Fuzz test dilakukan dengan memasukkan random data ke program, atau sengaja melakukan perusakan pada bagian program, dan mencatat defect-nya. Misalnya dengan melakukan direct API call ke bagian bagian yang tidak seharusnya di-call, atau melakukan perubahan perubahan pada database, atau misalnya menyuruh program untuk menghitung pembagian dengan sebuah array yang kosong, atau menularkan virus ke program, atau bahkan sampai merusak databasenya.
Ini adalah tahap berikutnya dari reliability, atau bisa dikategorikan bagaimana reliability program pada situasi yang TIDAK ideal. Test yang dilakukan biasa disebut sebagai fuzzy test. Fuzz test dilakukan dengan memasukkan random data ke program, atau sengaja melakukan perusakan pada bagian program, dan mencatat defect-nya. Misalnya dengan melakukan direct API call ke bagian bagian yang tidak seharusnya di-call, atau melakukan perubahan perubahan pada database, atau misalnya menyuruh program untuk menghitung pembagian dengan sebuah array yang kosong, atau menularkan virus ke program, atau bahkan sampai merusak databasenya.
Biasanya pada robustness testing, akan terlihat bugs, seperti memory leak, crash, atau kegagalan transaction pada database, atau kadang sama sekali tidak mau start. Bila terjadi kerusakan disini, biasa bisa dilakukan reproduksi untuk melihat dimana program crash, untuk kemudian memperbaikinya.
7. FaultTolerance
Tahap berikutnya dalam reliability testing adalah Fault Tolerance. Tidak semua programmer bisa merancang Fault Tolerance program, tetapi program program yang critical harus melalui Fault Tolerance testing. Fault Tolerance mentargetkan system self-stabilization, sebuah situasi dimana sebuah system akan sanggup membuat dirinya error free dalam lingkungan yang penuh error. Beberapa cara yang umum digunakan adalah
Tahap berikutnya dalam reliability testing adalah Fault Tolerance. Tidak semua programmer bisa merancang Fault Tolerance program, tetapi program program yang critical harus melalui Fault Tolerance testing. Fault Tolerance mentargetkan system self-stabilization, sebuah situasi dimana sebuah system akan sanggup membuat dirinya error free dalam lingkungan yang penuh error. Beberapa cara yang umum digunakan adalah
a. Replikasi. Yaitu membuat beberapa instance yang identik, dan mengirimkan task secara paralel, kemudian memilih hasil yang tepat sesuai quorum atau hasil terbanyak.
b. Redundancy. Adalah cara untuk mengimplementasikan identical instances, dan melakukan switch apabila salah satu dari instance tersebut mengalami kegagalan. Konsep ini juga biasa dikenal sebagai failover
c. Diversity. Yaitu membuat beberapa implementasi yang berbeda untuk spesifikasi yang sama, dan menggunakan modul modul tersebut sesuai dengan situasi yang terjadi di lapangan. Misalnya sebuah modul yang biasa bekerja pada hard drive, pada waktu terjadi kegagalan hard disk, maka aplikasi akan melakukan penggantian modul yang bekerja melalui ramdisk.
Inti dari fault
tolerance adalah tidak ada single point of repair. Artinya, aplikasi harus
tetap beroperasi tanpa terinterupsi oleh kegagalan sembari melakukan proses
self repair. Selama dia melakukan repair, tugas diserahkan kepada modul modul
yang sesuai untuk menangani situasi tersebut, mengisolasi titik titik failure
point, dan melakukan rekonstruksi data, kemudian melakukan resume setelah
repair selesai dilaksanakan. NIST mengkategorikan kerusakan komponen
berdasarkan lokalisasinya, penyebabnya, efeknya, dan lama perbaikannya. Dari
sana bisa program harus menentukan tindakan yang bisa diambil untuk menghindari
dirinya tidak berfungsi. Terkadang sebuah failure bisa menyebar ke tempat lain,
misalnya kerusakan database, yang menyebabkan pemrosesan data yang keliru, dan
menyebabkan program untuk mengirim data yang salah ke module lain, yang pada
gilirannya juga memproses data yang keliru. Hal ini berpotensi menimbulkan
system-wide-failure. Sebuah aplikasi yang memiliki fault tolerance tingkat
lanjut biasanya bisa mengenali kelainan kelainan ini, dan mengisolirnya,
sehingga kerusakan tidak menyebar.
8. Security
Security adalah bagaimana aplikasi anda memproteksi terhadap akses yang tidak semestinya. Apakah user bisa melangkahi role-nya? Apakah anda telah memperhitungkan semua kemungkinan yang bisa terjadi di lingkungan aplikasi bekerja? Misalnya aplikasi finance, apakah ada orang lain yang bisa merubah data payroll?
Security adalah bagaimana aplikasi anda memproteksi terhadap akses yang tidak semestinya. Apakah user bisa melangkahi role-nya? Apakah anda telah memperhitungkan semua kemungkinan yang bisa terjadi di lingkungan aplikasi bekerja? Misalnya aplikasi finance, apakah ada orang lain yang bisa merubah data payroll?
9. Understandibilty
Lebih ke arah teknik programming. Aplikasi yang baik, codenya lebih baik mudah dimengerti, sehingga memudahkan maintenance nantinya. Kode yang mudah dibaca akan mudah dirubah. Programmer akan bisa menemukan lokasi yang akan dirubah dengan cepat dan mudah.
Lebih ke arah teknik programming. Aplikasi yang baik, codenya lebih baik mudah dimengerti, sehingga memudahkan maintenance nantinya. Kode yang mudah dibaca akan mudah dirubah. Programmer akan bisa menemukan lokasi yang akan dirubah dengan cepat dan mudah.
10. Usability
Adalah aspek biasa, yang terlalu sering dibahas disini. Aspek ini adalah berapa mudah aplikasi anda digunakan oleh user? GUI yang bagus, AI yang pandai, bantuan bantuan bagi pemakai, akan membantu kualitas software anda. Karena aspek ke-10 ini adalah yang paling sering dibahas disini, ane rasa ane tidak perlu lagi membahas.
Adalah aspek biasa, yang terlalu sering dibahas disini. Aspek ini adalah berapa mudah aplikasi anda digunakan oleh user? GUI yang bagus, AI yang pandai, bantuan bantuan bagi pemakai, akan membantu kualitas software anda. Karena aspek ke-10 ini adalah yang paling sering dibahas disini, ane rasa ane tidak perlu lagi membahas.
Tidak ada komentar:
Posting Komentar