**نقشه نرم‌افزاری** (به انگلیسی: Software map) اطلاعات استاتیک، پویا و تکاملی سیستم‌های نرم‌افزاری وفرایندهای توسعه نرم‌افزار آن‌ها را با استفاده از تصویرسازی اطلاعات دوبعدی یاسه‌بعدی نمایش می‌دهد.

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

کاربردهای اصلی آن شامل تحلیل ریسک و نظارت بر کیفیت کد، فعالیت تیم، یا پیشرفت توسعه نرم‌افزار است و به‌طور کلی، بهبود اثربخشی مهندسی نرم‌افزار با توجهبه همه مصنوعات، فرایندها، و سهامداران در سراسر فرایند مهندسی نرم‌افزار و نگهدارینرم‌افزار است.

انگیزه و مفاهیم
---------------

نقشه‌های نرم‌افزاری(software map) در زمینه مهندسی نرم‌افزار بکار می‌رود:

پیچیده، پروژه‌های طولانی مدت توسعه نرم‌افزاری معمولاً با مشکلات زیادی برخورد می‌کنند مثل اصطکاک بین تکمیل ویژگی‌های سیستم و در همان زمان به دست آوردن درجه بالایی از کیفیت کد و کیفیت نرم‌افزار برای اطمینان از حفظ نرم‌افزار سیستم در آینده. به‌طور خاص، «حفظ سیستم‌های نرم‌افزاری پیچیده، هزینه‌بر است زیرا سازندگان بخش مهمی از زمان خود را با تلاش برای درک ساختار و رفتار سیستم صرف می‌کنند.» ایده کلیدی نقشه‌های نرم‌افزاری، مقابله با این چالش و مشکلات بهینه‌سازی با فراهم نمودن وسیله‌های ارتباطی تأثیرگذار برای بستن شکاف ارتباطی بین سهامداران مختلف و دامنه‌های اطلاعات در پروژه‌های توسعه نرم‌افزار و بدست آوردن دیدگاه در مفهوم تجسم اطلاعات است.

نقشه‌های نرم‌افزاری از تکنیک‌های نقشه نگاری دقیقی که به خوبی تعریف شده‌اند استفاده می‌کنند و از استعاره مدل شهر سه‌بعدی استفاده می‌کنند تا فضای اطلاعاتی پیچیده و انتزاعی را بیان کنند.

استعاره لازم است "چون که نرم‌افزار هیچ شکل فیزیکی ندارد، هیچ نقشه‌برداری طبیعی از نرم‌افزار به فضای دو بعدی وجود ندارد ." نقشه‌های نرم‌افزار نقشه‌هایی غیر فضایی هستند که باید داده‌های سلسله‌مراتب و ویژگی‌های آن را به یک نمایش فضایی تبدیل کند.

برنامه‌ها
---------

نقشه‌های نرم‌افزاری به‌طور کلی امکان ارتباطات قابل فهم و مؤثر در زمینه‌های خطرات و هزینه‌های پروژه‌های توسعه نرم‌افزار را به سهامداران مختلف مانند تیم مدیریت و توسعه می‌دهد.

آن‌ها وضعیت برنامه‌های کاربردی و سیستم‌هایی را که در حال حاضر در حال توسعه یا توسعه بیشتر هستند را برای رهبران پروژه و مدیریت در یک نگاه برقرار می‌کنند.

«یک جنبه کلیدی برای این تصمیم‌گیری، این است که نقشه‌های نرم‌افزاری، زمینه ساختاری مورد نیاز برای تفسیر صحیح این شاخص‌های عملکرد را فراهم می‌کند». به عنوان یک وسیله ارتباطی، نقشه‌های نرم‌افزاری به عنوان فضاهای باز و شفاف اطلاعات عمل می‌کنند که اولویت‌های کیفیت کد و ایجاد توابع جدید را قادر می‌سازد که در برابر یکدیگر تعامل می‌سازد و برای بهبود فرایند توسعه نرم‌افزار اقدام‌های لازم را انجام دهند.

برای مثال، آن‌ها تصمیم‌گیری را در مورد جایی که در آن کد افزایش کیفیت برای تسریع فعالیت‌های توسعه‌ای جاری و کاهش خطرات ناشی از مشکلات نگهداری آینده سودمند خواهد بود، راحت می‌کنند.

