Menangani Kerumitan Sikomatik dalam Kod Java

Mengendalikan Kerumitan Siklomatik dalam Java Code Debadatta Mishra PengenalanAnda mungkin pernah mendengar istilah pengurusan kod di java. Ini merujuk kepada cara mengurus kod sumber anda sehingga mungkin lebih mudah untuk menguruskannya pada tahap tertentu pada waktu pemeliharaan. Selalu benar bahawa keperluan berubah dari semasa ke semasa dan kod sumber mengalami perubahan hingga tahap tertentu. Anda mungkin telah melihat beberapa modul tertentu kelihatan sangat berisiko untuk disentuh. Sebilangan orang mengatakan bahawa modul ini berfungsi dengan baik tetapi kod tidak dapat dikendalikan. Ia berlaku di kebanyakan industri IT, mungkin ada beberapa sebab. Walau bagaimanapun saya boleh mengatakan menulis kod adalah seni. Beberapa pembangun memandang serius perkara ini. Anda mungkin mendapat kesempatan tinjauan kod dan audit kod dalam organisasi. Cara menulis kod yang lebih baik adalah di luar ruang lingkup artikel ini.Dalam artikel ini saya ingin memfokuskan pada kerumitan siklomatik yang jauh lebih lazim dalam kod sumber. Anda juga boleh menjauhkan diri daripada konsep ini. Catatan utama adalah bagaimana menangani kerumitan kod.

Teknikal

Kompleksiti Cyclomatic adalah konsep metrik yang diciptakan oleh Thomas McCabe. Ini memberikan konsep kerumitan struktur kaedah atau kod sumber. Pada dasarnya ia menangani pelbagai kes keputusan dan bersyarat. Sekiranya anda menulis sepotong kod yang merangkumi beberapa keputusan dan syarat yang logik, anda harus menjaga kod tersebut jika tidak, anda mungkin berada dalam keadaan yang semakin berkurangan. Sebab utama saya boleh mengatakan bahawa ia berlaku kerana pembetulan pepijat dan beberapa perubahan keperluan kecil. Sekiranya pembangun melupakan beberapa kes fungsional, dia boleh memperbaiki pepijat dengan menambahkan satu atau lebih keadaan logik dengan menulis jika atau bersarang jika keadaan. Secara amnya kerumitan siklomatik dapat dihitung dengan cara berikut.

Kerumitan siklokmatik = Bilangan titik keputusan + 1 Titik keputusan mungkin merupakan pernyataan bersyarat anda seperti jika, jika… yang lain, beralih, untuk gelung, sementara gelung dll.

Sila rujuk contoh berikut String str = “someString”; jika (str.equals (case1)) melakukan sesuatu; jika (str.equals (case2)) melakukan sesuatu; lain buat perkara lalai;

Di sini kerumitan siklomatik akan menjadi seperti berikut Kerumitan Siklomatik = jika untuk kes1 + jika untuk kes2 + yang lain + 1 = 4 Kerumitan siklomatik mempunyai kepentingan lebih dalam bidang pengujian dan kesenggaraan. Sekiranya anda menulis kes ujian, anda mesti memerhatikan kerumitan siklomatik. Sekiranya kerumitan siklomatik adalah 3, sekurang-kurangnya anda harus menulis kes ujian yang sah. Carta berikut menerangkan jenis aplikasi. Kompleksitas Cyclomatic terletak 1 - 10  Untuk dipertimbangkan Aplikasi normal Kerumitan Siklomatik terletak 11 - 20 application Aplikasi sederhana Kerumitan Siklomatik terletak 21 - 50 application Aplikasi berisiko Kerumitan Siklomatik terletak lebih dari 50 application Aplikasi tidak stabil Selain pengendali logik seperti "&&", "|| " juga merupakan tambahan kepada kerumitan siklomatik. Sekiranya anda menulis program seperti nama If (name.equals (name1) || berikut.sama dengan (nama2) || name.equals (name3) && age! = 23) {lakukan sesuatu} Di sini Kerumitan Sikomatik dapat dikira seperti berikut Bilangan titik tolak + bilangan operator logik + 1 yang sama dengan Jika + || + || + && + 1 = 5 Juga benar bahawa ia akan memberi kesan kepada prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.sama dengan (name3) && age! = 23) {lakukan sesuatu} Di sini Kerumitan Siklomatik dapat dikira seperti berikut Bilangan titik tolak + bilangan operator logik + 1 yang sama dengan Jika + || + || + && + 1 = 5 Ia juga benar bahawa ia akan memberi kesan kepada prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.sama dengan (name3) && age! = 23) {lakukan sesuatu} Di sini Kerumitan Siklomatik dapat dikira seperti berikut Bilangan titik tolak + bilangan operator logik + 1 yang sama dengan Jika + || + || + && + 1 = 5 Ia juga benar bahawa ia akan memberi kesan terhadap prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasus itu "A" harus ditangani dengan cara tertentu, jika kasus "B", itu harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.= 23) {lakukan sesuatu} Di sini Kerumitan Sikomatik dapat dikira seperti berikut Bilangan titik tolak + bilangan operator logik + 1 yang sama dengan Jika + || + || + && + 1 = 5 Ia juga benar bahawa ia akan mempunyai kesan terhadap prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.= 23) {lakukan sesuatu} Di sini Kerumitan Sikomatik dapat dikira seperti berikut Bilangan titik tolak + bilangan operator logik + 1 yang sama dengan Jika + || + || + && + 1 = 5 Ia juga benar bahawa ia akan mempunyai kesan terhadap prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.+1 = 5 Juga benar bahawa ia akan mempengaruhi prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.+1 = 5 Juga benar bahawa ia akan memberi kesan pada prestasi aplikasi. Bagaimanapun anda mungkin melihat dalam reka bentuk tertentu, mungkin ada beberapa kes dan setiap kes harus ditangani dengan cara yang sama sekali berbeza, beberapa pemaju menulis menggunakan reka bentuk kilang. Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani sama sekali berbeza berdasarkan input. Jika kasusnya adalah "A" maka harus ditangani dengan cara tertentu, jika kasus "B", harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.Dalam reka bentuk kilang itu mungkin ada kes suis atau beberapa jika keadaan lain. Izinkan saya memberi contoh. Mari kita pertimbangkan Pengendali yang menangani berbeza berdasarkan input. Jika kasus itu "A" harus ditangani dengan cara tertentu, jika kasus "B", itu harus ditangani dengan cara lain. Mari kita perhatikan bahagian kod berikut.

 Interface Handler package com.core.cc.handler; /** * @author Debadatta Mishra(PIKU) * */ public interface Handler { public void handle(); } 
