نقشه نرمافزار (Software map) و محیط توسعه نرمافزار چه مفاهیمی هستند؟
یکی از مهمترین موضوعاتی که مهندسان نرمافزار و بهویژه برنامهنویسان باید با آن آشنا باشند و متأسفانه در دانشگاه بهدرستی به آن پرداخته نمیشود مفهوم نقشه نرمافزار و محیط توسعه نرمافزار است.
برنامهنویسانی کمی را پیدا میکنید که در ارتباط با نقشه نرمافزار اطلاعات کافی داشته باشند یا پروژههای خود را بر مبنای نقشه نرمافزار آماده کنند. در این مطلب قصد داریم به شکل کوتاه توضیحی در ارتباط با این مفهوم ارائه کنیم.
نقشه نرمافزار چیست؟
نقشههای نرمافزاری بر پایه اطلاعات عینی هستند و بر پایه تجزیهوتحلیل کد و اطلاعات وارد شده از سیستمهای مخزن نرمافزار، اطلاعات از کدهای منبع یا ابزارهای توسعه نرمافزار و ابزارهای برنامهنویسی تعیین میشوند.
به طور خاص، نقشههای نرمافزاری به یکزبان برنامهنویسی، زبان مدلسازی یا مدل فرایند توسعه نرمافزار بستگی ندارد. نقشه نرمافزاری (Software map) به اطلاعات ایستا، پویا و تکاملی اشاره دارد که در ارتباط با سامانههای نرمافزاری و فرایندهای توسعه نرمافزار آماده میشوند و به صورت دوبعدی یا سهبعدی اطلاعاتی در اختیار تیم توسعه یا مهندس کیفیت میدهند.
کاربردهای اصلی نقشه نرمافزار در ارتباط با تحلیل مخاطره و نظارت بر کیفیت کد، فعالیت تیم، پیشرفت توسعه نرمافزار، بهبود اثربخشی مهندسی نرمافزار و نگهداری از نرمافزار است.
نقشههای نرمافزاری میتوانند اطلاعات مربوط به توسعه نرمافزار، کیفیت نرمافزار و دینامیک سیستم را با نقشهبرداری از این که اطلاعات بر روی متغیرهای تصویری عناصر نقشه درختمانند اندازه مساحت، ارتفاع، رنگ یا بافت را ترکیب کنند.
آنها میتوانند بهصورت منظم مشخص شوند، به طور خودکار تولید شوند و توسط الگوها سازماندهی شوند. نقشههای نرمافزاری از تکنیکهای نقشهنگاری دقیقی که بهخوبی تعریف شدهاند استفاده میکنند و از استعاره مدل شهر سهبعدی استفاده میکنند تا فضای اطلاعاتی پیچیده و انتزاعی را بیان کنند.
برنامهها
نقشههای نرمافزاری بهطورکلی امکان ارتباطات قابلفهم و مؤثر در زمینههای خطرات و هزینههای پروژههای توسعه نرمافزار را به سهامداران مختلف مانند تیم مدیریت و توسعه میدهد. آنها وضعیت برنامههای کاربردی و سیستمهایی را که در حال حاضر درحالتوسعه یا توسعه بیشتر هستند را برای رهبران پروژه و مدیریت در یک نگاه برقرار میکنند.
یک جنبه کلیدی برای این تصمیمگیری، این است که نقشههای نرمافزاری، زمینه ساختاری موردنیاز برای تفسیر صحیح این شاخصهای عملکرد را فراهم میکند.
بهعنوان یک وسیله ارتباطی، نقشههای نرمافزاری بهعنوان فضاهای باز و شفاف اطلاعات عمل میکنند که اولویتهای کیفیت کد و ایجاد توابع جدید را قادر میسازد که در برابر یکدیگر تعامل میسازد و برای بهبود فرایند توسعه نرمافزار اقدامهای لازم را انجام دهند.
زمانی که فرایند ساخت پروژههای نرمافزار به طول میانجامد پیچیدگیها و مشکلات زیادی پدید میآید که در بلندمدت فرسودگی تیم توسعه را به همراه دارد. از طرفی ممکن است برخی ویژگیهای سیستم نادیده گرفته شوند و در نهایت کیفیت کدهایی که نوشته میشوند کم شود.
باتوجهبه اینکه نگهداری از نرمافزارها پیچیده و هزینهبر است سازندگان بخش مهمی از زمان خود را صرف درک ساختار و رفتار سیستم میکنند. ایده کلیدی نقشههای نرمافزاری، مقابله با این مشکلات بهینهسازی با فراهمآوردن وسیلههای ارتباطی تأثیرگذار برای بستن شکافهای موجود است.
نقشههای نرمافزاری را میتوان به طور خاص بهعنوان ابزار تحلیلی و معرفی سیستمهای اطلاعاتی کسبوکار، متخصص در تجزیهوتحلیل دادههای مربوط به نرمافزار استفاده کرد.
علاوه بر این، نقشههای نرمافزاری بهعنوان سیستمهای توصیه برای مهندسی نرمافزار عمل میکنند. نقشههای نرمافزاری به اطلاعات مربوط به نرمافزار محدود نمیشوند و میتوانند شامل هر گونه اطلاعات سلسلهمراتبی سیستم همانند اطلاعات نگهداری از مصنوعات فنی پیچیده باشند.
نقشههای نرمافزاری از سلسلهمراتب مفاهیم اجرای پیادهسازی نرمافزار مانند فایلهای کد منبع برای ساخت یک نقشه درخت استفاده میکنند.
ارتفاع یک ساختمان مجازی میتواند متناسب با پیچیدگی واحد کد (بهعنوانمثال، ترکیبی از معیارهای نرمافزاری) باشد. مساحت زمین یک ساختمان سهبعدی مجازی میتواند متناسب با تعداد خطوط کد در ماژول باشد. رنگ میتواند وضعیت توسعه فعلی را بیان کند، بهعنوانمثال، چند توسعهدهنده در حال تغییر / ویرایش واحد کد هستند.
با این پیکربندی نمونه، نقشه نرمافزار نقاط مهمی را در کد منبع با رابطه با جنبههای فرایند توسعه نرمافزار را نشان میدهد.
برای مثال در یک نگاه مشخص میشود که باید اصطلاحاتی نظیر پیادهسازی تغییرات در کوتاهترین زمان، ارزیابی سریع تأثیر تغییرات در یک مکان روی عملکرد بخشهای دیگر نرمافزار، کاهش پیچیدگیها که منجر به فرایندهای کنترل نشده در کاربرد هستند، پیداکردن سریعتر خطاها، ویرایش پارادایمی که برای توسعه استفاده شده و… انجام شود.
الگوریتمهای طرحبندی
برای ساخت نقشههای نرمافزاری از روشهای چیدمان متفاوت برای تهیه نقشه فضایی اساسی و مولفههای استفاده میشوند. به طور مثال، میتوان از الگوریتمهای نقشه درخت که در ابتدا سلسلهمراتب نرمافزار را در یک ناحیه مستطیلی تودرتو اجرا میکنند یا الگوریتمهای (Voronoi-map)که ابتدا سلسلهمراتب نرمافزار را با ایجاد یک نقشه Voronoi طراحی میکنند استفاده کرد.
در مقایسه با الگوریتمهای منظم (treemap treemap) که چیدمان قطعی را فراهم نمیکنند، الگوریتم چیدمان برای (Voronoi treemaps) میتواند تا درجه بالایی از شباهت چیدمان برای سلسلهمراتب مختلف را فراهم کند. رویکردهای مشابهی برای مورد مبتنی بر نمودار درختی وجود دارد.
توابع نقشههای نرمافزاری و روشهای نقشههای نرمافزاری به تجسم علمی تجسم نرمافزاری و تصویرسازی اطلاعات تعلق دارند. آنها یک مفهوم و تکنیک کلیدی در زمینه تشخیص نرمافزار تشکیل میدهند. آنها همچنین در تجزیهوتحلیل نرمافزار کاربرد دارند. نقشههای نرمافزاری بهصورت وسیعی توسعهیافته و مورد تحقیق قرار گرفتهاند، بهعنوانمثال، در مؤسسه (Hasso Plattner) برای مهندسی سیستمهای فناوری اطلاعات، بهویژه برای سیستمهای پیچیده فناوری اطلاعات استفاده شدند.
محیط استقرار نرمافزار چیست؟
در توسعه نرمافزار، محیط یک سیستم کامپیوتری است که نرمافزار یا یک مؤلفه نرمافزاری روی آن استقراریافته و اجرا شده است.
در حالات ساده، بهعنوانمثال توسعهدادن یک برنامه و اجرای بلافاصله آن روی همان سیستم ممکن است تنها به یک محیط نیاز داشته باشد، اما در حالات صنعتی و تجاری به طور معمول یک محیط با عنوان توسعه (Development) برای تغییرات اصلی و توسعه در نظر گرفته میشود و از طرف دیگر محیطی با عنوان محصول نهایی (Production) برای کاربر نهایی استفاده میشود.
این فرایند ساختار مدیریت انتشار نرمافزار در خیلی از مشکلات به فازهای استقرار (Deployment)، آزمایش (Testing) و عقبگرد (Rollback) کمک میکند.
محیطها ممکن است به طور قابلتوجهی با یکدیگر تفاوت داشته باشند: به طور معمول محیط توسعه یک فضای کاری تنها برای توسعهدادن نرمافزار است درحالیکه در محیط محصول نهایی احتمالاً شاهد متصل بودن یک شبکه عظیم از ماشینهای توزیع شده مرکز داده یا ماشین مجازیهای رایانش ابری باشید.
معماریها
محیطهای استقرار تفاوتهای قابلتوجهی با یکدیگر دارند، اما بهطورکلی نقطه شروع آنها از محیط توسعه (DEV) بوده و به محیط محصول نهایی (PROD) ختم میشود.
یکی از معماریهای استقرار که به طور متداول استفاده میشود عبارت است از توسعه، آزمایش، نمایش، محصول نهایی (DEV, TEST, STAGING, PROD) که با ترتیب ذکر شده نرمافزار روی محیطها استقرار مییابد.
علاوه بر این محیطهای استقرار دیگری نیز وجود دارند که بهطورکلی برای فرایند تولید نرمافزار در نظر گرفته نمیشوند از جمله تضمین کیفیت (Quality Assurance) که در اختیار نیروهای آزمایش قرار میگیرند، جعبه شنی (Sandbox) که برای آزمایشکردن محصول توسط خود توسعهدهندگان استفاده میشود.
در مواقع اضطراری محیطی با عنوان بازیابی فاجعه (Disaster Recovery) در نظر گرفته میشود که در حالتی که برای نسخه نهایی مشکلی پیش آید از این محیط استفاده میشود. یکی دیگر از معماریها عبارت است از توسعه، آزمایش، تست پذیرش (Acceptance testing) و محصول نهایی که بهاختصار DTAP گفته میشود. استقرار نرمافزار بهتمامی فعالیتهایی که یک نرمافزار را برای استفاده آماده میکند گفته میشود تا در نهایت نرمافزار راهاندازی شود.
فرایند استقرار عمومی شامل چند فعالیت مرتبط به یکدیگر و تغییرات احتمالی بین آنها میباشد. این فعالیتها میتوانند از طرف توسعهدهنده نرمافزار، از طرف کاربر یا از طرف هر دوی آنها صورتپذیرند.
ازآنجاکه هر سیستم نرمافزاری منحصربهفرد است، فرایندهای دقیق یا الگوریتمهای درونی هر فعالیت بهسختی میتوانند تعریف شوند؛ بنابراین «استقرار» باید بهعنوان یک فرایند کلی تفسیر شود که باید مطابق با الزامات خاص یا مشخصات آن سفارشی شود.
در استقرارهای نرمافزاری قبل از اینترنت، استقرارها (و عملیات مربوط نزدیک به آن) از امور ضروری پر هزینه، نادر و حجیم بودند؛ بنابراین قابلبحث است که با گسترش اینترنت، پایاندادن به توسعه سریع نرمافزار امکانپذیر میشود. در واقع ظهور محاسبات ابری و نرمافزاری بهعنوان یک سرویس به این معنی است که نرمافزارها میتوانند در بستر اینترنت به تعداد زیادی از کاربران در عرض چند دقیقه عرضه شوند.
این همچنین به این معنا است که به طور معمول، برنامهریزیهای استقرار در حال حاضر توسط تأمینکننده نرمافزار تعیین میشود و نه توسط کاربران. چنین انعطافپذیری منجر به افزایش تحویل پیوسته بهعنوان یک گزینه در دسترس به طور ویژه برای برنامههای کاربری تحت وب با خطر ریسک کم است.
فعالیتهای استقرار
انتشار بر پایه فرایند توسعه نرمافزار تکمیل شده است گاهی اوقات بهعنوان بخشی از فرایند توسعه بهجای فرایند استقرار طبقهبندی میشود؛ و شامل عملیات آمادهسازی برای مونتاژ و انتقال به سیستمهای کامپیوتری است.
نصب و فعالسازی
در سیستمهای ساده، نصب شامل ایجاد نوع فرمان (رایانش)، میانبر، اسکریپت یا سرویس برای اجرای نرمافزار (بهصورت دستی یا خودکار) میباشد. در سیستمهای پیچیدهتر ممکن است نصب شامل پیکربندی سیستم (احتمالاً با سؤال نهایی از کاربران درباره استفاده موردنظر آنها یا به طور مستقیم درباره پیکربندی سیستم از آنها سؤال شود) و ساخت زیر سیستمهای موردنیاز برای استفاده باشد.
غیرفعالسازی
غیرفعالسازی عملکردی برعکس فعالسازی دارد و اشاره به خاموشکردن هر جزء در حال اجرای سیستم را دارد.
حذف نصب
حذف نصب عملکردی خلاف نصب دارد و اشاره به حذف سیستم یا نرمافزاری دارد که دیگر لازم نیست.
بهروزرسانی
فرایند بهروزرسانی، تمام یا قسمتی از آخرین نسخه منتشر شده یک نرمافزار سیستم را جایگزین آن میکند. این فرایند معمولاً شامل غیرفعالسازی و نصب مجدد است. در سیستمهایی مانند لینوکس، با استفاده مدیریت بسته سیستم نسخههای قدیمی نرمافزار به طور خودکار بهعنوان بخشی از این فرایند حذف میشوند.
بهروزرسانی خودکار
مکانیسمهایی برای نصب بهروزرسانی در برخی سیستمها (یا در برخی سیستمعاملها مانند لینوکس، اندروید و iOS)ساخته شده است. مکانیسمهایی از این فرایندهای بهروزرسانی کاملاً خودکار به کاربران ارائه شده است.Norton Internet Security نمونهای از یک سیستم نیمه اتوماتیک برای بازیابی و نصب بروز رسانیها است.
قوانین استقرار
پیچیدگی و تنوع محصولات نرمافزاری باعث افزایش نقش تخصصی قوانین برای هماهنگی و مهندسی فرایند استقرار میشود. در نرمافزارهای دسکتاپ کاربران نهایی نیز هنگامی که یک بسته نرمافزاری را روی دستگاه خود نصب میکنند، به یک توسعهدهنده نرمافزار تبدیل میشوند.
منیع: Shabakeh-mag