جنبه‌های معماری نرم افزار

در حال حاضر تقریبا همه چیز با نرم افزار مرتبطه! کمتر موضوع یا زمینه‌ای هست که نشه رد پایی از نرم افزار توش پیدا کرد به همین خاطر مهندسی نرم افزار تبدیل به یکی از پیچیده‌ترین زمینه‌های مهندسی شده. مهم‌ترین قسمت مهندسی نرم افزار، معماری نرم افزار هستش که تقریبا همه چیز یک سیستم رو مشخص می‌کنه! از نحوه ارتباطات قسمت‌های مختلف گرفته تا ویژگی‌های کیفی و عملکردی یک نرم افزار.

توی این مطلب می‌خوام براتون چهار جنبه‌ معماری نرم افزار رو خدمتتون معرفی کنم. این مطالب از کتاب Software Architecture in Practice فراگرفته شده. این کتاب یک مرجع مناسب برای فهم معماری نرم افزار به صورت کاربردی و ساده‎‌ست که در دانشگاه‌های معروف دنیا به عنوان مرجع استفاده می‌شه. اما بریم چهار جنبه‌ای که معماری نرم افزار با اونها درگیره و دونه دونه اونها رو معرفی و بررسی کنیم.


جنبه تکنیکال معماری نرم افزار

این جنبه در مورد نقش تکنیکال معماری نرم افزار توی سیستم صحبت می‌کنه. جنبه تکنیکال فاکتورهای زیادی داره که مهم‌ترینش ویژگی‌های کیفی‌ای(Quality Attributes) هستش که معماری نرم افزار می‌تونه توی رسیدن به اونها به سیستم و تیم تکنیکال کمک کنه. ویژگی‌هایی مثل امنیت، دسترسی پذیری و یا اتکاپذیری.

تکنیک‌های مهندسی نرم افزار رایج در معماری فاکتور دیگه‌ایه که توی این جنبه اهمیت داره. مثلا سیستم‌های اطلاعاتی امروزی معمولا در بستر وب ارائه می‌شن یا اکثر اونها به صورت شی‌گرا و سرویس‌گرا هستند و روال استقرار سیستم‌ها اکثرا به صورت ابری هستش. اینها تکنیک‌های مهندسی نرم افزاری هستن که امروز استفاده می‌شن اما ممکنه در آینده دیگه وجود نداشته باشن همونطور که قبلا وجود نداشتن. دقت کنید این جنبه درگیر جزئیات پیاده سازی نرم افزار نمیشه و صرفا مباحث استراتژیک و بنیادی رو مطرح می‌کنه.


جنبه چرخه حیات پروژه در معماری نرم افزار

دومین جنبه‌ی معماری نرم افزار که در این کتاب مطرح شده، چرخه حیات پروژه هستش. فرایندهای توسعه نرم افزار رویکردهای استانداردی برای توسعه سیستم‌های نرم افزاری هستن. اونها یک نظم خاص رو به روال کاری و طراحی مهندسان نرم افزار و مهم‌تر از اون تیم‌های مهندسی نرم افزار تحمیل می‌کنن. چهار فرایند توسعه نرم افزار معروف وجود داره:

  • آبشاری
  • تکراری(حلزونی)
  • چابک
  • توسعه مدل محور

وجه مشترک این چهار فرایند بخش طراحی اونهاست. تمام این فرایندها و هر فرایند توسعه نرم افزار دیگه‌ای یک قسمت به نام طراحی دارن که مهندسای نرم افزار نمای کلی و قسمت‌های مختلف نرم افزار رو توی این قسمت طراحی می‌کنن. معماری نرم افزار هم در واقع نوعی طراحیه پس توی تمام فرایندهای توسعه، مهندسین با معماری درگیر هستن. مهم نیست از چه فرایندی برای توسعه نرم افزار استفاده می‌شه، در هر صورت یک سری فعالیت وجود داره که که از اونها برای طراحی معماری نرم افزار ، آزمایش معماری، پیاده سازی سیستم و مدیریت تکامل سیتم تا آخر عمر نرم افزار استفاده می‌کنیم:

1. ساخت یک پرونده تجاری برای سیستم

2. درک نیازهای مهم معماری

3. ایجاد یا انتخاب معماری

4. مستند سازی و برقراری ارتباط با معماری

5. تجزیه و تحلیل یا ارزیابی معماری

6. پیاده سازی و آزمایش سیستم بر اساس معماری

7. اطمینان از انطباق اجرا با معماری


جنبه کسب و کار

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


جنبه حرفه‌ای

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

در واقع معمار یک واسط بین تجارت و نرم افزار هستش که وظیفه همسویی اهداف تجاری با اهداف فناوری اطلاعات رو داره پس به عنوان یک نقش حیاتی و تعیین کننده باید مهارت‌های حرفه‌ای و شخصیتی خیلی خوبی داشته باشه.

ممنونم از توجه تون امیدوارم این مطلب براتون مفید باشه.