Kelas AHandler
 package com.core.cc.handler; /**This class implements Handler * @author Debadatta Mishra(PIKU) * */ public class AHandler implements Handler { public void handle() { System.out.println("A handler"); } } 
Pengendali Kelas B
 package com.core.cc.handler; /**This class implements Handler Interface * @author Debadatta Mishra(PIKU) * */ public class BHandler implements Handler { public void handle() { System.out.println("B handler"); } } 
kelas AbstrakHandler
 package com.core.cc.handler; /**This class is used as a Factory class. * @author Debadatta Mishra(PIKU) * */ public class AbstractHandler { /**This is a very traditional method, you * can obtain the dynamic object by using * several if conditions. * @param handlerName * @return an object of type {@link Handler} */ public static Handler getHandler( String handlerName ) { Handler handler = null; try { if( handlerName.equals("A")) handler = new AHandler(); if( handlerName.equals("B") ) handler = new BHandler(); } catch( Exception e ) { System.out.println("There is no specific handler"); } return handler; } } 
kelas TestDynamicHandler
 import com.core.cc.handler.AbstractHandler; import com.core.cc.handler.Handler; /**This is a testharness class. * @author Debadatta Mishra(PIKU) * */ public class TestDynamicHandler { public static void main(String[] args) { Handler handler = AbstractHandler.getHandler("B"); handler.handle(); } } 

Dalam contoh di atas, tidak ada salahnya menulis kod ini, tetapi penyusun mungkin memerlukan masa apabila kes anda meningkat. Untuk setiap kes baru, anda mesti menulis kelas baru dan anda harus menambahkan satu atau lebih jika klausa dalam kelas "AbstractHandler". Anda boleh mengubah kelas "AbstractHandler" dengan cara berikut sehingga kelihatan sangat canggih dan dengan itu tidak perlu mengemas kini kelas "AbstractHandler".

 package com.core.cc.handler; /**This class is used as a Factory class. * @author Debadatta Mishra(PIKU) * */ public class AbstractHandler { /**This method is used to obtain the dynamic * object of the type Handler * @param handlerName * @return an object of type {@link Handler} */ public static Handler getHandler( String handlerName ) { Handler handler = null; try { handler = (Handler) Class.forName( "com.core.cc.handler." + handlerName + "Handler") .newInstance(); } catch( Exception e ) { System.out.println("There is no specific handler"); } return handler; } } 

Kod di atas memudahkan pengaturcaraan anda dan memberikan kelonggaran untuk menambahkan kes anda tanpa membawa perubahan besar. Lagipun inilah keindahan Reka Bentuk Kilang Java. Dalam hal ini anda dapat membuat argumen bahawa, refleksi lebih lambat dari sudut prestasi, saya dapat mengatakan bahawa ia akan lebih cepat dibandingkan dengan banyak jika… klausa lain. Namun terdapat beberapa cara untuk menulis kod yang indah untuk mengelakkan kerumitan siklomatik utama.

Kesimpulannya

Saya harap anda dapat menikmati artikel saya. Sekiranya anda menemui masalah atau kesalahan, sila hantarkan e-mel di alamat saya

[email protected]

. Artikel ini hanya ditujukan untuk mereka yang baru dalam pengembangan java. Artikel ini tidak mempunyai kepentingan komersial. Tolong beri saya maklum balas mengenai artikel ini.

Kisah ini, "Menghadapi Kerumitan Siklomatik dalam Kod Java" pada awalnya diterbitkan oleh JavaWorld.