باگ‌های پرفورمنسی: یکی از بدترین انواع باگ‌های برنامه‌نویسی

یک مدل از باگ‌ها وجود دارند که می‌توانند حسابی شما را به دردسر بیندازند که تحت عنوان Performance Bugs شناخته می‌شوند؛ این باگ‌ها زمانی خودشان را نشان می‌دهند که کدی که زده‌اید کار می‌کند و شما را به هدفتان رسانده اما یک جای کار میلنگد چراکه پرفورمنس یا عملکرد نرم‌افزار از آنچه انتظار می‌رود، بسیار کمتر است! آنچه که در مورد این نوع باگ‌ها بسیار عجیب است این است که احتمال این‌که شما هیچ‌گاه متوجه وجود این «اشرار» نشوید بسیار بیشتر از تصور شما است. کدهای شما به‌ظاهر خیلی خوب کار می‌کنند، عملکرد درستی دارند و دقیقا همان چیزی را که منتظرش هستید را روی صفحه برایتان نمایش می‌دهند، اما همهٔ اینها تنها‌و‌تنها با سرعتی کمتر از آنچه که باید اتفاق بیافتد. در ادامه با سکان آکادمی همراه باشید تا با ذکر نمونه‌هایی عملی، بیشتر با این نوع باگ‌ها آشنا شوید.

برای کشف مشکلاتی از این دست، به یک برنامه‌نویس حرفه‌ای نیاز دارید که به طور دقیق بداند کدی که نوشته شده باید در بهترین حالت چگونه عملکردی داشته باشد و با تست کردن آن به زیرکی متوجه چنین باگی بشود و سعی در رفع آن داشته باشد (پیش از ادامهٔ مطلب، برای آشنایی با فردی که برای اولین بار اصطلاح Bug را وارد صنعت برنامه‌نویسی کرد، به مقالهٔ آشنايى با دريابان گريس مارى هوپر، کسی که برای اولین بار اصطلاح Bug را باب کرد! مراجعه نمایید.)

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

علاوه بر این،‌نوشتن کدهای اضافی و یا نوشتن کد در جای نامناسب هم‌ نوع دیگری از باگ‌های پرفورمنسی است؛ برای روشن‌تر شدن این مسئله، به سورس‌کد زیر نگاه کنید:

private function doSomething($params = null)
{
    $object = new Tools();
    if ($params) {
        // do something
    }
}

همان‌طور که در کد بالا مشاهده می‌شود، فانکشنی داریم تحت عنوان doSomething که یک پارامتر ورودی می‌گیرد تحت عنوان params$ که مقدار پیش‌فرض آن null است؛ حال ما بدون این که چک کنیم ببینیم آیا این پارامتر مقداردهی شده است یا خیر، داخل فانکشن دست به ساخت یک آبجکت از روی کلاسی تحت عنوان Tools می‌زنیم.

در صورتی که مقدار params$ برابر با False یا Null باشد، ما هرگز داخل دستور if نمی‌رویم اما این در حالی است که بدون نیاز به آبجکتی از روی کلاس Tools،‌ این‌کار را کرده‌ایم که این آبجکت غیرضروری، بخش از مموری سیستم را به خود اختصاص خواهد داد و در نتیجه پرفورمنس تاحدودی ممکن است کاهش یابد.

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

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

بایستی گفت که در بسیاری از مواقع یافتن باگ‌های پرفورمنسی به مراتب دشوارتر از آن چیزی است که تصور می‌شود؛ چرا؟ زیرا نرم‌افزار دارد به خوبی کار می‌کند و وقتی که چیزی مثل ساعت کار کرده و برخی مواقع لگ پیدا می‌کند، مسلماً به سختی می‌توان باگ موجود را یافت.

آیا تاکنون با چنین باگ‌هایی برخورد کرده‌اید؟ با دنبال کردن چه استراتژی‌ای موفق به یافتن آن‌ها شدید؟ نظرات و دیدگاه‌های خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.

Performance bugs - the dark matter of programming bugs

0


فرنوش فهیم

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






از طریق این فرم، می توانید بدون ثبت نام نظر دهید و یا اگر قبلا ثبت نام کرده اید، با ورود ناحیه ی کاربری می توانید علاوه بر ثبت نظر، به مدیریت نظرات خود نیز بپردازید.
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)
(فیلد اجباری)