مکان یابی خطا با استفاده از مدلسازی احتمالی نرم افزار

به نام خدادر مطلب پیش رو مقاله ای علمی، با عنوان“Towards Fault Localization via Probabilistic Software Modeling” که در سال 2020 توسط انتشارات IEEE منتشر شده است، به طور خلاصه شرح داده شده است. موضوع این مقاله اشکال زدایی و ترمیم نرم افزار و به طور خاص، مکان یابی خطا[1] می باشد.لینک دسترسی به مقاله : https://doi.org/10.1109/VST50071.2020.9051635فهرست مطالب بدین شرح خواهد بود: در ابتدا، چکیده ای از مقاله توضیح داده می شود. پس از تعریف مسئله، ورودی ها و خروجی های مسئله بیان می شود. درباره معیار های بررسی موضوع، صحبت خواهیم کرد. به بررسی نوآوری ها و دستاورد های مقاله خواهیم پرداخت. متدولوژی و روش کار را به طور خلاصه مرور خواهیم کرد. و در انتها نتایج را بررسی می نماییم.چکیده مقالهآزمون نرم افزار به برنامه نویسان در تشخیص باگ های نرم افزار کمک می کند. هرچند که مطلع شدن از وجود باگ در نرم افزار، تنها قدم اول می باشد. کشف کردن و اصلاح کردن مولفه های خطا دار برنامه، برای داشتن یک نرم افزار با کیفیت بالا، به همان اندازه ای که دشوار است، ضروری نیز می باشد. مکان یابی خطا یعنی مشخص کردن نقطه ای از برنامه به صورت خودکار، که محل خطا را نشان می دهد. تعیین مکان خطا، کار ساده ای نیست و همچنان تا به امروز متد ها و روش های موجود نتوانسته اند به اندازه کافی دقیق باشند تا به صورت گسترده و به شکل قابل قبولی در صنعت کاربرد داشته باشند. در این مقاله، مکان یابی خطا با استفاده از مدلسازی احتمالی نرم افزار[2] (PSM) ارائه شده است. PSM ساختار و رفتار برنامه را تجزیه و تحلیل کرده و یک شبکه از مدل های احتمالی[3] (PM) به وجود می آورد. هر PM یک رویکرد را با ورودی ها و خروجی های آن و ارزیابی احتمالی داده های زمان اجرا[4]ی آن را مدل می کند. از این ارزیابی احتمالی، برای پیدا کردن محل خطا و تاثیر آن بر عناصر دیگری از کد برنامه که دارای وابستگی به آن بوده اند استفاده می شود.تعریف مسئلههدف مکان یابی خطا پیدا کردن خطا ها به صورت خودکار می باشد به گونه ای که پس از آن یک برنامه نویس یا یک فرایند خودکار بتواند آن خطا ها را اصلاح نماید. پیدا کردن یک خطا، و کشف کردن ریشه اصلی آن می تواند کار بسیار دشواری باشد. مثلا ممکن است خطا در یک دستور خاصی وجود نداشته باشد و تنها ترتیب اجرا و توالی خاصی از دستورات مسبب بروز اشکال شده باشد. چنین شرایطی مکان یابی خطا را پیچیده می کند. برخی رویکرد های مکان یابی خطا مثل روش های طیف گرا[5](SBLF) دستورات برنامه را بر اساس میزان مضنون بودن به خطا اولویت بندی می کنند. هرچند که این روش مکان یابی خطا، برای خطاهای پیچیده ای که از چندین دستور ناشی می شوند، ضعیف عمل می کند و یا باعث از قلم افتادن بعضی دستورات می شود. FL-PSM روشی پویا می باشد که با استفاده از یک مجموعه آزمون[6] و اجراهای واقعی از برنامه، PM های هر اجرا را ساخته و سپس با PSM شبکه ای از این مدل های احتمالی را بوجود می آورد. به گونه ای که هر گره از این شبکه مربوط به یک مدل و یک اجرا می باشد. سپس از داده های زمان اجرا، در اجراهای موفق و نا موفق برای پیدا کردن مکان هایی که احتمال بیشتری دارد حاوی خطا باشند استفاده می شود.معیار های بررسی موضوعبرای ارزیابی عملکرد روش ارائه شده از یک برنامه مشاوره تغذیه به عنوان یک مورد مطالعاتی[7] استفاده است. این برنامه به این صورت عمل می کند که اندازه قد و وزن و همچنین جنسیت یک شخص را به عنوان ورودی گرفته، شاخص توده بدنی[8](BMI) آن را محاسبه کرده و بر اساس آن پیامی را مبنی بر وضعیت سلامت آن شخص به همراه توصیه های لازم به عنوان خروجی بر می گرداند.FL-PSM که بر روی PSMبنا شده است مبتنی بر ارزیابی و برآورد احتمال این مدل ها می باشد. به ازای هر اجرا یک null- model (Mnull) و یک alt-dataset (Dalt) از رخداد های زمان اجرا داریم. FL-PSM با محاسبه log-likelihood Dalt و Mnull و مقایسه آن با یک مقدار بحرانی[9](c) تعیین شده مکان خطا را مشخص می نماید.برای این محاسبه از این فرمول استفاده می شود که N در آن تعداد نقاط داده های D می باشد:در نهایت مقدار به دست آمده در نا مساوی زیر قرار گرفته و با مقدار بحرانی مقایسه می شود.که LLDnull در آن log-likelihood Mnull با خودش می باشد. مقدار بحرانی c دستوراتی را که به اشتباه خطا در نظر گرفته شده اند (fault positive) کنترل می کند. برای مثال log(0.001) یعنی از 1000 رخداد یکی از آن ها به اشتباه خطا در نظر گرفته شده است.نوآوری و دستاورد مقالهبیشترین تکنیک های مکان یابی خطا، روش های مبتنی بر برش[10]، طیف[11]، آماری[12]، مدل[13] یا یادگیری ماشین[14]هستند. شبیه ترین تکنیک مکان یابی خطا به FL-PSM، مکان یابی خطای طیف گرا می باشد. تکنیک های SBFL اجراهای موفق ونا موفق را مشاهده کرده و استنتاج آماری روی نتایج انجام می دهند. نتیجه یک لیست اولویت بندی شده از دستورات به همراه میزان احتمال خطا دار بودن آن ها می باشد. در حالی که FL-PSM اندکی متفاوت کار می کند. PSM به نوعی دستورات را خلاصه می کند یعنی فقط ویژگی ها[15]، اجرا ها[16] و انواع[17] را به همراه فراخوانی های وابستگی هایشان را مورد نظر قرار می دهد.این روش مکان یابی خطای مبتنی بر احتمال، قابلیت کنترل خطاهای به اشتباه در نظر گرفته (fault localization) شده را دارد. همچنین جنبه مهم دیگر آن تصویر سازی خطا ها و تاثیرات آن ها بر عناصر وابسته می باشد که اجازه تجزیه و تحلیل دقیق سلسله زنجیر وار خطا و تاثیرات آن در سراسر برنامه را می دهد. FL-PSM فقط در صورت وجود حداقل یک نسخه از آن قابل استفاده است که این از جهت صنعتی آن مسئله ای نمی باشد چرا که پس از چندین sprint می تواند استفاده شود. نکته قابل توجه دیگر این است که FL-PSM تغییرات رفتاری را نیز مکان یابی می کند. به علاوه تصویر سازی های FL-PSM این قابلیت را ایجاد می کند که موارد مشکوک سریعا به صورت دستی بررسی شوند.روش و متدولوژی کاربرنامه مشاوره تغذیه با مجموعه داده ای شامل 3000 درخواست در حالی که دو نوع خطا در آن قرار گرفته است اجرا می شود. یکی خطای رگرسیون می باشد که باعث می شود در پارامتر وزن منفی شود و دیگری خطای یکپارچه سازی می باشد که به دلیل استفاده متفاوت از واحد اندازه گیری اینچ و متر برای اندازه گیری قد بوجود آمده است. در اینجا مقدار بحرانی c یا همان درجه fault positive برابر با 3- در نظر گرفته شده است. c=log(0.001)=-3 که به این معناست که log-likelihood که به کمتر از 3- باشد فاصله معنا داری از مدل گرفته است.نتایجتصویر سازی عناصر باعث می شود برنامه نویسان به راحتی مدل و آنچه مشاهده شده است را با هم مقایسه کرده و بررسی کنند آیا تفاوت معنی دار و قابل توجهی میان آن ها وجود دارد یا خیر. با تصویر سازی رفتار زمان اجرای یک زیر مجموعه از عناصر مدل های person.init و NutritionAsdvisor.advice نشان داده شد init.weight با مدل در یک ردیف قرار گرفته است در حالی که property writes از person.weight به وضوح متفاوت هستند. عناصر دیگری نیز در مدل های یکسان تفاوت قابل توجهی دارند و این تفاوت به دلیل وابستگی متد NutritionAsdvisor.advice که ویژگی person.weight را می خواند زیاد می شود. همچنین تصویر سازی رفتار زمان اجرای زیر مجموعه ای از عناصر کد Servlet.handleRequest که Person.init را فراخوانی می کند نشان می دهد تفاوت قابل توجهی در یکپارچه سازی میان Servlet و Person وجود ندارد.مطلب فوق مربوط به تمرین درس اشکال زدایی و ترمیم نرم افزار دانشگاه شهید بهشتی بوده و به منظور تولید محتوای فارسی صورت گرفته است.[1] Fault Localization[2] Probabilistic Software Modeling[3] Probabilistic Models[4] runtime[5] Spectrum-Based Fault Localization[6] Test-Suite[7] Case study[8] Body Mass Index[9] Critical value[10] Slice-based[11] Spectrum-based[12] Statistics-based[13] Model-based[14] Machin learning-based[15] Properties[16] Executables[17] Types