رفتن به مطلب

چرا نرم افزارها باگ دارند؟


ارسال های توصیه شده

يكى از مفاهيم بسيار جالب و در عين حال بسيار پيچيده در دنياى برنامه نويسى، مفهوم باگ (Bug) يا نقص نرم افزارى است. واقعاً چرا نرم افزارها باگ دارند؟ چرا هيچ وقت شر اين باگ ها از سرمان كم نمى شود؟

 

يك تلنگر فكرى

خوب است گاهى از فضاى روزمرگى بيرون بياييم و به مفهوم واقعى كارهايى كه انجام مى دهيم و علل وقوع پديده هاى اطراف خود نظرى بيفكنيم و درباره آن ها دوباره بينديشيم. يكى از مفاهيم بسيار جالب و در عين حال بسيار پيچيده در دنياى برنامه نويسى، مفهوم باگ (Bug) يا نقص نرم افزارى است. شايد هيچ مفهوم و موضوع ديگرى در علوم مهندسى را نتوان يافت كه به اندازه مفهوم باگ، اين واقعيت مهم را براى انسان روشن كرده باشد كه هيچ فرمول و قانون ساخت انسان، بى اشكال و نقص نيست و در هر طرح و برنامه اى، بدون ترديد، نقصان ها و لغزش هايى وجود دارد كه در نگاه اول به نظر نرسيده است. بنابراين همواره بايد در جهت اصلاح طرح ها، برنامه ها، قوانين و فرمول ها كوشيد. به عقيده من موضوع باگ چندان مهم است كه مى توان درباره چرايى و چگونگى آن ساعت ها بحث كرد. اميدوارم در آينده نزديك فرصتى فراهم آيد تا در مورد ابعاد فلسفى اين قضيه چيزى بنويسم، اما در اين مجال كوتاه مى خواهم كمى درباره ابعاد علمى و مهندسى اين موضوع گپ بزنم. واقعاً چرا نرم افزارها باگ دارند؟ چرا هيچ وقت شر اين باگ ها از سرمان كم نمى شود؟

 

باگ چيست؟

همان طور كه مى دانيد، به هر نقص يا ايراد يك نرم افزار يا برنامه كامپيوترى باگ مى گويند. باگ از نظر لغوى يعنى حشره كوچك و در تاريخ مهندسى نرم افزار گفته مى شود اين اصطلاح را اولين بار Grace Hoper، خانمى كه در دانشگاه هاروارد مشغول تحصيل و تحقيق در رشته كامپيوتر بود، به كار برده است. او كه در حال كار با كامپيوترهاىMark II و Mark III بود، يك بار با مشكل مواجه شد و تكنيسين هايى كه براى بررسى مشكل و تعمير كامپيوتر، آن را باز كرده بودند سوسكى را پيدا كردند كه وارد دستگاه شده بود و آن را از كار انداخته بود. البته در حقيقت اين واژه را اولين بار همان تكنيسين هايى كه اين حشره را داخل دستگاه يافته بودند، در يادداشتى (اولين دليل واقعى باگ / ايراد برنامه پيدا شد) به شوخى به كاربرده بودند. البته اين تكنيسين ها يا خانم هوپر اولين كسانى نبودند كه از اين واژه براى اشاره به يك ايراد در دستگاهى استفاده مى كردند. آن ها صرفاً براى نخستين بار از اين اصطلاح در دنياى كامپيوتر استفاده كردند، ولى اعتقاد بر اين است كه اصطلاح Debugg توسط همين افراد ابداع شد. موضوع باگ يكى از سرفصل هاى مهم رشته مهندسى نرم افزار است. از اين رو متون و كتاب هاى مفصلى در زمينه Debugging يا اشكال زدايى از نرم افزار و متدهاى آن تأليف شده است و همچنان ادامه دارد. برنامه نويسان تازه كار معمولاً از اين شاخه مهندسى نرم افزار گريزانند و اميدوارند برنامه هايى بنويسند كه به قدرى خوب باشد كه اصلاً كارش به اشكال زدايى نكشد، ولى پس از دو سه سال كار حرفه اى در اين زمينه سرانجام تسليم مى شوند و آشنايى با اصول علمى اشكال زدايى برايشان به يك ضرورت تبديل مى شود؛ مگر اين كه نخواهد به اصول اخلاقى و حرفه اى مهندسى نرم افزار متعهد باشند و از اين كه برنامه هاى ساخت آن ها پر از انواع باگ و ايراد باشد، باكى نداشته باشند، اما برطرف كردن باگ ها براى بسيارى از برنامه نويسان غيرآماتور يكى از قسمت هاى چالش برانگيز و لذت بخش كار است و تقريباً مثل حل كردن معما است. برنامه نويسانى كه دائماً به فكر كاستن از باگ ها و ايرادهاى نرم افزارهاى خود هستند، در حقيقت به طور مداوم در حال انجام يك ورزش فكرى هستند كه رشته اى تو در تو از حلقه هاى پرسش و پاسخ را در دل خود دارد. با اين همه، اجازه بدهيد به اختصار ببينيم اصولاً چرا باگ ها به وجود مى آيند و ريشه اين معضل كجاست؟

 

