نود و هفت چیزی که هر برنامه‌نویسی باید بلد باشد: منفی در مفنی می‌شود مثبت!


دولوپرها به خوبی می‌دانند که سورس‌کد هیچ وقت دروغ نمی‌گوید اما این در حالی است که همین سورس‌کد گاهی اوقات تضادهایی دارا است و برخی از همین تضادها است که منجر به این سؤال می‌گردد «چه‌طور ممکنه با این شرایط نرم‌افزار کار کنه؟»

یکی از دولوپرهای نرم‌افزار آپولو ۱۱ به نام Allan Klumpp در مصاحبه‌ای گفت که در این نرم‌افزار باگی وجود داشت که فرود آپولو را با مشکل مواجه می‌کرد اما این در حالی بود که باگی دیگری منجر به این شد که باگ اول خنثی گشته و این نرم‌افزار بدون هیچ مشکلی کار خود را انجام می‌داد و قبل از اینکه کشف گردد، در نرم‌افزار کنترل کنندهٔ موتورهای آپولو ۱۱ و آپولو ۱۲ مورد استفاده قرار می‌گرفت.

برای روشن‌تر شدن این مسأله، فانکشنی را در نظر بگیرید که این وظیفه را دارا است تا استاتوس (وضعیت) چیزی را برگرداند. گرچه این فانکشن می‌بایست در شرایط خاصی مقدار True را باز گرداند، اما خروجی همواره False است. علاوه بر این، فانکشنی که این فانکشن را صدا زده، هرگز مقداری بازگشتی را چک نمی‌کند! در چنین شرایطی، همه چیز به خوبی کار می‌کند تا اینکه دولوپری به این قضیه پی‌ببرد.

زمانی‌ که در سورس‌کدی ۲ باگ وجود داشته باشد که با همکاری یکدیگر منجر به این خواهند گشت تا نرم‌افزار در ظاهر بدون مشکل کار کند، وقتی یکی از باگ‌ها مرتفع گردد و باگ دیگر بابرجا باقی بماند، نرم‌افزار به مشکل برخواهد خورد. به عبارت دیگر، دولوپری که مسئولیت نگهداری کد را بر عهده دارد، ریپورتی دریافت می‌کند مبنی بر وجود باگی در سیستم؛ وی باگ را یافته و آن را رفع می‌کند اما مشاهده می‌شود که مشکل کماکان پابرجا است چرا که باگ دوم هنوز به قوت خود باقی است. در چنین شرایطی، وی باگ اول را به حالت اولیهٔ خود بازگردانده و کد را بررسی می‌کند تا به باگ دوم دست یابد و آن را فیکس می‌کند اما مشاهده می‌شود که مجدد مشکل نرم‌افزار پابرجا است. بنابراین مشکل دوم نرم‌افزار که ریفکتور شده بود را به حالت قبل بازمی‌گرداند و در چنین شرایطی دولوپر به دنبال یک باگ سومی می‌گردد که چیزی بیش از یک دور باطل نخواهد بود چرا که اصلاً باگ سومی در کار نیست!

در چنین شرایطی، تعامل مابین ۲ باگ که منجر به ایجاد نتایج منتظره‌ای می‌شوند باعث می‌شود تا فرایند دیباگینگ نرم‌افزار بسیار دشوار گردد (جالب است بدانیم که چنین مسأله‌ای ممکن است در مستندات پروژه هم ایجاد گردد به طوری که اروری در کد با همکاری مشکلی در نوشتن مستندات پروژه دست به دست یکدیگر داده تا دولوپرها سردرگم شوند).

در یک کلام، بایستی گفت که هیچ راه‌کار عملی برای موقعیت‌هایی اینچنین وجود ندارد و چنانچه دولوپری در موقعیت‌هایی از این دست قرار گیرد، می‌توان این انتظار را داشت که روزها و شاید هفته‌ها یا ماه‌ها درگیر فرایند دیباگینگ گردد.


لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان