درک Refactoring در نرم افزار مهندسی

بازسازی تکنیک انضباطی بازسازی کد موجود بدون تغییر رفتار خارجی آن است؛ در نرم افزار مهندسی ویمش؛ سیستم هایی که فرآیندهای فیزیکی را کنترل می کنند، در محیط های حساس ایمنی کار می کنند، یا مدیریت جریان های پیچیده کار و روش های پیچیده کار و روش های کار را به طور مستقیم بر نتایج تاثیر می گذارد.یک کد به خوبی ساختار یافته بار شناختی برای توسعه دهندگان کاهش می یابد، و آن را آسان تر می کند تا بتواند خطرات سالم را اصلاح کند؛ و تنظیم مجدد آن را حفظ کند؛

عملیات بازسازی مشترک شامل متغیرهای نام گذاری شده برای منعکس کردن هدف خود، استخراج روش ها برای حذف تکرار، ساده سازی منطق مشروط، و حذف کلاس های بزرگ به واحدهای منسجم است که هر تغییر رفتار قابل مشاهده سیستم را حفظ می کند، که توسط مجموعه ای قوی از تست های خودکار تأیید می شود بدون چنین تست ها، بازسازی خطرناک می شود، به ویژه در زمینه های مهندسی که در آن یک آسیب فیزیکی یا از دست دادن زندگی می تواند منجر به آسیب فیزیکی یا از دست دادن زندگی شود.

نرم افزار مهندسی اغلب از استانداردهایی مانند ISO 26262 برای ایمنی خودرو یا ARP4754B برای سیستم های هوافضا] پیروی می کند.این استانداردها قابلیت ردیابی، تأیید و مدیریت پیکربندی را فراهم می کند.

تاثیر بازسازی در امنیت

کاهش سطح حمله

آسیب پذیری های امنیتی اغلب از پیچیدگی ایجاد می شوند. توابع بزرگ و در هم تنیده باعث می شود که جریان داده ها و ورودی های معتبر را ردیابی کنند. Refactoring این پیچیدگی ها را با شکستن منطق به واحدهای تعریف شده به خوبی، هر کدام با یک مسئولیت روشن، دامنه هر جزء را محدود می کند، به عنوان مثال، تثبیت چک های تأیید هویت به یک ماژول واحد حذف، پیاده سازی متناقض که یک مهاجم می تواند بهره برداری کند.

حذف الگوهای امن

شیوه های برنامه نویسی ناامن مشترک و دستورالعمل های کدگذاری شده؛ دستکاری خطا نادرست (تعامل) و عدم استفاده از ورودی؛ می تواند به طور سیستماتیک در طول بازسازی حذف شود. استخراج اعتبار ورودی به توابع اختصاص داده شده تضمین می کند که هر نقطه ورود محافظت می شود. Refactoring همچنین باعث می شود جایگزین روال رمزنگاری شده با مدرن، الگوریتم های امن [1] بدون بخش های مزاحم دیگر سیستم.

بهبود اثربخشی Code Review

هنگامی که کد تمیز و به خوبی سازمان یافته است، بررسی های امنیتی مولد تر می شوند. Reviewers می توانند بر نقص های منطقی تمرکز کنند تا رمزگشایی کد متراکم و بدون ساختار. Refactoring نام گذاری مداوم، کنترل خطا ثابت و جدایی واضح از نگرانی ها را ترویج می کند، که همه آنها به بررسی کنندگان کمک می کنند انحراف از الزامات امنیتی را تشخیص دهند.

  • جریان داده های اعلام شده: توابع بازسازی شده نشان می دهد که داده ها وارد می شوند، تغییر می کنند و سیستم را ترک می کنند، و تجزیه و تحلیل های دقیق تر را ساده تر می کنند.
  • حذف شکاف: کد تکراری اغلب پچ های امنیتی اعمال شده تنها در یک مکان را نشان می دهد. Eliminating duplication تضمین می کند که اصلاحات در سراسر سیستم منتشر می شود.
  • اجرای پلیسی: [FLT 1] استخراج مجوز به یک لایه واحد، حسابرسی را ساده می کند و احتمال دور زدن را کاهش می دهد.