چرا باگ ها پديد مى آيند؟

وقتى در دنياى سيستم هاى ديجيتالى و كامپيوترى از باگ صحبت مى كنيم، مقصودمان بيشتر يك نقص نرم افزارى است و كمتر پيش مى آيد يك نقص ديجيتالى سخت افزارى را باگ بناميم. هرچند كه اين لغت از نظر تاريخى در مهندسى مكانيك و ادوات سخت افزارى ريشه دارد. بنابراين آن دسته از وسايل ديجيتالى كه فاقد نرم افزارند، اصولاً در اين بحث جاى نمى گيرند. مثلاً يك دستگاه ويديو را با يك كامپيوتر مقايسه كنيد. هر وقت كه مى خواهيد ويديو را روشن كنيد، يا روشن مى شود يا نمى شود و حالت ديگرى در اين ميان وجود ندارد، اما وقتى يك كامپيوتر را روشن مى كنيد، ممكن است سيستم عامل بالا نيايد (بوت نشود). در اين صورت مى توان گفت كامپيوتر واقعاً به كار نيفتاده است؛ زيرا با اين كه روشن است، كار نمى كند. بنابراين، هر مشكلى هست، در ماهيت نرم افزارى باگ نهفته است. در اينجا به پرسش اساسى ترى مى رسيم: اصلاً نرم افزار چيست؟ اين پرسش كوچكى نيست و من هم در اين يادداشت كوچك ادعاى پاسخ دادن به آن را ندارم، اما تا آنجا كه به بحث ما مربوط مى شود، مى توان گفت نرم افزار بسته اى حاوى يك يا چند دستورالعمل است كه كسى (پردازنده) آن را در جايى (حافظه) اجرا مى كند. پردازنده هاى امروزى به ندرت اشتباه مى كنند. به علاوه، خود آن يك سخت افزار ديجيتالى است كه بحث باگ چندان درباره عملكرد آن صدق نمى كند. در واقع اگر انصاف بدهيد، احتمال اشتباه محاسباتى پردازنده هاى امروزى اينتل و AMD در كامپيوترهاى ما چنان ناچيز است كه اصلاً قابل مطرح كردن نيست. پس بايد بدانيم كه اين دستورالعمل كجا اجرا مى شود؟ جواب «حافظه» است. در نتيجه پاسخ اين معما هرچه باشد، ماجرايى است كه در ارتباط با دستورالعمل ها و حافظه رخ مى دهد.

 

زنجيره عمليات

ساده ترين باگ نرم افزارى وقتى به وجود مى آيد كه يك دستورالعمل غلط باشد يا از منطق نارسايى پيروى كند. مثلاً اغلب اوقات فرايند ها به صورت مركب اجرا مى شوند: ابتدا كاربر عمل A را انجام مى دهد، سپس نرم افزار روتين B را اجرا مى كند و آن گاه فرايند C اجرا مى شود، ولى فكرش را نكرده بوديد اگر دفعتاً ابتدا B اجرا شود و سپس كاربر عمل A را انجام دهد و آن گاه C به اجرا گذاشته شود، چه اتفاقى خواهد افتاد؟ اين ممكن است به سادگى منجر به پيدايش باگ شود. افزودن قابليت هاى جديد به نرم افزار نيز گاهى باگ هاى تازه اى را پديد مى آورد. اين باگ ها اغلب ناشى از ظاهر شدن فرايندهاى جديدى هستند كه زنجيره عمليات يك دستورالعمل مركب را پيچيده تر، و توالى هاى غيرمجاز آن ها را بيشتر مى كنند، اما اين فقط يك بعد قضيه است.

لینک به دیدگاه

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...