1-Chaos Engineering
مهندسان به صورت آگاهانه اختلالاتی را در سیستم ایجاد می کند تا رفتار آن را در شرایط غیرعادی ببینند. در واقع مهندسان این کار را می کنند را تا نقاط ضعف را قبل از وقوع مشکل شناسایی کنند.استفاده ازین روش به سازمان ها کمک میکند تا امادگی بیشتری برای مواجهه با خرابی داشته باشند تا از اختلالات عظیم جلوگیری کنند. مثلا سروری را خاموش میکنیم تا ببینیم سیستمی که داریم همچنان قادر به پاسخگویی و ارائه خدمات به کاربران هست یا خیر. در واقع مهندسی ای برای آزمایش زیر ساخت های خود که سبب افزایش پایداری و اطمینان پذیری سیستم می شود.
2-BFF (Backend For Frontend)
یک الگوی رابط کاربری در معماری نرم افزار هست که در آن برای هرنوع رابط کاربری یک بک اند جداگانه تعریف می شود. بک اند ایجاد شده بین UI و سرویس های اصلی سیستم قرار می گیرد.
سیستم هایی که نسخه های مختلفی دارند مثل وب سایت و اپلیکیشن موبایل با توجه به BFF هر کدام بک اند خاص خودشان را دارند که دیتاهای مورد نیاز همان پلتفرم را می گیرد و پردازش می کند.
این الگو مزایایی از قبیل افزایش سرعت و کارایی، کاهش پیچیدگی در فرانت اند و استقلال بیشتر تیم های توسعه دارد.
3-AI4SE
همانطور که از نامش پیداست استفاده از هوش مصنوعی در مهندسی نرم افزار است که هدف آن کمک به توسعه دهندگان برای تولید نرم افزار های با کیفیت تر در زمان کمتر است. فعالیت هایی مثل شناسایی خطا و رفع آن، تولید کد، انجام تست های نرم افزاری و تحلیل نیازمندی ها.
همچنین ابزار های هوش مصنوعی می توانند حجم زیادی از کد و دیتا را بررسی کنند و پیشنهاد هایی برای بهبود عملکرد و کیفیت نرم افزار ارائه دهند. همچنین هزینه های توسعه را نیز کاهش می دهد. به همین دلیل خیلی از سازمان ها و شرکت ها امروزه از هوش مصنوعی برای بهبود فرایند های توسعه و نگهداری نرم افزار استفاده می کنند.
4-SE4AI
دقیقا عکس AI4SE .
در واقع کاربرد و روش های مهندسی نرم افزار در توسعه سیستم های مبتنی بر هوش مصنوعی را در بر می گیرد. همانطور که برای تولید نرم افزار های معمولی از فرایند های مهندسی نرم افزار استفاده می شود، برای طراحی،توسعه،آزمایش و نگهداری سیستم های هوش مصنوعی نیز از این فرایند ها بهره می گیریم.چون هوش مصنوعی به دیتا و الگوریتم های پیچیده و همچنین مدل های یادگیری ماشین وابسته است، مدیریت آنها بدون استفاده مهندسی نرم افزار بسیار دشوار خواهد بود. در واقع با استفاده از مهندسی نرم افزار این اطمینان به وجود می آید که سیستم های هوش مصنوعی قابل اعتماد و پایدار و با کیفیت است.
5-MLOps
مجموعه ای از ابزارها و روش ها و فرایندها برای خودکارسازی چرخه عمر مدل های یادگیری ماشین است که هدف اصلی آن استقرار و نگهداری مدل ها است. این الگو شکافی که بین توسعه و عملیات وجود دارد را پر می کند و ضمانت میکند که مدل ها قوی، مقیاس پذیر به ویژه مقیاس پذیری بالا و همسو با اهداف تجاری هستند. همچنین استفاده از MLOps باعث افزایش سرعت توسعه،کاهش خطاهای انسانی،بهبود کیفیت مدل ها و مدیریت بهتر سامانه های هوش مصنوعی می شود.
6-Infrastructure as Code (IaC)
روشی برای مدیریت و پیکربندی زیرساختهای فناوری اطلاعات از طریق کدنویسی است. در این رویکرد، به جای انجام تنظیمات و فرآیندهای دستی، زیرساختها مانند سرورها، سیستمعاملها، پایگاههای داده و فضای ذخیرهسازی با استفاده از فایلهای کد تعریف و مدیریت میشوند. در توسعه نرمافزار، ایجاد و نگهداری محیطهای مختلف بهصورت دستی میتواند زمانبر و همراه با خطا باشد، به ویژه زمانی که تعداد زیادی سرور و سرویس وجود داشته باشد. IaC این امکان را فراهم میکند که وضعیت مطلوب زیرساخت بهصورت کد مشخص شود و فرآیند ایجاد و بهروزرسانی آن به شکل خودکار انجام بگیرد.
7-API Gateway & Service Mesh
دو تا ابزار مهم در سیستم های نرم افزاری امروزی هستند که کمک می کنند تا ارتباط بین بخش های مختلف یک برنامه بهتر و امن تر انجام شود.
یعنی API Gateway مثل یک در ورودی اصلی برای یک برنامه است. وقتی کاربر میخواهد وارد سیستم شود یا زمانی که می خواهد از آن استفاده کند، درخواست او اول به API Gateway میرسد. این بخش درخواست را بررسی میکند، آن را به قسمت درست سیستم میفرستد و نتیجه را دوباره به کاربر برمیگرداند.
از طرفی Service Mesh برای ارتباط بین بخشهای داخلی برنامه استفاده میشود. یعنی وقتی چند سرویس مختلف در یک سیستم با هم کار میکنند، Service Mesh کمک میکند این ارتباطها درست، امن و قابل اعتماد باشد، بدون اینکه نیاز باشد برنامهنویسها تغییر زیادی در کد بدهند.
8-CQRS (Command Query Responsibility Segregation)
یک روش طراحی در برنامهنویسی است که کمک میکند کار با اطلاعات در یک سیستم سادهتر انجام شود. در این روش، کارها به دو بخش جدا تقسیم میشوند: یک بخش برای تغییر دادن اطلاعات و یک بخش برای خواندن اطلاعات. بخش Command یعنی قسمتهایی که اطلاعات را تغییر میدهند، مثل اضافه کردن یک محصول، ویرایش کردن آن یا حذف کردن آن. بخش Query فقط برای دیدن و خواندن اطلاعات استفاده میشود، مثل وقتی که کاربر لیست محصولات را مشاهده میکند. در سیستمهای معمولی، این دو کار با هم انجام میشوند، اما در CQRS این دو از هم جدا هستند تا هر کدام راحتتر و بهتر طراحی شوند. این کار باعث میشود سیستم سریعتر و قابل کنترلتر باشد.
9-Event-Driven Architecture (EDA)
یک روش طراحی نرمافزار است که در آن بخشهای مختلف یک سیستم با اتفاقها با هم ارتباط برقرار میکنند؛ مثلا ثبت سفارش. در این روش، هر بخش از سیستم مستقل کار میکند و لازم نیست مدام از بخشهای دیگر اطلاعات بگیرد. فقط وقتی یک اتفاق (رویداد) رخ میدهد، بخشهای مرتبط به صورت خودکار واکنش نشان میدهند. این باعث میشود سیستم سادهتر و قابل مدیریتتر باشد.مثلا وقتی که در یک فروشگاه اینترنتی کاربر سفارش ثبت میکند، یک اتفاق به نام «ثبت سفارش» ایجاد میشود. بعد از آن، چند بخش مختلف به این اتفاق واکنش نشان میدهند: بخش پرداخت هزینه را بررسی میکند، بخش انبار موجودی کالا را کم میکند و بخش پیامرسانی برای کاربر ایمیل یا پیام ارسال میکند. همه این کارها بدون اینکه مستقیم به هم وابسته باشند انجام میشود.
بنابراین در این نوع معماری سیستمها بر اساس اتفاقها کار میکنند، نه درخواستهای مستقیم، و همین باعث میشود سریعتر، انعطافپذیرتر و مناسب سیستمهای بزرگ باشند.
10-Serverless Architecture
معماری برای ساخت و اجرای نرمافزار است که در آن برنامهنویسان نیازی به مدیریت مستقیم سرورها ندارند. در این معماری، تمام کارهای مربوط به راهاندازی، نگهداری و مدیریت سرورها توسط ارائهدهندگان خدمات ابری انجام میشود و توسعهدهندگان میتوانند روی ساخت برنامه تمرکز کنند. برای مثال، اگر تعداد کاربران یک برنامه افزایش پیدا کند، سیستم به صورت خودکار منابع بیشتری در اختیار برنامه قرار میدهد. این ویژگی باعث میشود برنامهها راحتتر مدیریت شوند و هزینههای نگهداری زیرساخت کاهش پیدا کند. به همین دلیل، معماری Serverless در بسیاری از نرمافزارهای مدرن مورد استفاده قرار میگیرد.
11-API-first Approach
API-First Approach روشی در توسعه نرمافزار است که در آن ابتدا APIها طراحی میشوند و سپس برنامه بر اساس آنها ساخته میشود. در این رویکرد، توسعهدهندگان قبل از نوشتن کدهای اصلی، مشخص میکنند که بخشهای مختلف سیستم چگونه با یکدیگر ارتباط برقرار خواهند کرد. این کار باعث میشود نرم افزار از همان ابتدا برای ارتباط با سایر برنامهها و سرویسها آماده باشد. در روش API-First، تمرکز فقط روی ساخت یک برنامه نیست، تمرکز روی طراحی APIهایی است که بتوانند در بخشهای مختلف سازمان و برای کاربردهای مختلف مورد استفاده قرار می گیرند. به همین دلیل، API ها به عنوان یکی از مهمترین اجزای سیستم در نظر گرفته میشوند و پس از توسعه نیز بهطور مداوم نگهداری و بهبود داده میشوند.
12-Domain Driven Design
طراحی مبتنی بر دامنه برای توسعه نرمافزار است که به درک دقیق نیازها و فرایندهای یک کسبوکار تمرکز دارد. در این روش، قبل از نوشتن کد، دولوپر ها تلاش میکنند مفاهیم و قوانین اصلی حوزه کاری را به خوبی بشناسند و نرمافزار را بر همان اساس طراحی کنند.مثلا در سیستم فروش آنلاین مفاهیمی مثل مشتری،سفارش و پرداخت باید طبق آن فرایند های کسب و کار در نرم افزار پیاده سازی شوند.
13-Hexagonal architecture
معماری شش ضلعی که هدف آن جدا نگه داشتن منطق اصلی برنامه از بخش های خارجی مثل DB و UI و سرویس های دیگر است.در واقع در این نوع معماری هسته اصلی برنامه مستقل طراحی می شود و ارتباط آن با بخش های بیرونی به وسیله رابط های مشخص انجام می شود.
همچنین وابستگی بین بخشهای مختلف سیستم کاهش پیدا میکند و امکان تست کردن برنامه نیز بهتر فراهم میشود.به طور کلی این نوع معماری کمک می کند تا نرم افزار ساختار منظم تری داشته باشد و در برابر تغییرات با انعطاف بیشتری عمل کند.
14-Event Sourcing
یک الگوی طراحی نرمافزار که در آن به جای ذخیره کردن آخرین وضعیت دادهها، تمام تغییرات به صورت Event ذخیره میشوند. یعنی سیستم تاریخچه کامل اتفاقاتی که رخ داده است را نگه میدارد و در صورت نیاز میتواند با بررسی این رویدادها، وضعیت فعلی یا حتی وضعیت گذشته را بازسازی کند. از جمله مزیت های این الگو می توان به این مورد اشاره کرد که تمام تغییرات قابل ردیابی هستند و می توان متوجه شد که هر داده چگونه به وضعیت فعلی رسیده است. به همین دلیل Event Sourcing بیشتر در سیستمهای مالی، حسابداری و پروژههایی که ثبت تاریخچه اهمیت زیادی دارد استفاده میشود.
15-Low-code/No-code platforms
پلتفرمهای Low-Code و No-Code ابزارهایی هستند که به افراد کمک میکنند بدون نیاز به برنامهنویسی زیاد، نرمافزار و اپلیکیشن بسازند. در پلتفرمهای Low-Code بخشی از کار با ابزارهای گرافیکی انجام میشود، اما ممکن است برای امکانات پیشرفته به مقدار کمی کدنویسی نیاز باشد. در مقابل، پلتفرمهای No-Code به گونهای طراحی شدهاند که حتی افراد بدون دانش برنامهنویسی نیز بتوانند تنها با استفاده ازDrag & Drop برنامه ایجاد کنند.
16-Business Process Management Systems (BPMS)
مجموعه ای از نرم افزارها که به سازمان ها کمک می کند تا فرایند های کاری خود را طراحی و مدیریت کنند. این سیستم ها به کارها سرعت می بخشد و همچنین به کاهش هزینه ها و بهبود عملکرد سازمان کمک می کند.
BPMS روی فرایندهایی تمرکز میکند که به طور مداوم در سازمان تکرار میشوند. برای مثال، فرایند تأیید مرخصی کارکنان میتواند با استفاده از BPMS مدیریت و خودکارسازی شود.
بنابراین این سیستمها به سازمانها کمک میکنند مراحل مختلف یک فرایند را بهتر کنترل کنند، مشکلات را شناسایی کنند.
17-Message Queue (such as Kafka and RabbitMQ)
Message Queue برای برقراری ارتباط بین بخشهای مختلف یک سیستم است. در این روش، یک بخش از برنامه پیام یا درخواست خود را در یک صف قرار میدهد و بخش دیگر هر زمان که آماده باشد آن پیام را دریافت و پردازش میکند. این کار باعث میشود اجزای سیستم وابستگی کمتری به یکدیگر داشته باشند و بتوانند مستقلتر عمل کنند. ابزارهایی مانند Kafka و RabbitMQ به افزایش سرعت، پایداری و مقیاسپذیری سیستمهای نرمافزاری کمک میکنند.
18- Containers (eg., Docker) and Container orchestration (e.g., Kubernetes)
Docker و Kubernetes دو فناوری مهم در توسعه نرمافزارهای مدرن هستند که هر کدام وظیفه متفاوتی دارند. Docker ابزاری است که برنامه و تمام فایلهای موردنیاز آن را در قالب یک کانتینر بستهبندی میکند تا بتواند روی سیستمهای مختلف بدون مشکل اجرا شود. این موضوع باعث میشود توسعه و انتقال نرمافزار آسانتر شود. در مقابل، Kubernetes برای مدیریت تعداد زیادی کانتینر طراحی شده است. زمانی که یک برنامه شامل چندین سرویس و کانتینر باشد، Kubernetes به هماهنگی، کنترل و اجرای آنها کمک میکند. همچنین میتواند در صورت افزایش تعداد کاربران، کانتینرهای بیشتری ایجاد کند و منابع را به شکل بهتری مدیریت کند. به طور کلی، Docker برای ساخت و اجرای کانتینرها و Kubernetes برای مدیریت آنها در مقیاس بزرگ استفاده میشود.
19- Multi-Tenancy Architecture
Multi-Tenant Architecture روشی برای طراحی نرمافزار است که در آن یک نسخه از برنامه به چندین مشتری یا سازمان مختلف خدمات میدهد. در این مدل، همه کاربران از یک نرمافزار مشترک استفاده میکنند، اما اطلاعات هر کاربر یا سازمان به صورت جداگانه نگهداری میشود و دیگران به آن دسترسی ندارند. مثلا بسیاری از نرمافزارهای آنلاین و سرویسهای ابری از این معماری استفاده میکنند. در این حالت، چند شرکت میتوانند همزمان از یک سیستم استفاده کنند، بدون اینکه اطلاعاتشان با هم قاطی شود. به نظرم مهمترین مزیت این معماری کاهش هزینههای نگهداری و بهروزرسانی است، چون فقط یک نسخه از نرمافزار مدیریت میشود.
20- Data Migration
Data Migrationیا مهاجرت دادهها به فرایند انتقال اطلاعات از یک سیستم، پایگاه داده یا محیط ذخیرهسازی به یک سیستم می گویند. این کار معمولاً زمانی انجام میشود که یک سازمان بخواهد نرمافزار، سرور یا پایگاه داده خود را ارتقا دهد یا به فناوری جدیدی منتقل شود.
اگر یک شرکت از یک سیستم قدیمی به یک سیستم جدید مهاجرت کند، لازم است که اطلاعات مشتریان، سفارشها و سایر دادهها نیز به محیط جدید منتقل شوند. در این فرایند باید دقت زیادی وجود داشته باشد تا اطلاعات از بین نروند یا دچار خطا نشوند. مهاجرت دادهها یکی از مراحل مهم در تغییر و بهروزرسانی سیستمهای نرمافزاری است، زیرا موفقیت سیستم جدید تا حد زیادی به انتقال صحیح و کامل دادهها بستگی دارد.