با توجه به درجه بالای بیانگری شان (به عنوان مثال، چگالی اطلاعات) و تولید آنی آن‌ها، این نقشه‌ها همچنین به انعکاس وضعیت فعلی فرایندهای سیستم و توسعه کمک می‌کند، یک شکاف اطلاعات ضروری بین تیم‌های مدیریت و توسعه، افزایش آگاهی در مورد وضعیت، و خدمت به عنوان ابزار تشخیص ریسک اولیه..

فهرست
-----

نقشه‌های نرم‌افزاری بر پایه اطلاعات عینی است که تجزیه و تحلیل کد و اطلاعات واردشده از سیستم‌های مخزن نرم‌افزار، اطلاعات از کده‌ای منبع، یا ابزارهای توسعه نرم‌افزار وابزارهای برنامه‌نویسی تعیین می‌شود. به‌طور خاص، نقشه‌های نرم‌افزاری به یک زبان برنامه‌نویسی، زبان مدل‌سازی یا مدل فرایند توسعهنرم‌افزار بستگی ندارد.

نقشه‌های نرم‌افزاری از سلسله مراتب مفاهیم اجرای پیاده‌سازی نرم‌افزار مانند فایل‌های کد منبع برای ساخت یک نقشه درخت استفاده می‌کنند، به عنوان مثال، بخش مستطیلی که نشان‌دهنده کل سلسله‌مراتب و تقسیم مساحت به زیر نواحی مستطیلی است. یک نقشه نرم‌افزاری، به‌طور غیررسمی، شبیه یک مدل شهری مجازی سه‌بعدی است، که بدین ترتیب مصنوعات از سیستم نرم‌افزاری به عنوان ساختمان‌های سه بعدی مجازی، مستطیل شکل یا برج‌ها مطرح می‌شوند که بر اساس موقعیت آن‌ها در سلسله مراتب پیاده‌سازی نرم‌افزار قرار می‌گیرند.

نقشه‌های نرم‌افزاری می‌توانند اطلاعات مربوط به توسعه نرم‌افزار، کیفیت نرم‌افزار و دینامیک سیستم را با نقشه‌برداری از این که اطلاعات بر روی متغیرهای تصویری عناصر نقشه درخت مانند اندازه مساحت، ارتفاع، رنگ یا بافت را ترکیب کنند. آن‌ها می‌توانند به صورت منظم مشخص شوند، به‌طور خودکار تولید شوند و توسط الگوها سازماندهی شوند.

به عنوان نمونه سیستم نرم‌افزار نقشه برداری
------------------------------------------

نقشه‌های نرم‌افزاری «ترکیب اطلاعات موضوعی در مورد فرایندهای توسعه نرم‌افزار (تکامل)، کیفیت نرم‌افزار، ساختار، و پویایی و نمایش این اطلاعات به روش نقشه ای است».

مثلاً:

ارتفاع یک ساختمان مجازی می‌تواند متناسب با پیچیدگی واحد کد (به عنوان مثال، تکیا ترکیبی از معیارهای نرم‌افزاری) باشد.

مساحت زمین یک ساختمان سه‌بعدی مجازی می‌تواند متناسب با تعداد خطوط کد درماژول باشد یا (به عنوان مثال، خطوط اظهار نظر غیر تفسیر).

رنگ می‌تواند وضعیت توسعه فعلی را بیان کند، به عنوان مثال، چند توسعه دهندگان در حال تغییر / ویرایش واحد کد هستند.

با این پیکربندی نمونه، نقشه نرم‌افزار نقاط مهمی را در کد منبع با رابطه با جنبه‌های فرایند توسعه نرم‌افزار نشان می‌دهد. برای مثال در یک نگاه مشخص می‌شود که چه تغییری باید صورت گیرد:

به سرعت تغییرات را اجرا کنید.

ارزیابی سریع تأثیر تغییرات در یک مکان بر روی عملکرد در جای دیگر.

کاهش پیچیدگی‌ها که منجر به فرایندهای کنترل‌نشده در کاربرد می‌شوند.

سریع‌تر خطاها را پیدا کنید.

سبک برنامه‌ریزی بد بیابید و حذف کنید.

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

به عنوان وسیله‌های هوش تجاری و سیستم‌های توصیه
----------------------------------------------

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

