یک مدل از باگها وجود دارند که میتوانند حسابی شما را به دردسر بیندازند که تحت عنوان 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، این کار را کردهایم که این آبجکت غیرضروری، بخش از مموری سیستم را به خود اختصاص خواهد داد و در نتیجه پرفورمنس تاحدودی ممکن است کاهش یابد.
به عنوان مثالی دیگر، به انتخاب الگورتیمهای نامناسب میرسیم که میتوانند پرفورمنس نرمافزار ما را تا حد قابلتوجهی کاهش دهند. روشی که قرار است با استفاده از آن یک مسأله را حل کنیم بسیار حائز اهمیت است که نه تنها باید کوتاه باشد، بلکه میباید بهینه هم باشد (به فرایند تست بهینه بودن یک الگوریتم، Big O گفته میشود). حال که با ذکر نمونههای فوق، بیشتر با مفهوم باگ پرفورمنسی آشنا شدیم، میتوانیم این دست باگها را به صورت زیر تعریف کنیم:
Performance Bugs به دستهای از باگها گفته میشود که منجر به کاهش پرفورمنس (عملکرد) سیستم به خاطر وجود فرایندهای غیرضروری یا ناکارآمد، الگورتیمهای نامناسب و یا حتی یک خطای منطقی میشوند.
باید گفت که در بسیاری از مواقع، یافتن باگهای پرفورمنسی به مراتب دشوارتر از آن چیزی است که تصور میشود؛ چرا؟ زیرا نرمافزار دارد به خوبی کار میکند و وقتی که چیزی مثل ساعت کار کرده و برخی مواقع لَگ پیدا میکند، مسلماً به سختی میتوان باگ موجود را یافت.
آیا تاکنون با چنین باگهایی برخورد کردهاید؟ همچنین با دنبال کردن چه استراتژیای، موفق به یافتن آنها شدید؟ نظرات و دیدگاههای خود را با سایر کاربران سکان آکادمی به اشتراک بگذارید.