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

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

شروع دوره پایان‌یافته
به‌زودی اعلام می‌شود
۱۶
جلسه
۴۸
ساعت محتوا

این دوره چه مباحثی را پوشش می‌دهد؟

۱. تعریف معماری نرم‌افزار

در طول زمان، تعاریف متفاوتی برای «معماری نرم‌افزار» ارائه شده است. در این بخش از کلاس، به ارائه تعاریف و نگاه‌های متفاوت در مورد «معماری نرم‌افزار» می‌پردازیم، تغییرات آن‌ها را در طول زمان بررسی می‌کنیم و نهایتاً سعی می‌کنیم، تعریفی جامع، دقیق و شفاف از معماری نرم‌افزار ارائه کنیم. سپس به بررسی نقش، کارکرد، ابعاد و حوزه‌های تاثیر معماری نرم‌افزار می‌پردازیم.

  • واژه معماری در Context های مختلف
  • معماری نرم‌افزار (Software Architecture) چیست؟
  • تعریف ماهیت، نقش و کارکرد «معماری نرم‌افزار» و تغییرات آن در طول زمان در جامعه
  • تفاوت و ارتباط «طراحی» و «معماری» نرم‌افزار
  • نقش، کارکرد و اهمیت معماری نرم‌افزار
  • ابعاد، اجزا و مشخصه‌های معماری نرم‌افزار
  • بررسی حوزه‌های تاثیر معماری نرم‌افزار (فنی، سازمانی/انسانی/تیمی، محصول/کسب‌وکار/تجارت)
۲. نقش و اهمیت معماری نرم‌افزار

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

زاویه فنی
  • فعال‌سازی یا بازدارندگی مشخصه‌های کیفی
  • تغییرات و تکامل نرم‌افزار در طول زمان
  • تاثیر تصمیمات معماری بر Constraint ها در پیاده‌سازی
  • تاثیر تصمیمات معماری بر نحوه طراحی (Incremental, Iterative, ...)
  • تاثیر معماری و مستندات آن بر درک سیستم در تیم فنی
زاویه سازمانی، تیمی و انسانی
  • نگاهی بر قانون Conway و تاثیر ساختارهای ارتباطی سازمان بر معماری نرم‌افزار
  • تغییر و تکامل تیم‌ها و سازمان در راستای معماری مورد نیاز (The Reverse Conway Maneuver)
  • تاثیر معماری نرم‌افزار بر سرعت حرکت تیم‌ها
  • نقش معماری و مستندات آن برای تعامل با Stakeholder ها
زاویه محصول، کسب‌وکار و تجارت
  • ابعاد تاثیرات اقتصادی معماری نرم‌افزار
  • اهمیت درک درست Value Chain و ارتباط آن با معماری
۳. مبانی Architectural Design

معمار، با در نظر گرفتن تمام فاکتورهای موجود (اعم از تیم، پروژه، تکنولوژی، مارکت و ...) Business Driver ها را درک می‌کند و آن‌ها را تبدیل به دغدغه‌های معماری می‌کند. این کار بدون مجهز بودن به تفکر معماری (Architectural Thinking) و بعد از آن دانستن اصول و مفاهیم Architectural Design، میسر نیست. این بخش از کلاس، به Architectural Design می‌پردازد. آن را تعریف می‌کند و ابعاد، اصول و حوزه‌های مختلف آن را بررسی می‌کند.

Architectural Drivers
  • Design Goal
  • Quality Attributes
  • Primary Functionality
  • Concerns
  • Constraints
مفاهیم اولیه در Architectural Design
  • View / Paradigm
  • Functionality
  • Elements
  • Structures
  • Responsibilities
  • Relations
  • Interactions
  • Interfaces
  • Constraints