نقشه‌های نرم‌افزاری به اطلاعات مربوط به نرم‌افزار محدود نمی‌شوند: آن‌ها می‌توانندشامل هر گونه اطلاعات سلسله مراتبی سیستم همانند اطلاعات نگهداری از مصنوعات فنی پیچیده باشند.

تکنیک‌های تجسم
--------------

نقشه‌های نرم‌افزاری در حوزه تجسم نرم‌افزاری مورد بررسی قرار می‌گیرند. تجسم کردن نقشه نرم‌افزاری به‌طور معمول مبتنی بر نقشه درختی است، «یک رویکرد پر کننده فضابرای تجسم ساختارهای اطلاعات سلسله مراتبی» [۹] یا سایر رویکردهای نگاشت سلسله مراتبی.

### الگوریتم‌های طرح بندی

برای ساخت نقشه‌های نرم‌افزاری، روش‌های چیدمان متفاوت برای تهیه نقشه فضایی اساسی از مؤلفه‌ها به کار می‌روند:

* الگوریتم‌های نقشه درخت که در ابتدا سلسله‌مراتب نرم‌افزار را در یک ناحیه مستطیلیتودرتو اجرا می‌کنند
* الگوریتم‌های (Voronoi-map)که در ابتدا سلسله مراتب نرم‌افزار را با ایجاد یک نقشه Voronoi طراحی می‌کنند.

### ثبات طرح

آرایش فضایی محاسبه‌شده توسط چیدمان‌هایی که توسط نقشه‌های درختی تعریف شده‌اند بستگی به سلسله‌مراتب دارد. در صورتی که نقشه‌های نرم‌افزاری به صورت مرتب برای یک سیستم در حال تحول و در حال تغییر ایجاد شود، قابلیت استفاده از نقشه‌های نرم‌افزاری با چیدمان‌های بدون ثبات تحت‌تاثیر قرار می‌گیرد، یعنی تغییرات جزئی در سلسله‌مراتب ممکن است باعث تغییرات قابل‌توجهی در چیدمان شوند.

در مقایسه با الگوریتم‌های منظم (treemap treemap)، که چیدمان قطعی را فراهم نمی‌کنند، الگوریتم چیدمان برای(Voronoi treemaps) می‌تواند تا درجه بالایی از شباهت چیدمان برای سلسله‌مراتب مختلف را فراهم کند. رویکردهای مشابهی برای مورد مبتنی بر نمودار درختی وجود دارد.

تاریخ
-----

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

منابع
-----

1. ↑   *D. Limberger و همکاران:* نقشه‌های نرم‌افزاری تعاملی برای تجزیه و تحلیل کد منبع مبتنی بر وب *. مقالات کنفرانس بین‌المللی Web3D, ACM، ص 8، 2013.*
2. ↑   S. Schmechel و همکاران: *تجسم سلسله مراتب متناوب با طرح پایدار از Treemaps Voronoi*. مقالات پنجمین کنفرانس بین‌المللی تئوری و کاربرد تجسم اطلاعات (IVAPP 2014)، SCITEPRESS - انتشارات علم و فناوری، صص 50-58، 2014.

پیوند به بیرون
--------------

* Scientific conference VISSOFT (IEEE Working Conference on Software Visualization)
* Interactive Rendering of Complex 3D-Treemaps
* Multiscale Visual Comparison of Execution Traces
* Interactive Software Maps for Web-Based Source Code Analysis
* Extending Recommendation Systems with Software Maps
* A Visual Analysis Approach to Support Perfective Software Maintenance
* ViewFusion: Correlating Structure and Activity Views for Execution Traces
* A Visual Analysis and Design Tool for Planning Software Reengineerings
* Interactive Areal Annotations for 3D Treemaps of Large-Scale Software Systems
* Visualization of Execution Traces and its Application to Software Maintenance
* Understanding Complex Multithreaded Software Systems by Using Trace Visualization
* Visualization of Multithreaded Behavior to Facilitate Maintenance of Complex Software Systems
* Visualizing Massively Pruned Execution Traces to Facilitate Trace Exploration
* Projecting Code Changes onto Execution Traces to Support Localization of Recently Introduced Bugs
* SyncTrace: Visual Thread-Interplay Analysis