تاثیر بازسازی بر قابلیت اطمینان

قابلیت پیش بینی از طریق کد ساده تر

قابلیت اطمینان در نرم افزار مهندسی به معنای رفتار قابل پیش بینی تحت تمام شرایط مورد انتظار است.کد پیچیده سخت تر است که برای شرایط نژادی، قفل ها و خطاهایی که از طریق یک خطا انجام می شود، تجزیه و تحلیل شود.برای مثال، جایگزینی عمیقاً مشروط با بازده اولیه یا بند محافظ اغلب مسیرهای غیر قابل پیش بینی را از بین می برد که می تواند منجر به شکست های غیر قابل پیش بینی شود.

پوشش تست افزایش

تست خودکار پایه نرم افزار قابل اعتماد است. بازسازی به طور مستقیم بهبود قابلیت آزمون با شکستن وابستگی ها و رابط های در معرض که می تواند در انزوا آزمایش شود. ماژول که از طریق API های به خوبی تعریف شده ارتباط برقرار می کند می تواند بدون نیاز به کل سیستم به اجرا در حال اجرا است. این مهندسان را قادر می سازد تا مجموعه های تست خستگی ناپذیر را که لبه پوشش می دهد، از جمله مواردی که می تواند منجر به شکست فاجعه بار در زمینه.

تسهیل خطای خطای تشخیص

کد تمیز باعث می شود که خطا قابل مشاهده تر باشد، توابع کوچک و قالب بندی ثابت تلاش ذهنی مورد نیاز برای تشخیص یک عدم سازگاری را کاهش دهند، در طول بررسی کد یا تجزیه و تحلیل استاتیک، کد بازسازی شده، نتایج مثبت کاذب کمتری را به دست می آورد، زیرا ساختار با ابزارهای ذهنی بررسی کننده مانند مارتینو Fler [F] [F1] کاتالوگ مجدد در مورد تغییرات سند و ساده تر بحث می کند.

  • تراکم باگ کاهش یافته: مطالعات تجربی نشان می دهد که تیم هایی که بازسازی مداوم را انجام می دهند، نقص کمتری در هر هزار خط کد ایجاد می کنند.
  • تجزیه و تحلیل ریشه فاجعه: [FLT 1] هنگامی که یک شکست رخ می دهد، کد به مهندسان اجازه می دهد تا سرعت بیشتری را از بین ببرند، کاهش خرابی.
  • بهبود نگهداری: سیستم های قابل اعتماد باید در طول دهه ها حفظ شوند.

بهترین روش ها برای بازسازی ایمن

پوشش کامل تست

قبل از هر گونه بازسازی، اطمینان حاصل کنید که رفتار موجود توسط تست های خودکار، تست های واحد، تست های یکپارچه سازی و تست های رگرسیون یک شبکه ایمنی ارائه می دهد، در نظر بگیرید که اضافه کردن تست های سطح سیستم که شبیه سازی بارهای واقعی و حالت های شکست است، هر مرحله بازسازی باید با اجرای مجموعه تست کامل تایید شود.

در قدم های کوچک

عوامل بزرگ و گسترده خطر بالایی را معرفی می کنند. شکستن کار به گام های کوچک و برگشت پذیر؛ هر مرحله باید کامپایل و عبور تست ها را انجام دهد.استفاده از کنترل نسخه برای انجام اغلب، و نوشتن پیام های توصیفی که هدف را توضیح می دهند، اگر یک گام باعث شکست تست شود، آسان است بدون از دست دادن زمینه، برنامه نویسی Pair یا بررسی کد در طی بازسازی دوباره، احتمال پنهان شدن را کاهش دهد.

استفاده از ابزارهای بازسازی خودکار

IDE های مدرن (به عنوان مثال، Visual Studio، IntelliJ IDEA، Eclipse) عملیات بازسازی ساخته شده را ارائه می دهند که به طور مکانیکی کد را تغییر می دهند، خطای انسانی را کاهش می دهند.استفاده از این ابزار برای عملیات مانند renaming، استخراج روش ها و تغییر امضاها به طور مداوم در سراسر کد پایه، اجتناب از این دستورالعمل های دستی که ویرایش می توانند برای تجزیه و تحلیل های استاتیک (C) استفاده کنند، می تواند به عنوان ابزارهای کدگذاری جهانی، و یا تغییر نام نویسی، تغییر داده شود.

