چکیده
در چند دههی گذشته به معماری نرمافزار به عنوان شاخهای مهم از مهندسی نرمافزار توجه زیادی شده است و این مساله به پیشرفت قابل توجهی در توسعهی پایههای فنی طراحی بر اساس معماری به عنوان یک نظم مهندسی منجر شده است. اما تا رسیدن به هدف، هنوز فاصله زیادی در پیش است و هر روز با تغییر روزافزون چهرهی فناوری، بر چالشهای معماری نرمافزار افزوده میشود. در این مقاله گرایشهای مهم معماری در عمل و تحقیقات بررسی و گرایشها، مشکلات و اهداف این شاخهی نوظهور از نرمافزار مشخص میشود.
مقدمه
معماری، که در یک نگاه کلی نحوهی گردآوری و اثر متقابل اجزا را بیان میکند، اساسیترین مساله در طراحی و ساخت هر سیستم بزرگ نرمافزاری به شمار میرود. یک معماری خوب میتواند این اطمینان را به وجود آورد که سیستم به درستی پاسخگوی نیازهایی از قبیل کارآیی، قابلیت اطمینان، قابلیت جابهجایی، مقیاسپذیری و تعامل متقابل است و در عوض یک معماری بد میتواند سردرگمی و گرفتاری به وجود آورد.
در چند دههی گذشته با توجه زیادی به اهمیت معماری نرمافزار، تولیدکنندگان حرفهای نرمافزار به خوبی دریافتهاند که دستیابی به یک معماری درست، بزرگترین عامل موفقیت در طراحی و توسعهی سیستم است. از این رو در توسعهی محصولات جدید، همواره سعی کردهاند ارزش گزینههای جدید معماری را با بررسی نحوهی ارتقای طرحهای معماری گذشته، تشخیص دهند. امروزه کتابهای بسیاری در زمینهی ”طراحی بر اساس معماری“ نوشته شده است. گردهماییها و کارگاههای متعددی در این راستا برگزار شده است. ابزارهای تجاری بسیاری به منظور پاسخگویی به این نیاز تولید شده و پروژههای دولتی و صنعتی عظیمی با تمرکز بر روی معماری نرمافزار تعریف شده است تا از میان آنها تعدادی استانداردهای معماری به صورت رسمی انتشار یابد. تدوین اصول، شیوهها و تجربیات در این زمینه به هدایت شیوههایی تکرارپذیر از طراحی، با نیمنگاهی بر استانداردهای مستندسازی، بازنگری و پیادهسازی آنها منجر میشود.
با وجود پیشرفتهای صورت گرفته، از دید نظام مهندسی، شاخهی معماری نرمافزار هنوز نابالغ به شمار میآید. در حالیکه با روشن شدن هر چه بیشتر محدودهی این شاخه، بر تعداد مشکلات و عوامل بررسی نشده اضافه میشود. از این رو در آیندهای نزدیک با پیشرفتی قابل توجه، هم در دانش و هم در عمل، در این زمینه روبهرو خواهیم بود. بخشی از این توسعهها در حقیقت گسترش طبیعی مسیرهای کنونی است و تعداد زیادی از این فرصتهای جدید نیز همگام با تغییرات فناوری ارایه میشوند.
در این مقاله گرایشهای مهم معماری نرمافزار در تئوری و در عمل بررسی شده است. از این رو ابتدا جهت آماده شدن ذهن مخاطب، نقش معمار در توسعهی سیستمهای نرمافزاری توصیف شده است. سپس وضعیت گذشته و حال این شاخه مورد بررسی قرار گرفته و در نهایت پس از بررسی نیروها و عوامل تاثیرگذار بر دنیای سیستمهای نرمافزاری، گرایشها، چالشها و اهداف نوظهور در این زمینه بیان شده است.
نقشهای معماری نرمافزار
نگاهی به تعاریف مختلف ارایه شده از معمار نرمافزار نشان میدهد که در همهی این تعاریف معمار نرمافزار توصیفکنندهی ساختار کلی و عمومی است. این ساختار تصمیمات رده بالای طراحی را از قبیل: چهگونگی تشکیل سیستم از بخشهای متعامل، نمایش شاهراهها و مسیرهای تعامل این بخشها و ویژگیهای این بخشها، روشن میکند. افزون بر این یک توصیف معماری شامل اطلاعاتی است که امکان ارزیابیهای ردههای بالا و بحرانی را فراهم میکند.
معماری نرمافزار مانند پلی ارتباطی میان نیازمندیها و پیادهسازی، نقشی کلیدی بازی میکند و در حالی که بسیاری از ویژگیها را نشان میدهد، با ارایه یک توصیف انتزاعی از سیستم، تعدادی از ویژگیها را از نظر دور میدارد. در مطلوبترین حالت، این نمایش دستورالعملی قابل اجرا را در اختیار کل سیستم قرار میدهد تا به طراحان امکان دهد، دربارهی توانایی سیستم در پاسخگویی به نیازمندیهای مشخص و ارایهی نمونهی اولیه برای ساخت و ترکیب سیستم تفکر کنند. برای مثال، معماری یک نرم افزار کاربردی پردازش سیگنال ممکن است از یک شبکهی گردش داده تشکیل شده باشد که در آن گرهها اطلاعات ورودی را دریافت، تبدیل و به خروجی ارسال میکنند. از این رو طراحان باید با تجزیهی چنین ساختاری و با در اختیار داشتن مقادیر برآورد شدهی ورودی گردش اطلاعات، هزینههای محاسباتی و ظرفیتهای ذخیرهسازی، دربارهی مسایل محتمل از جمله گلوگاهها، نیازمندیهای منابع و ترتیب عملیات محاسباتی چارهاندیشی کنند.
اگر بخواهیم مساله را به دقت بررسی کنیم، معماری نرمافزار میتواند دست کم در شش زمینه از توسعهی نرمافزار که در زیر آورده شده است، نقش کلیدی ایفا کند:
1- ادراک: معماری نرمافزار با نمایش اجزا در سطحی که درک آن بسیار ساده است، به توضیح عملکرد سیستمهای بزرگ بسیار کمک میکند. افزون بر این، در بهترین حالت، توصیف معماری، محدودیتهای سطح بالای طراحی سیستم را به نمایش میگذارد.
2- استفادهی مجدد: توصیفهای معماری از استفادهی مجدد در سطوح مختلف پشتیبانی میکند. تاکنون محدودهی عمل استفادهی مجدد در سطح اجزا بوده است، در حالی که طراحی بر اساس معماری هم اجزای بزرگ و هم چارچوبهای کاری را که در آن اجزا با یکدیگر در ارتباط هستند، دوباره به کار میگیرد. فعالیتهای جاری بر روی معماریهای نرمافزاری حوزهی کاری مشخص، چارچوبهای کاری مرجع و الگوهای طراحی بر اساس معماری که امروزه بر روی آنها کار میشود، خود گواهی بر این مطلب است.
3- ساخت: توصیف معماری با نشان دادن اجزای اصلی و روابط میان آنها به خوبی یک نمای اولیه از سیستم را در اختیار قرار میدهد. برای مثال، یک نمای چند لایه از معماری، مرزهای انتزاعی میان اجزای پیادهسازی یک سیستم را مستندسازی میکند که در نتیجهی این کار نه تنها واسطهای اصلی سیستم داخلی، که محدودیت بخشهایی از سیستم که متکی به سرویسهای سایر بخشهاست مشخص میشود.
4- تکامل: معماری نرمافزار ابعاد سیستم مورد نظر برای توسعه را با آشکارسازی مرزهای سیستم به خوبی نمایان میکند و در نتیجه توسعهدهندگان سیستم به خوبی میتوانند تاثیرات تغییرات را بررسی و برآورد دقیقتری از هزینهی تغییرات ارایه کنند. علاوه بر این از دیگر محاسن توصیفهای معماری از بین بردن نگرانی در خصوص عملکرد متقابل اجزا در هنگام ارتباط با یکدیگر است. این مساله تنها به علت شفافسازی روابط و مکانیسمهای ارتباطی در سطح معماری است. این جداسازی این امکان را مهیا کرده است که به راحتی بتوان مکانیسمهای ارتباطی را در راستای بهبود کارایی تعامل، نمونهسازی اولیه و استفاده مجدد تغییر داد.
5- تحلیل: توصیف معماری، فرصتهای جدیدی را در اختیار تحلیلگران قرار میدهد که از آن جمله میتوان به بررسی یکپارچگی سیستم، تبعیت از محدودیتهای اعمال شده توسط الگوی معماری و ویژگیهای کیفی، تحلیل وابستگیها و استفاده از الگوهای تحلیل ارایه شده بر مبنای سبکهای ویژه در هر معماری، اشاره کرد.
6- مدیریت: تجربه نشان داده است که در پروژههای موفق، دستیابی به یک معماری با ارزش نرمافزار از مهمترین دستاوردهای آن پروژه در طی فرآیند توسعهی صنعتی نرمافزار تلقی میشود. بنابراین به عنوان یک اصل باید پذیرفت که ارزیابی دقیق و اساسی یک معماری جهت انتخاب آن ما را به سوی فهم هر چه بهتر نیازمندیها، راهبردهای پیادهسازی و مخاطرات احتمالی هدایت میکند.
نویسنده : دیوید گارلن (garlan@cs.cmu.edu)
مترجم : ساسان کمیلیزاده (sassankz@systemgroup.net)
ناشر : همکاران سیستم