4.0

4.0 حصہ 4 کا تعارف: کوڈ اور معیار کے میٹرکس

حصہ 2 اور 3 نے ناپا کہ کام کیسے حرکت کرتا ہے اور اسے پیدا کرنے والے لوگوں کا حال کیسا ہے۔ یہ حصہ خود مصنوعات کی طرف مڑتا ہے: کوڈ، اور یہ کہ میٹرک اس کے معیار کے بارے میں کیا بتا سکتا ہے اور کیا نہیں۔ کوڈ کے معیار کے میٹرکس کی اس کتاب کے کسی بھی میٹرک کے خاندان سے لمبی ترین تاریخ ہے، cyclomatic complexity 1976 سے ہے، اور اس کے ساتھ غلط استعمال کی لمبی ترین تاریخ بھی۔ یہ حصہ اس تاریخ کو سنجیدگی سے لیتا ہے: ہر موضوع ایک حقیقتاً مفید اشارے کا نام لیتا ہے ساتھ ہی وہ مخصوص، اچھی طرح دستاویزی طریقہ بھی جس سے وہ اشارہ ہدف بن جانے پر گیم ہوتا ہے۔

ان چھ موضوعات کو جوڑنے والا دھاگہ یہ ہے کہ کوئی ایک کوڈ کا میٹرک اکیلے معیار پکڑتا نہیں، اور سب سے مقبول میں سے کئی الگ تھلگ پیچھا کیے جانے پر فعال طور پر گمراہ کرتے ہیں۔ ٹیسٹ کوریج کا اونچا فیصد ایسے ٹیسٹوں کے ساتھ رہ سکتا ہے جو کچھ بامعنی تصدیق نہیں کرتے۔ کم پیچیدگی کا اسکور ایسے کوڈ کے ساتھ رہ سکتا ہے جو تکنیکی طور پر سادہ مگر تصوراتی طور پر بے ربط ہو۔ اس حصے کے موضوعات میں سے ہر ایک اپنے سرخی کے میٹرک کو اس تکمیلی جانچ سے جوڑتا ہے جو اس کا مخصوص اندھا مقام پکڑتی ہے: پیچیدگی کو برقرار رکھنے کے قابل ہونے کے سیاق کے ساتھ، کوریج کو میوٹیشن ٹیسٹنگ کے ساتھ، churn کو hotspot کے تجزیے کے ساتھ، static analysis کو انسانی فہم کے ساتھ، اور تکنیکی قرض کو ہمیشہ بڑھتے، ناپسندیدہ بیک لاگ کے بجائے ترجیح پر مبنی اصلاح کے ساتھ۔

بڑی ٹیموں کے لیے کوڈ اور معیار کے میٹرکس وہ چیز ہیں جو اتنے بڑے کوڈ بیس کا انتظام ممکن بناتے ہیں جسے کوئی ایک شخص ذہن میں نہیں رکھ سکتا۔ پانچ افراد کی ٹیم اس مشترکہ مضمر علم پر انحصار کر سکتی ہے کہ نظام کے کون سے حصے نازک ہیں؛ درجنوں سروسز پر پھیلی پانچ سو انجینئروں کی تنظیم کو اس نزاکت کو منظم طور پر تلاش کرنے کے لیے انسٹرومینٹ شدہ اشارے چاہییں۔ بڑے اور حکومتی ادارے، جن کے پاس اکثر برسوں کے بجائے دہائیوں میں ناپے گئے کوڈ بیس ہیں، محدود دیکھ بھال کی سرمایہ کاری کہاں سب سے زیادہ فائدہ دے گی اس کی ترجیح طے کرنے کے لیے اس حصے کے میٹرکس پر انحصار کرتے ہیں۔

اس حصے کے موضوعات

  • 4.1 کوڈ کی پیچیدگی کے میٹرکس: Cyclomatic complexity اور اس کے رشتہ دار، وہ دراصل کس کی پیش گوئی کرتے ہیں، اور ان کا اچھی طرح دستاویزی گیمنگ کا خطرہ۔
  • 4.2 ٹیسٹ کوریج اور ٹیسٹ کی تاثیر: اکیلا کوریج کا فیصد جتنا لگتا ہے اس سے کم کیوں بتاتا ہے، اور میوٹیشن ٹیسٹنگ خلا کیسے بند کرتی ہے۔
  • 4.3 کوڈ churn اور hotspot کا تجزیہ: کوڈ بیس کا وہ مخصوص، چھوٹا حصہ تلاش کرنا جو نقائص اور دیکھ بھال کی لاگت کے غیر متناسب حصے کا ذمہ دار ہے۔
  • 4.4 Static analysis اور code smell کے میٹرکس: خودکار کوڈ کے معیار کے اشارے، ان کی حقیقی قدر، اور انسانی فہم کے مقابل ان کی حدود۔
  • 4.5 تکنیکی قرض کی پیمائش: غیر مرئی، غیر رسمی طور پر زیرِ بحث ذمہ داری کو نظر آنے والے، ترجیح پر مبنی، قابلِ انتظام پورٹ فولیو میں بدلنا۔
  • 4.6 دستاویزات اور علم کے میٹرکس: یہ ناپنا کہ آیا دستاویزات واقعی مدد کرتی ہیں، صرف یہ نہیں کہ وہ موجود ہیں۔

یہ موضوعات ایک دوسرے سے کیسے جڑے ہیں

یہ چھ موضوعات کوڈ کی سب سے چھوٹی اکائی سے باہر کی طرف بنتے ہیں۔ موضوع 4.1 اکیلے فنکشن یا میتھڈ کی سطح سے آغاز کرتا ہے؛ موضوع 4.2 پوچھتا ہے کہ آیا ٹیسٹ واقعی اس اکائی کے رویے کی تصدیق کرتے ہیں؛ موضوع 4.3 پورے کوڈ بیس میں زوم آؤٹ کر کے تلاش کرتا ہے کہ کن فائلوں اور ماڈیولز پر پہلے توجہ چاہیے؛ موضوع 4.4 خودکار ٹولنگ کی وہ تہہ شامل کرتا ہے جو ان سب کو مسلسل اسکین کرتی ہے؛ موضوع 4.5 چاروں سے جمع ہونے والی دریافتوں کو بکھری، غیر حل شدہ فکر کے بجائے منظم، ترجیح پر مبنی بیک لاگ میں بدلتا ہے؛ اور موضوع 4.6 اس سب کو محفوظ طریقے سے برقرار رکھنے کے لیے درکار علم دستاویزی اور قابلِ دریافت ہے یا نہیں یہ ناپ کر حصے کو ختم کرتا ہے۔

یہ حصہ براہِ راست حصہ 2 کے استحکام کے میٹرکس سے جڑتا ہے: تبدیلی کی ناکامی کی شرح (موضوع 2.10) بڑی حد تک اس کوڈ کے معیار کا نیچے کا نتیجہ ہے جسے یہ حصہ اوپر کی طرف ناپتا ہے۔ یہ آگے حصہ 5 کے پروڈکٹ کے میٹرکس سے بھی جڑتا ہے، کیونکہ بچ نکلنے والے نقائص (موضوع 5.1) اکثر بالکل انہی پیچیدگی کے hotspots اور کوریج کے خلاؤں سے منسوب کیے جا سکتے ہیں جنہیں یہ حصہ انہیں پروڈکشن تک پہنچنے سے پہلے سامنے لانے کے لیے بنا ہے۔