مستند معماری تصمیمات

بازسازی فقط تغییرات کد نیست؛ بلکه یک بهبود معماری است.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.

مطالعه موردی: بازسازی ماژول کنترل پرواز

یک تامین کننده هوافضا متوسط یک ماژول کنترل پرواز را در C که بیش از ده سال رشد کرده بود، حفظ کرد.کد حاوی بیش از 15،000 خط در یک فایل واحد است، با توسعه دهندگان متعدد اضافه کردن ویژگی های بدون تجزیه و تحلیل استاتیک نشان داد 137 هشدار مربوط به متغیرهای غیر قانونی، کد مرده و استفاده از نقطه سوال برانگیز است.

آنها با استخراج محاسبات مستقل به توابع جداگانه با رابط های روشن شروع کردند.هر تابع با استفاده از یک واحد تست تست تست تست تست تست تست تست شد. اعتبار پارامتر متمرکز بود برای حذف چک های مکرر. پس از بازسازی مجدد، ماژول به هفت فایل تقسیم شد، هر کدام با یک مسئولیت تجزیه و تحلیل استاتیک هشدار به 14، همه آنها کم هزینه و مستند شده است که تست های سیستم کامل را با سرعت بهبود می دهد، به تجزیه و تحلیل ساختار تجزیه و تحلیل دقیق، به سرعت تجزیه و تحلیل دقیق، به سرعت تجزیه و تحلیل ساختار تجزیه و تحلیل دقیق، به سرعت، تجزیه و تحلیل های ساختار تجزیه و تحلیل دقیق، تجزیه و تحلیل دقیق، به سرعت، به سرعت تجزیه و تحلیل های ساختار تجزیه و تحلیل دقیق، تجزیه و تحلیل ساختار تجزیه و تحلیل، همه جانبه، تجزیه و تحلیل های تعمیر و تحلیل های تجزیه و تحلیل ساختار تجزیه و تحلیل های تعمیر و تحلیل های تعمیر و تحلیل های تعمیر و تحلیل های تعمیر و تحلیل های تعمیر و تحلیل استاتیک، همه جانبه، همه جانبه، همه جانبه، همه جانبه، همه جانبه، همه چیز.

این مورد نشان می دهد که بازسازی مستقیم از قابلیت اطمینان و اهداف امنیتی پشتیبانی می کند. پیچیدگی کاهش یافته ماژول را آسان تر می کند و حذف کد مرده بردارهای بالقوه حمله را حذف می کند.تیم متعهد به یک چرخه بازسازی سه ماهه برای جلوگیری از فروپاشی آینده است.

ابزارهای پشتیبانی از Refactoring

تحلیل استاتیک

ابزارهایی مانند پوشش، SonarQube و Clang-Tidy کد را تشخیص می دهند که نشان دهنده نیاز به بازسازی است: توابع طولانی، پیچیدگی بیش از حد سیکلیک، کد تکراری و لانه سازی عمیق، ادغام این ها به خط لوله CI به طوری که فرصت های بازسازی به طور خودکار به سطح می آیند.

کنترل نسخه

استفاده از Git یا یک سیستم مشابه برای شاخه سازی مجدد کار، پرچم های ویژگی می توانند تغییرات را جدا کنند تا کد بازسازی شده را در کنار نسخه قدیمی آزمایش کنند.خوب متعهد است که بهداشت از قابلیت ردیابی و رولبک پشتیبانی می کند.

ابزارهای پوشش تست

Gcov، JaCo یا ابزارهای پوشش مشابه اطمینان حاصل می کنند که آزمایشات مسیرهای بازسازی شده را انجام می دهند.هدف پوشش شاخه ای بیش از 90٪ در ماژول های بحرانی قبل از شروع مجدد بزرگ است.

پشتیبانی از IDE Refactoring Support

خودتان را با منوی refactoring IDE آشنا کنید.عملیاتی مانند “Extract Performance”، “Rename” و “change” کمتر از ویرایش های دستی هستند.

نتیجه گیری

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