صحت کامپایلر

در رایانش، صحت کامپایلر شاخه ای از علوم کامپیوتر است که سعی دارد نشان دهد که یک کامپایلر طبق مشخصات زبان آن رفتار می کند. این تکنیک‌ها شامل توسعه کامپایلر با استفاده از روش‌های صوری و استفاده از تست دقیق (که اغلب به آن اعتبارسنجی کامپایلر گفته می شود) روی کامپایلر موجود می‌باشد.

روش‌های صوری 
اعتبارسنجی کامپایلر با روشهای رسمی شامل زنجیره ای طولانی از منطق رسمی و استنتاجی است. اما از آنجا که ابزار یافتن اثبات (اثبات قضیه خودکار) در نرم‌افزار پیاده‌سازی شده و پیچیده است، احتمال بسیار بالایی وجود دارد که شامل خطا بشود. یک رویکرد استفاده از ابزاری برای اعتبارسنجی اثبات است که به دلیل اینکه خیلی ساده‌تر از یک اثبات‌کننده است، با احتمال کمتری با خطا روبرو خواهد شد.

کاملترین نمونه این رویکرد CompCert است که کامپایلر بهینه سازی شده‌ایست که به طور صوری اعتبارسنجی شده و برای یک زیر مجموعه بزرگ از C99 می‌باشد.

این روشها شامل وارسی مدل، اعتبارسنجی صوری و تولید کامپایلر معناشناخته می‌باشد.

آزمایش 
آزمایش بخش قابل توجهی از توسعه کامپایلر می‌باشد، که با این حال در نوشته‌ها و کتاب‌ها پوشش کمی روی آن داده می‌شود. نسخه ۱۹۸۶ کتاب Aho, Sethi & Ullman تنها یک بخش از یک صفحه به آزمایش کامپایلر اختصاص داده شده که آن هم بدون هیچ نمونه نامگذاری شده می‌باشد.

نسخه ۲۰۰۶ این کتاب بخشی مربوط به آزمایشن دارد، اما اهمیت آن را تأکید می کند: "بهینه سازی کامپایلرها آنقدر سخت است که به جرات می توان گفت که هیچ کامپایلر بهینه سازی شده کاملاً عاری از خطا نیست
بنابراین ، مهمترین هدف در نوشتن کامپایلر صحیح بودن آن است."

نسخه ۱۹۹۵ کتاب Fraser & Hanson بخش مختصری از آزمون رگرسیون دارد. کد آن نیز موجود است.

نسخه ۲۰۰۳ کتاب Bailey & Davidson تست فراخوانی رویه‌ها را پوشش میدهد.
تعدادی از مقالات تأیید می کنند که بسیاری از کامپایلرهای منتشر شده اشکالات قابل توجهی در صحتشان دارند.

نسخه ۲۰۰۷ کتاب Sheridan احتمالاً جدیدترین مقاله ژورنال در مورد آزمایش کامپایلرهای عمومی می باشد.

کامپایلرهای تجاری منطبق بر اعتبارسنجی از Solid Sands  ،Perennial و Plum-Hall در دسترس هستند. برای اکثر اهداف، بزرگترین اطلاعات موجود در مورد آزمایش کامپایلرها از مجموعه های اعتبار سنجی Fortran و Cobol در دسترس هستند.

برخی تکنیک‌های معمول دیگر برای آزمایش کامپایلرها عبارتند از فازینگ (که برنامه‌های تصادفی ایجاد می‌کند تا اشکالات کامپایلر را بیابد) و کاهش مورد آزمایشی (که سعی می کند یک مورد آزمایشی پیدا شده را کوچکتر کند تا فهم مشکل و آن مورد آزمایشی راحت تر باشد).

جستارهای وابسته 
 کامپایلر
 اعتبار و درستی‌سنجی نرم‌افزار
 صحت (علوم کامپیوتر)
 CompCert -کامپایلر رسمی زبان C
 در پشتی در کامپایلرها

منابع 

کامپایلرسازی

مقاله‌های ایجاد شده توسط ایجادگر