در توسعهی یک نرمافزار ذینفعان فنی و غیرفنی زیادی وجود دارند که باید برای تعامل مناسب و درست، درک یکسانی از نرمافزار در حال توسعهی خود داشته باشند.
بدیهی است که میزان دانش فنی برنامهنویس، تستر، مدیر محصول، تیم بازاریابی، سهامدار و مدیران و همچنین انتظارات آن و نیازهای آنها از برنامه متفاوت است، در هر لحظه و مرحله از توسعهی نیز برخی نیازمندیها توسعه یافته، برخی در حال تست و برخی در حال طراحی اولیه و یا مستند سازی هستند.
شمای فنی و نمودارهای برنامه معمولا توسط معمار نرمافزار یا دیگر افراد فنی تیم طراحی و ترسیم میشود اما این طرحها معمولا به قدری پیچیپده هستند که تنها خود معمار نرمافزار و یا برخی افراد فنی قادر به درک کامل آن هستند.
همانگونه که تقریبا تمام برنامهنویسان و افرادی که دانشجوی رشتههای کامپیوتر بوده و درس مهندسی نرمافزار را گذراندهاند، میدانند یکی از بهترین روشها برای ساده سازی انتزاعی از نرمافزار، استفاده از شکل،نمودار و تصاویر است. معروف ترین این موارد نیز نمودار UML (Unified Modeling Language) است که انواع مختلفی داشته و در عین سادگی اطلاعات مفیدی از کلاسها، ماژولها، توابع، اشیا، بستهها و ... را به صورتی قابل فهم برای تیمهای فنی و غیرفنی فراهم میسازد که امروزه که اکثر شرکتها و تیمها از روشهای چابک برای فرآیند تولید نرمافزار خود استفاده میکنند و عملا فرصت زیادی برای آنکه تیمهای فنی و غیرفنی نیازمندیهای خود را توضیح دهند وجود ندارد این روشهای نموداری بسیار پرکاربرد و مفید هستند.
اما هر نمودار UML به خودی خود دارای سطح مشخصی از انتزاع بوده و برای تمامی افراد فنی و غیرفنی مناسب نیست. نمودارهایی مناسب هستند که مانند نقشه ی گوگل مپ که با کوچک نمایی و بزرگ نمایی و افزودن و برداشتن لایهها بتوان یک قسمت مشخص را در سطوح مختلفی از انتزاع و جزییات مشاهده کرد تا برای همهی افراد با نیازمندیها و دانش مختلف قابل درک باشد.
اما یکی دیگر از روشهای توصیف معماری نرمافزار استفاده از روش C4 است که توسط سایمون براون مطرح شده و نسبت به نمودار UML دارای notation های کمتری است. C4 قابلیت توصیف نرمافزار در سطحهای مختلف انتزاع را دارد. این سطوح از بالاترین سطح انتزاع به پایین ترین سطح (کد) عبارتند از:
Context, Containers, Components, Code
که چون ابتدای هر ۴ کلمه دارای C است، سایمون این روش را C4 نام گذاری کرده است.
این سطوح مختلف میتوانند در زمانهای لازم برای توضیح موارد مختلف به افراد فنی و غیرفنی استفاده شوند.
نمودار context نرمافزار را به صورت جعبهای در وسط که در حال تعامل با کاربران و سایر سیستمهایی که خارج از مرز و محدوده کنترل ماست نشان میدهد. این نمودار برای تمامی افراد فنی و غیرفنی و در تمامی مراحل توسعه مناسب و مفید است. رنگ آبی نشان دهندهی سیستمهای در حال توسعه و رنگ خاکستری سیستمهای آماده را نشان میدهند.
نمودار container نشان دهندهی یک برنامهی قابل اجرا به تنهایی است که انتزاع سطح بالایی از کد و فناوریهای به کار رفته را نشان میدهد و مناسب افراد فنی داخل و خارج تیم است.
نمودار component نشان دهندهی مولفههای سازندهی container است که برای افراد فنی داخل تیم مفید است.
نمودار code که قابل تولید به صورت خودکار است معمولا به شکل نمودارهای UMLمانند نمودار کلاس ساخته میشود.این نمودار تنها برای توسعهدهندکان همان بخش مفید است.
از مزایای روش C4 میتوان موارد زیر را برشمرد:
قابل فهمتر بودن نمودارها، قابلیت تغییر سطح انتزاع، کاهش شکاف طراحی و پیادهسازی
نمودارهای C4 را میتوان به کمک draw.io و gliffy.com و Microsoft Visio و Structurizr
این نمودارها برای قابل درکتر بودن توسط همه بهتر است از نوتیشنهای UML هم استفاده کرده و دارای عنوان مناسب، شرحی کوتاه و خطوط یک طرفه برچسب دار باشند.