معماری نرمافزار Software Architecture
معماری یک سیستم در اصل اجزای تشکیلدهنده آن را توصیف میکند؛ این توصیف شامل ساختار اصلی و چگونگی ارتباط بین اجزاست. معماری و طراحی نرمافزار شامل یکسری عوامل کمکی مانند: استراتژی کسبوکار، ویژگیهای کیفیت، پویایی انسان، طراحی و محیط IT هستند. میتوان معماری و طراحی نرمافزار را به دو بخش مجزا تقسیمبندی کرد؛ در معماری، تصمیمات غیرعملکردی اتخاذ شده و به کمک الزامات عملکردی از یکدیگر مجزا میشوند. در طراحی، الزامات عملکردی انجام و پیادهسازی میشوند.
معماری نرمافزار:
معماری نرمافزار در اصل، نقشه کلی یک سیستم است. این نقشه باعث میشود تا با بررسی همه جانبه سیستم و در دست داشتن نقشه کلی آن، بتوان پیچیدگیها و نحوه ارتباط بخشهای مختلف با یکدیگر را به خوبی مورد تجزیه و تحلیل قرار داد. راه حلی ساختار یافته برای رفع تمامی نیازهای تکنیکال و عملیاتی ارائه میدهد و همزمان ویژگیهای کیفیتی معمول مانند عملکرد(Performance) و امنیت را نیز بهینهسازی میکند؛ بعلاوه اینکه، شامل مجموعهای از تصمیمات مهم در مورد توسعه نرمافزار مورد نظر است و هر کدام از این تصمیمات میتواند بر روی موارد مختلفی مانند کیفیت، عملکرد، پشتیبانی، نگهداری و محصولنهایی اثرگذار خواهد بود.
طراحی نرمافزار:
طراحی نرمافزار یک نقشه طراحی(Design Plan) فراهم میکند که بر اساس آن المانهای یک سیستم، نحوه عملکرد هر یک به صورت جداگانه و نحوه ارتباط آنها با یکدیگر ارائه میگردد. این کار انجام میشود تا تمام نیازهای یک سیستم برای بازدهی هرچه بهتر بطورکامل پوشش داده شود. بطورکلی اهداف یک طرح به شرح زیر میباشد:
1) در نظر گرفتن الزامات سیستم، نیازهای مشتریان، بازاریابی و مدیریت نرمافزار
2) کارکرد به عنوان نقشه راهبردی در طول مراحل توسعه نرمافزار
3) هدایت مراحل اجرایی مانند طراحیهای جزئی، کدنویسی، ادغام، تست کردن و...
اهداف معماری نرمافزار:
هدف اصلی معماری نرمافزار، شناسایی الزاماتی است که بر ساختار نرمافزار اثر میگذارد. پیدا کردن این الزامات و نیازها، باعث میشود پروژه از راهی آسانتر به نتیجه برسد و به طور کلی یک معماری درست و مناسب را پایه گذاری کرده که مانند یک میانبر عمل کند. برخی دیگر از اهداف معماری نرم افزار عبارتند از:
۱) مشخص نمودن ساختار کلی سیستم و چشم پوشی از بیان جزئیات
۲) معرفی تمامی موارد استفاده و سناریوهای اجرایی برای درک بهتر پروژه
۳) در نظرگیری تمامی نیازهای پروژه و ذینفعان
۴) برطرف کردن تمامی نیازهای عملکردی و کیفی
۵) مطرح کردن ایده های موثر برای جا افتادن و بهبود جایگاه در بازار
۶) بهبود عملکرد سیستم
محدودیت ها:
به طورکلی می توان گفت، معماری نرم افزار یک متود جدید بین مهندسین و شرکت های کامپیوتری محسوب می شود و ایراداتی نیز دارد. از جمله این ایرادات می توان به موارد زیر اشاره کرد:
۱) فقدان ابزارهای پیاده سازی و استانداردهای مناسب
۲) فقدان ابزارهای تجزیه و تحلیل مناسب جهت پیشبینی نتایج معماری نرم افزار
۳) عدم آگاهی بسیاری از فعالان حوزه نرم افزار از اهمیت معماری نرم افزار
۴) فقدان نیرو متخصص کافی در زمینه معماری نرم افزار که دارای تجربه کاری مناسب و آشنایی کامل با این زمینه داشته باشند
نقش معمار نرم افزار:
یک معمار نرم افزار نقشه کلی از ساختار پروژه و روش های پیاده سازی آن را به تیم فنی و طراحان ارائه می دهد. از همین رو باید در زمینه های به خصوصی تخصص لازم را دارا باشد و وظایف خود را به خوبی بشناسد. در ادامه به توضیح این تخصص ها و وظایف خواهیم پرداخت:
تخصص در زمینه طراحی:
۱) داشتن تخصص کافی در زمینه طراحی نرم افزار و دانستن عملکرد و نحوه پیاده سازی هر یک از قبیل: object-oriented design، event-driven design و...
۲) رهبری تیم توسعه دهنده نرم افزار برای یکپارچه سازی روند پیشرفت پروژه
۳) استفاده از تمام قوای تیم برای استفاده از طرح های پیشنهادی و توانایی بررسی و آنالیز آن ها
تخصص در زمینه پیاده سازی سیستم و دامنه ها:
۱) آشنایی کامل با نحوه عملکرد سیستم و نرم افزار و بکارگیری دانش مورد نیاز در جهت تکامل نرم افزار
۲) بررسی نیازمندی های سیستم و حاصل کردن اطمینان از موثر بودن آن ها
۳) آشنایی کامل با دامنه(Domain)های مختلف
تخصص در زمینه تکنولوژی:
۱) آشنایی کامل با تکنولوژی های مختلف، نحوه عملکرد آن ها و انتخاب مناسب ترین تکنولوژی های مورد نیاز جهت پیاده سازی بر روی سیستم و همچنین نحوه پیاده سازی آن
۲) هماهنگ سازی زبان بررسی مورد استفاده، فریم ورک ها(Frameworks)، پلتفرم ها، پایگاه داده و... با یکدیگر.
تخصص در زمینه متدولوژی:
۱) آشناییت کامل با متدولوژی های مختلف در زمینه نرم افزار که ممکن است در طول فرآیند SDLC(Software Development Life Cycle) مورد استفاده قرار گیرند
۲) انتخاب رویکردهای مناسب به گونه ای که برای کل تیم کمک کننده باشد
نقش پنهان معمار نرم افزار:
۱) هماهنگی در بین اعضای تیم به وجود می آورد که این هماهنگی باعث تسهیل کار آن ها می شود
۲) معمولا فردی است که دانش و تجربه زیادی دارد و می تواند مشکلات را به خوبی مدیریت کند
۳) مواردی که باعث تعویق در پروژه می شود را مدیریت و تا جای ممکن حذف می کند
۴) افراد تیم را به روش های مختلف حمایت می کند و باعث به وجود آمدن اثرات مثبت از جمله: ایجاد حس اعتماد بین اعضای تیم، روحیه دادن به اعضای تیم و جلوگیری از گایین آمدن عملکرد آن ها می شود
خدماتی که یک معمار نرم افزار ارائه می دهد:
۱) مجموعه ای واضح، کامل، سازگار و قابل دست یافتن از اهداف و عملکردها
۲) تحلیل و تجزیه بخش به بخش سیستم و عملگرهای آن
۳) مفهوم و توصیف کلی سیستم
۴) توصیف مدل طراحی سیستم و نحوه پیاده سازی آن
۵) مدیریت زمان و ارائه برنامه زمانی مناسب
۶) کنترل فرآیند کلی
اتربیوت های کیفی(Quality Attributes):
همانطور که می دانید کیفیت معیاری برای برتری یک محصول و یا تعریفی برای بی عیب نقص بودن آن است. اتربیوت های کیفی ویژگی هایی از یک سیستم بوده که از عملگرهای سیستم مجزا هستند. این اتربیوت بر روی تجربه کاربران از کار با سیستم، طراحی سیستم و... اثرگذار بوده و به طورکلی استفاده از این اتربیوت ها را می توان مرز بین یک سیستم خوب و بد در نظر گرفت. این اتربیوت ها را می توان در چند دسته تقسیم بندی کرد:
اتربیوت های کیفی استاتیک:
این اتربیوتها نمایانگر ساختار سیستم هستند که به معماری، طراحی و سورس کدها مرتبط میشوند. این اتربیوتها توسط کاربر قابل مشاهده نبوده اما بر روی هزینههای توسعه و نگهداری سیستم تاثیرگذار هستند.
اتربیوت های کیفی دینامیک:
این اتربیوتها نمایانگر عملکرد سیستم در حین اجرا هستند که مستقیما به معماری، طراحی، سورس کد، کانفیگ و پلتفرم مرتبط میشوند. آنها برای کاربران قابل مشاهده هستند.