یکی از مهمترین موضوعاتی که مهندسان نرمافزار و به ویژه برنامهنویسان باید با آن آشنا باشند و متاسفانه در دانشگاه به درستی به آن پرداخته نمیشود …
یکی از مهمترین موضوعاتی که مهندسان نرمافزار و به ویژه برنامهنویسان باید با آن آشنا باشند و متاسفانه در دانشگاه به درستی به آن پرداخته نمیشود مفهوم نقشه نرمافزار و محیط توسعه نرمافزار است. برنامهنویسانی کمی را پیدا میکنید که در ارتباط با نقشه نرمافزار اطلاعات کافی داشته باشند یا پروژههای خود را بر مبنای نقشه نرمافزار آماده کنند. در این مطلب قصد داریم به شکل کوتاه توضیحی در ارتباط با این مفهوم ارائه کنیم.
نقشه نرمافزار چیست؟
نقشههای نرمافزاری بر پایه اطلاعات عینی هستند و بر پایه تجزیه و تحلیل کد و اطلاعات وارد شده از سیستمهای مخزن نرمافزار، اطلاعات از کدهای منبع یا ابزارهای توسعه نرمافزار و ابزارهای برنامهنویسی تعیین میشوند. بهطور خاص، نقشههای نرمافزاری به یک زبان برنامهنویسی، زبان مدلسازی یا مدل فرایند توسعه نرمافزار بستگی ندارد. نقشه نرمافزاری (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 نمونه ای از یک سیستم نیمه اتوماتیک برای بازیابی و نصب بروز رسانیها میباشد.
قوانین استقرار
پیچیدگی و تنوع محصولات نرمافزاری باعث افزایش نقش تخصصی قوانین برای هماهنگی و مهندسی فرایند استقرار میشود. در نرمافزارهای دستکتاپ کاربران نهایی نیز هنگامی که یک بسته نرمافزاری را روی دستگاه خود نصب میکنند، به یک توسعه دهنده نرمافزار تبدیل میشوند.