debugger یعنی چه؟!!!
هنر اشکال زدایی
آزمایش نرم افزاری فرآیندی است که می تواند به طور سیستماتیک برنامه ریزی و مشخص شود.طراحی ابزار آزمایش می تواند هدایت شودیک استراتژی قابل تعریف است و نتایج برای انتظارات تعیین شده قابل ارزیابی است.
اشکال زدایی در نتیجه آزمایش موفق انجام می شود یعنی هنگامی که ابزار آزمایش خطایی را کشف می کند اشکال زدایی فرآیند است که باعث حذف خطا می شود.اگر چه اشکال زدایی فرآیندی پوشاننده است ولی تا حد زیادی هنر است.
مهندس نرم افزاری که نتایج آزمایش را ارزیابی میکند، اغلب با علائم یک مشکل نرم افزاری مواجه می شود. یعنی وضوح خارجی خطا و علت داخلی خطا ممکن است رابطه واضحی با یکدیگر نداشته باشند. فرآیند رفتاری مرتبط کننده ی یک علامت ظاهر شده با علت آن ، که اندکی درک شده باشد، اشکازدایی و به فردی که این کار را انجام می دهد اشکال زدا یا همان Debugger گویند.
اشکال زدایی آزمایش نیست اما همیشه در نتیجه آزمایش اتفاق می افتد. اشکال زدایی با اجرای ابزار آزمایش شروع می شود. نتایج دریافت می شوند و عدم تطابق بین کارایی مورد انتظار و واقعی مشخص می گردد. در بسیاری از موارد، داده های غیر منطقی ، علامت علتی داخلی هستند که تا کنون پنهان مانده اند. فرآیند اشکال زدایی سعی در انتباق علامت با علت دارد به تصحیح خطا منتهی می شود.
قرآیند اشکال زدایی یکی از این دو نتیجه را به دنبال دارد:
۱-علت، یافت شده و اصلاح می شود، یا 2- متاسفانه علت یافت نمی شود.
در حالت اخیر، فردی که اشکال زدایی را انجام می دهد ممکن است به یک علت مشکوک باشد، ابزار آزمایشی طراحیکند تا به اعتبار سنجی آن شک کمک کند و به تصحیح خطا به روزش تکریاری بپردازد.
چرا اشکال زدایی این چنین مشکل است؟
در تمام احتمالات، پاسخ به این سوال بیشتر به روانشناسی انسانی مربوط می شود تا تکنولوژی نرم افزار . به هر حال، چند خصوصیت اشکالات، کلید هایی را فراهم می نمایند:
۱-علامت و علت ممکن است از نظر جغرافیایی از یکدیگر فاصله داشته باشند. یعنی این علامت ممک است در یک بخش برنامه ظاره شود، در حالی که علت آن ممکن است در سایتی قرار داشته باشد که بسیار دور است. ساختارهای برنمه ای با کوپل زیاد مرتبط هستند این بدترین وضعیت را بدتر میکند.
۲-علامت ممکن است وقتی که خطای دیگری اصلاح می گردد به طور موقت ناپدید شود.
۳-علامت ممکن است توسط هیچ خطایی ایجاد نشده باشد.(برای مثال عدم دفت در نتیجه گرد کردن یک عدد)
۴-علامت ممکن است ناشی از خطای انسانی باشد که به راحتی قابل پیگیری نیست.
۵-علامت ممکن است در نتیجه ی مشکلات زمانبندی به وجود آید ، به جای ای که در اثر مشکلات پردازش پدید آمده باشد.
۶-ممکن است ایجاد مجدد شرایط ورودی با دقت، مشکل باشد.(برای مثال ، یک ک اربرد بلادرنگ که در آن ترتیب ورودی نامشخص است.)
۷-علامت ممکن است مقطع باشد. این حالت ، در سیستم های جاسازی شده متداول است زیرا سخت افزار و نرم افزار کاملا با یکدیگر کوپل شده اند.
۸-علامت ممکن است در اثر عللی باشد که در چند task که بر روی پردازنده های متفاوت اجرا می شوند توزیع شده باشد.
در ضمن اشکال زدایی، خطاهایی یافت می شوند که اندکی نگرانی به دنبال دارند(بعنوان مثالّ قالب خروجی نادرست) یا فاجعه امیز هستند(برای مثال، شکست سیستم باعث خسارت های فیزیکی یا اقتصادی جدی می شود). در نتیجه افزاش خطا، میزان فشار برای یافتن علت نیز افزایش می یابد. اغلب، فشار، توسعه دهنده نرم افزار را مجبورد می نماید که یک خطا را تصحیح کند و در عین حال دو اشکال دیگر را شناسایی نماید.
ملاحظات روانشناسی
بدبختانه، شواهدی وجود دارد که به نظر می رسد توانایی اشکال زدایی، جزء توانایی فرای انسان است. برخی افراد آنرا به خوبی انجام می دهند و برخی دیگر خیر. اگر چه شواهد آزمایش شده در اشال زدایی ، برای تقسیر آزاد می باشد، تفاوت های زیاد در توانایی اشکال زدایی برای برنامه نویسهایی که تجربه و آموزش یکاسن داشته اند مشاهده شده است. در واقع چند Debugger که آموزش های یکسانی دیده اند نظرات متفاوتی در در مورد یک پروژه واحد ارائه خواهند داد.
در رابطه با جنبه های انسانی اشکال زدایی، shneiderman می گوید:
اشکال زدایی یکی از عمده ترین موانع برنامه ویسی است. اشکال زدایی دارای عناصری از حل مسئله یا مشکلات فکری است که در نتیجه تشخیص استباه صورت گرفته ، می باشد.نگرانی فزاینده وعدم تمایل برای قبرول امکان وجود خطاها، انجام آن را مشکل تر می نماید. خوشبختانه در زمان رفع تقریبی اشکال ، نگرانی تا حد زیادی کاهش می یابد.
اگر چه ممکن است فراگیری اشکال زدایی مشکل باشد، ولی چند روش برای حل مسئله پیشنهاد می شود.
شیوه های اشکال زدایی
علیرغم شیوه ای که به کار گرفته می شود، اشکال زدایی یک هدف پوشش دهنده دارد: یافتن و تصحیح علت خطای نرم افزار.
این هدف با ترکیب ارزیابی سیستماتیک،ادراک و شانس بدست می آید. Bradley شیوه اشکال زدایی را اینگونه توصیفی می کند.
اشکال زدایی، کاربردی مشخص از روشی علمی است که در طول 2500 سال توسعه یافته است.مبنای اشکال زدایی، یافتن مبدا مشکل (علت) باتقسیم دودویی، از طریق کار فکری می باشد که مقادیر جدید را برای بررسی پیش بینی میکند.
یک مثال غیر نرم افزاری چنین است: یک لامپ در منزل کار نمی کند. اگر هیچ چیزی در خانه کار نکند، علت در مدار اصلی تقسیم یا خارج از آن می باشد. جستجو می کنیم تا ببینیم آیا همسایه نیز خاموشی دارند . لامپ مشکوک را در سوکت سالم قرار می دهیم و دستگاه سالمی را در مدار مشکوک آزمایش می کنیم . بنابر این تفکر و آزمایش ادامه می یابد.
در حالت کلی سه دسته بندی برای روش های اشکال زدایی پیشنهاد می شود
۱-اتفاقی 2-عقب گردی 3-حذف علت
دسته بندی اتفاقی اشکال زدایی احتمالا متداول ترین و کم بازده ترین روش برای جدا نمودن ع لت خطای نرم افزار می باشد. روش های اشکال زدایی اتفاقی زمانی در کار گرفته می شوند که همه روشهای دیگر با شکست روبرو شده باشند. با فلسفه یافتن خطا توسط خود کامپیوتر ، محتوایات حافظه بر روی صفحه نمایش داده می شود.پیگیری های زمان اجرا انجام می شوند، و احکام Write در برنامه قرار داده می شوند.
انتظار می رود که جایی در اطلاعات تولید شده ، کلیدی یافت شود که بتواند باعث هدایت به سمت خطا گردد. اگر چه حجم زیاد اطلاعات تولید شده ممکن است تا حدی به موفقیت منتهی بشود ، در اکثر موارد باعث اتلاف فعالیت و زمان می شود.
عقب گردی روشی نسبتا متداول است که می تواند با موفقت در برنامه های کوچک به کار گرفته شود. با شروع از ساتی که علامت در آنجا ظاهر بشده ، کد مبدا به سمت عقب(به صورت دستی) دنبال می شود.تا زمانی که محل علت بروز خطا یافت شود. بدبختانه ، با افزایش تعداد خطوط کد تعداد مسیرهای عقبگردی بسیار زیاد خواهد بود.
روش سوم اشکال زدایی، حذف علت ، با بسط یا حذف انجام می شود و مفهوم تقسیم بندی دودویی را به همراه دارد. داده های مرتبط با خطا سازماندهی می شوند تا علل بالقوه را جدا نمایند. علامتی برای علت طرح می شود و داده های مشخص شده استفاده میشوند تا آن علت را اثبات یا رد کنند. در حالت دیگر ، لیستی از تمام علمت های ممکن توسعه داده می شود و آزمایشها هدایت می شوند تا هر یک را حذف کنند.اگر آزمایش های اولیه نشان دهند که یک علت خاص ، مربوط به علامت ظاهر شده است، داده ها پالایش می شوند تا خطا حذف شود.
هر یک از این شیوه های اشکال زدایی می توانند با ابزار های اشکال زدایی کامل شوند. گونه های متعدد کامپایلر های اشکال زدایی، کمک های پویای اشکال زدایی(دنبال کننده ها) مولد های خودکار ابزار آزمایش ، نمایش دهنده های حافظه ، و نقشه های ارجاع متقابل ، به کار گرفته می شوند. به هر حال این ابزار ها، جایگزینی برای ارزیابی دقی بر مبنای سند کامل طراحی نرم افزار و کد مبدا واضح نمی باشند.
به هر حال پس از یافت شدن یک اشکال، باید اصلاح شود.اما اصلاح خطا می تواند خطاهای دیگری به دنبال داشته باشد و بنابر این ضرر آن بیشتر از منفعت باشد.
Van Vleck سه سوال ساده را پیشنهاد می کند هک هر مهندس نرم افزار باید قبل از انجام اصلاحاتی که باعث حذف علت خطا می شود بپرسد:
۱-آیا علت اشکال دوباره در برخش دیگری از برنامه تولید شده است؟ در بسیاری از موارد یک اشکال در برنامه با الگوی منطقی خطایی ایجاد می شود که ممکن است در جای دیگر دوباره تولید شود. ملاحظه صریح این الگوی منطقی ممکن است باعث کشف خطاهای دیگر شود.
۲-چه خطای دیگری ممکن است در اثر عمل اصلاحی که در حال انجام آن هستیم ایجاد شود؟ قبل از انجام تصحیح ،کد مبدا باید ارزیابی شد تا کوپل منطق و ساختمان داده ها مشخص گردد. اگر اصلاح در یک بخش با کوپل زید در برنامه انجام شود ، ملاحظه خاصی باید در زمان هر تغییر صورت گیرد.
۳-در مرحله اول، چه کاری باید انجام می شد تا از این خطا جلوگیری می شد؟ این سوال ، اولین مرحله به سمت ایجا ی کروش آماری تضمین کیفیت نرم افزار است. اگر فرآیند همانند محصول اصلاح شود، خطا از برنامه جاری حذف می شود و ممکن است از تمام برنامه های بعدی نیز حذف گردد.
منبع : مهندسی نرم افزار .... نویسنده: راجر اس پرسمن ..... مترجم : محمد مهدی سالخورده
فصل هجده ... صفحات 440-443
پی نوشت : اطلاعات مفیدی در این سایت موجود می باشد...www.bugnet.com
Source: Software engineering ….. Author : Preman Rager S.
Translated By:Salkhorde MohammadMehdi
برای مهندسین بن بستی وجود ندارد...