🎁 50% تخفیف نوروزی تمامی دوره های آموزشی 🎁
دوره آموزش معماری نرم افزار (Software Architecture) یک دوره جامع است که دانشجو در آن با اصول طراحی شی گراء، Domain Driven Design، الگوهای طراحی، تفکر DDD ، الگوی CQRS و همچنین Evevnt Sourcing آشنا می گردد.

دوره آموزش معماری نرم افزار

  • طول دوره: 48 ساعت
  • مدرس: مهندس رضا ارجمند
  • تاریخ شروع: 1403/10/27
  • ساعت برگزاری: پنجشنبه ها ساعت 17 تا 21
  • مبلغ دوره: 8,500,000 تومان

درباره دوره

در این دوره دانشجو با اصول طراحی شی گراء آشنا شده و می تواند کلاس های استاندارد، قابل تست و قابل نگهداری طراحی کند. همچنین با تفکر DDD آشنا شده و میتواند در پروژه های خود از این رویکرد و همچنین تلفیق آن با الگوی CQRS برای توسعه ی نرم افزار استفاده نماید.

سرفصل دوره آموزشی

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

در طول زمان، تعاریف مختلفی برای معماری نرم افزار (Software Architecture) و معمار نرم افزار بیان شده است. معماری نرم افزار، مجموعه ای از روش ها و اصول در طراحی ساختار سیستم های نرم افزاری است، که نحوه تعامل بخش های مختلف سیستم با یکدیگر را مشخص می کند. معمار نرم افزار به فردی اطلاق می شود که مسئول طراحی بنیادین سیستم های نرم افزاری است. این نقش فراتر از برنامه نویسی ساده است و شامل تصمیم گیری های مهم در مورد ساختار کلی و رویکردهای فنی برای یک پروژه نرم افزاری می شود. معماران نرم افزار باید دیدگاهی جامع نسبت به نیازهای کسب وکار و محدودیت های فنی داشته باشند و راه حل هایی را طراحی کنند که هم به لحاظ فنی قابل اجرا و هم منطبق بر اهداف تجاری باشند. در مقابل، معماری نرم افزار به مجموعه ای از اصول و روش هایی اشاره دارد که در طراحی و ساختاردهی سیستم های نرم افزاری به کار می روند. این مفهوم، اساسی ترین بخش های یک سیستم نرم افزاری را شامل می شود و شیوه ی تعامل این بخش ها با یکدیگر را تعریف می کند. این دوره به شما کمک می کند تا با مفاهیم اساسی و پیچیدگی های معماری نرم افزار آشنا شوید و مهارت های لازم برای طراحی و پیاده سازی سیستم های نرم افزاری کارآمد را کسب کنید

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

نقش و اهمیت معماری نرم افزار

گام اول در یادگیری اصول معماری، درک عمیق نقش، اهمیت و کارکرد معماری است.

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

مبانی Architectural Design

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

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

تحلیل، نقد و ارزیابی معماری نرم افزار

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

فرآیند و راهبرد معماری نرم افزار

معماری نرم افزار، فعالیتی محدود به یک بخش خاص از پروژه نیست، معماری نرم افزار از شروع تا پایان پروژه ادامه دارد.

  • Architectural Design در چرخه توسعه نرم افزار
  • نقش و کارکرد تحلیل در معماری نرم افزار
  • تکنیک های Analyz در معماری نرم افزار
  • تصمیم گیری و تصمیم سازی در چرخه توسعه
    • تعریف Design Decision
    • فرآیند تصمیم سازی و تصمیم گیری
    • شناسایی عوامل موثر بر تصمیم ها
    • نحوه شناسایی ریسک ها، مشکلات و مسائل
    • آنالیزهای متفاوت برای شناسایی ریسک
    • تحلیل، آنالیز و مطالعه گزینه ها و تاثیر تصمیمات
    • تبیین پروسه Architectural Decision Making
    • مستندسازی تصمیمات معماری با Architectural Decision Records
    • مفهوم RFC (Request for comments)
  • تعریف، اعمال و بازبینی 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, ...)

سپس مشخصه های کیفی را تعریف می کنیم، عوامل تاثیرگذار بر روی آن ها را عنوان می کنیم و ارتباط و تاثیر آن ها بر روی یکدیگر را بررسی می کنیم :

  • Availability
  • Integrability
  • Deployability
  • Modifiability / Adaptability / Extendability / Extensibility / Flexibility
  • Scalability
  • Mobility / Portability
  • Performance / Efficiency
  • Security / Safety
  • Testability
  • Usability
  • Resiliency / Fault Tolerance / Reliability / Recoverability
  • Reusability

سپس برای هر کدام از این مشخصه های کیفی، الگوها، تاکتیک ها، سناریوها و Trade-off ها را مطالعه می کنیم.

نقش معمار نرم افزار

  • تعریف نقش معمار نرم افزار
  • تعاریف نگاه های مختلف در طول زمان به نقش معمار
  • حوزه های وظایف معمار نرم افزار
  • حوزه های خلق ارزش معمار نرم افزار
  • هسته مهارت های معماری
    • مهارتِ دانش محور
    • عملگرایی و تاثیر
    • راهبری و پیشبرد
  • مهارت ها و دانش مورد نیاز معمار نرم افزار
  • تفاوت ها، شباهت ها و ارتباطات نقش معمار با نقش های دیگر در تیم
    • 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 انواع معمار، تفاوت ها و شباهت ها

پیش نیاز دوره

با توجه به تخصصی بودن دوره آموزشی معماری نرم افزارهای Enterprise در دات نت مخاطبین می بایست حداقل 3 سال سابقه کار برنامه نویسی داشته باشند.