1404/08/24
معماری نرم افزار یا تفکر سیستمی؟
تفاوت بنیادی بین معماری نرم افزار و تفکر سیستمی از یک منظر کاربردی آغاز میشود. اما واقعا چه تفاوتی بین معماری نرم افزار با تفکر سیستمی وجود دارد و درک این تفاوت چه فایده ای برای ما خواهد داشت؟
در یکی از پروژه های مهم شرکت که به محصولی استراتژیک ختم میشود، تیم توسعه با تیم محصول دچار یک مشکل اساسی شد. تیم توسعه معتقد بود جریان تولید محصول به دلیل فقدان تفکر سیستمی منحرف شده و ایرادات اساسی در پروژه وجود دارد. ادامه ی این اختلاف منجر به توقف موقت پروژه برای ارزیابی مشکل شد. آنچه از دید من بعنوان تک لید تیم توسعه رخ داده، حذف تفکر سیستمی و پرداختن جزئی به معماری نرم افزار در این محصول بود که به بهانه ی توسعه ی با متدولوژی اجایل اتفاق افتاد.
این موضوع بهانه ای شد برای نوشتن این مقاله. در واقع من معتقدم بخش بزرگی از تعارضات بین تیم های توسعه و محصول از عدم درک تفاوت های ذاتی بین معماری نرم افزار و تفکر سیستم است.
از منظر معماری نرم افزار، ساختار داخلی یک سیستم نرم افزاری اهمیت دارد. اینکه ماژولها، سرویسها، لایه ها و قراردادها بین بخش های مختلف چگونه با پیاده سازی میشوند.
درواقع هدف اصلی معماری نرم افزار این است که بتواند با نقاط مشخص تماس و قراردادهای واضح، رفتار سیستم در مواجهه با نیازهای کاربر، مقیاس پذیری، نگهداری، امنیت و کارایی را تضمین کند.
بنابراین وقتی به معماری نرم افزار نگاه میکنیم، معمولا سوالهایی در ذهن مطرح میشود: این ماژولها چه نقشی ایفا میکنند؟ دادهها چگونه در میان اجزا جریان پیدا میکنند؟ چه قراردادهایی برای ارتباط بین سرویسها تعریف شده است؟ چگونه میتوان در آینده با تغییرات کوچک، سیستم را با کمترین هزینه تغییر داد؟
اما در تفکر سیستمی دامنه ای گسترده تر وجود دارد که فراتر از مرزهای نرم افزار را شامل میشود. این رویکرد به تحلیل و طراحی کل سیستم و محیط آن نگاه میکند به ویژه در تعاملات میان اجزا، بازخوردها و پویایی بین فرآیندها و ذینفعان توجه میکند.
تفکر سیستمی بر این نکته تاکید دارد که هر جز هر فرآیند و هر فناوری در یک شبکه ی پیچیده قرار دارد و تغییر در یک نقطه میتواند اثرات غیرمستقیم و گاهی پنهان در سایر بخش ها ایجاد کند. بنابراین در تفکر سیستمی باید به همپوشانی اجزا و Dependency های متقابل نگاه کرد.
سوالات کلیدی که در تفکر سیستمی ایجاد میشود شامل این موارد است: هدف سیستم چیست؟ ورودیهای اصلی آن چه هستند و چه بازخوردهایی تولید میشوند؟ چه محدودیتهایی وجود دارد و چگونه میتوان به پایداری بلندمدت دست یافت؟ تغییر در یک بخش چگونه بر کل سیستم اثر میگذارد و چه همآهنگی با فرایندهای کسبوکار و ذینفعان وجود دارد؟
| در معماری نرم افزار (در دل سیستم) | در تفکر سیستمی (دیدگاهی کلان تر) |
|---|---|
| این ماژولها چه نقشی ایفا میکنند؟ | هدف سیستم چیست؟ |
| داده ها چگونه در میان اجزا جریان پیدا میکنند؟ | ورودی های اصلی آن چه هستند و چه بازخوردهایی تولید میشوند؟ |
| چه قراردادهایی برای ارتباط بین سرویسها تعریف شده است؟ | چه محدودیتهایی وجود دارد و چگونه میتوان به پایداری بلندمدت دست یافت؟ |
| چگونه میتوان در آینده با تغییرات کوچک، سیستم را با کمترین هزینه تغییر داد؟ | غییر در یک بخش چگونه بر کل سیستم اثر میگذارد و چه هماهنگی با فرایندهای کسبوکار و ذینفعان وجود دارد؟ |
از نظر دامنه، معماری نرمافزار محدود به ساختار و رفتار نرمافزار است و با تصمیمهای فنی مربوط به طراحی، پیادهسازی و نگهداری سروکار دارد. تفکر سیستمی اما کل سیستم و محیط آن را میبیند؛ از ابعاد فنی تا فرایندهای کسبوکار، دادهها، فناوریهای دیگر و محدودیتهای محیطی و اقتصادی را در یک چارچوب یکپارچه مطالعه میکند.
از منظر ذینفعان به چه صورت است؟
در رابطه با ارتباط با ذینفعان، معماری نرمافزار عمدتاً با تیمهای فنی، مدیران فناوری و سایر افراد دخیل در توسعه نرمافزار در تعامل است و غالباً در جلسات طراحی و تصمیمگیری درباره فناوریها و معماری لازم بهکار گرفته میشود. تفکر سیستمی اما با نقـشها و فرآیندهای کسبوکار، کاربران نهایی، تأمینکنندگان، سازمانهای مربوط به محیط قانونی و اقتصادی و حتی جامعهی کاربران سروکار دارد. به این معنا، تفکر سیستمی دیدی از سیستم است که با فشارها و محدودیتهای محیطی و اقتصادی نیز سروکار دارد و به پایداری بلندمدت و همزمانی میان اجزا و فرایندها اهمیت میدهد.
جمع بندی
رویکرد عملی به ترکیب این دو نگاه منجر میشود تا بتوان سیستمهای پیچیده را بهروایت دقیقتری طراحی کرد. از یکسو باید معماری نرمافزار را با استفاده از الگوهای معماری مناسب، APIهای واضح، قراردادهای بین سرویسها و نگرشهای مدرن مانند میکروسرویس یا رویکرد سرویسگرایی بهگونهای طراحی کرد که اجزای نرمافزار با هم به خوبی کار کنند و قابلیت نگهداری و گسترشپذیری را فراهم کنند. از سوی دیگر باید با تفکر سیستمی به تحلیل الزامات کسبوکار، فرایندها، دادهها و محدودیتهای محیطی پرداخت تا بتوان به یک راهحل جامع دست یافت که نه تنها از منظر فنی کارایی خوبی داشته باشد بلکه با محیط کسبوکار و ذینفعان همسویی کامل داشته باشد.
پایان- شنبه 1404/08/24
پیوست
ذینفع کیست؟
کاربران نهایی، مالکین محصول/بنگاه، تیمهای توسعه و فنی، تیمهای عملیات و پشتیبانی، ذینفعان سازمانی/سایر واحدها، تامینکنندگان و شرکای فناوری، کاربران خارجی و جامعه، نهادهای قانونی و استاندارد.
محمد مهدوی کیا