اگست 2012 میں، ایک بڑی امریکی تجارتی فرم، نائٹ کیپیٹل نے اپنے پروڈکشن سسٹم میں ناقص تجارتی سافٹ ویئر تعینات کیا۔ سسٹم نے اس غلط کنفیگرڈ ڈیٹا کو لاکھوں غیر ارادی اسٹاک ٹرانزیکشنز کو متحرک کرنے کے لیے استعمال کیا۔
کمپنی کو صرف 45 منٹ میں تقریباً 440 ملین ڈالر کا نقصان ہوا۔ نائٹ کیپٹل تقریباً منہدم ہو گیا اور اسے سرمایہ کاروں کو بچانا پڑا۔ بعد میں اسے کسی اور کمپنی نے حاصل کر لیا۔
جب ہدف کینیڈا میں پھیل گیا، کمپنی نے ایک نئے سپلائی چین سسٹم پر انحصار کیا جس میں پروڈکٹ اور انوینٹری کا ڈیٹا غلط تھا۔ ڈیٹا بیس میں پروڈکٹ کی معلومات نامکمل اور غلط تھی۔ قیمت، سائز، اور مصنوعات کی تفصیل غلط درج کی گئی تھی۔
انوینٹری سسٹم نے انوینٹری آئٹمز کی اطلاع دی جو حقیقت میں دستیاب نہیں تھیں۔ صارفین نے اسٹورز میں خالی شیلفیں دیکھیں حالانکہ سسٹم نے اشارہ کیا کہ وہ اسٹاک میں ہیں۔ کمپنی کو کینیڈا کی مارکیٹ میں $2 بلین سے زیادہ کا نقصان ہوا۔ ٹارگٹ نے بالآخر 2015 میں اپنے تمام کینیڈین اسٹورز کو بند کر دیا۔
"ہمارے پاس کاغذ پر ایک زبردست سپلائی چین سسٹم تھا، لیکن ہمارے پاس درست ڈیٹا نہیں تھا۔ خراب ڈیٹا غلط فیصلوں کا باعث بنتا ہے،” ایک ملازم نے کہا۔
ڈیٹا سے متعلق انجینئرنگ کی ناکامی کی ایک اور مشہور مثال میں مریخ موسمیاتی آربیٹر خلائی جہاز شامل ہے۔ ایک انجینئرنگ ٹیم نے میٹرک یونٹس (نیوٹن) کا استعمال کیا۔ دوسری ٹیموں نے امپیریل یونٹس (پاؤنڈ فورس) کا استعمال کیا۔ سسٹم نے ڈیٹا کو درست طریقے سے تبدیل نہیں کیا۔ خلائی جہاز غلط اونچائی پر مریخ کی فضا میں داخل ہوا۔ مشن ناکام ہو گیا اور جہاز تباہ ہو گیا۔ نقصان تقریباً 125 ملین ڈالر تھا۔
اس آرٹیکل میں، ہم اس بات کا بغور جائزہ لیں گے کہ ڈیٹا کی کوالٹی کا اصل مطلب کیا ہے، ڈیٹا کی غلطیوں کی وہ اقسام جو خاموشی سے سسٹم کو کریش کرتی ہیں، ان کو روکنے کی ڈیولپرز کی ذمہ داری، اور درستی کی پرتیں جو خراب ڈیٹا کو پیدا ہونے سے روکنے کے لیے مل کر کام کرتی ہیں۔
ہم کیا احاطہ کریں گے:
شرائط
-
ڈیٹا کیا ہے اس کی بنیادی سمجھ
-
ڈیٹا ڈھانچے کی بنیادی تفہیم
-
یہ سمجھنا کہ API کیا ہے۔
-
سمجھیں کہ ڈیٹا بیس کیا ہے اور یہ کیا کرتا ہے۔
ڈیٹا کے معیار کی اہمیت
جیسا کہ آپ ان چند مثالوں سے دیکھ سکتے ہیں، آپ جس ڈیٹا کے ساتھ کام کر رہے ہیں اس کا معیار واقعی اہم ہے۔
گارٹنر نے رپورٹ کیا کہ تنظیموں میں درج ذیل صفات ہیں: تقریباً 15 ملین ڈالر کا سالانہ نقصان ناقص کوالٹی ڈیٹا۔ اسی مطالعہ نے یہ بھی پایا کہ: تقریباً 60% کمپنیوں کو اس بات کا واضح اندازہ نہیں ہے کہ ان کے لیے کیا برا ڈیٹا اصل میں خرچ کرتا ہے۔بنیادی طور پر اس وجہ سے کہ ہم ڈیٹا کے معیار کے مسائل کو بالکل بھی ٹریک یا پیمائش نہیں کرتے ہیں۔
آئی بی ایم کا 2016 کا مطالعہ اور بھی حیران کن ہے۔ IBM نے پایا کہ کم پیداواری صلاحیت، سسٹم کی بندش اور دیکھ بھال کے زیادہ اخراجات کی وجہ سے ڈیٹا کے خراب معیار سے امریکی معیشت کو سالانہ 3.1 ٹریلین ڈالر کا نقصان ہوتا ہے۔
خراب ڈیٹا ہر تنظیم کا کرپٹونائٹ ہے اور رہے گا۔ یہ اور بھی زیادہ تشویشناک ہے کیونکہ اب پہلے سے کہیں زیادہ تنظیمیں اپنی حکمت عملیوں کو عملی جامہ پہنانے کے لیے ڈیٹا پر انحصار کر رہی ہیں۔
اگر آپ کا ڈیٹا غلط، نامکمل، بے کار، یا متضاد ہے، تو آپ کے نتائج ظاہری طور پر سامنے آئیں گے۔ خراب ڈیش بورڈ آپ کی ٹیم کو غلط فیصلے کرنے میں گمراہ کر سکتا ہے۔ ان فیصلوں پر عمل درآمد ناقص حکمت عملی اور پالیسی پر عمل درآمد کا باعث بن سکتا ہے۔
بالآخر، تنظیمیں مالی، آپریشنل اور ساکھ کے لحاظ سے قیمت ادا کرتی ہیں۔ پیسہ واپس کیا جا سکتا ہے، لیکن شہرت اتنی آسانی سے شاذ و نادر ہی بحال ہوتی ہے۔
خراب ڈیٹا پہلی جگہ کیسے ہوتا ہے؟
فارم فیلڈز عام طور پر پہلی جگہ ہوتی ہیں جہاں کسی ایپلیکیشن میں ڈیٹا داخل کیا جاتا ہے، لہذا وہ اکثر ایسے ہوتے ہیں جہاں سے غلط ڈیٹا شروع ہوتا ہے۔ اس لیے ڈویلپر کا کردار بہت اہم ہے۔
بہت سے نقصان دہ ڈیٹا کی غلطیاں بدنیتی پر مبنی صارفین یا پیچیدہ ایج کیسز سے پیدا نہیں ہوتی ہیں۔ یہ سادہ نگرانیوں سے پیدا ہوتا ہے کہ سسٹم کو پہلے اس کی اجازت نہیں ہونی چاہیے تھی۔
تاہم، یہ تسلیم کرنا بھی اتنا ہی اہم ہے کہ ڈیٹا کے معیار کے مسائل اکثر پیدا ہوتے ہیں۔ پہلے ڈیٹا آپ کی درخواست تک پہنچ جاتا ہے۔ اپ اسٹریم کے عمل، جیسے کہ ڈیٹا کو کیسے اکٹھا کیا جاتا ہے، ماپا جاتا ہے، ریکارڈ کیا جاتا ہے، یا پہلے سے توثیق کیا جاتا ہے، سسٹم کے ذریعے ڈیٹا موصول ہونے سے بہت پہلے غلطیاں پیدا کر سکتا ہے۔
مثال کے طور پر، ایک نرس مریض کا وزن کرنے کے لیے غیر منقطع مکینیکل پیمانہ استعمال کر سکتی ہے، کاغذی فارم پر غلط قیمت ریکارڈ کر سکتی ہے، اور پھر بعد میں اس قدر کو ہسپتال کے نظام میں ریکارڈ کر سکتی ہے۔ جب تک ڈیٹا کسی ایپلیکیشن میں داخل ہوتا ہے، غلطیاں پہلے سے موجود ہوتی ہیں۔
اس کا مطلب ہے کہ ڈیٹا کے معیار کو برقرار رکھنے کے لیے اپ اسٹریم ڈیٹا اکٹھا کرنے کے طریقوں اور ڈویلپر کے زیر کنٹرول سسٹم لیول کی تصدیق دونوں پر توجہ دینے کی ضرورت ہے۔
اگر آپ کا UI، بیک اینڈ، یا API پرت غلط، نامکمل، متضاد، یا منطقی طور پر ناممکن ڈیٹا کو پائپ لائن میں داخل کرنے کی اجازت دیتا ہے، تو آپ کی تنظیم کو طویل مدتی ذمہ داری وراثت میں ملتی ہے۔ یہاں تک کہ چھوٹے انتخاب جیسے خالی فیلڈز کی اجازت دینا، ڈپلیکیٹس کو نظر انداز کرنا، یا توثیق کے اصولوں کو نافذ کرنے میں ناکامی کے نتیجے میں ایسی غلطیاں ہو سکتی ہیں جو مہینوں بعد رپورٹس یا ڈیش بورڈز میں ظاہر ہو سکتی ہیں، جس سے الجھن اور غلط بصیرت پیدا ہوتی ہے۔
خراب ڈیٹا کی لاگت
ڈیٹا کا معیار ڈیٹا پائپ لائن کے کسی بھی مرحلے پر متاثر ہو سکتا ہے: جمع کرنے سے پہلے، پیداوار کے دوران، اور یہاں تک کہ تجزیہ کے دوران۔
اگر آپ اپنے UI میں خراب ڈیٹا رکھنے کی قیمت کے بارے میں سوچتے ہیں، تو یہ تقریباً مفت ہے۔ API پرت میں پھنس جانے میں اب بھی بہت زیادہ رقم خرچ ہوتی ہے۔ اگر آپ ڈیٹا بیس میں پکڑے جاتے ہیں، تو قیمت مناسب ہے. اور جب اسے مہینوں بعد رپورٹس یا ایم ایل ماڈلز میں پکڑا جاتا ہے، تو یہ مہنگا اور کبھی کبھی ناقابل واپسی ہو سکتا ہے۔
جدید ڈیٹا مینجمنٹ کا ایک بنیادی اصول یہ ہے کہ خراب ڈیٹا کو حاصل کرنے کے لیے سب سے سستا اور محفوظ ترین مقام ماخذ پر ہے: جمع کرنے سے پہلے۔ 1992 میں جارج لیبووٹز اور یو سانگ چانگ کی طرف سے متعارف کرایا گیا معروف 1-10-100 اصول، اس خیال کو واضح طور پر واضح کرتا ہے۔
ایک اصول کے طور پر، داخلے کے وقت ڈیٹا کی توثیق کرنے کے لیے تقریباً $(1)، سسٹم میں داخل ہونے کے بعد اسے درست کرنے کے لیے تقریباً $10، اور اگر غلطی پر کسی کا دھیان نہ جائے اور مسائل پیدا ہوتے رہیں تو فی ریکارڈ $100 لاگت آتی ہے۔
جیسا کہ کہا جاتا ہے، روک تھام کا ایک اونس علاج کے ایک پونڈ کے قابل ہے. یہ خاص طور پر درست ہے جب اعلیٰ معیار کے ڈیٹا کو برقرار رکھنے کی بات آتی ہے۔
اپنی بات بتانے کے لیے، میں نے مختلف قسم کی غلطیوں اور نگرانیوں کی درجہ بندی کی ہے جن کی ڈویلپرز کو کبھی اجازت نہیں دینی چاہیے، اور ڈیٹا بیس، تجزیاتی پرت، یا رپورٹنگ سسٹم تک پہنچنے سے پہلے ان کو روکا جا سکتا ہے اور کیا جانا چاہیے۔
ڈیٹا کی خرابی کی قسم
مطلوبہ فیلڈ کی خرابی۔
اگر آپ ایک ایسا فارم پُر کرتے ہیں جو صارفین کو اہم فیلڈز (جیسے پہلا نام، آخری نام، ای میل پتہ، فون نمبر، تاریخ پیدائش یا پتہ) خالی چھوڑ کر رجسٹریشن فارم جمع کرانے کی اجازت دیتا ہے، تو نامکمل ڈیٹا براہ راست سسٹم میں داخل ہو جائے گا۔
مجھے ڈیٹا تجزیہ کار کے طور پر اپنے وقت کا ایک منظر یاد ہے جہاں میں متعدد عمارتوں سے مختلف قسم کے الارم پر مشتمل ڈیٹا سیٹ کا تجزیہ کر رہا تھا۔ ان الارم کو زمرہ جات میں تقسیم کیا گیا ہے جیسے ایکویریم الارم، انٹروڈر الارم، فائر الارم، اور مینٹیننس الارم۔
تجزیہ کا مقصد سادہ تھا۔ اس کا مقصد بلند ترین الارم فریکوئنسی والی عمارتوں کی نشاندہی کرنا ہے تاکہ دیکھ بھال، وسائل یا تحقیقات کو مناسب طریقے سے مختص کیا جا سکے۔
ہر بار جب الارم اٹھایا گیا تو سیکیورٹی ٹیم نے اسے سافٹ ویئر سسٹم کا استعمال کرتے ہوئے ریکارڈ کیا۔ ہر مہینے کے آخر تک، میں مجموعی انتباہات دیکھنے اور بصیرت حاصل کرنے کے قابل تھا۔
تاہم، ڈیٹا کے معیار کے سنگین مسائل پیدا ہوئے۔ سیکیورٹی اہلکاروں نے اکثر الارم کے زمرے کا انتخاب کیا لیکن اس عمارت کو جمع نہیں کیا جہاں الارم ہوا تھا، اور سسٹم نے اس نامکمل ریکارڈ کو ڈیٹا بیس میں محفوظ کرنے کی اجازت دی۔
تمام الارم ایک مخصوص عمارت سے شروع ہونے تھے۔ تاہم، تجزیہ کے دوران، ہم نے "20 سموک الارم” جیسے آئٹمز کو دیکھا جس میں عمارت کی کوئی معلومات منسلک نہیں تھیں۔ چونکہ یہ تعین کرنا ممکن نہیں تھا کہ یہ انتباہات کہاں سے آئے، اس لیے ڈیٹا ناقابل استعمال ہو گیا۔ ریکارڈز کو حذف کرنے کے سوا کوئی چارہ نہیں تھا کیونکہ وہ قابل عمل قیمت فراہم نہیں کرتے تھے۔
یہ ناقص ڈیٹا کی توثیق کی ایک بہترین مثال ہے۔ اگر ڈویلپر نے مناسب رکاوٹوں کو لاگو کیا ہے، تو سسٹم کبھی بھی عمارت کے نام کے بغیر الرٹس جمع کرنے کی اجازت نہیں دے گا۔
مطلوبہ فیلڈز کو UI اور بیک اینڈ لیول پر لاگو کیا جانا چاہیے تاکہ گمشدہ ڈیٹا کو پہلے سسٹم میں داخل ہونے سے روکا جا سکے۔ یہ خلاء اکثر ڈیٹا بیس میں ڈیٹا غائب یا ناقابل استعمال ہونے کے نتیجے میں ہوتا ہے، جو ٹیموں کو بعد میں ریکارڈ کو حذف کرنے یا دستی طور پر بازیافت کرنے پر مجبور کرتا ہے۔
ان غلطیوں سے بچنے کے لیے، آپ مطلوبہ فیلڈ کی توثیق کا استعمال کر سکتے ہیں، تمام مطلوبہ فیلڈز مکمل ہونے تک سبمٹ بٹن کو غیر فعال کر سکتے ہیں، اور ان لائن ایرر میسیجز کے ساتھ گمشدہ فیلڈز کو بصری طور پر نمایاں کر سکتے ہیں۔
یہاں کچھ غلط کوڈ کی ایک حقیقی کوڈ مثال ہے (تصدیق کرنے کی ضرورت نہیں):
مذکورہ کوڈ کے ٹکڑوں میں بنیادی مسئلہ یہ ہے کہ فارم مطلوبہ ان پٹ کو نافذ نہیں کرتا ہے۔ HTML سطح کی توثیق کو بھی غیر فعال کریں ( required پراپرٹیز) یا جاوا اسکرپٹ پر مبنی چیک لاگو نہیں ہوتے ہیں۔ یہ کوتاہی صارفین کو مطلوبہ معلومات فراہم کیے بغیر فارم جمع کروانے کا سبب بن سکتی ہے، جس سے فارم کو درست اور مکمل صارف ڈیٹا اکٹھا کرنے کے لیے ناقابل بھروسہ ہو سکتا ہے۔
یہ قابل استعمال اور ڈیٹا کے معیار کے لحاظ سے پریشانی کا باعث ہے۔ فارمز کو عام طور پر بامعنی اور مکمل معلومات اکٹھا کرنے کے لیے ڈیزائن کیا جاتا ہے، اور عام طور پر "Full Name” اور "Email” جیسے فیلڈز کی ضرورت ہوتی ہے۔ اگر آپ ان ان پٹس کو ضرورت کے مطابق نشان زد نہیں کرتے ہیں یا پروگرام کے لحاظ سے ان کی توثیق نہیں کرتے ہیں، تو آپ کو خالی یا غلط گذارشات موصول ہونے کا خطرہ ہے، جو آپ کے ذخیرہ شدہ ڈیٹا اور اس پر منحصر کسی بھی عمل کے معیار سے سمجھوتہ کر سکتا ہے۔
یہاں ایک بہتر ورژن کی ایک مثال ہے (UI خالی گذارشات کو روکتا ہے):
کوڈ کا یہ نظر ثانی شدہ ورژن شامل کرتا ہے: required اگر آپ نام اور ای میل ان پٹ عناصر دونوں پر اوصاف بیان کرتے ہیں، تو براؤزر فارم جمع کرانے کی اجازت نہیں دے گا اگر وہ فیلڈز آباد نہ ہوں۔ ڈیٹا کی سالمیت کو برقرار رکھنے اور فارم کی مجموعی اعتبار کو بہتر بنانے کے لیے یہ ایک اہم قدم ہے۔
اس کے علاوہ، تصدیق کر کے e.target.checkValidity()اب ہم اس بات کو یقینی بناتے ہیں کہ جمع کرانے سے پہلے فارم کا جائزہ لیا جائے۔
ایک اور مثبت پہلو مشروط استعمال ہے۔ e.preventDefault(). اگر فارم غلط ہے تو، پہلے سے طے شدہ جمع کرانے کا رویہ رک جاتا ہے، نامکمل یا غلط ڈیٹا کو جمع ہونے سے روکتا ہے۔
قسم کی توثیق کی خرابی۔
اگر آپ کے پاس کوئی ایسا فارم ہے جو صارفین کو @ علامت کے بغیر ای میل، ڈومین کے بغیر ای میل، حروف کے ساتھ فون نمبر، یا غلط پوسٹل کوڈ/پوسٹل کوڈ داخل کرنے کی اجازت دیتا ہے، تو سسٹم میں غلط ڈیٹا داخل کیا جا سکتا ہے۔
صارفین کو ایک ناممکن تاریخ (32/15/2025) یا غلط لمبائی کے ساتھ کریڈٹ کارڈ نمبر جمع کرانے کی اجازت دینے کے لیے بھی یہی ہے۔
ان مسائل کی وجہ سے ڈیٹا تجزیہ کار ڈیٹا کو صاف کرنے میں زیادہ وقت صرف کرتے ہیں، چاہے وہ کر سکیں۔ اور یہ غلط ان پٹ ناقابل بھروسہ ڈیٹا بناتے ہیں جو بہاو کے عمل میں خلل ڈالتے ہیں اور صفائی کے اخراجات میں اضافہ کرتے ہیں۔
اس قسم کی غلطیوں سے بچنے کے لیے، آپ جمع کرانے سے پہلے درست فارمیٹنگ کو یقینی بنانے کے لیے ریگولر ایکسپریشن کی توثیق، ان پٹ ماسک، اور فیلڈ کی قسم کی پابندیاں (جیسے کہ فون نمبرز کے لیے صرف عددی فیلڈ) استعمال کر سکتے ہیں۔
یہاں ایک بری مثال ہے جو قسم کی توثیق کی غلطیوں کی اجازت دیتی ہے:
یہ کوڈ فون نمبر کی شکل یا ساخت کی جانچ نہیں کرتا ہے۔ یہ فنکشن تمام موجودہ اقدار کو تلاش کرتا ہے، بشمول درست، غلط، اور خالی اقدار، اور انہیں بغیر کسی شرط کے کنسول میں لکھتا ہے۔
یہاں ترمیم شدہ ورژن ہے:
یہ ورژن واضح توثیق کے قواعد متعارف کروا کر پچھلی غلطیوں کو ٹھیک کرتا ہے۔ فون نمبر قبول کرنے سے پہلے، سسٹم اس بات کی تصدیق کرتا ہے کہ آپ کے ان پٹ میں صرف نمبر ہیں۔ باقاعدہ اظہار ^\d+$ اس بات کو یقینی بنائیں کہ قدر صرف اعداد پر مشتمل ہو، بغیر کسی حروف یا علامت کی اجازت ہو۔ اگر صارف کچھ غلط داخل کرتا ہے تو، فنکشن بند ہو جائے گا اور غلط ڈیٹا کو محفوظ کرنے کے بجائے ایک ایرر میسج ظاہر ہوگا۔
یہ نقطہ نظر پچھلی مثال میں فارمیٹنگ کی غلطیوں سے بچتا ہے۔ صارف کی ٹائپ کردہ ہر چیز پر آنکھیں بند کر کے بھروسہ کرنے کے بجائے، کوڈ اب متوقع فون نمبر فارمیٹ سے مماثل قوانین کو نافذ کرتا ہے۔ ایک ذمہ دار ڈویلپر کو کیا کرنا چاہیے اسے استعمال کرنے سے پہلے ان پٹ کی توثیق کرنا ہے۔
رینج اور حد کی غلطیاں
صارفین کو قابل قبول حدود سے باہر اقدار درج کرنے کی اجازت دینا (مثال کے طور پر، منفی عمر، صفر سے کم مقدار، 100% سے زیادہ رعایت، یا حقیقت پسندانہ حدود سے کہیں زیادہ پیمائش) آپ کو ڈیٹا اکٹھا کرنے کی اجازت دے سکتی ہے جو آپ کے کاروباری قواعد کی خلاف ورزی کرتا ہے۔ یہ غلطیاں تجزیہ کو مسخ کرتی ہیں، حساب میں خلل ڈالتی ہیں، اور آپریشنل تضادات پیدا کرتی ہیں۔
ان خرابیوں کو کم کرنے کے لیے، آپ کم سے کم/زیادہ سے زیادہ رکاوٹیں، سلائیڈرز، سٹیپرز، اور عددی حدود کا اطلاق کر سکتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ اقدار ایک درست حد کے اندر ہیں۔
یہاں ایک بری مثال ہے جو حد اور حد کی غلطیوں کی اجازت دیتی ہے:
جیسا کہ آپ اوپر دیکھ سکتے ہیں، ہم نے عمر کے لیے ایک ان پٹ فیلڈ بنایا ہے، لیکن ہم نے کوئی حد یا پابندی نہیں بتائی ہے۔ براؤزر صارفین کو کوئی بھی نمبر درج کرنے کی اجازت دیتا ہے، بشمول بے معنی اقدار جیسے منفی عمر، بہت بڑی عمر، یا اعشاریہ نمبر۔ JavaScript فنکشن صرف یہ دیکھے بغیر کہ آیا عمر حقیقت پسندانہ ہے قدر کو پڑھتا اور لکھتا ہے۔
ایک بہتر ورژن یہ ہوگا:
اب اس ورژن میں min="0" اور max="120" پراپرٹیز قابل قبول ان پٹ اقدار کے لیے واضح حدود طے کرتی ہیں۔ یہ ایک متعین حد کے اندر صرف حقیقت پسندانہ عمر کی اقدار کی اجازت دیتا ہے، غلط اندراجات جیسے کہ منفی یا حد سے زیادہ بڑی عمروں کو روکتا ہے۔
جاوا اسکرپٹ کا فنکشن استعمال کرکے اس توثیق کو مزید بڑھاتا ہے: checkValidity() طریقہ یہ طریقہ اس بات کی تصدیق کرتا ہے کہ ان پٹ تمام متعین رکاوٹوں کو پورا کرتا ہے، بشمول پیشگی شرائط اور مخصوص عددی حدود۔ اگر ان پٹ ان شرائط کو پورا نہیں کرتا ہے تو، فنکشن مزید عمل درآمد کو روکتا ہے اور صارف کو مطلع کرنے کے لیے ایک انتباہی پیغام دکھاتا ہے کہ درج کی گئی عمر قابل قبول حد کے اندر ہونی چاہیے۔
منطقی مستقل مزاجی کی خرابی۔
صارفین کو شروع کی تاریخ سے پہلے ایک اختتامی تاریخ منتخب کرنے، ہوٹل کے چیک ان سے پہلے کی ایک چیک آؤٹ کی تاریخ منتخب کرنے، یا آرڈر کی تاریخ سے پہلے ڈیلیوری کی تاریخ درج کرنے کی اجازت دینے کے نتیجے میں ایسا ڈیٹا آئے گا جو منطقی طور پر ناممکن ہے۔ یہی بات لاگو ہوتی ہے اگر آپ اپنے پروگرام میں داخلے سے پہلے صارفین کو اپنے گریجویشن سال میں داخل ہونے کی اجازت دیتے ہیں یا اگر وہ روزانہ 24 گھنٹے سے زیادہ کام کے اوقات جمع کرتے ہیں۔
آپ کراس فیلڈ کی توثیق، کاروباری اصول کی جانچ، اور متعلقہ فیلڈز کو یکساں رکھنے کے لیے مشروط منطق کو لاگو کر کے اس کو کم کر سکتے ہیں۔
منطقی مستقل مزاجی کی غلط مثالوں میں شامل ہیں:
مندرجہ بالا کوڈ کے ساتھ بنیادی مسئلہ یہ ہے کہ بالکل بھی توثیق نہیں ہے۔ یہاں تک کہ اگر آپ ان پٹ استعمال کرتے ہیں۔ type="date"کوڈ جو صارف کو تاریخ منتخب کرنے کے لیے ایک منظم طریقہ فراہم کرتا ہے اس کو نافذ نہیں کرتا کہ دونوں میں سے کسی ایک فیلڈ کی ضرورت ہے۔ اس کا مطلب ہے کہ صارف تاریخ کے ایک یا دونوں فیلڈز کو خالی چھوڑ سکتا ہے۔ save() فنکشن اقدار پر عملدرآمد اور ریکارڈنگ جاری رکھتا ہے۔ نتیجے کے طور پر، سسٹمز نامکمل یا بے معنی ڈیٹا پر کارروائی کر سکتے ہیں۔
مطلوبہ چیکس غائب ہونے کے علاوہ، کوڈ دو تاریخوں کے درمیان منطقی تعلق کو جانچنے میں ناکام رہتا ہے۔ کسی بھی منظر نامے میں جس میں آغاز اور اختتامی تاریخیں شامل ہوں، تاریخ آغاز اختتامی تاریخ کے بعد نہیں ہونی چاہیے۔ تاہم، یہ کوڈ ایسا موازنہ نہیں کرتا ہے۔
اس کا مطلب یہ ہے کہ صارف اختتامی تاریخ کے بعد شروع کی تاریخ منتخب کر سکتا ہے اور سسٹم اسے بغیر وارننگ کے قبول کر لے گا۔ اس کے نتیجے میں متضاد یا غیر ریکارڈ شدہ ڈیٹا ہو سکتا ہے۔
مزید برآں، یہ فنکشن صارف کو کوئی فیڈ بیک فراہم کیے بغیر قدر کو آسانی سے لاگ کرتا ہے۔ اگر کوئی فیلڈ خالی ہے یا تاریخ منطقی طور پر غلط ہے تو صارف کو متنبہ کرنے کا کوئی طریقہ کار نہیں ہے۔ اس سے استعمال میں کمی آتی ہے اور صارفین کے لیے اپنی غلطیوں کو سمجھنا یا درست کرنا مشکل ہو جاتا ہے۔
یہاں ترمیم شدہ ورژن ہے:
اس بہتر ورژن میں، ہم پہلے شامل کرتے ہیں۔ required صارفین کو توثیق کو متحرک کیے بغیر دو فیلڈز خالی چھوڑنے سے روکنے کے لیے خصوصیات کا استعمال کریں۔
دوسرا، میں نے اس بات کو یقینی بنانے کے لیے منطقی توثیق کا اضافہ کیا کہ دونوں تاریخوں کے درمیان تعلق درست ہے۔ قدر کو بازیافت کرنے کے بعد، فنکشن اسے اس میں تبدیل کرتا ہے: Date اس بات کو یقینی بنانے کے لیے اشیاء کا موازنہ کریں کہ آخری تاریخ شروع ہونے کی تاریخ سے پہلے نہ ہو۔ اگر اس شرط کی خلاف ورزی کی جاتی ہے تو، فنکشن پر عمل درآمد رک جاتا ہے اور صارف کو غلطی سے آگاہ کرتے ہوئے ایک انتباہ ظاہر ہوتا ہے۔
یہ متضاد یا ناممکن تاریخ کی حدود کو قبول کرنے سے روکتا ہے۔
نقل اور ڈیٹا کی سالمیت کی غلطیاں
صارفین کو پہلے سے رجسٹرڈ ای میل جمع کرنے کی اجازت دینے، پہلے سے استعمال میں موجود صارف نام کا انتخاب، یا ڈپلیکیٹ ملازم ID یا طالب علم کا نمبر درج کرنے سے شناخت کے تنازعات اور ڈپلیکیٹ ریکارڈز پیدا ہوں گے۔ اگر آپ صارفین کو غیر تعاون یافتہ فائل فارمیٹس، بڑی فائلیں، یا خراب تصاویر اپ لوڈ کرنے کی اجازت دیتے ہیں تو بھی مسائل پیدا ہوتے ہیں۔
اگر صارف ایچ ٹی ایم ایل/اسکرپٹ ٹیگز (XSS)، ایس کیو ایل انجیکشن پیٹرن، یا ایسے خصوصی حروف داخل کر سکتے ہیں جن کی اجازت نہیں ہے تو یہ ایک سیکورٹی رسک پیش کر سکتا ہے۔ یہ مسائل ڈیٹا کے معیار، سسٹم کی سالمیت اور سیکیورٹی سے سمجھوتہ کرتے ہیں۔
آپ انفرادیت کی جانچ، فائل کی قسم اور سائز کی تصدیق، اور ڈپلیکیٹس، غلط اپ لوڈز، اور بدنیتی پر مبنی ان پٹ کو روکنے کے لیے ان پٹ سینیٹائزیشن کا استعمال کرکے اس قسم کے مسائل کو روک سکتے ہیں۔
نقل کی غلطی کی ایک مثال یہ ہے:
یہ کوڈ آنکھیں بند کرکے تمام ای میلز بھیجتا ہے۔ savedEmails ای میلز کو یہ چیک کیے بغیر ترتیب دیتا ہے کہ آیا وہ پہلے سے موجود ہیں۔ چونکہ کوئی ڈپلیکیٹ پتہ نہیں ہے، صارفین ایک ہی ای میل کو متعدد بار داخل کر سکتے ہیں۔
یہاں ترمیم شدہ ورژن ہے:
کوڈ کے اس بہتر ورژن میں، ہم نے ڈپلیکیٹ ای میل اندراجات کو روکنے کے لیے توثیق کے مناسب اقدامات نافذ کیے ہیں۔ ای میل کو محفوظ کرنے سے پہلے، فنکشن چیک کرتا ہے کہ آیا قدر پہلے سے موجود ہے۔ savedEmails کا استعمال کرتے ہوئے صف includes() طریقہ اگر کوئی ای میل مل جاتی ہے، تو فنکشن چلنا بند کر دے گا اور صارف کو مطلع کرتے ہوئے ایک انتباہ دکھائے گا کہ ای میل پہلے ہی محفوظ ہو چکی ہے۔ یہ یقینی بناتا ہے کہ آپ کے ڈیٹا کی انفرادیت اور سالمیت کو برقرار رکھتے ہوئے ہر ای میل کو صرف ایک بار ذخیرہ کیا جاتا ہے۔
متعلقہ خامیاں (حوالہ جاتی سالمیت)
صارفین کو ایک ایسا شہر منتخب کرنے پر مجبور کرنا جو ان کے منتخب کردہ ملک کا حصہ نہیں ہے، ایسی پروڈکٹ ID جو اب موجود نہیں ہے، ریٹائرڈ SKU، یا شپنگ کا طریقہ جو منتخب علاقے میں دستیاب نہیں ہے اس کے نتیجے میں حوالہ ٹوٹ سکتا ہے۔
ایسا ہی ہوتا ہے جب کوئی صارف کسی دوسرے محکمے سے ایڈمنسٹریٹر کا انتخاب کرتا ہے یا صحیح کردار اور اجازتوں کو ترتیب دیئے بغیر مکمل طور پر بک شدہ ٹائم سلاٹ کا انتخاب کرتا ہے۔ یہ غلطیاں ٹیبلز اور کرپٹ ڈاون اسٹریم جوائنز اور رپورٹس کے درمیان تعلقات کو توڑ دیتی ہیں۔
یہاں آپ انحصار ڈراپ ڈاؤن، لائیو تلاش، اور غیر ملکی کلید کی توثیق کا استعمال کر سکتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ صارفین صرف درست، موجودہ، مطابقت پذیر اختیارات کا انتخاب کریں۔
یہاں ایک رشتہ دار غلطی کی ایک بری مثال ہے:
اس کوڈ میں غلطی، جیسا کہ آپ اوپر دیکھ سکتے ہیں، یہ ہے کہ اس نے ملک اور شہر کو مکمل طور پر آزاد شعبوں کے طور پر سمجھا، حالانکہ انہیں ایک دوسرے پر منحصر ہونا چاہیے۔ منتخب کردہ ملک سے قطع نظر تمام شہروں کو ظاہر کرکے، انٹرفیس صارفین کو بے معنی امتزاجات بنانے کی اجازت دیتا ہے، جیسے کہ "نیویارک” اور "یونائیٹڈ کنگڈم” یا "مانچسٹر” اور "ریاستہائے متحدہ” کو منتخب کرنا۔
اس کے علاوہ، کیونکہ save() اگر فنکشن کسی بھی تصدیق کیے بغیر صارف کے منتخب کردہ ہر چیز کو ریکارڈ کرتا ہے، تو سسٹم ان رشتوں کو قبول اور ذخیرہ کر لے گا جو موجود نہیں ہونے چاہئیں۔ یہ دو شعبوں کے درمیان منطقی تعلق کو توڑ دیتا ہے اور غلط اور متضاد ڈیٹا تیار کرتا ہے جو نیچے کی دھارے کو خراب کر سکتا ہے۔
یہاں ترمیم شدہ، پروڈکشن کے لیے تیار ورژن ہے:
یہ بہتر شدہ کوڈ ملک شہر کی شکل کو دو ڈھیلے ڈراپ ڈاؤن کی بجائے ایک کنٹرول شدہ، رشتہ سے آگاہ بہاؤ میں بدل دیتا ہے۔
جب صارف کسی ملک کا انتخاب کرتا ہے۔ loadCities() فنکشن چلتا ہے۔ سب سے پہلے، شہر کے ڈراپ ڈاؤن کو صاف کریں اور اگر کوئی ملک منتخب نہیں کیا گیا ہے تو شہر کی فیلڈ کو غیر فعال کریں، صارفین کو خود شہر کا انتخاب کرنے سے روکیں۔
جب آپ ایک درست ملک کا انتخاب کرتے ہیں، تو شہر کا ڈراپ ڈاؤن فعال ہو جاتا ہے اور صرف اس ملک سے تعلق رکھنے والے شہروں کے ساتھ آباد ہوتا ہے۔ citiesByCountry نقشہ سازی مستقل اور محفوظ موازنہ کو یقینی بنانے کے لیے شہر کی اقدار کو بھی معمول بنایا گیا ہے (چھوٹے حروف اور خالی جگہوں کو ہٹانا)۔
جب صارف ‘محفوظ کریں’ پر کلک کرتا ہے save() فنکشن اس بات کو یقینی بناتا ہے کہ ملک اور شہر دونوں کا انتخاب کیا گیا ہے۔ اگر کوئی ایک غائب ہے تو، ایک انتباہ ظاہر ہوتا ہے اور یہ رک جاتا ہے۔ اس کے بعد یہ منتخب ملک کے لیے شہر کی درست اقدار کی فہرست کو دوبارہ بناتا ہے اور چیک کرتا ہے کہ آیا منتخب شہر حقیقت میں اس فہرست میں ہے یا نہیں۔
ساختی غلطیاں (ڈراپ ڈاؤن، ریڈیو بٹن، گنتی)
اگر صارف اپنے ملک میں بطور "USA”، "USA”، "United States”، یا "us” کے طور پر داخل ہو سکتے ہیں، ان کی جنس بطور "مرد”، "مرد”، "M” یا "مرد”، یا ان کا شعبہ بطور "انجینئرنگ”، "Eng”، یا "انجینئر”، اس کے نتیجے میں متضاد درجہ بندی ڈیٹا ہو سکتا ہے۔
یہی بات "USD”، "USD”، "USD” کے طور پر درج کی گئی کرنسیوں پر بھی لاگو ہوتی ہے، پروڈکٹ کیٹیگریز کے ہجے مختلف ہوتے ہیں، اسٹیٹس ویلیوز جیسے "Active”، "Active” "ACT”، "Enabled”، یا Boolean Values جیسے "Yes”, "Yes”, "Y” "1”۔
یہ تضادات تجزیہ، گروپ بندی اور رپورٹنگ کو غیر مستحکم بنا دیتے ہیں، اور تجزیہ کار ان فائلوں کو ترتیب دینے اور معیاری بنانے میں وقت صرف کرتے ہیں۔
معیاری درجہ بندی کی اقدار کو لاگو کرنے کے لیے، آپ کو مفت ٹیکسٹ فیلڈز کو ڈراپ ڈاؤن، ریڈیو بٹن، اور شماریات سے بدلنا ہوگا۔
ساختی غلطیوں کی بری مثالیں:
اس کوڈ کے ساتھ مسئلہ یہ ہے کہ یہ کوئی حقیقی توثیق کیے بغیر یا قواعد کو نافذ کیے بغیر ملکی قیمت کو ذخیرہ کرنے کا بہانہ کرتا ہے، جس سے فارم کو ناقابل اعتبار اور غلط ڈیٹا کا خطرہ ہوتا ہے۔
یہ فارم "ملک” کے لیے سادہ ٹیکسٹ ان پٹ استعمال کرتا ہے۔ اس کا مطلب ہے کہ صارف جو چاہیں داخل کر سکتے ہیں – غلط ہجے، بے ترتیب حروف، غلط ممالک، وغیرہ – اور یہاں تک کہ اسے خالی چھوڑ دیں۔ چونکہ ان پٹ کو ضرورت کے مطابق نشان زد نہیں کیا گیا ہے اور JavaScript یہ چیک نہیں کرتا ہے کہ آیا فیلڈ میں کوئی معنی خیز قدر ہے، فارم خالی تاروں یا بے معنی متن کو "اسٹور” کرنے میں خوش ہے۔
کہ submit ہینڈلر مرکزی فارم جمع کرانے سے روکتا ہے، لیکن چونکہ یہ صارف کے درج کردہ لاگ ان کے علاوہ کچھ نہیں کرتا، اس لیے سسٹم بلاشبہ غلط، نامکمل، یا خراب ڈیٹا کو قبول کرے گا۔ سیدھے الفاظ میں، کوڈ ان پٹ جمع کرتا ہے لیکن اس کی توثیق نہیں کرتا، درستگی کو نافذ نہیں کرتا، اور سسٹم کو غلط یا ناقابل استعمال اقدار سے محفوظ نہیں رکھتا۔
یہاں ترمیم شدہ ورژن ہے:
سب سے بڑی بہتری یہ ہے کہ ہم اب ملک کے لیے مخصوص مفت ٹیکسٹ فیلڈز پر انحصار نہیں کرتے ہیں۔ ڈراپ ڈاؤن پر سوئچ کرنے سے، فارم اب صارف کو درست اختیارات کے کنٹرول شدہ سیٹ تک محدود کر دیتا ہے۔ اس سے املا کی غلطیوں، بے ترتیب متن، یا ملک کے غلط ناموں کو آپ کے سسٹم میں داخل ہونے سے روکنے میں مدد ملے گی۔
کام کرنے کے دوران آپ کو جن اہم قسم کی ڈیٹا کی خرابیوں کا سامنا کرنا پڑ سکتا ہے وہ یہ ہیں: اب جب کہ ہم نے مسئلے کی وجوہات اور کچھ اہم اصلاحی/احتیاطی اقدامات پر تبادلہ خیال کیا ہے جو آپ لے سکتے ہیں، آئیے خود ڈیٹا کے معیار کو دیکھیں۔
کیا اچھا ڈیٹا بناتا ہے؟
تو اصل میں ڈیٹا کا معیار کیا ہے؟ IBM اسے کسی تنظیم یا مخصوص سیاق و سباق کے اندر جمع، ذخیرہ اور استعمال شدہ ڈیٹا کی درستگی، مستقل مزاجی، مکمل ہونے، وشوسنییتا اور مطابقت کی سطح کے طور پر بیان کرتا ہے۔
آئیے کوالٹی ڈیٹا کی ان خصوصیات میں سے ہر ایک پر گہری نظر ڈالیں تاکہ یہ سمجھ سکیں کہ ان میں کیا شامل ہے۔
مکملیت:
مکملیت اس بات کی پیمائش کرتی ہے کہ درحقیقت کتنا مطلوبہ ڈیٹا موجود ہے۔ اگر فیلڈز کا ایک اہم حصہ غائب ہے، تو ڈیٹا سیٹ حقیقت کی نمائندگی نہیں کرے گا اور اس پر مبنی کوئی بھی تجزیہ ناقابل اعتبار ہوگا۔
ایک مثال ایک سائن اپ فارم ہو گا جو صارفین کو ذخیرہ کرتا ہے، لیکن ان میں سے آدھے ای میل پتے غائب ہیں۔ اگر آپ "ای میل مصروفیت” پر تجزیہ چلاتے ہیں تو آپ کے نتائج متزلزل ہوں گے کیونکہ بہت سے صارفین کو آپ کی ای میلز بھی موصول نہیں ہوتی ہیں۔ اس کا مطلب ہے کہ یہ ڈیٹا نامکمل ہے۔
اصلیت:
انفرادیت اس بات کا تعین کرتی ہے کہ آیا ہر حقیقی دنیا کی چیز ڈیٹاسیٹ میں صرف ایک بار ظاہر ہوتی ہے۔ ڈپلیکیٹ ریکارڈز گنتی، بریک جوائن، اور سکیو میٹرکس میں اضافہ کرتے ہیں۔
مثال کے طور پر، میرے پاس ایک کسٹمر ٹیبل ہے جس میں ایک ہی کسٹمر آئی ڈی والے ایک ہی شخص کے لیے دو قطاریں ہیں۔ "فعال صارفین” کا حساب لگاتے وقت، نظام متوقع آمدنی کو بڑھاتے ہوئے، ان کو دو بار شمار کرتا ہے۔
درستگی:
درستگی اس بات کا اندازہ کرتی ہے کہ آیا ڈیٹا متوقع فارمیٹ، قسم، یا کاروباری اصولوں کی پیروی کرتا ہے۔ اس میں درست ڈیٹا کی قسمیں، قابل قبول رینجز، اور سسٹم کے متعین نمونے شامل ہیں۔
مثال کے طور پر، تاریخ کو ذخیرہ کرنے کے لیے فیلڈ میں "32/99/2025” یا "کل” جیسی اقدار ہوتی ہیں۔ یہ غلط اندراجات نیچے دھارے میں آنے والی ETL ملازمتوں کو توڑ دیں گی جو مناسب تاریخ کی شکل کی توقع کرتی ہیں۔
وقت کی پابندی:
وقت کی پابندی اس بات کی عکاسی کرتی ہے کہ آیا ضرورت کے وقت ڈیٹا دستیاب ہے۔ یہاں تک کہ درست ڈیٹا بھی بیکار ہو جاتا ہے اگر اس پر انحصار کرنے والے عمل کے لیے بہت دیر ہو جائے۔ مثال کے طور پر، گاہک کے آرڈر دینے کے بعد، سسٹم کو فوری طور پر ایک آرڈر ID تیار کرنا چاہیے۔
درستگی:
درستگی پیمائش کرتی ہے کہ ڈیٹا اصل سچائی سے کتنا قریب سے ملتا ہے۔ اگر متعدد سسٹمز ایک ہی میٹرک کی اطلاع دیتے ہیں، تو آپ کو متضاد اقدار سے بچنے کے لیے ایک کو مستند ذریعہ کے طور پر نامزد کرنا چاہیے۔
مستقل مزاجی:
مستقل مزاجی اس بات کا تعین کرتی ہے کہ آیا ڈیٹا مختلف ڈیٹا سیٹس یا متعلقہ فیلڈز میں منسلک ہے۔ اگر دو نظام ایک ہی تصور کو بیان کرتے ہیں، تو ان کی اقدار کو ایک دوسرے سے متصادم نہیں ہونا چاہیے۔
مثال کے طور پر، کمپنی کا HR سسٹم انجینئرنگ کے 50 ملازمین کی اطلاع دیتا ہے، لیکن اس کا پے رول سسٹم صرف 42 کی فہرست دیتا ہے۔ چونکہ دونوں ایک ہی گروپ کو بیان کرتے ہیں، اس لیے کوئی بھی تضاد ڈیٹا کے معیار کے مسئلے کی نشاندہی کرتا ہے۔
مقصد کے لیے موزوں:
مقصد کے لیے فٹنس اس بات کا جائزہ لیتی ہے کہ آیا ڈیٹا ہاتھ میں موجود مخصوص کاروباری کام کے لیے موزوں ہے۔ یہاں تک کہ مکمل، درست اور بروقت ڈیٹا بھی مددگار نہیں ہو سکتا اگر یہ مطلوبہ سوال کا جواب نہیں دیتا ہے۔
مثال کے طور پر، ایک ویب سائٹ کلکس ڈیٹا سیٹ صارف کی مصروفیت کا تجزیہ کرنے کے لیے بہترین ہو سکتا ہے، لیکن آمدنی کی پیشن گوئی کرنے کے لیے یہ بیکار ہے کیونکہ اس میں خریداری یا قیمتوں کی معلومات نہیں ہوتی ہے۔
ڈیٹا کی توثیق کی پرت
اب جب کہ ہم نے ان خصوصیات کو اجاگر کیا ہے جو کوالٹی ڈیٹا کو یقینی بناتے ہیں، ڈیٹا کی توثیق کی تہوں پر بات کرنا ضروری ہے۔
ڈیٹا کے معیار کو بڑھانے کے لیے جانچنے کے لیے پانچ پرتیں ہیں۔
فرنٹ اینڈ پرت – "صارف کی حفاظت کریں، سسٹم کی نہیں”
فرنٹ اینڈ کی توثیق صارف کے تجربے کو بہتر بنانے میں اہم کردار ادا کرتی ہے، لیکن یہ سسٹم کے لیے کوئی حقیقی تحفظ فراہم نہیں کرتی ہے۔
چونکہ فرنٹ اینڈ منطق صارف کے ماحول میں کام کرتی ہے، اس لیے ڈیٹا کے معیار کو نافذ کرنے کے طریقہ کار کے طور پر اس پر بھروسہ نہیں کیا جا سکتا۔ براؤزر میں چلنے والا تمام کوڈ بالآخر آپ کے کنٹرول میں ہے۔ اس کا مطلب ہے کہ انہیں مکمل طور پر غیر فعال، تبدیل، بلاک یا نظرانداز کیا جا سکتا ہے۔
مثال کے طور پر، صارفین براؤزر کے ڈویلپر ٹولز کو کھول سکتے ہیں، توثیق کے قواعد کو ہٹا سکتے ہیں، اور بغیر کسی پابندی کے غلط یا بدنیتی پر مبنی ڈیٹا جمع کر سکتے ہیں۔
فرنٹ اینڈ کی توثیق پیچیدہ کاروباری قواعد کو نافذ نہیں کر سکتی۔ اس بات کو یقینی بنانا کہ رعایتی قیمت اصل قیمت سے کم ہے، اس بات کو یقینی بنانا کہ آغاز کی تاریخ اختتامی تاریخ سے پہلے ہے، انوینٹری کی سطح کو منفی جانے سے روکنا، یا اس بات کو یقینی بنانا کہ پروڈکٹ ڈیٹا بیس میں ایک درست زمرے میں آتا ہے، نظام کی سطح کی گہری جانچ کی ضرورت ہوتی ہے۔
وہ آئٹمز جن کی توثیق فرنٹ اینڈ لیول پر ہوتی ہے وہ مطلوبہ فیلڈز، ای میل فارمیٹ، پاس ورڈ کی مضبوطی، ایڈریس فیلڈز اور ادائیگی کے ان پٹ فارمیٹ ہیں۔
لہذا، فرنٹ اینڈ کی توثیق ڈیٹا کے معیار یا حفاظت کی ضمانت نہیں دیتی کیونکہ اسے API ٹولز (جیسے پوسٹ مین)، غیر فعال جاوا اسکرپٹ، بدنیتی پر مبنی بوٹس، اور فریق ثالث کے انضمام کے ذریعے نظرانداز کیا جا سکتا ہے۔
اس کی وجہ سے، یہ بہتر ہے کہ فرنٹ اینڈ کو ٹرسٹ پرت کے بجائے استعمال کی پرت کے طور پر سمجھا جائے۔
پس منظر کی توثیق – "حقیقی گیٹ کیپر”
صرف بیک اینڈ اور ڈیٹا بیس کی تہوں پر ہی ڈیٹا کے حقیقی معیار اور سسٹم کی سالمیت کی ضمانت دی جا سکتی ہے۔
پسدید درخواستوں کی توثیق کرنے، کاروباری منطق کو نافذ کرنے، اور تصدیق اور اجازت کے انتظام کے لیے ذمہ دار ہے۔
اگر توثیق یہاں ناکام ہو جاتی ہے، تو غلط ڈیٹا کو پروپیگنڈے سے پہلے ہی مسترد کر دیا جائے گا۔ اس پرت کے بغیر، ڈیٹا کی بدعنوانی کی شروعات ہوتی ہے۔
مثال کے طور پر:
$request->validate([
'name' => 'required|string|max:255',
'price' => 'required|numeric|min:0',
'stock' => 'required|integer|min:0',
'category_id' => 'required|exists:categories,id',
]);
مندرجہ بالا کوڈ کا ٹکڑا دکھاتا ہے کہ Laravel میں درخواست کی توثیق کو کیسے استعمال کیا جائے تاکہ یہ یقینی بنایا جا سکے کہ ڈیٹا بیس میں کارروائی یا ذخیرہ کرنے سے پہلے آنے والا ڈیٹا مخصوص ضروریات کو پورا کرتا ہے۔ یہ ویب ڈویلپمنٹ کے لیے ایک ضروری عمل ہے کیونکہ یہ ڈیٹا کی سالمیت کو برقرار رکھنے، غلطیوں کو روکنے اور ایپلیکیشن کی حفاظت کو بڑھانے میں مدد کرتا ہے۔
اس مثال میں $request->validate() ایک طریقہ جو چار ان پٹ فیلڈز کے لیے توثیق کے قوانین کے سیٹ کی وضاحت کرتا ہے: name, price, stockاور category_id. ہر فیلڈ کو رکاوٹوں کا ایک سیٹ تفویض کیا جاتا ہے جو آنے والے ڈیٹا کو پورا کرنا ضروری ہے۔
نام کی فیلڈ کو ضرورت کے مطابق نشان زد کیا گیا ہے۔ یعنی اسے درخواست میں شامل کیا جانا چاہیے اور اسے خالی نہیں چھوڑا جا سکتا۔ یہ ایک سٹرنگ بھی ہونا چاہیے تاکہ صرف ٹیکسٹ ڈیٹا کی اجازت ہو، اور زیادہ سے زیادہ لمبائی 255 حروف تک محدود ہو اس کا استعمال کرتے ہوئے: max:255. یہ ضرورت سے زیادہ طویل ان پٹ کو روک دے گا جو ممکنہ طور پر آپ کے ڈیٹا بیس یا یوزر انٹرفیس کے ساتھ مسائل کا سبب بن سکتا ہے۔
اسی طرح، قیمت کا فیلڈ ضروری ہے اور عددی ہونا ضروری ہے۔ صرف اعداد کی اجازت ہے، جیسے عددی یا اعشاریہ کی قدریں۔ حکمرانی min:0 یہ یقینی بناتا ہے کہ قیمت منفی نہیں ہوسکتی ہے۔ یہ زیادہ تر مصنوعات کی قیمتوں کے منظرناموں میں منطقی طور پر مطابقت رکھتا ہے۔
اسٹاک فیلڈ بھی درکار ہے اور ایک عدد عدد ہونا ضروری ہے۔ یعنی صرف انٹیجرز کی اجازت ہے۔ یہ اصل اشیاء کا حساب لگانے کے لیے بہترین ہے۔ قیمت کے میدان کی طرح min:0 اس اصول کا مقصد انوینٹری کی منفی اقدار کو روکنا ہے، جن کا انوینٹری سسٹم میں کوئی مطلب نہیں ہے۔
آخر میں، ہم Category_id فیلڈ کی توثیق کرتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ یہ موجود ہے اور درست ہے۔ کہ required جبکہ قواعد اس بات کو یقینی بناتے ہیں کہ ایک زمرہ منتخب کیا گیا ہے۔ exists:categories,id اصول چیک کرتا ہے کہ آیا فراہم کردہ قدر زمرہ ڈیٹا بیس ٹیبل میں موجود کسی ID سے مماثل ہے۔ یہ غلط یا غیر موجود زمرہ کے حوالہ جات کو روک کر ڈیٹا بیس کے اندر متعلقہ سالمیت کو برقرار رکھتا ہے۔
یہ پرت کالعدم اقدار، ڈیٹا کی اقسام اور فارمیٹس، قابل قبول حدود، اور حوالہ جاتی سالمیت (وجود) کی توثیق کرتی ہے۔
ڈیٹا بیس پرت – "باقی ڈیٹا پروٹیکشن”
صرف درخواست کی سطح پر توثیق کافی نہیں ہے۔ آپ کو ڈیٹا بیس کی سطح کی رکاوٹیں بھی لاگو کرنی ہوں گی جیسے NOT NULL رکاوٹیں، منفرد رکاوٹیں (ای میل، SKU، آرڈر نمبر)، غیر ملکی کیز (orders.user_id → user.id) اور توثیق کی رکاوٹیں (جیسے قیمت >= 0)۔
یہ پرت بہت اہم ہے کیونکہ ایپلیکیشن کیڑے توثیق کو نظرانداز کر سکتے ہیں، پس منظر کے کام اور بازیافت کنٹرولرز کو نظرانداز کر سکتے ہیں، اور بدنیتی پر مبنی اداکار براہ راست رسائی کی کوشش کر سکتے ہیں۔
ڈیٹا بیس پرت دفاع کی آخری لائن کے طور پر کام کرتی ہے، درخواست کی ناکامیوں سے قطع نظر ساختی سالمیت کو یقینی بناتی ہے۔ ڈیٹا بیس کی رکاوٹیں آخری حربے ہیں۔ کوڈ کی خلاف ورزی کرتے ہوئے بھی درستگی کو نافذ کرتا ہے۔
سروس کی پرت/کاروباری منطق – "اصل اصول کی توثیق”
یہ پرت ڈومین کے لیے مخصوص منطق کا اطلاق کرتی ہے جسے توثیق کے سادہ قوانین کے ذریعے حاصل نہیں کیا جا سکتا۔ سروس لیئر وہ جگہ ہے جہاں ایپلیکیشن یہ پوچھنا بند کر دیتی ہے کہ "کیا یہ ڈیٹا صحیح نظر آتا ہے؟” اور آپ پوچھنا شروع کر دیتے ہیں، "کیا یہ حقیقی دنیا میں ہو سکتا ہے؟”
یہ پرت ڈومین کے مخصوص اصولوں کو نافذ کرتی ہے جو سادہ درخواست کی توثیق یا ڈیٹا بیس کی رکاوٹوں کے ذریعے حاصل نہیں کیے جا سکتے۔ یہ اصول کاروباری سچائی کی عکاسی کرتے ہیں، ساختی درستگی کی نہیں۔
ہاں:
if (\(product->stock < \)quantity) {
throw new OutOfStockException();
}
یہ اوور سیلنگ کو روکتا ہے اور اس بات کو یقینی بناتا ہے کہ نظام جسمانی حقیقت کی عکاسی کرتا ہے۔
if (\(cartTotal !== \)calculatedTotal) {
throw new PriceMismatchException();
}
یہ آپ کی کمائی کی حفاظت کرتا ہے اور چھیڑ چھاڑ کو روکتا ہے۔
یہ پرت انوینٹری کی درستگی کو یقینی بنا کر، ٹوٹل کی دوبارہ گنتی، رعایتی منطق کا اطلاق، اور صارف کی مخصوص حدود کی جانچ کر کے حقیقی کاروباری قواعد کو نافذ کرتی ہے۔
ملازمتیں/قطار/ڈیٹا جمع کرنا - "بیرونی ڈیٹا کی توثیق"
بیرونی ڈیٹا (مثلاً سپلائر فیڈز) کو درآمد کرتے یا اس پر کارروائی کرتے وقت، پروسیسنگ سے پہلے تصدیق ہونی چاہیے۔ آپ کو اسکیما کی مطابقت کو یقینی بنانے کی ضرورت ہے، مطلوبہ کالم موجود ہیں، درست ڈیٹا کی اقسام موجود ہیں، JSON ڈھانچہ درست ہے، اور ڈپلیکیٹ پلیسمنٹس کا پتہ چلا ہے۔
اس کی وجہ یہ ہے کہ بیرونی ڈیٹا کے ذرائع ڈیٹا کے معیار کے مسائل کا ایک بڑا ذریعہ ہیں۔ یہاں تصدیق کے بغیر، خراب ڈیٹا خود بخود بڑی تعداد میں سسٹم میں داخل ہو سکتا ہے۔
اب جب کہ ہم نے جدید ایپلیکیشن اسٹیک کی تہوں پر تبادلہ خیال کیا ہے، یہ واضح ہے کہ ڈیٹا کوالٹی ایسی چیز نہیں ہے جسے آپ UI میں "ایک بار چیک کریں"۔
یہ نظام میں مختلف گہرائیوں پر بار بار لاگو کیا جانا چاہئے. ہر پرت مختلف قسم کی خرابیوں کو پکڑتی ہے، اور وہ مل کر ایک رکاوٹ بناتے ہیں جو خراب ڈیٹا کو اسٹوریج، اینالیٹکس، یا نیچے دھارے کے صارفین تک پہنچنے سے روکتی ہے۔
ڈیٹا کے معیار کی حفاظت کے لیے جانچ کی حکمت عملی
سمیٹنے کے لیے، یہاں تین بنیادی جانچ کی حکمت عملییں ہیں جن کا اطلاق ہر ڈویلپر کو ڈیٹا کے معیار کی حفاظت کے لیے کرنا چاہیے:
یونٹ ٹیسٹنگ
یونٹ ٹیسٹ ڈیٹا کے معیار کے دفاع کی پہلی لائن ہیں۔ اس تناظر میں، "یونٹ" سے مراد واحد کالم، واحد تبدیلی، یا واحد توثیق کا اصول ہے۔
مقصد سادہ ہے۔ یہ اس بات کو یقینی بنانے کے بارے میں ہے کہ آپ کے ڈیٹا لاجک کے سب سے چھوٹے اجزاء بالکل اسی طرح کام کرتے ہیں جیسا کہ ارادہ ہے۔ یہ ضروری ہے کیونکہ اگر آپ ان نچلے درجے کے اصولوں کی جانچ اور توثیق نہیں کرتے ہیں، تو غلط یا متضاد ڈیٹا آپ کے ڈیٹا بیس میں داخل ہو جائے گا اور اس کے اوپر بنی ہوئی ہر چیز کو آلودہ کر دے گا۔
ہر اصول یا تبدیلی کو الگ کر کے، آپ اس بات کو یقینی بنا سکتے ہیں کہ ڈیٹا کو بڑی پائپ لائن یا کاروباری عمل میں جانے سے پہلے سکیما کی رکاوٹیں، فیلڈ لیول کے مفروضے، اور کم سطحی منطق درست رہیں۔
اس پرت میں عام سوالات کے جوابات میں شامل ہیں:
-
کیا یہ کالم کالعدم ہے؟
-
کیا یہ ریگولر ایکسپریشن ای میل کے تاروں سے خالی جگہوں کو صحیح طریقے سے ہٹاتا ہے؟
-
کیا یہ تبدیلی ایک قطار کے لیے متوقع پیداوار پیدا کرتی ہے؟
یہاں آپ چیک کر سکتے ہیں کہ آیا آپ کا ڈیٹا معاہدہ درست ہے۔ اگر ایک کالم غیر کالعدم، منفرد، یا کسی مخصوص پیٹرن کی پیروی کرنا ضروری ہے، تو آپ کے یونٹ ٹیسٹ اس کو نافذ کریں گے۔ اگر یہ اصول یہاں ناکام ہو جاتے ہیں، تو ٹیبل کے خراب ہونے یا ڈیش بورڈ کے غلط فہمی میں مبتلا ہونے سے پہلے وہ آسانی سے ناکام ہو سکتے ہیں۔
اس کنکریٹ کو بنانے کے لیے، آئیے اس پر ایک نظر ڈالتے ہیں کہ ایک حقیقی کوڈ بیس میں یونٹ ٹیسٹ کیسا نظر آتا ہے۔ یہ مثال Laravel کی ہے، لیکن جانچ کے اصول وہی ہیں جو ڈیٹا کوالٹی یونٹ ٹیسٹنگ کے لیے ہیں۔ ایک اصول، ایک توقع، ہر چیز سے الگ تھلگ۔
مثال: ڈسکاؤنٹ کے حساب کتاب کے قواعد کی جانچ کرنا
فرض کریں کہ آپ کے ای کامرس اسٹور کے درج ذیل اصول ہیں:
-
اگر پروڈکٹ کی قیمت £100 سے زیادہ ہے تو 10% رعایت کا اطلاق کریں۔
-
بصورت دیگر رعایت کا اطلاق نہیں کیا جائے گا۔
چلو مان لیتے ہیں کہ یہ ڈسکاؤنٹ منطق ہے۔
100) {
return $price * 0.10; // 10% discount
}
return 0;
}
}
اس منطق کے لیے یہاں ایک یونٹ ٹیسٹ ہے:
calculate(200);
\(this->assertEquals(20, \)discount);
}
/** @test */
public function it_applies_no_discount_when_price_is_100_or_below()
{
$service = new DiscountService();
\(discount = \)service->calculate(100);
\(this->assertEquals(0, \)discount);
}
}
کہ DiscountService سادہ قواعد شامل ہیں۔ اگر قیمت 100 سے زیادہ ہے تو، 10% رعایت لاگو ہوتی ہے۔ بصورت دیگر رعایت کا اطلاق نہیں کیا جائے گا۔ یونٹ ٹیسٹ اس اصول کو الگ سے چیک کرتے ہیں، بغیر کسی کنٹرولر، ڈیٹا بیس، یا HTTP درخواست کو شامل کیے۔ ڈویلپرز اپنی خدمات کو براہ راست جانچتے ہیں تاکہ یہ یقینی بنایا جا سکے کہ کلیدی کمپیوٹیشن بالکل اسی طرح کام کرتے ہیں جیسا کہ مقصد ہے۔
پہلا ٹیسٹ مثبت کیسز کی نشاندہی کرتا ہے۔ یعنی، 200 کی قیمت سے 20 کی رعایت ہونی چاہیے۔ دوسرا ٹیسٹ باؤنڈری کے حالات کو چیک کرتا ہے۔ یعنی، 100 کی قیمت کوئی رعایت نہیں دیتی۔ ایک ساتھ، یہ ٹیسٹ اصول کے دونوں اطراف کی تصدیق کرتے ہیں اور اگر مستقبل میں منطق بدل جاتی ہے تو رجعت کو روکتے ہیں۔
اب، چونکہ یہ Laravel کی مثال ہے، Laravel ٹیسٹ آپ کو منطق (یونٹ ٹیسٹ) اور مجموعی اطلاق کے رویے (فنکشنل ٹیسٹ) دونوں کو چیک کرنے میں مدد کریں گے۔ آپ اسے استعمال کرکے چلا سکتے ہیں: php artisan testاپنے ٹیسٹ کو الگ ٹیسٹ ماحول میں چلا کر، آپ اس بات کو یقینی بناتے ہیں کہ آپ کا اصل ڈیٹا بیس اور بنیادی کوڈ بیس محفوظ اور غیر متاثر ہے۔
انضمام کی جانچ: بہاؤ اور نسب کی تصدیق
یونٹ ٹیسٹ انفرادی قواعد کی درستگی کی تصدیق کرتے ہیں، جبکہ انضمام ٹیسٹ اجزاء کے درمیان ڈیٹا کی نقل و حرکت کی تصدیق کرتے ہیں۔ انٹیگریشن ٹیسٹنگ اس بات کی تصدیق کرتی ہے کہ ایک ہی ڈیٹا فلو کے طور پر متعدد پرتیں مل کر کام کرتی ہیں۔
اس مثال میں، کنٹرولر آرڈر لیتا ہے، ڈسکاؤنٹ سروس کو کال کرتا ہے، تبدیلی کا اطلاق کرتا ہے، اور ڈیٹا بیس میں نتائج کو برقرار رکھتا ہے۔ تہوں کے درمیان تعامل اسے یونٹ ٹیسٹ سے انضمام ٹیسٹ تک لے جاتا ہے۔ یہاں ہم اصل بہاؤ کی جانچ کرتے ہیں:
-
کنٹرولر → سروس → اسٹوریج → MySQL
-
تصدیق کریں کہ MySQL مائیگریشن درست طریقے سے چلتا ہے۔
-
غیر ملکی کلیدی تصدیقی رشتہ کا اطلاق کریں۔
-
تصدیق کریں کہ سروس ڈیٹا بیس کے ساتھ توقع کے مطابق تعامل کرتی ہے۔
-
یقینی بنائیں کہ آپ کے ماڈلز اور ریپوزٹریز مستقل طور پر کام کرتے ہیں۔
انٹیگریشن ٹیسٹ ان مسائل کو ظاہر کرتے ہیں جو صرف اس وقت ظاہر ہوتے ہیں جب اجزاء آپس میں تعامل کرتے ہیں، جیسے کہ غلط جوڑ، ٹوٹے ہوئے ہجرت، غیر مماثل فیلڈ کے نام، یا ایسی لطیف قسم کی مماثلتیں جن کا یونٹ ٹیسٹ پتہ نہیں لگا سکتے۔
یہ ایک پرت ہے جو کیڑے پکڑتی ہے جو خاموشی سے ڈیٹا نسب کو خراب کرتی ہے۔
مثالوں میں شامل ہیں:
create(['subtotal' => 150]);
\(response = \)this->postJson("/orders/{$order->id}/apply-discount");
$response->assertStatus(200);
$this->assertDatabaseHas('orders', [
'id' => $order->id,
'grand_total' => 135, // 150 - 10% discount
'discount_total' => 15
]);
}
}
یہ کسی ایک اصول کے بجائے پورے بہاؤ کی نمائندگی کرتا ہے۔
یہ ٹیسٹ ایلوکوینٹ فیکٹری کا استعمال کرتے ہوئے آرڈر بنانے سے شروع ہوتا ہے۔ یہ فوری طور پر یونٹ ٹیسٹنگ کی حدود کو آگے بڑھاتا ہے کیونکہ یہ ڈیٹا بیس کے ساتھ تعامل کرنے اور حقیقی ڈیٹا رکھنے کے لیے Laravel کی ماڈل پرت پر انحصار کرتا ہے۔
یہاں ٹیسٹ ایک حقیقی HTTP POST درخواست ہے۔ /orders/{id}/apply-discount اس کا مطلب یہ ہے کہ یہ طریقہ کو براہ راست کال نہیں کرتا ہے، بلکہ اس کے بجائے Laravel کی روٹنگ پرت سے گزرتا ہے، درخواست پر کارروائی کرنے کے لیے کنٹرولر کو ذمہ دار قرار دیتا ہے اور رعایت کا حساب لگانے اور لاگو کرنے کے لیے ذمہ دار تمام کاروباری منطق کو متحرک کرتا ہے۔
متعدد پرتوں (روٹنگ، کنٹرولرز، سروس منطق، اور ماڈل استقامت) کے ذریعے یہ حرکت بالکل وہی ہے جو انضمام کی جانچ کی وضاحت کرتی ہے۔ مقصد یہ یقینی بنانا ہے کہ یہ اجزاء ایک نظام کے طور پر صحیح طریقے سے کام کریں۔
درخواست پر کارروائی ہوجانے کے بعد، ٹیسٹ اس بات کی تصدیق کرتا ہے کہ HTTP پرت نے توقع کے مطابق کام کیا اور اس بات کی تصدیق کی کہ جواب کامیاب اسٹیٹس کوڈ واپس کرتا ہے۔
لیکن سب سے اہم حصہ یہ ہے کہ ٹیسٹ ڈیٹا بیس کو چیک کرتا ہے تاکہ یہ یقینی بنایا جا سکے کہ یہ درست ہے۔ grand_total اور discount_total محفوظ کیا گیا۔ یہ حتمی دعویٰ ثابت کرتا ہے کہ رعایت کی منطق کو عملی جامہ پہنایا گیا ہے، ماڈل کو اپ ڈیٹ کر دیا گیا ہے، اور تبدیلیاں کامیابی کے ساتھ ڈیٹا بیس میں لکھ دی گئی ہیں۔
دوسرے الفاظ میں، جانچ صرف اس بات کو یقینی بنانے کے بارے میں نہیں ہے کہ حسابات درست ہیں۔ یہ اس بات کو بھی یقینی بناتا ہے کہ درخواستیں موصول ہونے سے لے کر ڈیٹا بیس کو اپ ڈیٹ کرنے تک پوری پائپ لائن مستقل طور پر کام کرتی ہے۔
فنکشنل ٹیسٹنگ: بزنس رولز کی جانچ کرنا
فنکشنل ٹیسٹنگ سسٹم میں درخواست کے داخل ہونے سے لے کر جواب کی واپسی تک صارف کے پورے تجربے کی توثیق کرتی ہے۔ ان میں شامل ہیں:
یہ وہ جگہ ہے جہاں آپ کاروباری اصولوں کی جانچ کرتے ہیں جو حقیقی دنیا کے رویے کو کنٹرول کرتے ہیں۔
"طلبہ بیک وقت دو امتحانات کے لیے رجسٹر نہیں ہو سکتے۔"
"آپ کی خریداری کی ٹوکری میں مقدار منفی نہیں ہوسکتی ہے۔"
"ایک درست ای میل کے بغیر، صارفین اپنے پروفائل کو اپ ڈیٹ نہیں کر سکیں گے۔"
فنکشنل ٹیسٹنگ اس بات کو یقینی بناتی ہے کہ سسٹم صرف کوڈ کے نہیں بلکہ صارفین اور کاروبار کے نقطہ نظر سے درست طریقے سے کام کرتا ہے۔
مثالوں میں شامل ہیں: فنکشنل ٹیسٹنگ
create(['price' => 40]);
// Simulate existing cart
$this->withSession([
'cart' => [
$product->id => ['quantity' => 2]
]
]);
// Act: user tries to update quantity to a negative number
\(response = \)this->post('/cart/update', [
'product_id' => $product->id,
'quantity' => -5
]);
// Assert: system rejects invalid business behaviour
$response->assertStatus(302); // redirect back with errors
$response->assertSessionHasErrors(['quantity']);
// Assert: cart remains unchanged (business rule preserved)
\(this->assertEquals(2, session('cart')[\)product->id]['quantity']);
}
}
جانچ کا آغاز صارفین کے لیے خریداری کی ٹوکری کے ساتھ تعامل کرنے کے لیے ایک حقیقت پسندانہ ماحول بنانے کے ساتھ ہوتا ہے۔ یہ سمجھنے کے لیے ضروری ہے کہ نظام کس طرز عمل کو نافذ کرنے کی کوشش کر رہا ہے۔
سب سے پہلے، آپ اپنے ڈیٹا بیس میں اصل پروڈکٹس بنانے کے لیے ایک فیکٹری کا استعمال کرتے ہیں اور پروڈکٹ کی قیمتیں فراہم کرتے ہیں جو ان اشیاء سے ملتی جلتی ہیں جو گاہک اپنے شاپنگ کارٹ میں شامل کر سکتا ہے۔
اگر کوئی پروڈکٹ موجود ہے، تو ٹیسٹ دستی طور پر اس پروڈکٹ اور دو مقداروں پر مشتمل ایک کارٹ کے ساتھ ایک سیشن تیار کرتا ہے۔ یہ ایک ایسے صارف کی تقلید کرتا ہے جس نے پہلے سے ہی ایک سابقہ تعامل میں اپنی شاپنگ کارٹ میں آئٹمز شامل کیے ہیں اور ایک ڈیفالٹ حالت سیٹ کرتا ہے جسے اگر صارف غلط اپ ڈیٹ کرنے کی کوشش کرتا ہے تو سسٹم کو برقرار رکھنا چاہیے۔
ماحول کے تیار ہونے کے بعد، ٹیسٹ صارف کے اعمال کی نقل کرنے کے لیے POST کی درخواست بھیجتا ہے۔ /cart/update اختتامی نقطہ طریقہ کو براہ راست کال کرنے کے بجائے، ہم فارم جمع کرانے والے براؤزر کے درست رویے کو نقل کرنے کے لیے Laravel کی HTTP پرت کا استعمال کرتے ہیں۔ درخواست میں پروڈکٹ ID اور جان بوجھ کر غلط مقدار (-5) شامل ہے۔
یہ منظر نامے کی جڑ ہے۔ صارف ایک ایسی کارروائی کرنے کی کوشش کر رہا ہے جو ایپلیکیشن کے کاروباری اصولوں کی خلاف ورزی کرتا ہے، اور ٹیسٹ اس بات کو یقینی بنانے کے لیے ڈیزائن کیا گیا ہے کہ سسٹم مناسب طریقے سے جواب دے۔
اب، جب درخواست پر کارروائی ہو جاتی ہے، ٹیسٹ کو توقع ہے کہ درخواست ان پٹ کو مسترد کر دے گی، صارف کو دوبارہ ری ڈائریکٹ کرے گی، اور سیشن میں توثیق کی غلطی منسلک کرے گی۔ اس بات پر زور دینا کہ جواب میں 302 اسٹیٹس کوڈ ہے اور اس میں توثیق کی خرابی اس بات کی تصدیق کرتی ہے کہ توثیق کی پرت صحیح طریقے سے کام کر رہی ہے اور کنٹرولر اس اصول کو نافذ کر رہا ہے کہ مقداریں منفی نہیں ہو سکتیں۔
جانچ کا آخری حصہ وہ ہے جہاں کاروباری قواعد کی اصل میں توثیق کی جاتی ہے۔ اپ ڈیٹ کی ناکام کوشش کے بعد، ٹیسٹ سیشن کو چیک کرتا ہے تاکہ یہ یقینی بنایا جا سکے کہ کارٹ میں کوئی تبدیلی نہیں ہوئی ہے۔ یہ بہت اہم ہے کیونکہ غلط ان پٹ کو مسترد کرنا صرف نصف ضرورت ہے۔ سسٹم کو موجودہ کارٹ ڈیٹا کی سالمیت کی بھی حفاظت کرنی چاہیے۔
فنکشنل ٹیسٹنگ سوالات کا جواب دیتی ہے جیسے:
-
کیا نظام حقیقی بد سلوکی کو روکتا ہے؟
-
کیا صارفین کو صحیح رائے ملی؟
-
کیا درخواست کے بعد میرا ڈیٹا مستقل رہے گا؟
-
کیا حتمی نتائج کاروباری توقعات سے مماثل ہیں؟
نتیجہ
ڈیٹا کا معیار کبھی بھی کسی ایک چیک یا ایک ٹیم کا نتیجہ نہیں ہوتا ہے۔ اس کا نتیجہ ایک منظم، پرتوں والے نقطہ نظر سے ہوتا ہے جو ہر ٹیسٹ کی سطح پر مختلف قسم کے نقائص کو پکڑتا ہے۔
یونٹ ٹیسٹ چھوٹے سے چھوٹے اصولوں کو محفوظ بناتے ہیں، انضمام کے ٹیسٹ تمام اجزاء میں ڈیٹا کے بہاؤ کی توثیق کرتے ہیں، اور فعال ٹیسٹ کاروباری منطق کو نافذ کرتے ہیں جو حقیقی رویے کو کنٹرول کرتی ہے۔
جب یہ پرتیں ایک ساتھ کام کرتی ہیں، تو خراب ڈیٹا کو چھپانے کے لیے کہیں نہیں ہوتا ہے۔ بصورت دیگر، معمولی غلطیاں بھی دراڑوں سے پھسل سکتی ہیں اور مہنگی بہاو کی غلطیوں میں بڑھ سکتی ہیں۔
جیسا کہ آپ دیکھ سکتے ہیں، ڈیٹا کے معیار میں آپ کا کردار رد عمل کے بجائے بنیادی طور پر فعال ہے۔ توثیق، دیانتداری، اور نگرانی کو ذہن میں رکھتے ہوئے سسٹمز کو ڈیزائن کرنا اس بات کو یقینی بناتا ہے کہ پائپ لائن کے ذریعے بہنے والا ڈیٹا درست، بروقت، مکمل، منفرد اور مقصد کے لیے موزوں ہے، قابل اعتماد تجزیات، رپورٹنگ، اور ذہین نظاموں کی حمایت کرتا ہے۔