
مقدمه:
معماری نرم افزار در دهه های اخیر به یکی از بنیادی ترین مفاهیم در مهندسی نرم افزار تبدیل شده است؛ مفهومی که مرز میان یک محصول صرفاً کارکردی و یک سیستم پایدار، مقیاس پذیر و قابل تغییر را مشخص می کند. با گسترش روز افزون مدل های فرایند توسعه مبتنی بر معماری، توجه به ساختار کلان سیستم های نرم افزاری اهمیتی مضاعف یافته است. در گذشته تمرکز اصلی بسیاری از پروژه ها بر پیاده سازی قابلیت های عملکردی بود، اما در فضای رقابتی امروز، کیفیت به عامل تعیین کننده تبدیل شده است. نرم افزاری که تنها نیازهای عملکردی را برآورده سازد، بدون برخورداری از ویژگی های کیفی نظیر قابلیت تغییر، کارایی، قابلیت نگهداری و مقیاس پذیری، جایگاه پایداری در محیط های عملیاتی پیچیده نخواهد داشت.
در ادبیات تخصصی، معماری نرم افزار به ساختار یا ساختارهایی از یک سیستم اطلاق می شود که اجزاء اصلی، ویژگی های قابل مشاهده آنها و روابط میان این اجزاء را در بر می گیرد. بر اساس تعریف ارائه شده توسط لن باس، معماری نرم افزار شامل تصمیمات اولیه و بنیادینی است که مسیر طراحی، پیاده سازی، استقرار و نگهداری سیستم را شکل می دهد. این تصمیمات در مراحل آغازین چرخه حیات نرم افزار اتخاذ می شوند و آثار آنها در سراسر عمر سیستم باقی می ماند. به همین دلیل، معماری نخستین عنصر قابل ارزیابی در فرایند توسعه به شمار می رود و بستری برای تحلیل ویژگی های کیفی فراهم می آورد.
در مدل های فرایند توسعه مبتنی بر معماری، ابتدا نیازهای کیفی سیستم استخراج و مستندسازی می شوند و سپس ساختار معماری متناسب با این نیازها طراحی می گردد. این رویکرد نشان می دهد که معماری نه یک فعالیت تزئینی، بلکه محور اصلی تحقق کیفیت است. پس از طراحی، معماری مورد ارزیابی قرار می گیرد و در صورت لزوم اصلاح می شود. بدین ترتیب، طراحی و ارزیابی معماری دو بخش به هم پیوسته از یک چرخه تکرارشونده هستند که در تعامل مداوم با یکدیگر تکامل می یابند.
یکی از موضوعات کلیدی در معماری نرم افزار، ویژگی های کیفی است. این ویژگی ها شامل قابلیت تغییر، کارایی، امنیت، قابلیت اطمینان و قابلیت آزمون پذیری می شوند. در میان آنها، قابلیت تغییر جایگاهی ویژه دارد، زیرا محیط های فناوری همواره در حال تحول هستند و سیستم های نرم افزاری باید توان سازگاری با نیازهای جدید را داشته باشند. قابلیت تغییر در سطح معماری به نحوه توزیع مسئولیت ها، میزان وابستگی میان ماژول ها و چگونگی مدیریت تغییرات آینده مربوط می شود. طراحی معماری با تمرکز بر این ویژگی، مستلزم تحلیل سناریوهای کیفی و مدل سازی وابستگی های نحوی و معنایی میان اجزاء است.
الگوها و سبک های معماری ابزارهایی هستند که برای سازمان دهی ساختار سیستم به کار گرفته می شوند. این الگوها چارچوبی برای توزیع مسئولیت ها و تعیین نحوه تعامل اجزاء فراهم می کنند. افزون بر آن، دیدگاه های معماری نیز نقش مهمی در مستندسازی و تحلیل سیستم دارند. از جمله دیدگاه های شناخته شده می توان به مدل ۴+۱ اشاره کرد که توسط فیلیپ کروچتن مطرح شد و معماری را از منظرهای منطقی، فرایندی، توسعه ای، فیزیکی و سناریوها بررسی می کند. چنین دیدگاه هایی امکان درک چند بعدی ساختار سیستم را فراهم می آورند و ارتباط میان نیازهای کسب و کار و تصمیمات فنی را روشن می سازند.
روش های طراحی معماری نرم افزار نیز متنوع هستند. طراحی مبتنی بر ویژگی، طراحی با استفاده از سبک های معماری، و طراحی با ملاحظات اقتصادی مبتنی بر تحلیل سود و هزینه، هر یک رویکردی متفاوت برای مواجهه با پیچیدگی سیستم های نرم افزاری ارائه می دهند. در این میان، تاکتیک های معماری به عنوان راهکارهای مشخص برای دستیابی به ویژگی های کیفی مطرح می شوند و رابطه میان تاکتیک ها و الگوهای معماری تعیین کننده کیفیت نهایی ساختار سیستم است. ارزیابی وابستگی ها، استفاده از جدول وابستگی ها، تحلیل بستار انتقالی و روش های بهینه سازی، همگی ابزارهایی برای سنجش میزان انعطاف پذیری و قابلیت تغییر در سطح معماری به شمار می روند. در چنین بستری، معماری نرم افزار نه صرفاً یک نمودار ساختاری، بلکه چارچوبی پویا برای مدیریت پیچیدگی، هماهنگ سازی اهداف کیفی و سامان دهی تصمیمات راهبردی در سراسر چرخه حیات سیستم تلقی می شود و در تعامل مستمر با نیازهای کسب و کار، تحولات فناوری و الزامات فنی بازتعریف می گردد.
فهرست مطالب
چکیده.. ۱
مقدمه. ۲
معماری نرم افزار چیست ؟ ۳
تعاریف پایه در معماری نرم افزار ۶
الگوهای معماری یا سبکهای معماری. ۷
مدل مرجع.. ۷
معماری مرجع. ۸
دیدگاه های معماری. ۸
دیدگاه Bass ۹
دیدگاه ۴+۱ ۱۰
دیدگاه های دیگر ۱۱
طراحی معماری نرم افزار ۱۱
کارکرد های سیستم و معماری نرم افزار ۱۲
ویژگی های کیفی. ۱۲
ویژگی های کیفی سیستم. ۱۵
سناریو های ویژگی کیفی. ۱۶
ویژگی های کیفی کسب و کار ۱۷
ویژگی های کیفی معماری. ۱۹
دستیابی به ویژگیهای کیفی. ۲۰
تاکتیکهای معماری. ۲۰
الگوهای معماری. ۲۲
ارتباط تاکتیکها و الگوهای معماری. ۲۵
روشهای طراحی معماری نرم افزار ۲۶
طراحی مبتنی بر ویژگی. ۲۶
طراحی به کمک سبک های معماری مبتنی بر ویژگی. ۲۸
طراحی با ملاحظات اقتصادی با استفاده از روش آنالیز سود هزینه ۳۳
ویژگی کیفی قابلیت تغییر ۴۰
تعریف قابلیت تغییر ۴۰
مشخص نمودن نیاز های قابلیت تغییر با استفاده از سناریو های کیفی. ۴۱
مدل سازی قابلیت تغییر در سطح معماری نرم افزار ۴۲
تاکتیک های قابلیت تغییر ۴۳
ارزیابی قابلیت تغییر ۴۹
ارزیابی نحوه اختصاص وظایف.. ۴۹
ارزیابی وابستگی بین ماژول ها ۵۰
انواع وابستگی. ۵۰
نحوه بازنمایی وابستگی ها ۵۳
روش Brute-force ۵۴
استفاده از بستار انتقالی. ۵۵
استفاده از روش های بهینه سازی. ۵۶
استفاده از جدول وابستگی ها ۵۶
تصمیم گیری نهایی در مورد طراحی ویژگی کیفی قابلیت تغییر ۵۷
مطالعه موردی. ۵۸
تعداد وظایف تغییر یافته در ماژول ثانویه ۶۹
وابستگی نحوی ومعنایی. ۷۲
استفاده از کامپایلر به عنوان واسط. ۷۴
استفاده از سیستم عامل به عنوان واسط. ۷۴
خلاصه و نتیجه گیری. ۷۷
منابع….. ۷۸