معماری نرم افزار چیست؟

700 views
Skip to first unread message

Rohalah Delpak

unread,
Dec 22, 2012, 5:03:10 PM12/22/12
to iranian-association-o...@googlegroups.com

"معماری" واژه ای نیست که بتوان تعریفی مختصر برای آن ارائه داد.

درباره اینکه منظور از معماری نرم افزار چیست، منابع متعددی، تعاریف متنوعی ارائه داده اند و تا امروز هنوز تعریفی مشترک و واحد از این اصطلاح ارائه نشده است.

با این حال از متعتبر ترین نعاریفی که تا به حال ارائه شده اند، می توان تعاریف زیر را برگزید:

Software architecture encompasses the set of significant decisions about the organization of a software system including the selection of the structural elements and their interfaces by which the system is composed; behavior as specified in collaboration among those elements; composition of these structural and behavioral elements into larger subsystems; and an architectural style that guides this organization. Software architecture also involves functionality, usability, resilience, performance, reuse, comprehensibility, economic and technology constraints, tradeoffs and aesthetic concerns

Philippe Kruchten, Grady Booch, Kurt Bittner, and Rich Reitman derived and refined a definition of architecture based on work by Mary Shaw and David Garlan (Shaw and Garlan 1996)

همچنین مارتین فولر (Martin Fowler) در کتابی با عنوان "Patterns of Enterprise Application Architecture" اشاره ای می کند به اینکه چه درک و برداشتی از "معماری نرم افزار" دارد. می گوید:

The highest-level breakdown of a system into its parts; the decisions that are hard to change; there are multiple architectures in a system; what is architecturally significant can change over a system's lifetime; and, in the end, 
architecture boils down to whatever the important stuff is.


http://www.pearsonhighered.com/educator/academic/product/0,3110,0321127420,00.html

و در کتابی با عنوان "Software Architecture in Practice" که ویرایش سوم آن سه ماه پیش منتشر شده است، آورده شده است که : 

The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them. Architecture is concerned with the public side of interfaces; private details of elements—details having to do solely with internal implementation—are not architectural.


http://www.pearsonhighered.com/educator/academic/product/0,4096,0321154959,00.html

همانطور که مشاهده می کنید، حد و مرز مشخص و تعریف شده ای بین فعالیتهای مرتبط با معماری نرم افزار و مهندسی نیازمندی ها (requirements engineering) به چشم نمی خورد. 

برای اینکه درک بهتری از آنچه که "معماری نرم افزار" باید به آن بپردازد فرض کنید که صاحبان و استفاده کنندگان محصول، نیازمندیها و نگرانی هایی مانند زیر دارند:

  • The end user is concerned with intuitive and correct behavior, performance, reliability, usability, availability, and security.
  • The system administrator is concerned with intuitive behavior, administration, and tools to aid monitoring.
  • The marketer is concerned with competitive features, time to market, positioning with other products, and cost.
  • The customer is concerned with cost, stability, and schedule.
  • The developer is concerned with clear requirements, and a simple and consistent design approach.
  • The project manager is concerned with predictability in the tracking of the project, schedule, productive use of resources, and budget.
  • The maintainer is concerned with a comprehensible, consistent, and documented design approach, and the ease with which modifications can be made.


در لیست فوق می بینید برخی از مسائلی که معماری نرم افزار را می توانند تحت الشاع قرار دهند، جنبه "غیر کاربردی" دارند مانند زمان هزینه و برنامه زمانی تولید. 

 هر چند این نیازمندیها ربطی به کیفیت نرم افزار نرم افزار ندارند اما لازم است تا در تدوین معماری نرم افزار مورد توجه جدی قرار گیرند.

بنابراین می توان گفت تدوین معماری متاثر است از میزان تاثیر سه جزء کاربر (User) کسب و کار(Bussiness) و سیستمها (System).

اما به عنوان جمع بندی می توان اینطور گفت که "معماری نرم افزار" باید:

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

در آینده به برخی الگوهای معماری نرم افزار (architectural pattern) می پردازم.

Rohalah Delpak

unread,
Jan 29, 2013, 6:25:34 AM1/29/13
to iranian-association-o...@googlegroups.com

در طرح یک معماری نرم افزار باید به چه مسائلی توجه کرد؟

در طرح معماری نرم افزار، طیف نسبتا متنوعی از مسائل و موضوعات هستند که بایستی مورد توجه گروه معماری نرم افزار قرار بگیرند. از جمله ی این مسائل می توان به موارد زیر اشاره کرد:

·         قدرت انجام عملیات توسط نرم افزار در زمان مطلوب (Performance)

·         قابلیت نگهداری و توسعه های آتی (Maintainability)

·         امکان تست آسان نرم افزار (Testability)

·         امنیت نرم افزار (Security)

·         قابل اطمینان بودن نرم افزار در انجام وظایف مورد انتظار (Reliability)

·         مقیاس پذیری نرم افزار جهت عکس العمل به درخواستهای انبوه و استفاده همزمان تعداد زیادی از کاربران (Scalability)

·         واسط کاربری مناسب و کاربردپذیر که به کاربر نرم افزار احساس خوشایندی بدهد (Look and Feel)

·         انعطاف پذیر بودن نرم افزار تا جایگزینی لایه ها یا اجزایی از آن به سادگی انجام پذیر باشد (Flexibility)

·         مسائل مرتبط با استقرار نرم افزار و پیش نیازهای آن جهت استقرار مطلوب (Deployment)

·         استفاده از تجربیات ممتاز سایر توسعه دهندگان در طراحی معماری (Best Practices)

·         گسترش ناخواسته ی مرزهای نرم افزار به خارج از دامین و موضوع اصلی پروژه (Scope Creep)

·         یکپارچگی درونی اجزای سازنده سیستم (System Integrity)

·         سازگاری با بسترهای نرم افزاری موجود در سازمان (System Integration)

·         محدودیتهای موجود در سخت افزارها و بسترهای شبکه

·         تناسب بودجه و هزینه در پیاده سازی معماری

·         برنامه زمانی و محدودیتهای مطرح در برنامه (Time lines)

·         مجموعه سیاستهای مرتبط با پروژه و یا سیاستهای مورد نظر ذینفعان و سازمان (Politics)

·         برخی مسائل مرتبط با ویژگیهای رفتاری و خلق و خوی افراد استفاده کننده از معماری (Individual egos)

 

نظر شما درباره این فهرست چیست؟ آیا شما مسئله دیگری که در طرح معماری باید به آن توجه داشت، می شناسید؟ در تجربه های قبلی شما توجه نکردن به کدامیک از موضوعات فوق باعث به خطر افتادن پروژه و دشوار شدن توسعه آن بوده است؟ 


در ۲۳ دسامبر ۲۰۱۲، ساعت ۱:۳۳‏، Rohalah Delpak‏ <emai...@gmail.com> نوشت:

--
شما به این دلیل این پیام را دریافت کرده‌اید که در گروه Google Groups "Iranian Association of Software Architects" مشترک شده‌اید.
جهت لغو اشتراک از این گروه، ایمیلی به iranian-association-of-soft...@googlegroups.com ارسال کنید.
از این گروه در http://groups.google.com/group/iranian-association-of-software-architects?hl=fa دیدن کنید.
 
 



--
---------------------
Rohalah Delpak
Software Development Engineer/Architect - Solution Architect - PSM
(021)(88979170)
اگر می خواهی پس از مرگ فراموش نشوی، یا چیزی بنویس که قابل خواندن باشد، یا کاری کن که قابل نوشتن باشد.
Reply all
Reply to author
Forward
0 new messages