پایان نامه کارشناسی ارشد مهندسی نرم افزار با عنوان معماری سیستمهای نرم‌افزاری

 
مقدمه
پیشرفت و بزرگتر شدن جامعه بشری در دنیای امروزی و پیچیده‌تر شدن روابط بین آنها، باعث بوجود آمدن سیستمهای بزرگ و پیچیده در زندگی بشر امروزی شده است. با پیشرفت علم کامپیوتر و وارد شدن آن به بطن زندگی بشر، اکثر سیستمهایی که بشر امروزی با آنها سروکار دارد، به صورت کامپیوتری پیاده‌سازی می‌شوند.زندگی بشر امروزی وابسته به سیستمهای نرم‌افزاری بزرگ و پیچیدۀ موجود می‌باشد. سیستمهای شرکتهای هواپیمایی و مسافربری، سیستمهای ارتباطی توزیع شده همانند تلویزیون، تلفنهای معمولی و همراه، سیستمهای بانکداری، سیستمهای مدیریت بورس، سیستمهای عمل جراحی راه دور، سیستمهای کنترل ماهواره‌های مختلف، سیستمهای معاملات راه دور و هزاران سیستم نرم‌افزاری دیگر که وجود خلل و نقصی در آنها تاثیرات جبران ناپذیری بر زندگی بشر امروزی خواهد داشت.
 
در نتیجه یکی از نیازهای حیاتی بشر امروزی اینست که سیستمهای بزرگ و پیچیدۀ موجود، بدون خطا، سریع، با امنیت و کارایی بالا و... در اختیار آنها گیرد. در نتیجه توسعه دهندگان سیستمهای نرم‌افزاری بزرگ و پیچیده، باید سیستمهایی با چنین ویژگیهایی، در اختیار کاربران قرار دهند.در نتیجه ارائه سیستمهایی در مقیاس بزرگ که دارای برخی ویژگی‌ها همچون کارایی بالا، بدون خطا و بدون عیب، سریع و امن و...، نیاز توسعه دهندگان سیستمهای نرم‌افزاری مقیاس بزرگ می‌باشد. به این مشخصه‌ها در حوزه مهندسی نرم‌افزار نیازهای غیرعملیاتی یا مشخصه‌های کیفی می‌گویند. مهمترین مسئله در توسعه سیستمهای نرم‌افزاری مقیاس بزرگ، مبحث معماری آن می‌باشد. معماری، ساختارهای موئلفه‌ها و زیرسیستمهای یک سیستم مقیاس بزرگ و ارتباط بین آنها می‌باشد. معماری نرم‌افزار، یکی از مهمترین حوزه‌ها در مهندسی نرم‌افزار است و دلیل آن تاثیر حیاتی معماری در موفقیتِ توسعه سیستمهای نرم‌افزاری است. 
توسعه یک سیستم نرم‌افزاری مقیاس بزرگ با ویژگی‌های مذکور، نیازمند ارائه یک معماری مناسب و کامل برای سیستم نرم‌افزاری مورد نظر می‌باشد. در نتیجه ارائه یک معماری درست و مناسب برای چنین سیستمهایی از اهمیت حیاتی برخوردار است. 
 
همیشه بشر از تجربیات قبلی خود یا دیگران در انجام کارهای فعلی بهره جسته است. در زمینه معماری نرم‌افزار نیز معماران نرم‌افزار برای ارائه یک معماری مناسب می‌توانند از تجربیات معماران گذشته و ماهر برای ارائه معماری خود بهره گیرند. امروزه برای سیستمهای گوناگون، معماریهای مختلفی توسط معماران ماهر ارائه شده است. این معماریها به کررات در سیستمهای مختلف مورد آزمایش قرار گرفته و اعتبار و صحت آنها برای استفاده در برخی از سیستمهای نرم‌افزاری اثبات شده است. به این معماری‌ها، الگوها یا سبکهای معماری نرم‌افزار می‌گویند. 
 
در نتیجه یک معمار نرم‌افزار برای ارائه یک معماری مناسب، باید به سبکهای معماری موجود در حوزه سیستمی خود آشنایی داشته باشد تا بتواند از آنها برای ارائه یک معماری مناسب استفاده کند. یعنی معمار یک سیستم نرم‌افزاری برای ارائه یک معماری برای یک سیستم، باید تسلط کافی بر سبکهای معماری نرم‌افزار و مزایا، معایب و کاربردهای هر یک از آنها داشته باشد.سبکهای معماری نرم‌افزار همه روزه توسط افراد و گروههای مختلف ارائه می‌شوند و هر گروه در حوزه سیستمی خود، به معرفی سبکهای جدید معماری نرم‌افزار می‌پردازد. درنتیجه یک معمار نرم‌افزار برای آشنایی به سبکهای معماری مربوط به حوزه خود، باید در یک دوره تناوب خاص مثلاً هر ماه، سبکهای معماری جدید را جمع‌آوری، بررسی و تحلیل کند. تا بتواند یک معماری درست و مناسب برای سیستم مورد نظر خود ارائه کند. 
 
 
کلمات کلیدی:

معماری نرم‌افزار

الگوهای معماری نرم‌افزار

معماری سیستمهای نرم‌افزاری

مدلسازی فرایندها بر اساس UML

 
 

تعریف و تاریخچه معماری

معماری دارای ریشه لاتین "APXITEKTΩN" به معنای "استادی در ساختن" می‌باشد[امربر 82] . در لغت‌نامه Cambridge، معماری به معنای "هنر و استادی در طراحی و ساخت" و "سبک طراحی و ایجاد" است.شاید اولین جایی که بشریت از معماری استفاده کرده است به زمانهای ساخت ساختمانهای بزرگ برمی‌گردد. مفهوم معماری به طور حتم از زمانهای قدیم در ذهن بشریت بوده و از آن استفاده می‌کرده است. به طورحتم، ساختن بناهای عظیم، بدون تفکر معماری امکان پذیر نبوده است. اگر بناهایی مثل اهرام مصر یا تخت جمشید را بررسی کنیم، به این نتیجه می‌رسیم که ساخت چنین بناهایی بدون نقشه اولیه و تدبیرات قبل از ساخت، امکان پذیر نبوده است و این همان مفهوم معماری است. 
 
اکثراً برای عدم وجود معماری در منابع مختلف، عمارت وینچستر را مثال می‌زنند، عمارتی بزرگ و عظیم، ولی بدون معماری. به عنوان مثال، از مجموع 1417 درِ آن، 950 در، بجایی باز نمی‌شود . پس بدون معماری می‌توان عمارات و ساختمانها یا هر چیزی در مقیاس بزرگ ساخت. ولی در این حالت نیازمندی‌های واقعی ذی‌نفعان  برآورده نمی‌شود و بعد از ساخت، هزاران مشکل دیگر پدیدار می‌گردد.در [Klir 91] سیستم، مجموعه‌ای از اجزاء  مرتبط تعریف می‌شود. دو جزء و یک رابطه بین آنها، تشکیل یک سیستم می‌دهند. برای ایجاد یک سیستم، ابتدا باید آنرا شناخت و تحلیل کرد. تعریف تحلیل، تعیین سطح‌مند  اجزاء و روابط بین آنها می‌باشد.
 
 بعد از تحلیل هر سیستم، برای ایجاد سیستم، اجزاء و روابط بدست آمده از تحلیل را باهم ترکیب می‌کنند تا سیستم مورد نظر ایجاد شود. به ترکیب اجزاء بدست آمده از تحلیل برای ایجاد سیستم جدید، طراحی می‌گویند [Klir 91].با گذشت زمان سیستمها در حال بزرگ شدن هستند. در نتیجه سیستمها و طراحی آنها به یک عامل پیچیده تبدیل شده است. تعریف ساده پیچیدگی در [Klir 91]، تعداد و تنوع اجزاء و روابط بین آنها می‌باشد. در نظریه سیستمی ، روشهای مختلفی برای غلبه بر پیچیدگی‌ها وجود دارد. یکی از روشهای غلبه بر پیچیدگی، سطح‌مند کردن اجزاء و روابط می‌باشد؛ به طوریکه بتوان از جزئیات دوری کرد. یعنی بتوان طراحی این سیستمها را به دو سطح، طراحی سطح بالا و طراحی با جزئیات شكست. 
 
 
 
 
فهرست مطالب
 
مقدمه
فصل اول

مفهوم و دسته‌بندی معماری‌ها و جایگاه معماری نرم‌افزار در آن

