امروزه، سیستمهای نرمافزاری به عنوان یکی از پیچیدهترین ساختارهایی شناخته میشوند که تاکنون توسط انسان ساخته شدهاند. سیستمهایی که در کنار تمام پیچیدگیهای فنی، باید از نظر تجاری هم موفق باشند و برای کسبوکار ارزش خلق کنند. در عین حال، تیمها و سازمانهای توسعهدهنده نرم-افزار، باید موضوعات فرهنگی و تیمی را هم در طراحی این سیستمها در نظر بگیرند. درهمتنیدگی و پیچیدگی طراحی چنین سیستمهایی، میتواند منجر به تولید نرمافزاری نارکارآمد (از لحاظ رفتاری و کیفی) و در نتیجه افزایش شدید هزینههای توسعه و نگهداری و یا حتی شکست پروژه شود.
معماری نرمافزار را میتوان یکی از کلیدیترین حوزههای طراحی نرمافزار دانست. معماری نرمافزار، نه یک حوزه صرفا فنی، بلکه یک حوزه کاملا راهبردی و استراتژیک است. تصمیمات حوزه معماری نرمافزار، تصمیمات کلیدی و فنی-استراتژیک هستند که میتوانند در موفقیت و یا عدم موفقیت پروژه نقش کلیدی ایفا کنند.
در طول این دوره، موضوعات مختلفی از جمله تعریف معماری نرمافزار، نقش و اهمیت آن، ابعاد مختلف تاثیر معماری نرمافزار، و حوزه Architectural Design را بررسی خواهیم کرد. همچنین به بررسی معماری نرمافزار، از بعد کیفی میپردازیم و مولفهها و مشخصههای کیفی را به تفکیک بررسی میکنیم. سپس به سراغ چرخه تولید نرمافزار میرویم و نقش و تاثیر معماری و همینطور وظایف و کارکرد معمار را بررسی میکنیم.
این دوره، اولین دوره در «سری دوره معماری نرم افزار» است و بر مفاهیم اساسی و بنیادین تمرکز دارد.
در طول زمان، تعاریف متفاوتی برای «معماری نرم افزار» ارائه شده است. در این بخش از کلاس، به ارائه تعاریف و نگاههای متفاوت در مورد «معماری نرم افزار» میپردازیم، تغییرات آنها را در طول زمان بررسی میکنیم و نهایتا سعی میکنیم، تعریفی جامع، دقیق و شفاف از معماری نرم افزار ارائه کنیم. سپس به بررسی نقش، کارکرد، ابعاد و حوزه های تاثیر معماری نرمافزار میپردازیم.
گام اول در یادگیری اصول معماری، درک عمیق نقش، اهمیت و کارکرد معماری است. در این بخش از کلاس، به بررسی نقش و اهمیت معماری نرمافزار، تاثیر آن بر حوزههای دیگر، و عوامل موثر بر آن میپردازیم.
معمار، با درنظر گرفتن تمام فاکتورهای موجود (اعم از تیم، پروژه، تکنولوژی، مارکت و ...) Business Driver ها را درک میکند آنها را تبدیل به دغدغههای معماری میکند. اینکار بدون مجهز بودن به تفکر معماری (Architectural Thinking) و بعد از آن دانستن اصول و مفاهیم Architectural Design، میسر نیست. این بخش از کلاس، به Architectural Design میپردازد. آن را تعریف میکند و ابعاد، اصول و حوزههای مختلف آن را بررسی میکند.
«آیا نرم افزاری که با این تصمیمات معماری توسعه داده شود، به اهداف کسب و کار میرسد؟» . این سوال شاید کلیدیترین و اساسیترین سوالی باشد که یک معمار نرمافزار باید از خود بپرسد. در پاسخ به این سوال، معمار باید بتواند تصمیمات معماری را از زوایا و ابعاد مختلف، تحلیل، بررسی، نقد و ارزیابی کند. Trade-Off های تصمیمات را به دقت تحلیل کند و تاثیرات تصمیمات را جمع آوری و مطالعه کند. در این بخش از کلاس، به این موضوع می-پردازیم که چطور میتوان معماری را (در تمام ابعاد) تحلیل، نقد و ارزیابی کرد تا بتوان حجم تصمیمات اشتباه را کاهش داد و یا از وقوع مشکلات و یا حادتر شدن مشکلات جلوگیری کرد.
معماری نرمافزار، فعالیتی محدود به یک بخش خاصی از پروژه نیست، معماری نرمافزار از شروع تا پایان پروژه ادامه دارد. علیالخصوص در سالهای اخیر و با پررنگتر شدن مباحثی مثل Continuous Architecture، بکارگیری سیستماتیک معماری، جهت افزایش سرعت و کیفیت تولید و انتشار نرم افزار بسیار از قبل فراگیرتر شده است. در این بخش از کلاس، نقش معماری در چرخه تولید نرمافزار را بررسی میکنیم.
معماری نرم افزار در ابعاد مختلفی ارزیابی می شود، که یکی از مهمترین این ابعاد، بُعد کیفیت و ویژگی های معماری نرم افزار است. عوامل زیادی در کیفیت معماری تاثیر دارند و تقریبا هر تصمیم کلانی از سمت معمار، این مشخصه ها را تحت تاثیر قرار میدهد. این مشخصه های کیفی همانند Functionality و کارکرد صحیح، در آینده نرم افزار تاثیرگذار هستند و این تاثیر میتواند در ابعاد متفاوت باشد:
1. تکنیکال و فنی: بسیاری از سیستم های نرم افزاری، به خاطر هزینه ها و مشکلات زیاد در نگهداری، تست و پشتیبانی، بازنویسی می شوند.
2. بعد تجاری: بسیاری از نرم افزارها به خاطر کیفیت پایین معماری، موقعیت های بازار را از دست می دهند. برای مثال شکنندگی و یا وابستگی زیاد در معماری، باعث کندی سرعت تیم جهت ارائه نرم افزار می شود.
3. سازمانی و انسانی: بسیاری از تیم ها یا سازمان های نرم افزاری، به دلیل مشکل در معماری نرم افزار، دچار اختلال می شوند. برای مثال عدم مرزبندی درست و تفکیک اجزاء در معماری نرم افزار، باعث وابستگی فرآیندی تیم ها به یکدیگر می شود.
در این بخش، به بررسی ابعاد کیفی و مشخصه های معماری نرم افزار میپردازیم. ابتدا به سوالات راهبردی زیر پاسخ میدهیم:
1. چگونه میتوان فهمید که به چه مشخصه های کیفی و تا چه حدی نیاز داریم؟
2. نیاز به مشخصه های کیفی را (به Stakeholder ها، به بقیه اعضای تیم و ...) چطور تشریح و ابراز کنیم؟
3. معماری نرم افزار چگونه نیاز به این مشخصه های کیفی را پاسخ می دهد؟
4. فرآیند، زمان و نحوه تصمیم گیری در مورد این مشخصه های کیفی به چه شکل می باشد؟
و به بررسی مفاهیم زیر میپردازیم:
سپس مشخصههای کیفی را تعریف میکنیم، عوامل موثر بر روی آنها را عنوان میکنیم و ارتباط و تاثیر آنها بر روی یکدیگر را بررسی میکنیم :
سپس برای هرکدام از این مشخصه های کیفی، الگوها، تاکتیک ها، سناریوها و Trade-off ها را مطالعه میکنیم.
معمار نرمافزار نقش کلیدی در تیم ایفا میکند. با تغییر اقتصاد دیجیتال، قوانین کسبوکار و تجارت برای بسیاری از شرکتهای سنتی تغییر کرده و نقش معماران نیز به طور اساسی دستخوش تغییر شده است. در این بخش از کلاس، به نقش، وظایف و حوزههای خلق ارزش معمار میپردازیم. لازم به ذکر است، در این سری آموزشی، دورههایی تدوین شده است که به طور تخصصی به مهارتهای فنی و غیرفنی معمار میپردازد (لینک به زودی).