راه‌حل‌های طبقه‌بندی‌شده در معماری نرم‌افزار
  • تاکتیک‌ها (Tactics) در معماری نرم‌افزار
  • مفاهیم الگو (Pattern) و سبک (Style) و تعاریف متفاوت آن‌ها در طول زمان
  • الگوهای معماری (Architectural Patterns)
  • سبک‌های معماری (Architectural Styles)
  • مفهوم، نقش و جایگاه Architectural Design
  • مفهوم Architectural Thinking و ابعاد متفاوت آن
  • درک مفهوم Trade-off
  • مطالعه اصول طراحی (مانند Modularization، Abstraction و ...)
  • آشنایی با متدهای طراحی مختلف در معماری نرم‌افزار (مانند ADD و ...)
۴. تحلیل، نقد و ارزیابی معماری نرم‌افزار

«آیا نرم‌افزاری که با این تصمیمات معماری توسعه داده شود، به اهداف کسب‌وکار می‌رسد؟» این سوال شاید کلیدی‌ترین و اساسی‌ترین سوالی باشد که یک معمار نرم‌افزار باید از خود بپرسد. در پاسخ به این سوال، معمار باید بتواند تصمیمات معماری را از زوایا و ابعاد مختلف، تحلیل، بررسی، نقد و ارزیابی کند. Trade-Off های تصمیمات را به دقت تحلیل کند و تاثیرات تصمیمات را جمع‌آوری و مطالعه کند. در این بخش از کلاس، به این موضوع می‌پردازیم که چطور می‌توان معماری را (در تمام ابعاد) تحلیل، نقد و ارزیابی کرد تا بتوان حجم تصمیمات اشتباه را کاهش داد و یا از وقوع مشکلات و یا حادتر شدن مشکلات جلوگیری کرد.

فاکتورهای قابل بررسی در ارزیابی معماری
  • Trade-off ها به همراه استدلال‌ها و تحلیل‌های آن‌ها
  • تصمیمات طراحی
  • کیفیت خروجی از طریق Design Evaluation یا Code Inspection
  • Fitness Function ها، Constraint ها و قوانین
  • ساختار تیم‌ها
رویکردهای متفاوت برای تحلیل و ارزیابی معماری
  • رویکردهای مبتنی بر تصمیم (Decision-Centric)
  • رویکردهای مبتنی بر سناریو مانند Architecture Trade-off Analysis Method (ATAM)
  • رویکردهای مبتنی بر سوالات کلیدی (Key-Questions)
  • تحلیل، بررسی و ارزیابی بر اساس مشخصه‌های کیفی
  • تحلیل، بازبینی و ارزیابی مستمر معماری در طول عمر پروژه
۵. فرآیند و راهبرد معماری نرم‌افزار

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

تصمیم‌گیری و تصمیم‌سازی در چرخه توسعه
  • تعریف Design Decision
  • فرآیند تصمیم‌سازی و تصمیم‌گیری
  • شناسایی عوامل موثر بر تصمیم‌ها
  • نحوه شناسایی ریسک‌ها، مشکلات و مسائل
  • آنالیزهای متفاوت برای شناسایی ریسک
  • تحلیل، آنالیز و مطالعه گزینه‌ها و تاثیر تصمیمات
  • تبیین پروسه Architectural Decision Making
  • مستندسازی تصمیمات معماری با Architectural Decision Records
  • مفهوم RFC (Request for Comments)
  • Architectural Design در چرخه توسعه نرم‌افزار
  • نقش، کاربرد و کارکرد تحلیل (Analyze) در معماری نرم‌افزار
  • تکنیک‌های تحلیل در معماری نرم‌افزار
  • تعریف، اعمال و بازبینی Constraint ها در سطوح مختلف طراحی
  • مستندسازی و انتقال دانش معماری
  • فرآیند ارزیابی معماری نرم‌افزار
  • آشنایی با Continuous Architecture و اصول آن
  • نگاه Evolutionary Architecture
۶. دغدغه‌ها و مشخصه‌های کیفی معماری نرم‌افزار

معماری نرم‌افزار در ابعاد مختلفی ارزیابی می‌شود، که یکی از مهم‌ترین این ابعاد، بُعد کیفیت و ویژگی‌های معماری نرم‌افزار است. عوامل زیادی در کیفیت معماری تاثیر دارند و تقریباً هر تصمیم کلانی از سمت معمار، این مشخصه‌ها را تحت تاثیر قرار می‌دهد. این مشخصه‌های کیفی همانند Functionality و کارکرد صحیح، در آینده نرم‌افزار تاثیرگذار هستند و این تاثیر می‌تواند در ابعاد متفاوت باشد.

ابعاد تاثیر مشخصه‌های کیفی
  • تکنیکال و فنی: بسیاری از سیستم‌های نرم‌افزاری، به خاطر هزینه‌ها و مشکلات زیاد در نگهداری، تست و پشتیبانی، بازنویسی می‌شوند.
  • بعد تجاری: بسیاری از نرم‌افزارها به خاطر کیفیت پایین معماری، موقعیت‌های بازار را از دست می‌دهند. برای مثال شکنندگی و یا وابستگی زیاد در معماری، باعث کندی سرعت تیم جهت ارائه نرم‌افزار می‌شود.
  • سازمانی و انسانی: بسیاری از تیم‌ها یا سازمان‌های نرم‌افزاری، به دلیل مشکل در معماری نرم‌افزار، دچار اختلال می‌شوند. برای مثال عدم مرزبندی درست و تفکیک اجزاء در معماری نرم‌افزار، باعث وابستگی فرآیندی تیم‌ها به یکدیگر می‌شود.
سوالات راهبردی
  • چگونه می‌توان فهمید که به چه مشخصه‌های کیفی و تا چه حدی نیاز داریم؟
  • نیاز به مشخصه‌های کیفی را (به Stakeholder ها، به بقیه اعضای تیم و ...) چطور تشریح و ابراز کنیم؟
  • معماری نرم‌افزار چگونه نیاز به این مشخصه‌های کیفی را پاسخ می‌دهد؟
  • فرآیند، زمان و نحوه تصمیم‌گیری در مورد این مشخصه‌های کیفی به چه شکل می‌باشد؟
  • تعریف کیفیت و مشخصه‌های کیفی
  • بررسی اجمالی و طبقه‌بندی مشخصه‌های کیفی
  • تعریف Fitness Function و ارتباط آن با ویژگی‌های کیفی
  • ابعاد مختلف Fitness Function ها و تعریف Systemwide Fitness Function
  • بررسی برخی نمونه‌های رایج Fitness Function ها
  • مطالعه طبقه‌بندی انواع Fitness Function
  • اصول Fitness Function ها (Identify Early, Review Frequently, ...)
  • مسائل اساسی حوزه ویژگی‌های کیفی (نحوه تست/اندازه‌گیری، ارتباط با مشکلات، تاثیر بر یکدیگر، پارادایم‌های متفاوت)
  • مفهوم Quality Attribute Scenarios و اجزای آن
  • راه‌های رسیدن به مشخصه‌های کیفی (Patterns, Tactics, ...)
  • برای هر مشخصه کیفی: بررسی الگوها، تاکتیک‌ها، سناریوها و Trade-off های مرتبط
کلمات کلیدی
Availability Integrability Deployability Modifiability / Adaptability / Extendability / Extensibility / Flexibility Scalability Mobility / Portability Performance / Efficiency Security / Safety Testability Usability Resiliency / Fault Tolerance / Reliability / Recoverability Reusability
۷. نقش معمار نرم‌افزار

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

هسته مهارت‌های معماری
  • مهارتِ دانش‌محور
  • عملگرایی و تاثیر
  • راهبری و پیشبرد
  • تعریف نقش معمار نرم‌افزار
  • تعاریف نگاه‌های مختلف در طول زمان به نقش معمار
  • حوزه‌های وظایف معمار نرم‌افزار
  • حوزه‌های خلق ارزش معمار نرم‌افزار
  • مهارت‌ها و دانش مورد نیاز معمار نرم‌افزار
  • Career و آینده شغلی معماران نرم‌افزار
کلمات کلیدی
Developers Tech Leads Project Managers Head / Director / VP of Engineering CTO Product Owners / Managers
Enterprise Architect Solution Architect Software Architect Chief / Lead Software Architect Application Architect

هنوز سوالی داری؟

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

سوالات متداول تماس با من