- مقدمه          
- تاریخچه معماری
- مفهوم و تعریف معماری
- چارچوبهای معماری
-- چارچوب معماری Zachman
-- چارچوب معماری FEAF
-- چارچوب معماری CISR
- چارچوب‌ها و متدولوژی‌ها
- دسته‌بندی معماری‌ها
-- معماری سیستم، معماری نرم‌افزار
-- معماری سازمان
-- معماری کسب و کار
-- معماری اطلاعات
-- معماری سیستمهای کاربردی
-- معماری داده  
-- معماری تکنولوژی
- معماریهای دیگر
 
فصل دوم

مفهوم معماری نرم‌افزار و مقایسه‌ای تحلیلی بر تعاریف آنها

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

مفهوم، تعریف و سنجش مشخصه‌های کیفی در معماری نرم‌افزار

- مقدمه          
- مفهوم کیفیت نرم‌افزار و مشخصه‌های کیفی
- تعریف کیفیت در نرم‌افزار و مشخصه‌های کیفی
- Observable via Execution
- Not Observable via Execution
- معرفی برخی از صفات کیفی نرم‌افزار بر اساس دسته‌بندی [Bass ]
- صفات دسته اول: صفات کیفی سیستمی
-- Availability
-- Performance
-- Security
-- Functionality
-- Usability
-- Modifiability
-- Portability
-- Reusability
-- Integrability
-- Testability
- صفات دسته دوم: صفات کیفی کسب و کار
-- Time to Market
-- Cost and benefit
-- Projected lifetime of the system
-- Targeted Market
-- Rollout schedule
-- Integration with legacy systems
- صفات دسته سوم: صفات کیفی معماری
-- Conceptual Integration
-- Correctness and Completeness
-- Buildability
- Trade-Off موجود بین صفات کیفی
 
فصل چهارم

سبک‌ها و الگوهای معماری نرم‌افزار و نحوه ارزیابی و انتخاب آنها

- مقدمه و تاریخچه
- تعریف سبک معماری
-- تعاریف مختلف سبک معماری نرم‌افزار
- معرفی برخی سبک‌های متداول
-- سبک‌های متمركز روی داده
-- سبک‌های جریان داده
-- سبک‌های ماشین مجازی
-- سبک‌های فراخوانی و بازگشت
-- سبک‌های موئلفه‌های مستقل
-- سبك‌های چند ریختی
- الگوهای معماری نرم‌افزار
- سازماندهی الگوها
-- الگوهای پیاده‌سازی
-- الگوهای طراحی
-- الگوهای معماری
- الگوها و سبک‌ها
- ارزیابی و انتخاب یک سبک معماری نرم‌افزار
-- پارامترهای ارزیابی سبکها
-- جدول ارزیابی سبکها
-- تکمیل جدول ارزیابی سبکها
-- ارائه الگوریتم استفاده از جدول
-- مشکلات موجود
 
فصل پنجم

طرح مشکل موجود، سوابق، راهکارها و کارهای انجام شده

- مقدمه
- طرح مشکل موجود در سبکهای معماری نرم‌افزار
- دسته‌بندی‌های سبکهای معماری
-- دسته‌بندی‌های موضوعی
-- دسته‌بندی‌ سبکهای معماری بر اساس [Clements -]
-- دسته‌بندی‌های سیستمی
 
فصل ششم

ارائه یک استاندارد برای سازماندهی سبکهای معماری نرم‌افزار

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

مدلسازی فرایندهای استاندارد ارائه شده، بر اساس UML

- مقدمه
- فرایند مدلسازی فرایند
- مدل کردن منابع کسب‌وکار
- مدل کردن اهداف کسب‌وکار
- تعیین Actorهای کسب‌وکار
- مدل جریانهای کاری موجود در استاندارد
- جریانهای کاری فاز اول
-- فاز اول - قدم اول
-- فاز اول- قدم دوم
-- فاز اول - قدم سوم
-- فاز اول - قدم چهارم
- جریانهای کاری فاز دوم
-- فاز دوم - قدم اول
-- فاز دوم - قدم دوم
- جریانهای کاری فاز سوم
-- فاز سوم - قدم اول
-- فاز سوم - قدم دوم
-- فاز سوم - قدم سوم
- جریانهای کاری فاز چهارم
-- فاز چهارم - قدم اول
-- فاز چهارم - قدم دوم
- مدل خروجی‌های کسب‌وکار
 
فصل هشتم
خلاصه، نتیجه‌گیری و کارهای آینده
- مقدمه
- خلاصه و نتیجه‌گیری
- کارهای آینده
- در نهایت
منابع و مراجع