10/25/2017

NPath complexity гэж юу вэ?

NPath complexity нь кодны үнэлгээ хийхэд ашиглагддаг арга юм. NPath complexity -г функц/метод бүрийн хувьд тусад нь тооцох бөгөөд тухайн функцийн циклгүй гүйцэтгэх үйлдлийн тоо юм.
NPath complexity стандарт хязгаар нь нэг функцийн хувьд 200 байвал зохино гэж үзнэ.
Хэрэв 200 -с хэтэрсэн бол кодчилолын комплекс байдлыг багасгах ёстой. Энэ нь тухайн функцийн алгоритмыг өөрчлөх тухай ойлголт огт биш бөгөөд функциональ чадамжийг сайжруулж комплекс үйлдүүдийг нэг болон түүнээс дээш функц болгон хуваах хэрэгтэй гэсэн үг.

Жишээ 1: 
Доорхи жава класс файлын boostrapGrid() методийн хувьд NPath complexity нь 3456 хүрсэн байгаа :p 
https://github.com/lupino22/kronometer/blob/fefeba2eccf5e0c922c53f93f285100e12939084/src/java/mn/scio/processor/HyperTextBuilder.java 

Методын эхэнд байгаа гараар бичсэн bubble sort ийг Java.util.Comparator -ийн sort үйлдэлээр солиход



NPath complexity нь 200 -аас бага болсон байгаа.

Bubble sort O(n^2) хугацаанд маш удаан эрэмбэлдэг бол Java.utilComparator -ийн sort нь timsort гэх алгоритм ашигладаг. Энэ нь merge sort болон insertion sort ийг хослуулж сайжруулсан алгоритм юм. Хугацааны үнэлгээ нь O(nlogn)байна. Эндээс харахад методын хурд эрс сайжирсан ба замбраагүй мэт харагдах давталтууд ганц мөр код болсон байгаа. Тэгхээр бүгдийг гараар бичхээс илүүтэйгээр тухайн асуудлыг аль хэдийн шийдсэн методуудыг ашиглах нь бүтээмжийг дээшлүүлнэ.

Жишээ 2:
Доорхи жава класст тоог монгол хэлний хэллэгээр нь тескт болгон хувиргадаг методууд бий. 
https://gist.github.com/lupino22/44cff28c1db9d3a49697b9d19eb65671

Монголчууд бид тоог дуудахдаа зуутын орноор нь тасалж дууддаг, иймд зуутын орон болон аравтын орныг тоог текст болгох хэсгүүдийг тус тусад нь метод болгож бичсэн. Ингэснээр кодын NPath complexity багасч илүү ойлгомжтой цэгцтэй байдал нь нэмэгдсэн. Мөн javadoc стандартаар коммент бичсэн байгаа. Энэ хэдий  NPath complexity -д нөлөөлөхгүй ч кодыг улам ойлгомжтой болгоно.
No comments :

No comments :

Post a Comment