Skip to content

Software-Engineering-Laboratory-Sharif/SE-lab-8

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 

Repository files navigation

SE-lab-8

پرسشها

  1. هر یک از مفاهیم زیر را در حد یک خط توضیح دهید.
  • کد تمیز: کدی که به راحتی قابل خواندن، فهمیدن و تغییر است. ما از best practice ها برای داشتن کد تمیز استفاده می کنیم.
  • بدهی فنی: توضیح می‌دهد که وقتی کدی را با کمبود منابع (مانند زمان، نیروی فنی و دانش کافی) توسعه می‌دهیم، چه نتایجی حاصل می‌شود و باید بعداً آن کد را اصلاح کنیم تا کد تمیز داشته باشیم.
  • بوی بد: هر مشخصه ای در source code یک برنامه که احتمالاً مشکل جدی تری را نشان می دهد.
  1. طبق دسته‌بندی وب‌سایت refactoring.guru، بوهای بد کد به پنج دسته تقسیم می‌شوند. در مورد هر کدام از این پنج دسته توضیح مختصری دهید.

Bloaters

این بوها معمولاً زمانی به وجود می‌آیند که ما کلاس‌ها یا داده‌هایی داریم که کار با آن‌ها به دلیل مسائل مختلف مانند توابع طولانی، کلاسهای بیش از حد بزرگ و ... بسیار سخت است. معمولاً این نوع مسائل زمانی ایجاد می‌شوند که ما به refactoring دوره‌ای روی کدها توجه نمی‌کنیم یا تغییرات را به روشی کارآمد مدیریت نمی‌کنیم، این رویکرد به انباشت منطق و پیچیدگی ختم می‌شود. بنابراین بعداً نمی توانیم از کدهای پیاده سازی شده به صورت کارآمد و ساده استفاده کنیم. همچنین باید به release and reuse granulation توجه کنیم؛ به این معنی که باید در نظر داشته باشیم که چه چیزی را اجرا می کنیم و بعداً چگونه از آن استفاده می کنیم.

Object-Orientation Abusers

این بوها معمولاً زمانی که قوانین شی گرایی را به درستی رعایت نمی کنیم بوجود می‌آیند. مانند فیلدهای موقت، فرض کنید از برخی فیلدهای موقت در داخل کد استفاده می کنیم که فقط در شرایط خاص مقادیر را می پذیرند. بنابراین وقتی سعی می کنیم از آنها خارج از محدوده آنها استفاده کنیم، ممکن است با مقدار null روبرو شویم. یا از سوی دیگر ممکن است از switch-case به عنوان حالت هایی استفاده کنیم که از الگوها به روشی نامناسب استفاده می کنند. یا ممکن است دو کلاس مجزا داشته باشیم که کارهای یکسانی را انجام می دهند اما در تعریفشان مجزا هستند.

Change Preventers

این نوع بوها زمانی ایجاد می شوند که ما نیاز به تغییر بسیاری از قسمت های کد پس از تغییر یک قسمت خاص داریم. مانند Shotgun Surgery، زمانی اتفاق می افتد که ما یک قسمت از یک کد را تغییر می دهیم، لازم می‌شود که چندین مکان را در کلاس های مختلف تغییر دهیم تا کد ثابت بماند. یا Divergent Change داریم به این معنی که وقتی باید یک تغییر را در یک کلاس ایجاد کنیم، متقاعد می شویم که کارهای اضافی مانند تعریف چندین متد در آن کلاس انجام دهیم.

Dispensables

گاهی اوقات ما برخی از practice ها را دنبال می‌کنیم که به کدهای ناپاک ختم می‌شوند و به گونه‌ای برنامه‌نوسیس می‌کنیم که کدهای بی‌فایده‌ای داریم که می‌توان آن‌ها را مجدداً اصلاح کرد یا ممکن است به طور کامل حذف کرد. مانند گذاشتن comment که نباید نحوه پیاده سازی کد را توضیح دهد و کد باید self explainer باشد. یا ممکن است duplication داشته باشیم که باعث می شود کدها به سختی خوانده شوند. یا گاهی اوقات ما کلاس هایی داریم که می توان آنها را در کلاس دیگری ادغام کرد زیرا از همان منطق پیروی می کنند اما کلاس های جداگانه از آنها یک کلاس lazy و useless ایجاد می‌کند.

Couplers

وقتی متوجه می‌شویم که در کد ما کلاس‌هایی وجود دارد که بین دو کلاس دیگر قرار دارند و بدون هیچ تأثیری از داده‌های انتقالی استفاده می‌کنند، باید مشکوک شویم که coupler در کد ما وجود دارد. یکی از معروف ترین آنها، Message Chaining است؛ چندین کلاس داریم که مانند یک زنجیره روی یک منطق ترتیبی عمل می کنند. اما کلاس وسط به جای برگرداندن آنچه که کلاس اول نیاز دارد، کل شیء کلاس اول را به کلاس سوم منتقل می کند. بنابراین، نیازی به آن نیست و فقط باعث پیچیدگی در کد می شود.

  1. یکی از انواع بوهای بد، Lazy Class است.
  • این بوی بد در کدام یک از دسته‌بندی‌های پنج‌گانه قرار می‌گیرد؟

Dispensables

  • برای برطرف‌کردن این بو، استفاده از کدام بازآرایی‌ها پیشنهاد می‌شود؟

Inline Class and Collapse Hierarchy

  • در چه مواقعی باید این بو را نادیده گرفت؟

در برخی مواقع از این کلاسها برای پیاده‌سازی در آینده استفاده می‌شود.

  1. در وبسایت 29 بوی بد کد نامبرده شده است. سعی کنید 10 بوی بد را در پروژه تبدیل کننده مدل به سی پیدا کنید و به آن اشاره کنید.

Long Method

تابع generatePhase2 از کلاس Phase2CodeFileManipulator تعداد خطهای زیادی دارد و بنظر switch-case آن می‌توانست بهتر هندل شود.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages