در هستی "بو" می تواند حسی خوشایند و یا نامطبوع در آدم ایجاد کند. عموم بوهای بد نشانه ای بر حضور و وجود امری ناخوشایند و اساسی تر اند که نیاز به اصلاح و رفع مشکل خواهند داشت.
در کتاب Refactoring مارتین فاولر برای نخستین بار از متافور و تشبیهی به نام Code Smell و یا "بوی کد" استفاده می کند. او معتقد است اگر شامه های مان را تقویت کنیم، می توانیم به سرعت نشانه هایی را در کد ببینیم که خبر از مسائل ناخوشایندی در کلیت کد به ما می دهند. اگر این نشانه ها را بشناسیم، خواهیم دید که حضور آن ها در هر کدی می تواند دلیل و خبرآورِ وجود مشکلاتی اساسی در آن کد باشد.
مارتین فاولر موارد بسیار متعددی را تحت عنوان Code Smell شناسایی کرده و برای رفع آن ها پیشنهاداتی در کتاب اش ارائه کرده است. مزیت Code Smell ها آن است که شناسایی و یادگیریِ آن ها از پس هر کسی که مقداری تجربه داشته باشد، برخواهد آمد.
نکته مهم در فهم Smell ها آن است که مشکل Smell ها نیستند، بلکه آن ها تنها نشانه هایی بر وجود مشکلات اساسی تر در سطح کد هستند و چه بسا در حین اصلاح یکی از آن ها به موارد متعدد دیگری هم برخواهیم خورد.
این بوهای ناخوشایند می توانند شامل نامگذاری های غیر استاندارد و ناهمخوان و غیریکدست، متد های طولانی، متد هایی با وروردی های زیاد، کد های تکراری و مشابه و یا متد هایی که با وجود شباهت های زیاد تنها در موارد بسیار کوچکی با هم تفاوت دارند، کلاس های بزرگ، کلاس های متعددی که به هم شبیه هستند، عدم استفاده صحیح از وراثت، تعامل بیش از حد دو یا چند کلاس با هم و حتی حضور کامنت ها باشد.
نوشته کوتاه مارتین فاولر در مورد Code Smell:
https://martinfowler.com/bliki/CodeSmell.html
نوشته جف اتوود، خالق Stackoverflow در مورد مصادیق Code Smell:
https://blog.codinghorror.com/code-smells/
مصادیقی دیگر از Code Smell ها:
https://sourcemaking.com/refactoring/smells