در مقاله «بایدها در معماری نرمافزار» به مواردی اشاره کردیم که توجه به آنها باعث میشود تا فرایند طراحی سیستم بدون اشکال طی شود و در نهایت خروجی، سیستمی امن، مقیاسپذیر و ماژولار است که میتواند به راحتی با نیازهای مختلف منطبق شود. در این مقاله اما قصد داریم که نبایدهای معماری نرمافزار را بررسی کنیم. توجه به این نبایدها به شما کمک میکند تا از ضرر و زیان به سیستم پیشگیری کنید.
در ادامه این پست از بلاگ آسا، نبایدها در معماری نرمافزار را معرفی میکنیم.
۱. مهندسی بیش از حد
مهندسی بیش از حد (Over engineering) در معماری نرمافزار، به فرایند طراحی سیستمی گفته میشود که پیچیدگی آن، بیشتر از حد لازم برای رفع نیازمندیهای عملکردی کاربران است. این میتواند شامل استفاده از فناوریها و تکنیکهای پیشرفته یا ایجاد عملکردی باشد که وجود آنها نه در وضعیت فعلی لازم است و نه ممکن است در آینده به کار سیستم بیایند.
ممکن است ایده خوبی به نظر برسد که یک سیستم را با انعطافپذیری و جامع کردن آن تا حد امکان برای تغییرات «آینده» آماده کنیم، اما مهندسی بیش از حد میتواند مشکلات مختلفی را به وجود بیاورد:
افزایش پیچیدگی
سیستمهای بیش از حد مهندسی شده پیچیدهتر هستند و درک، نگهداری و اصلاح آنها سخت تر است. این موضوع میتواند توسعه را کند کرده و احتمال خطا را افزایش دهد.
منابع هدر رفته
مهندسی بیش از حد میتواند منجر به هدر رفت زمان و انرژی برای توسعه ویژگیهای غیرضروری یا راهحلهای بیش از حد پیچیده شود. این همچنین میتواند منجر به هزینههای بالاتر برای منابع سختافزاری یا نرمافزاری شود که در واقعیت مورد نیاز نیستند.
کاهش چابکی
سیستمهای بیش از حد مهندسی شده کمتر با تغییرات سازگار میشوند. از آنجایی که آنها پیچیدهتر هستند، تغییر آنها در پاسخ به نیازها یا شرایط در حال تغییر میتواند دشوارتر باشد.
تاخیر در زمان عرضه به بازار
مهندسی بیش از حد میتواند تحویل یک سیستم یا ویژگی را به تاخیر بیندازد؛ زیرا زمان بیشتری صرف پیچیدگیهای غیرضروری میشود. این میتواند به رقبا برتری دهد و به طور بالقوه، منجر به از دست رفتن فرصتها شود.
افزایش ریسک
سیستمهای بیش از حد مهندسی شده به دلیل افزایش پیچیدگی میتوانند بیشتر در معرض باگها و آسیبپذیریهای امنیتی باشند. همچنین تست کامل آنها ممکن است دشوارتر باشد. به همین خاطر over engineering یکی از مهمترین نبایدهای معماری نرمافزار است.
در پایان، هرچند طراحی سیستمهای قوی و انعطافپذیر مهم است، اما اجتناب از پیچیدگیهای غیرضروری هم به همان اندازه اهمیت دارد. ایجاد تعادل مناسب بخش کلیدی معماری نرمافزار مناسب است.
۲. نادیده گرفتن نیازهای غیرعملکردی
نادیده گرفتن الزامات غیر عملکردی (Non Functional Requirements) در معماری نرمافزار میتواند منجر به مشکلات قابل توجهی در مراحل بعدی چرخه عمر توسعه نرمافزار شود. NFRها مانند کارایی، امنیت، قابلیت استفاده و نگهداری، نقش مهمی در تعیین کیفیت سیستم دارند. اگر این الزامات در طول مرحله معماری نادیده گرفته شوند، ممکن است منجر به توسعه سیستمی شود که اگرچه از نظر عملکرد صحیح است، اما انتظارات کاربران یا ذینفعان خود را برآورده نمیکند.
به عنوان مثال، سیستمی که الزامات عملکردی را در نظر نمیگیرد، ممکن است تحت بارهای سنگین به خوبی مقیاس نشود. به طور مشابه، نادیده گرفتن الزامات امنیتی میتواند سیستم را در برابر حملات آسیبپذیر کند. بنابراین، برای معماریهای نرمافزاری، در نظر گرفتن NFRها از ابتدای طراحی برای ساختن سیستمهای نرمافزاری قوی، کارآمد و کاربرپسند ضروری است.
نادیده گرفتن NFRها میتواند منجر به افزایش هزینهها، تاخیر در تحویل و کاهش رضایت مشتری شود. به همین خاطر همانقدر که نیازهای عملکردی مورد توجهاند، نیازهای غیرعملکردی هم باید در فرایند طراحی مورد توجه قرار بگیرند.
۳. بی توجهی به مستندات
نادیده گرفتن مستندات (Documents) در معماری نرمافزار میتواند پیامدهای جدی برای فرایند توسعه و قابلیت نگهداری سیستم نرمافزاری داشته باشد. مستندات به عنوان یک نقشه راه برای نرمافزار عمل میکند و یک نمای کلی از طراحی، ساختار و عملکرد سیستم ارائه میدهد.
داکیومنتها یک ابزار ضروری برای آشنایی اعضای جدید تیم با سیستم، تسهیل فرایند انتقال دانش و اطمینان از نگهداشت موثر سیستم هستند. بدون مستندات مناسب، توسعهدهندگان ممکن است در درک معماری سیستم دچار مشکل شوند که منجر به ناکارآمدی، خطا و ناسازگاری در کد میشود.
علاوه بر این، نبود مستندات میتواند تلاش برای رفع خطا را مختل و شناسایی و حل مشکلات را سخت کند. بنابراین، تیم توسعه باید برای افزایش طول عمر سیستم و پیشگیری از مشکلات بعدی، به مستندسازی اهمیت ویژهای بدهد.
جمعبندی
بایدها و نبایدهای معماری نرمافزار درست مثل یک راهنما، به طراحان سیستم کمک میکنند تا چالشهای طراحی، پیادهسازی و نگهداشت سیستمهای نرمافزاری قوی و کارآمد را پشت سر بگذارند. رعایت این اصول میتواند منجر به توسعه نرمافزاری شود که نه تنها الزامات عملکردی را برآورده میکند، بلکه در جنبههای غیرعملکردی مثل کارایی، امنیت و قابلیت استفاده هم بهتر از رقبا است. البته باید توجه کنید که این اصول غیرقابل تغییر و سنگ نوشته نیستند و توسعهدهندگان و طراحان میتوانند با توجه به نیازهای خود این اصول را بازبینی و بهینه کنند.
منابع:
دیدگاهتان را بنویسید