DelphiGuru

وبلاگ شخصی علی دهبان

DelphiGuru

وبلاگ شخصی علی دهبان

DelphiGuru

در این بلاگ مطالب درخور توجه از دنیای برنامه نویسی پیشرفته و به طور اختصاصی تر مباحث مربوط به زبان شی گرا و سطح بالای دلفی قرار میگیرد.

Bad Code Smell

دوشنبه, ۱۳ ارديبهشت ۱۳۹۵، ۱۲:۴۴ ب.ظ

begin

مفهوم اصطلاح Bad Code Smell  چیست ؟

  

اصطلاح Code Smell که گاهی Bad Smell  هم اطلاق میشود در واقع به بخش هایی از سورس کد گفته میشه که پتانسیل این را دارند که مشکلات عمیقی برای سیستم به وجود بیاورند. Code Smell ها ساختارهای خاصی از کد هستند که اصول اساسی طراحی را نقض و تاثیر منفی در کیفیت طراحی میگذارند. این به این معنی است که نفر بعدی که سورس به دستش میرسد هر لحظه ممکن است خودکشی نماید یا سر از تیمارستان در بیاورد...!!!

Code Smell ها بطور معمول باگ نیستند و از لحاظ فنی و دستوری در آن زبان خطا ندارند و جلوی اجرا و کارایی عادی برنامه رو نمیگیرند. در عوض با ضعف عجیبی که در طراحی ایجاد میکنند میتوانند باعث کند شدن سرعت توسعه ، بالا رفتن ریسک ایجاد باگ های منطقی و یا شکست و واماندگی در آینده ای نزدیک شوند.

Code Smell  ها کاملاً پتانسیل این را دارند که مشکلی به نام بدهی های فنی (Technical debt) رh به وجود بیاورند.

یک مطالعه ی فنی در 2015 روی بیش از نیم میلیون خط کد که برای  بیش از 200  پروژه متن باز Commit شده حاکی از آن است که :

1- اکثر Code Smell ها از همان ابتدا بد نوشته شده اند ، نه اینکه در طی تغییرات بعدی ، از کد استاندارد به غیر استاندارد تبدیل شده باشند.

2- هرچند Code Smell اغلب هنگام اضافه کردن ویژگی های جدید یا توسعه ی کدهای موجود پیش می آید اما فعالیت های  Refactoring  هم میتوانند کد بد بو ایجاد کنند!

3-همیشه این تازه کاران نیستند که بیشتر باعث ایجاد Bad Smell میشوند بلکه توسعه دهندگان با تجربه با حجم کار بالا و زیر فشار و استرس بیشتر باعث ایجاد Bad smells میشوند!

انواع Code smell متداول

 

*** در سطح برنامه ( Application-level smells )

1- Duplicated code  : به قطعاتی از کد گفته میشود که بسیاربسیار شبیه به هم هستند و در جاهای مختلف سورس تکرار میشوند.

2-Contrived complexity : پیچیدگی ساختگی با استفاده اجباری و زیاد از الگوهای طراحی (Design patterns)  در جایی که یک طراحی ساده کفایت میکند.

3- Intentional complexity : پیچیدگی عمدی که به دلیل اختلافات بین توسعه دهندگان ، کدها بطور عمدی ناخوانا با پیچیدگی زیاد نوشته میشوند که فقط نویسنده از آن سر در می آورد و خدا...!

 

***  در سطح کلاس ها (Class-level smells)

1- Large class : که از نامش پیداست کلاس بسیار بزرگی است که توسط پروژه عملا پرستیده میشود!  بعضاً به این نوعِ بزرگ ،  God Object هم میگویند...

2- Feature envy : کلاس هایی که بیش از حد از متد های دیگر کلاس ها استفاده میکنند!

3- Inappropriate intimacy : کلاس هایی وابسته به جزئیات اجزای دیگر کلاس ها

4- Refused bequest:  از بین بردن وراثت . به کلاس هایی گفته میشود که تمام متدهای کلاس پدر را Override میکنند و از وراثت چیزی به ارث نبرده اند!! 

5- Lazy class / Freeloader : کلاس تنبل! کلاسی که خیلی خیلی کم کار انجام میدهد.

6- استفاده بیش از حد متغیرها ، ثابت ها و ایجاد حلقه های زیاد و تو درتو که همگی باعث ناخواناشدن کد و بالا بردن ریسک ایجاد باگ میشوند.

7- Downcasting : نوعی casting از بزرگ به کوچک که در  آن مدل انتزاعی شکسته میشود و مجبور به refactor یا حذف بخشی از آن میشوید.

8-Orphan Variable or Constant class : متغیر یتیم! یا کلاس ثابت در واقع یک کلاس هست که بطور غیرمعمول دربرگیرنده ی مجموعه ای از ثوابت است که متعلق به جاهای دیگر است ، جایی در دیگر کلاس ها یا حتی اعضای بعضی کلاس های دیگر!

 

* در سطح متدها Method-level smells

1- Too many parameters : یک لیست طولانی از پارامترها که  call کردن و تست کردن متد را پیچیده خواهد کرد.

2- Long method: یک متد ، فانکشن و یا رویه ای که بیش از حد رشد کرده باشد نیز احتمال خطا را افزایش میدهد.

3- Excessively long identifiers یا Excessively Short identifiers : هردو اشاره به نامگذاری های بسیار کوتاه و یا بسیار طولانی  و غیر استاندارد دارند که با مطالعه استاندارد نامگذاری در زبان مربوطه ( Naming conventions ) به راحتی قابل حل خواهد بود.

4- Excessive return of data : بازگشت داده اضافی توسط فانکشن یا متدها که بیش از نیاز استفاده کننده متد (Caller) است.

 

نکته : این اصطلاح اولین بار توسط  Kent Beck در ده ی 90 میلادی ابداع شد و بعدها استفاده از این عبارت با کتاب Refactoring: Improving the Design of Existing Code  اثر Martin Fowler افزایش یافت.

 چند ابزار هم برای چک کردن کدهایی که استایل نامناسبی دارند و پتانسیل تبدیل شدن به Code smell را دارند وجود دارد از جمله :  Checkstyle و PMD و  FindBugs که   هرسه جهت رفاه حال جاواکاران طراحی شده اند و عموماً متن باز هستند.

 منبع :

       1- وبلاگ مارتین فاولر

       2-کتاب  Refactoring: Improving the Design of Existing Code

       3-  WikiPedia

end.

موافقین ۲ مخالفین ۰ ۹۵/۰۲/۱۳
علی دهبان

Code Smell

bad code

نظرات  (۱)

Tips and Content were great
that was perfect

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی