ابتدا برنامههای مختلفی که با زبانهای برنامهنویسی کامپایل شونده نوشته میشدند نیاز به ساز و کاری داشتند تا سایر دولوپرها بتوانند Functionality (عملکرد) جدیدی برای آنها تعریف کنند.
Compiled Programming Languages
زبانهایی همچون زبان ++C یا Java، جزو اصطلاحاً Compiled Programming Languages (زبانهای برنامهنویسی کامپایل شونده) محسوب میشوند
با توجه به اینکه زبانهای اسکریپتینگ خود نوعی از زبانهای برنامهنویسی هستند، به نظر میرسد درست این باشد که به جای تقسیمبندی زبانها به دو دستهٔ Scripting و Programming، آنها را به دو گروه زبانهای برنامهنویسی Compiled و Interpreted تقسیمبندی کنیم. به عبارت دیگر، در زبانهای برنامهنویسی اصطلاحاً Compiled (کامپایل شده)، سورسکد برنامه ابتدا کامپایل شده و به کدی فشرده، سریع، تست شده و از همه مهمتر قابلفهم برای سیستم تبدیل شده و اجرا میگردد و این دست زبانهای برنامهنویسی هرگز به رویدادها برای انجام کاری وابسته نیستند.
یک زبان اسکریپتینگ صرفاً در پاسخ به یک Event (ایونت یا رویداد) کاری را انجام خواهد داد؛ به عبارت دیگر، چنانچه هیچ درخواست یا رویدادی وجود نداشته باشد، هیچ کاری هم صورت نخواهد گرفت اما این در حالی است که یک زبان برنامهنویسی بدون توجه به درخواستها و یا رویدادها، باز هم قادر به انجام دستوراتی است که از پیش تعریف شدهاند (از جمله زبانهای برنامهنویسی معروف میتوان به زبانهای #C،C++،Java،C و ... اشاره نمود).
واژهٔ Interprete (به معنای تفسیر کردن) زمانی که یک ed به انتهایش اضافه شود، صفتی میشود به معنای «تفسیر شونده» و به طور کلی منظور از زبانهای برنامهنویسی تفسیر شوندهیی مثل زبان جاوااسکریپت یا پیاچپی، زبانهایی است که سورسکد آنها کامپایل نشده بلکه در لحظه توسط برنامهیی که Interpreter (مفسر) نام دارد، خط به خط تفسیر و بالتبع اجرا میگردد.
به طور کلی:
زبان برنامه نویسی مجموعهای از مفاهیم است که برای اتصال دستورالعملها به یک ماشین یا کامپیوترطراحی شده است. زبانهای برنامه نویسی عمدتاً برای کنترل عملکرد یک دستگاه یا بیان الگوریتمها استفاده میشوند. در حال حاضر زبان برنامه نویسی بسیار زیادی وجود دارند. برنامهها را میتوان به دو شکل مانند نحو و معناشناسی تقسیم کرد. بعضی از زبانها با یک استاندارد ISO مانند زبان C تعریف میشوند.زبانهای برنامه نویسی را بسته به ساختار و کارکرد آنها به دستههای مختلفی تقسیم میکنند.
زبان برنامه نویسی رویهای (Procedural Programming Language)
زبان برنامه نویسی رویهای برای اجرای دنبالهای از عبارات که منجر به نتیجه میشود، استفاده میشود. به طور معمول، این نوع زبان برنامه نویسی از چندین متغیر، حلقهها یا لوپهای سنگین و سایر عناصر استفاده میکند، که آنها را از زبانهای برنامه نویسی عملکردی جدا میکند. توابع زبان رویهای میتواند متغیرها را کنترل کند، غیر از بازده ارزش عملکرد. به عنوان مثال، چاپ اطلاعات.
زبان برنامه نویسی کاربردی (Functional Programming Language)
یک زبان برنامه نویسی کاربردی به طور معمول از دادههای ذخیره شده استفاده میکند، و اغلب از به وجود آمدن حلقهها به نفع توابع بازگشتی جلوگیری میکند. تمرکز اصلی برنامههای عملکردی روی مقادیر بازگشت توابع است و عوارض جانبی و پیشنهادات مختلفی که از حالت ذخیره سازی جلوگیری میکنند چندان در نظر گرفته نمیشوند. به عنوان مثال، با یک زبان مفید کاملاً خالص، اگر یک تابع نامگذاری شده باشد، انتظار میرود که این تابع هیچ عملکرد کاربردی را تغییر ندهد یا انجام ندهد. اما ممکن است تماسهای الگوریتمی ایجاد کند و پارامترهای این تماسها را تغییر دهد. زبانهای کاربردی معمولاً ساده تر هستند و ترسیم آنها در مسائل انتزاعی آسان تر است. مدل برنامه نویسی آنها شناخت دقیق آن را دشوار میکند، اما کد به زبان دستگاه رمزگشایی میشود
زبان برنامه نویسی شی گرا (Object-oriented Programming Language)
این زبانهای برنامه نویسی جهان را به عنوان گروهی از اشیاء دارای دادههای داخلی و دسترسی به قسمتهای خارجی آن دادهها مشاهده میکنند. هدف برنامه نویسی شی گرا در تفکر در مورد تقصیر با جدا کردن آن به مجموعه اشیاء ارائه دهنده خدمات است که میتواند برای حل یک مشکل خاص استفاده شود. یکی از اصلیترین قواعد زبان برنامه نویسی شی گرا، محصور کردن است که هر چیزی که یک شیء به آن نیاز داشته باشد باید درون شی باشد. این زبان همچنین بر قابلیت استفاده مجدد از طریق وراثت و ظرفیت گسترش پیاده سازیهای فعلی بدون نیاز به تغییر مقدار زیادی کد با استفاده از چند شکل تأکید دارد.
زبان برنامه نویسی اسکریپتی (Scripting Programming Language)
این زبانهای برنامه نویسی اغلب رویهای هستند و ممکن است عناصر زبانهای شی گرا را داشته باشند. اما آنها به طور معمول در دسته بندی خود قرار میگیرند ودر دسته زبانهای برنامه نویسی تمام عیار با پشتیبانی از توسعه سیستمهای بزرگ قرار نمیگیرند. به عنوان مثال، آنها ممکن است چک نوع تایپ کامپایل نداشته باشند. معمولاً برای شروع این زبانها به سینتکسهای کوچکی نیاز دارند.
زبان کد نویسی منطقی یا لاجیکال (Logic Programming Language)
این نوع از زبانها به برنامه نویسان اجازه میدهد تا اظهاراتی را بیان کنند و سپس به دستگاه اجازه دهند تا درباره عواقب آن اظهارات استدلال کند. به یک معنا، این زبان به رایانه نمیگوید که چطور کاری انجام دهد، بلکه از محدودیتهای انجام کاری که باید انجام شود را در نظر میگیرد.
زبان پیاچپی زبانی است Server-side (سمت سرور) اما زبان جاوااسکریپت Client-side (سمت کاربر).
پیاچپی در سمت سرور اجرا میگردد، از این رو نیاز به یک نرمافزاری تحت عنوان وب سرور است تا ارتباط مابین کاربر و سرور را برقرار سازد.
این زبانها به منظور نمایش دیتا مورد استفاده قرار میگیرد و هرگز این توانایی را ندارند تا در منطق نرمافزار دخالت کنند. از جمله زبانهای Markup (نشانهگذاری)، میتوان به زبانهای HTML و XML اشاره کرد.
می توان اقدام به دریافت پروژه برنامه نویسی از طریق سایتهای فریلنسینگ (آزاد کاری) نمود.. به عنوان یک برنامه نویس فریلنسر شما الزامی به حضور در مکان مشخص برای دریافت حقوق ندارید. مزایای دورکاری روز به روز بیشتر برای افراد و شرکتها مشخص میشود. در حال حاضر هر روزه به تعداد شرکتهایی که تمایل به برونسپاری پروژههای برنامه نویسی و استخدام برنامه نویس به صورت پروژهای دارند اضافه میشود. در حقیقت شما میتوانید با دسترسی به یک کامپیوتر و اینترنت اقدام به دریافت پروژه برنامه نویسی و تحویل آن از هر جایی کنید. همچنین شما میتوانید به دنبال فرصتهای کار پاره وقت برنامه نویسی نیز باشید تا درآمد خود را افزایش دهید.
استخدام برنامه نویس اولویت اصلی بسیاری از استارتاپها و شرکتهای اینترنتی نوظهور یا قدیمی تر است. چه شما یک برنامه نویس فرانت و چه یک برنامه نویس بکاند (back-end developer) فرصتهای شغلی زیادی در بازار کار برای شما وجود خواهد داشت. کارآموزی برنامه نویسی نخستین قدم در مسیر شغلی تبدیل شدن به یک حرفه ایست. مطمینا درآمد برنامه نویسان با افزایش تخصص و تجربه و تسلط به زبانها و تکنولوژیهای جدید افزایش مییابد. از این رو بدون شک یک برنامه نویس فول استک ( full stack developer) درامد و موقعیتهای شغلی بسیار بیشتری خواهد داشت.
توسعه تکرار شونده و افزایشی روشی است که ترکیبی از طراحی تکرار شوند یا روش تکراری و مدل ساخت افزایشی است که در توسعه نرم افزار مورد استفاده قرار میگیرد. در واقع اجازهی میدهد تا پروژه در ابتدا از بخشهای کوچک شروع شود و به مرور زمان سامانه آن رشد کند تا در این درگیری مشکلات مهم پیدا شوند قبل از اینکه فرضیات اشتباه باعث خراب شدن سامانه شوند. این الگو اجازه میدهد تا نیازهای کاربرانی که در زمان طراحی دقیقاً نمیدانند چگونه نیازمندیهایشان از سامانه را معرفی کنند بصورت بالقوه برآورده شود.
توسعه تدریجی برش سیستم قابلیت را در بازه (بخش) است. در هر افزایش یک تکه از قابلیتهای تحویل داده شده است از طریق صلیب-نظم و انضباط و کار از الزامات به کارگیری. این فرآیند یکپارچه گروههای افزایش/تکرار به مرحله: آغاز به کار پیچیدگیهای ساخت و ساز و گذار.
فاز
آغاز شناسایی پروژههای مورد نیاز (عملکردی و غیر عملکردی) و خطرات در سطح بالا اما در جزئیات به اندازه کافی که میتواند تخمین زده شود.
پیچیدگی ارائه یک کار معماری که کاهش بالا خطرات و برآورده غیر کاربردی مورد نیاز است.
ساخت تدریجی پر در معماری با تولید کد آماده تولید شده از تجزیه و تحلیل و طراحی و پیاده سازی و تست از الزامات عملکردی است.
انتقال ارائه میشود سیستم به تولید عامل محیط است.
هر یک از این مراحل ممکن است تقسیم به 1 یا بیشتر تکرار که معمولا زمان-جعبه به جای ویژگیهای بسته بندی. معماران و تحلیلگران کار یک تکرار جلوتر از توسعه دهندگان و تست به نگه داشتن کار خود را-محصول جمع شدن کامل.
در فرآیند طراحی و توسعه نرمافزارها مهمترین اصلی که باید مورد توجه قرار گیرد این است که درک درستی از نیازهای بازار و مشتریان بهدست آمده و در ادامه با تحلیل این نیازها و فرموله کردن آنها در قالب یک مسئله اهداف را مشخص کرد.
تیمهای برنامهنویسی همواره باید به این نکته توجه داشته باشند که فرآیند طراحی نرمافزارها هیچگاه ثابت و خطی نیست. نیازها در مدت زمان طراحی نرمافزارها دستخوش تغییراتی میشوند که همین موضوع باعث میشود مراحلی همچون طراحی، تحلیل و پیادهسازی نیازها به یک بازبینی مجدد احتیاج داشته باشند. در چنین شرایطی مدلهای تکاملی بهخوبی این توانایی را دارند تا انعطافپذیری لازم را در اختیار تیمها قرار دهند. نمونههای بسیاری توسط کریگ لارمن و ویکتور باسیلی در مقاله «توسعه تکرار شونده و افزایشی» که تاریخچه مختصری از بهکارگیری این مدل را نشان میدهد آورده شده است.
مدل افزایشی (Incremental model)
در مدلهای مبتنی بر توسعه آبشاری ضروری است قبل از طراحی نرمافزار مجموعه نیازهای مشتریان مشخص شود. در چنین شرایطی برنامهنویسان باید از استراتژیهای ویژهای پیش از آغاز بهکار طراحی نرمافزار استفاده کنند. در مدلهای آبشاریمحور هر زمان تغییری در نیازها رخ میدهد، برنامهنویسان مجبور هستند یکبار دیگر فرآیندهای مربوط به نیازها، طراحیها و پیادهسازیها را مورد بررسی قرار دهند. در اینگونه مدلها رویکردهای جداسازی طراحی و پیادهسازی باید بهخوبی مستندسازی شده باشند تا هرگونه تغییر احتمالی برای سیستم شفاف و روشن باشد. اما همانگونه که ممکن است حدس زده باشید، مدل آبشاری بهشدت منقبض است و همین بسته بودن، خیلی زود عملکرد ضعیف و کاستیهای آن را نشان داد. این ضعفها به اندازهای مشهود بودند که کارشناسان در خلال دهههای 70 و 80 میلادی بهفکر افتادند تا جایگزین مناسبی برای این مدل ارائه کنند. در مدت زمان طراحی یک محصول همواره این احتمال وجود دارد که نیازهای جدیدی شناسایی شوند که باید در یک محصول قرار گیرند. اما این دیدگاه بهطور کامل متفاوت از استراتژی است که مدل آبشاری بر پایه آن کار میکند. برای حل این مشکل متدولوژی تکاملی و افزایشی ارائه شد که به توسعهدهندگان نرمافزار اجازه میداد تا الزامات و تصمیمگیریهای مرتبط با طراحی را با کمی تاخیر به مرحله اجرا در آورند. شکل یک متدولوژی توسعه افزایشی را نشان میدهد.
شکل1
همانگونه که در شکل یک مشاهده میکنید، این متدولوژی یک رویکرد میانجیگرایانه دارد که مزایای مدلهای مختلفی همچون آبشاری را با یکدیگر ترکیب میکند. بهعبارت دقیقتر در این مدل، فرآیند کامل شدن محصول بهصورت مرحله به مرحله انجام میشود. بهطوری که فرآیندهایی همچون طراحی، اعتبارسنجی، یکپارچهسازی، پیادهسازی، آزمایش و همچنین توسعه و نگهداری در هر مرحله انجام میشوند. کار نهایی روی محصول زمانی تمام خواهد شد که تمامی نیازهای مشخص شده در یک محصول قرار گرفته باشند. در حالت کلی، مدل افزایشی ویژگیهایی از مدل آبشاری با ایدئولوژی تکرارشوندگی و نمونهسازی اولیه را با یکدیگر ترکیب میکند. در این متدولوژی محصول در قالب تعدادی مؤلفه شکسته شده که هر کدام بهطور جداگانه طراحی شده و ساخته میشوند. هر زمان مؤلفهای کامل میشود در اختیار مشتری قرار میگیرد. این فرآیند چند ویژگی شاخص دارد، اول آنکه اجازه میدهد تا جزییات مربوط به یک محصول بهخوبی مورد بررسی قرار گیرند، دوم آنکه از طولانی شدن پروسه توسعه نرمافزار ممانعت بهعمل میآورد، سوم آنکه از سرمایهگذاریهای سنگینی که در اوایل کار ممکن است باعث بهوجود آمدن مشکلات مالی شود پیشگیری کرده و در نهایت از پروسه طولانی شدن فرآیند ساخت محصول که باعث نارضایتی مشتری میشود جلوگیری میکند. شکل دو مثالی از مدلسازی افزایشی را نشان میدهد.
شکل2
همانگونه که در شکل دو مشاهده میکنید، مولفههای یک محصول بهصورت تدریجی به یک محصول اضافه میشوند. در این حالت هر قطعه در زمان خودش فرآیند طراحی را پشت سر گذاشته و همچنین اگر نیازهای جدیدی شناسایی شدند اضافه کردن آنها بهسادگی امکانپذیر است. زمانی که طراحی هر مولفه تکمیل شد آنها در کنار یکدیگر قرار گرفته و محصول نهایی را بهوجود میآورند. در شکل دو شخص قرار گرفته در تصویر نماد یک محصول است. در تکرار اول نخستین ماژول از محصول ساخته شده و آماده تحویل بهمشتری میشود. در دومین تکرار ماژولهای دیگر آماده شده و با ماژول اول یکپارچه میشوند. بههمین ترتیب، در سومین تکرار کل محصول آماده شده و در قالب یک محصول کامل در اختیار مشتری قرار میگیرند. شکل سه این رویکرد تکامل تدریجی را نشان میدهد. در مدل افزایشی پس از آنکه اولین نمونه آماده شد یک محصول اولیه که پایه کار را نشان میدهد در اختیار مشتری قرار میگیرد. در این زمان بر مبنای بازخوردهای دریافت شده از مشتری تغییرات لازم شناسایی شده و در مدلسازی بعدی این تغییرات اعمال میشوند. فرآیند ساخت تا زمانی که مدلهای تولید شده بهطور کامل با محصولی که تحویل داده خواهد شد مطابقت پیدا کنند، ادامه پیدا میکنند. بهدلیل اینکه رویکردهای افزایشی کاملا منعطف هستند از همین رو در مدلهای چابک نیز مورد استفاده قرار میگیرند. مدل افزایشی همواره سعی میکند سرویسهایی که از ارزش بیشتری برخوردار هستند را از سرویسهایی که ارزش کمتری برخوردار هستند متمایز کرده و آنها را اولویتبندی کنند.
شکل3
زمانی که یک نمونه از محصول کامل شد و به مشتری تحویل داده شد، مشتری میتواند محصول را درون سازمان خود مورد استفاده قرار دهد. بهکارگیری این نمونه به مشتری اجازه میدهد تا تاثیر محصول بر سایر بخشهای سازمان خود را مورد ارزیابی قرار داده، کموکاستیها را شناسایی کرده و در نهایت به تیم سازنده اعلام دارند به چه ویژگیهای دیگری نیاز دارد تا در مدل بعدی وارد شوند. این رویکرد باعث میشود مدلهایی که در ادامه ساخته خواهند شد با مدلهای افزایشی موجود یکپارچه باشند که در نتیجه باعث بهبود عملکرد یک سیستم میشوند و باعث میشوند محصول کاملتری در اختیار مشتری قرار گیرد. بارزترین مثالی که در این زمینه میتوان به آن اشاره کرد ویندوز 10 مایکروسافت است. مایکروسافت پیش از آنکه نسخه نهایی محصول خود را ارائه کند، بارها و بارها بیلدهایی را منتشر کرد و بازخوردهای مشتریان را در این مدت بهدست آورد. در هر بار عرضه ویندوز یک بیلد جدید همراه با ویژگیهای جدیدی معرفی شد تا اینکه سرانجام یک نسخه نهایی کامل و منطبق با نسخههای پیشین آماده شد و در اختیار مشتریان قرار گرفت.
مدل توسعه افزایشی چه ویژگیهایی دارد؟
از بارزترین ویژگیهای مدل افزایشی میتوان به موارد زیر اشاره کرد: سرعت بالای تولید نرمافزار و پشت سر گذاشتن سریع مراحل اولیه چرخه تولید یک نرمافزار، انعطافپذیر بودن و کم هزینه بودن بهلحاظ اعمال تغییرات و نیازها، آزمایش و اشکالزدایی سادهتر در مدت زمان هر تکرار، دریافت بازخوردهای مشتری در ارتباط با هر مولفهای که ساخته میشود، مدیریت سادهتر ریسکها، سادهتر بودن فرآیند اشکالزدایی در مقایسه با دیگر متدولوژیها (در هر بار تکرار دامنه تغییرات کوچکتر میشود. همین موضوع فرآیند آزمایش عناصر را هدفمندتر و دقیقتر میکند.)، توانایی پاسخگویی مشتریان به قابلیتها و بازبینی مجدد محصول و در نهایت ارائه سریعتر محصول اولیه با قیمت کمتر. اما در مقابل این ویژگیها مدل توسعه افزایشی دارای یکسری معایب هم هست که از جمله این معایب میتوان به موارد زیر اشاره کرد. بهیک طراحی و برنامهریزی خوب نیاز دارد، بهیک تعریف کامل و شفاف از سیستم پیش از آنکه به بخشهایی شکسته شده و بهصورت افزایشی ساخته شود نیاز دارد، هزینه نهایی تولید محصول بیشتر از مدل آبشاری است، جزء مدلهای تکاملی قرار میگیرد که در نتیجه نمونههای اولیه ساخته شده از آن دور ریخته نمیشوند و در نهایت برخی از اهداف و قابلیتها ممکن است از ریسک بالایی برخوردار باشند. اکنون که با کم و کیف این مدل آشنا شدید ممکن است این سوال به ذهن شما رسیده باشد که اساسا در چه زمانی و تحت چه شرایطی باید از این مدل استفاده کنیم؟ پیشنهاد ما این است که در موقعیتهای زیر از مدل افزایشی استفاده کنید.
• زمانیکه نیازهای یک سیستم بهطور کامل و شفاف تعریف شده و مهمتر از آن بهخوبی درک شدهاند.
• زمانیکه نیازهای اصلی حتماً تعریف شده باشند. اما در عین حال به این نکته توجه داشته باشید که برخی از جزییات میتوانند در زمان دیگری تکمیل شوند.
• به محصولی برای بازاریابی اولیه نیاز دارید.
• فنآوریهای جدیدی باید در محصول هدف مورد استفاده
قرار گیرند.
مدیریت چرخه نرمافزار در مدل آبشاری افزایشی
در همه متدولوژیهایی که امروزه در دنیای نرمافزار مورد استفاده قرار میگیرند، یکسری فازهای مشترک وجود دارند. این فازهای مشترک ارتباط، برنامهریزی، مدلسازی، ساخت و توسعه هستند. هر یک از این پنج فاز در هر چرخه افزایشی تکرار میشوند. شکل چهار تقویم زمانی پروژه را در مدل افزایشی نشان میدهد.
توسعه مبتنی بر تکرارشوندگی و افزایشی (Iterative and incremental development)
طراحی تکرارشونده (Iterative design)، یک متدولوژی طراحی بر مبنای یک فرآیند دورهای از نمونهسازی، آزمایش، تحلیل و ویرایش یک محصول یا حتی یک پردازش است. در این روش بر مبنای نتایج بهدست آمده از آزمایشهایی که بهصورت تکرارشونده و مرتب انجام میشوند، یکسری تغییرات و اصلاحات پیادهسازی میشود. این فرآیند در نهایت هدفش بهبود کیفیت و قابلیت طراحی است. نخستین مرحله در فرآیند طراحی تکرار شونده طراحی یک نمونه اولیه است. نمونه اولیه باید توسط یک گروه متمرکز یا گروهی که به محصول وابسته نیستند و عقایدشان مغرضانه نیست مورد بررسی قرار گیرد. اطلاعاتی که از این گروه بهدست میآید جمعبندی شده و در مرحله بعدی ساخت محصول مورد استفاده قرار گیرد. این روند تا زمانی تکرار پیدا میکند که نیازهای کاربر را پوشش دهد.
توسعه مبتنی بر تکرارشوندگی افزایشی از ترکیب طراحی تکرارشونده همراه با مدل ساخت افزایشی برای توسعه نرمافزار استفاده میکند. ترکیبی که برای مدت زمان طولانی برای توسعه محصولات در مقیاس وسیع پیشنهاد میشد و مورد استفاده قرار میگرفت. بهطور مثال، در مستندات توسعه نرمافزارهای ویژه سامانههای دفاعی که در سال 1985 در قالب یک استاندارد دفاعی از سوی ایالات متحده منتشر شد، آماده است: «در مدت زمان توسعه نرمافزار ممکن است بیش از یک تکرار در چرخه توسعه نرمافزار نیاز باشد و این فرآیند ممکن است بهعنوان یک فراگیری تکاملی یا ساخت افزایشی مورد نیاز باشد. رابطه مابین تکرارها و افزایشها با استفاده از همپوشانی متدولوژی توسعه نرمافزار و فرآیند توسعه نرمافزار مشخص میشود.»
تعداد دقیق و ماهیت مدلهای افزایشی ساخته شده و این که چه چیزی تکرار میشود برای هر مدل خاص بوده و بر مبنای پروژه هدف مشخص میشود. توسعه افزایشی و تکرارشونده یکی از ارکان مهم موجود در مدلهای آبشاری اصلاح شده، فرآیند یکپارچه، برنامهنویسی مفرط و در حالت کلی در چارچوبهای مختلف توسعه نرمافزاری چابک است. این مدل عملکردی شبیه به چرخه PDCA (سرنام plan-do-check-act) در بهبود فرآیند تجاری دارد. یک روش مدیریتی تکرارشونده چهار مرحلهای که در دنیای تجارت مورد استفاده قرار میگیرد. این روش بهمنظور کنترل، پیوستگی، بهبود فرآیندها و پروسهها مورد استفاده قرار میگیرد. ایده اصلی که در بطن این روش وجود دارد، طراحی یک سیستم بر مبنای چرخههای تکرارشونده و در برشهای کوچک زمانی است.
این رویکرد به طراحان نرمافزار اجازه میدهد از تجاربی که در مراحل قبلی طراحی محصول بهدست آوردهاند در زمان ساخت مولفههای بعدی یا نسخههای جدیدتر نرمافزار استفاده کنند. در هر مرحله تکرار، یکسری نکات در ارتباط با طراحی محصول مورد ویرایش قرار میگیرند و قابلیتهای کاربردی جدیدی به آن اضافه میشوند. این روال شامل مرحله اولیه، مرحله تکرار و فهرست کنترل پروژه است. گام اول ساخت یک نسخه پایه از محصول است. هدف از این پیادهسازی اولیه ساخت محصولی است که کاربر بتواند با آن ارتباط برقرار کند. مدلی که در این مرحله ساخته میشود بهتر است نمونهای باشد که مشکلات کلیدی را نشان داده و راهحلی را ارائه میدهد. راهحلی که درک و پیادهسازی آن به اندازه کافی ساده و راحت باشد. همچنین، برای هدایت بهتر فرآیند تکرارشونده، یک فهرست کنترل پروژه ایجاد میشود که شامل تاریخچهای از همه کارها و وظایفی است که باید انجام شوند.
توسعه مبتنی بر تکرارشوندگی افزایشی از ترکیب طراحی تکرارشونده همراه با مدل ساخت افزایشی برای توسعه نرمافزار استفاده میکند.
در این فهرست ویژگیهای جدیدی که باید پیادهسازی شوند، همراه با بخشهایی از راهحل که نیازمند بازبینی هستند قرار میگیرد. فهرست کنترل پروژه برآیند فاز تجزیه و تحلیل است که بهطور مداوم مورد بازبینی و تجدید نظر قرار میگیرد.
در فرآیند تکرارشونده، تکرار بهمعنای بازطراحی و پیادهسازی ساده، سرراست و پشتیبانی از طراحی مجددی است که یک وظیفه را به فهرست کنترل پروژه اضافه میکند. در این مدل سطح جزییات بهصورت ایستا و ثابت نیستند. بهطور مثال، در یک پروژه تکرارشونده ساده کدها ممکن است منبع اصلی مستندات سیستم باشند، در حالی که در یک پروژه تکرارشونده دیگر، ممکن است به مستندات طراحی نرمافزار (Software Design Document) نیاز باشد. (SDD توصیفی از یک محصول نرمافزاری است. این توصیف نرمافزاری به طور معمول از سوی یک برنامهنویس آماده شده و معماری پروژه نرمافزاری را تشریح میکند. این توصیف به تیم توسعهدهنده نرمافزار کمک میکند درک درستی از پروژه داشته باشند.) فهرست کنترل پروژه با استفاده از نتایجی که از تحلیلها بهدست میآید ویرایش میشود. این مدل شامل چهار فاز زیر است:
فاز Inception: شناسایی محدوده پروژه، الزامات و ریسکهایی که در سطح بالاتر وجود دارد را مورد بررسی قرار میدهد. جزییاتی که در این فاز قرار دارند بهشکلی خواهند بود که بتوان کار را بر مبنای آنها آغاز کرد.
فاز Elaboration: بهبیان یک معماری کاربردی میپردازد که سعی میکند ریسکهایی که در فاز آغازین شناسایی شدهاند را کاهش دهد.
فاز Construction : ساخت افزایشی بر اساس فازهایی که پیشتر به آن اشاره کردیم فرآیند طراحی محصول را کامل میکند.
فاز Transition : در این فاز سیستم وارد محیط عملیاتی میشود.
از جمله مزایای این مدل به موارد زیر میتوان اشاره کرد:
• همواره یک نسخه در حال اجرا از برنامه کاربردی وجود دارد.
• اگر زمان کافی وجود نداشته باشد، این امکان وجود دارد تا آخرین نسخهای که ساخته شده است به مشتری تحویل داده شود. البته ممکن است همه قابلیتها در این نسخه وجود نداشته باشد اما به هر حال قادر است بعضی از وظایف را انجام دهد.
• این شانس را دارید تا منبع آخرین خطاهای بهوجود آمده را بهراحتی شناسایی کنید. بهسبب آنکه اطلاع دارید بهتازگی چه کدهایی را در فرآیند تکرار اضافه کردهاید که همین موضوع سرعت اشکالزدایی را بهطرز محسوسی افزایش میدهد.
• همواره این شانس را دارید تا بازخوردهای مثبتی را در مدت زمانی که برنامه در حال اجرا بوده است بهدست آورید.
• بهدلیل اینکه ویرایشهایی در اوایل توسعه انجام شده است، زمان کمتری برای فرآیند توسعه سپری خواهد شد.
یکی از بزرگترین معایبی که در ارتباط با مدلهای تکرارشونده وجود دارد این است که ممکن است شما را وسوسه کنند تا کدنویسی را بهسرعت آغاز کنید. اما همواره باید به این نکته توجه داشته باشید که پیش از آنکه کار خود را آغاز کنید باید یک ایده خوب از برنامهای که در نهایت ساخته خواهد شد، در اختیار داشته باشید. باید دقیقاً بدانید بهدنبال چه چیزی هستید.
اگر از علاقهمندان دنیای آیتی و فناوری باشید مطمئنا با واژههای UI و UX برخورد داشتهاید، دو اصطلاحی که بین طراحان وب یا اپلیکیشن و خورههای تکنولوژی بارها و بارها تکرار میشود، در این آموزش از همیار آی تی قصد داریم به طور کامل و با بیانی ساده با این دو مفهوم آشنا شده و تفاوت آنها را بشناسیم، بد نیست در ابتدا و به صورت خلاصه بدانیم که واژه UI مخفف عبارت User Interface و به معنای رابط کاربری و واژهی UX مخفف عبارت User Experience و به معنای تجربهی کاربری میباشد، در ادامه به طور کامل راجع به این دو اصطلاح بحث کرده و تفاوتها و شباهتهای آنها را بررسی میکنیم.
واژهی UI خلاصه شدهی عبارت User Interface میباشد که در زبان فارسی آن را با عنوان رابط، واسط یا نمای کاربری میشناسیم.
رابط کاربری شامل المانهای دیداری یک محصول میشود، به عنوان مثال در یک وبسایت یا اپلیکیشن، تمام تصاویر به کار رفته، رنگبندیها، طراحی ظاهری دکمهها و… میتوانند در بردارندهی مفهوم UI باشند.
طراحان رابط کاربری یا UI Designerها وظیفهی ایجاد یکپارچگی و زیباسازی ظاهری یک محصول، برنامه یا وبسایت را بر عهده دارند.
در مورد UI که مخفف User Interface هست اشاره به ظاهر و گرافیک یک سایت یا یک برنامه داره، وظیفه UI Designer ایجاد یک محیط گرافیکی جذاب هست، UX که مخفف User eXperience هست در حقیقت اشاره به این موضوع داره که طراحی یک برنامه یا سایت چقدر برای کاربر نهایی راحت هست، چیدمان المانها و دسترسی به بخشهای مختلف صفحات سایت یا برنامه توسط متخصص UX انجام میشه تا کاربر نهایی بهترین تجربه کاری رو با برنامه یا سایت داشته باشه.
در مورد Back-End و Front-End اینطور مثال بزنم بهتره، شما یک سایتی که طراحی میکنید قالب سایت توسط HTML و CSS طراحی میشه، شخصی که تخصصش در زمینه طراحی قالب و ظاهر وب سایت هست اصطلاحاً بهش متخصص Front-End گفته میشه، یعنی چیزی که توسط کاربر دیده میشه و قابل لمس هست، همین سایت طراحی شده شامل بخشی میشه که وظیفه ذخیره اطلاعات داخل بانک اطلاعاتی و یاد خوندن اطلاعات از بانک اطلاعاتی رو داره که این کار بوسیله ASP.NET یا PHP انجام میشه، کسی که تو این بخش کار میکنه اصطلاحاً بهش متخصص Back-End گفته میشه، بخشی که توسط کاربر قابل مشاهده نیست و در پشت زمینه انجام میشه.
اصطلاح UX مختصر شدهی عبارت User eXperience میباشد که میتوان آن را تجربهی کاربری معنا کرد، این مورد را میتوان تمام عواطف، احساسات و تجربهی کاربر از کارکردن با یک محصول دانست، باید بدانیم طراحی تجربهی کاربری بسیار گسترده بوده و خود میتواند در بردارندهی UI نیز باشد.
حال که کمی با مفهوم این دو واژه آشنا شدیم، با بررسی تصویر زیر بهتر آن را به خاطر میسپاریم.
شکل ظاهری ساعت یکی از عواملی است در خرید شما تاثیر گذار است، شکل و زیبایی ظاهری ساعت را میتوانیم به UI یا رابط کاربری (بصری – دیداری) تشبیه کنیم. در مرحلهی بعدی احتمالا شما ساعت را به مچ خود بسته و آن را از نظر راحتی و نحوهی استفاده بررسی میکنید، اگر استفاده از ساعت برای شما لذتبخش باشد، اصطلاحا میگوییم تجربهی خوبی از کار با ساعت به دست آوردهاید، این مورد را میتوانیم به UX یا تجربهی کاربری تشبیه کنیم.
مثال سس گوجه فرنگی در طراحی UI و UX یک محصول!
حتما بارها برای شما پیش آمده است که موقع مصرف یک سس گوجه فرنگی، دقیقا هنگامی که سس به انتها میرسد به سختی آن را از ظرف خارج میکنید و هرچه جعبهی سس را تکان میدهید سس باقی مانده در ظرف خارج نمیشود، هرچند این ظرفها ظاهر بسیار زیبا و چشمنوازی دارند اما از طرفی تجربهی چندان خوبی به شما منتقل نمیکنند.
با مشاهدهی این مشکل یکی از شرکتهایی که محصولات خوراکی تولید میکرد به این فکر افتاد که طراحی ظرف سسهای خود را تغییر دهد، آنها یک طرح عجیب برای ظروف سس خود به وجود آوردند، آن هم یک ظرف با سر پهن بود، به صورتی که شما به راحتی میتوانستید سس را به صورت سر و ته نگهداری کنید، هرچند ظاهر چندان جذابی نداشت اما مشکل قبلی را به خوبی حل کرد و مصرفکنندگان به راحتی میتوانستند تا انتها از محتوای سس مورد علاقهی خود لذت ببرند و این دقیقا همان تجربهی کاربری عالی برای مشتریان بود!
در اکثر مواقع زمانی که شما از یک برنامه یا وبسایت راضی نیستید، این امکان وجود دارد که مشکل از طراحی تجربهی کاربری نامناسب آن سرویس باشد، هرچند یک وبسایت میتواند از از لحاظ ظاهری زیبا باشد، اما در کنار آن باید احساس خوبی در کاربر ایجاد کند، از این رو میگوییم طراحی UI یکی از بخشهای زیر مجموعه طراحی UX است.
برای درک بهتر این موضوع همیار آی تی را مثال میزنیم، تمام آنچه که شما در ظاهر سایت میبینید، شامل رنگبندیها، فونت، تصاویر در دستهی UI یا طراحی رابط کاربری قرار میگیرند و در سمت دیگر، محل قرار گیری لینک و دکمهها، منوی دستهبندی بالای سایت، بخش جستجوی سایت و… به گونهای قرار دارند که شما بتوانید به راحتی آنها را پیدا کرده و مورد استفاده قرار دهید که در دستهی طراحی تجربهی کاربری یا UX قرار میگیرند.
میتوان UX را مانند چتری دانست که یکی از بخشهای آن مربوط به UI یا طراحی ظاهری یک محصول میباشد.
طراحی تجربهی کاربری را میتوان در ۶ بخش اصلی دستهبندی کرد، که عبارتند از:
حتما تا به حال با تفاوتهای UI و UX آشنا شدهاید، در ادامه به طور خلاصه به بررسی این مورد میپردازیم:
یک طراحی کاربر پسند (User Friendly) یعنی تمام اجزا و المانهای سایت یا برنامه به خوبی کار کرده، در جای صحیح خود قرار داشته باشند و همچنین کاربر بتواند به راحتی با طرح ارتباط برقرار کرده و نیاز او هنگام کار با سیستم فراهم شود.
به عنوان مثال اگر بخواهیم یک سایت را باهم بررسی کنیم، مواردی مانند واکنشگرا (ریسپانسیو) بودن سایت، محتوای با کیفیت، طراحی زیبا و چشمنواز، سرعت بارگذاری بالا، سادگی و شلوغ نبودن طرح از جمله مواردی هستند که میتوانند از ویژگیهای یک سایت کاربر پسند به شمار بیایند.
علاوهبر آن پیروی از اصول روانشناسی در طراحی یک سایت نیز میتواند به صورت مستقیم بر تجربهی کاربری یک وبسایت تاثیرگذار باشد، به شما پیشنهاد میکنیم آموزش رایگان ۸ قانون روانشناسی در طراحی یک وبسایت را مطالعه نمایید.
محصول کاربر پسند آن چیزیست که کاربر واقعا به آن علاقهمند شده و از کار کردن با آن لذت ببرد.
همانطوری که گفتیم یکی از مهمترین عواملی که در کاربر پسند بودن یک محصول یا خدمت نقش دارد، سادگی بصری و همچنین سادگی در کار با آن محصول است، به عنوان مثال فکر میکنید چرا موتور جستجوی گوگل در نهایت از یاهو پیشی گرفت و به انتخاب اول اکثر کاربران تبدیل شد؟ به نظر میرسد یکی از مهمترین عوامل موفقیت گوگل سادگی آن بود، در آن زمان که صفحهی نخست یاهو پر بود از لینکهای گوناگون و امکانات مختلف، صفحهی اصلی گوگل تنها از یک باکس جستجوی ساده تشکیل شده بود!
CI/CD وادار میکند که فرایندهای ساخت، تست و استقرار برنامهها به صورت خودکار انجام شوند. بدین وسیله به نحوی پلی بین فعالیتهای تیمهای «توسعهٔ نرمافزار DEVelopment» و «عملیات فناوری اطلاعات OPerationS» ایجاد میکند. فعالیتهای دواپس شامل توسعه پیوسته، آزمون پیوسته، یکپارچهسازی مداوم، استقرار پیوسته و نظارت مداوم بر نرمافزار در طول فرایند توسعه میباشد. 'اقدامات CI/CD زیربنای فعالیتهای دواپس را تشکیل میدهد.
CI/CD یکی از روشهای ایدهآل (به انگلیسی: best practice) برای تیمهای دواپس است. علاوه بر این، جزئی از متدولوژیهای توسعهی نرمافزاری چابک نیز به شمار میآید. با استفاده از CI/CD تیم توسعهی نرمافزار، فارغ از دغدغهی مسائل استقرار، میتواند به نیازمندیهای جلسات، کیفیت کد و امنیت رسیدگی کند.[۴]
استقرار پیوسته
استقرار پیوسته (به انگلیسی: Continuous deployment، اختصار: CD) رویکردی در مهندسی نرمافزار است که ویژگیها و قابلیتهای نرمافزاری به صورت پیاپی از طریق استقرار خودکار تحویل میشوند.[۵][۶][۷]
یکپارچه سازی مداوم
یکپارچه سازی مداوم
یکپارچهسازی مداوم یا ادغام مداوم (به انگلیسی: Continuous Integration، اختصار: CI) در برنامهنویسی به مجموعهای از روشها میگویند که باعث حفظ انسجام کد میشود و از بههمریختگی کد جلوگیری میکند. این روشها مبتنی بر ساختن مداوم پروژه پس از هر تغییر در کد توسط برنامهنویسان و اجرای تست کیسهای برنامه است. به عنوان مثال هر زمان که یک کامیت توسط توسعهدهنده بر روی مخزن پروژه پوش شود همهٔ تستها اجرا میشود تا بتوان اطمینان حاصل نمود که همهٔ قسمتهای پیشین کد و قسمتهای تازهنوشتهشده با یکدیگر سازگاری دارد و درست کار میکند.[۸]
تحویل پیوسته
تحویل پیوسته یا (به انگلیسی: Continuous Delivery، اختصار: CD) رویکردی در مهندسی نرمافزار است که به تیمها این قابلیت را میدهد که نرمافزار تولید شده را به روشی سریع و مطمئن برای انتشار و تحویل آماده کنند. این فرایند از لحظه اضافهشدن یا تغییر کد در source control شروع میشود و شامل ساخت (build)، تست، پیکربندی و انتشار در محیطهای مختلف تست و محیط عملیات میشود. این مفهوم در فارسی به «تحویل مداوم» یا «تحویل مستمر» ترجمه شدهاست.
به عبارت دیگر: تحویل مستمر توانایی اعمال تغییرات در محیط عملیات در هر لحظه با روشی سریع و مطمئن و بهطور کاملاً پایدار میباشد. این تغییرات شامل همه انواع آن از جمله تغییرات پیکربندی در نرمافزار، زیرساخت و پلتفرم، افزودن ویژگیهای جدید، رفع باگ و خطاها میشود.
به وسیله محیطهای تست مختلف، میتوان یک Deployment pipeline ایجاد کرد تا بتوان یک زیرساخت جدید را بهطور اتوماتیک ایجاد کرد و نرمافزار را روی آن منتشر کرد. منظور از زیرساخت سرور، سیستم عامل، سرویس دهندهٔ وب، virtualization، شبکه، پیکربندی و تنظیمات آنها میباشد. به کمک این محیطهای متوالی میتوان فعالیتهای طولانی یکپارچهسازی، تست عملکرد و تستهای پذیرش نهایی را به تدریج انجام داد. فرایند تحویل پیوسته در Deployment pipeline با یکپارچهسازی مداوم شروع میشود و با انتشار و پایان تست در هر محیط، انتشار و تست در مرحله بعدی شروع میشود. مجموع این کارها به صورت حلقههای یک زنجیر در پشت سر هم قرار گرفته و فرایند تحویل پیوسته را تشکیل میدهند.[۹]
ابزارهای پرکاربرد
ابزارهای CI/CD به تیمها این امکان را میدهند که استقرار، توسعه و تستکردنشان را به صورت خودکار انجام بدهند. بعضی از ابزارها به صورت خاصمنظوره برای بخش CI، بعضی برای CD و سایرین برای تست خودکار یا استفادههای دیگه توسعه یافتهاند.[۴]
یکی از بهترین ابزارهای متنباز در زمینهی CI/CD سرور خودکارسازی Jenkins است. یکی دیگر از فریموورکهای CI/CD برای بسترهای کوبرنتیز نیز پایپلاینهای Tekton هستند. علاوه بر اینها، چند ابزار متنباز دیگر عبارتند از: Spinnaker، GoCD، Concourse و Screwdriver.
در زمینههای دیگر
در زمینه ارتباطات شرکتی، CI/CD میتواند به فرایند کلی هویت سازمانی (Corporate Identity) و طراحی سازمان (Corporate Design) اشاره داشته باشد.
OS: GNU/Linux, deb-based
Backend: Nginx + php-fpm
DB: Mysql (standalone, master-slave), MongoDB (standalone, replica, sharding)
BI: Python + Scientific libs
Внутренняя инфраструктура сопровождения разработки, платформы сервиса:
SCM: Puppet
Monitoring: Zabbix
CI/CD: Jenkins
VCS: Git (GitLab)
Scripting: Bash, Python
Построение непрерывной интеграции и доставки (CI/CD);
Администрирование и настройка Linux-систем (RHEL, CentOS, Debian);
Администрирования HTTP-серверов (Nginx, Apache HTTP Server);
Написание и работа с SQL-запросами (PostgreSQL, MySQL);
Администрирование серверов приложений (PHP-FPM, PHP, Node.Js, Redis, RabbitMQ);
Построение непрерывной интеграции и доставки (CI/CD);
Опыт работы с системами контроля версий git;
Мониторинг доступности, производительности и создание проверок для системы мониторинга (Zabbix);
Автоматизация задач на скриптовых языках (Bash, sh).
Мы ожидаем от Вас:
Kubernetes / openshift - желательно;
Знание Linux-систем на уровне администратора (RHEL, CentOS);
Опыт построения непрерывной интеграции и доставки (CI/CD) - желательно;
Опыт поддержки прикладных систем на PHP или Java;
Умение писать запросы и работать с СУБД (PostgreSQL, MySQL);
Умение писать на скриптовых языках (Bash, sh).
داشتن ورژنهای مختلف فایلهای هر پروژه نرم افزاری و یا هر پروژه دیگری از قبیل فایلهای یک کتاب که در حال نگارش است و هر فایل یا مجموعه فایل دیگری، حتی در پروژههای فردی نیز امری مطلوب به نظر میرسد که فواید و کاربردهای خاص خود را دارد که البته این موضوع در پروژههای گروهی نه فقط مطلوب بلکه لازم و ضروری است.
نرمافزارهای مدیریت کد از لحاظ نحوه نگهداری و مدیریت کد (source control) به طور کلی به دو دسته توزیع شده (distributed) و متمرکز (centeralized) تقسیم میشوند:
سورس کنترل مرکزی یا Centeralized
در روش مرکزی یک server و تعدادی client وجود دارد. به این صورت که تمامی تغییرات در server ذخیره میشود و کاربران (برنامهنویسها) با استفاده از client تغییرات جدید را اعمال کرده و یا تغییرات دیگران را دریافت میکنند.
در این نوع سورس کنترلها دادههای مدیریتی و متادیتاها (metadata) بر روی سرور نگهداری میشود و کلاینتها تنها بخش یا کل سورس را در یک ورژن مشخص دارند و تاریخچه تغییرات بر روی هر کلاینت نگهداری نمیشود. در این روش اگر اطلاعات روی سرور مخدوش شود و یا به هر دلیلی سرور از کار بیافتد کلاینتها به مشکل بر میخورند و امکان checkin یا checkout فایلها وجود نخواهد داشت.
سورس کنترل توزیع شده یا Distributed
در روش مرکزی server حذف شدهاست و هر فرد میتواند یک server باشد و تاریخچه کامل را در اختیار داشته باشد. در این دسته تغییرات میتواند بدون در اختیار داشتن ارتباط آنلاین انجام شود.
در روش توزیع شده برای برطرف کردن مشکلات روش متمرکز یک کپی کامل از همه فایلهای پروژه و تاریخچه تغییرات هر فایل و همچنین فایلهای مدیریتی و متادیتاها نزد تک تک کلاینتها وجود دارد. با این حساب اگر سرور در دسترس نباشد هر کلاینت مستقلا کار میکند و حتی امکان بازیابی اطلاعات از روی کلاینتها بر روی سرور نیز وجود دارد.
قبلا برای کنترل ورژنهای مختلف یک فایل، از روشهای مختلف از قبیل subversion استفاده میشد که تغییرات نسبت به ورژن قبل را نگه میداشت، البته این روش در کارهای تیمی نیاز به سرور مرکزی داشت و محدودیتهایی از قبیل اینکه کاربران باید به صورت آنلاین و برخط کار میکردند آزار دهنده بود و یا اینکه داشتن همه نسخهها برای کاربران امکان پذیر نبود و یا با زحمت زیادی همراه بود. اما با معرفی روش توزیع شده در گیت (git) در سال ۲۰۰۵ توسط مخترع لینوکس (linus torvalds)، همه برنامه نویسان و گسترش دهندگان نرم افزار به برتری این روش اذعان کردند و هم اکنون بسیاری از شرکتهای بزرگ نیز پروژههای خود را با این روش در سایتهای مانند github, gitlab و یا سایر سرویسهای موجود که مبتنی بر git هستند نگهداری میکنند. با این حال هنوز هم هستند شرکتهایی که از روشهای قدیمی مانند داشتن یک فایل متن در هر پوشه،هارد کپی و ... استفاده مینمایند.
اگر مایلید که اطلاعات بیشتری در خصوص source controlها داشته باشید با ما همراه شوید چرا که در ادامه به بررسی چند سرویس پرطرفدار و پرکاربرد نظیر github و tfs خواهیم پرداخت.
فرق بین TFS،SVN و GIT در چیست؟
stackoverflow.com
گروه(ها): Git TFS SVN وضعیت پیوند: 301, MovedPermanently
چرا نباید از TFS استفاده کرد؟!
من از SVN استفاده میکنم و قصد تعویضش رو هم ندارم. SVN مانند Git توزیع شده نیست و ... برای کار من هم اهمیتی ندارد. سازگاری بسیار مناسبی با ویندوز دارد. برنامه Visual SVN Server و همچنین افزونه VisualSVN، کار کردن با SVN را تحت ویندوز و با VS.NET بسیار لذت بخش میکنند. تمام امکانات یک سورس کنترل عالی را هم دارد و من کم و کسری در آن نمیبینم.
از TFS و SVN استفاده میکنم.
SVN به جهت هماهنگی با محیطهای غیر از windows و visual studio کارآمدتر است. مثلا به راحتی میتوانید یک فولدر را با آن کنترل کنید.
به SQL Server هم وابسته نیست. کلا چون مایکروسافتی نیست دست شما خیلی باز تره. البته تنظیم کردن پلاگینها و ابزارهای جانبی با آن بسیار زمان برتر است.
TFS به جهت متمرکز بودن ابزارهای جانبی در آن مانند workflow و issue Traker و ... کارآمدتر است. به لحاظ مدیریتی من این گزینه را بیشتر میپسندم، چون در محیط شرکت ابزارهای جانبی آن کارایی مناسبی دارد، از زمانی هم که پلاگین eclipse آن آمده حتی پروژههای تحت eclipse (آندروید،جاوا،php) را هم با آن کنترل میکنیم.
با توجه به این که مجموعه ابزارهای مجتمع TFS نسبت به SVN بیشتر و مدیریت آن سادهتر است فعلا این گزینه برای من ارجحیت دارد.
البته مقایسه TFS با SVN و Git و مرکوریال و امثال آن کمی زیاده روی است، چون TFS یک ابزار ALM است (Application Life-cycle Management) و مابقی فقط و فقط سورس کنترل هستند.
اما کسانیکه مثلا با SVN کار میکنند یا Git، مابقی کارها رو توسط مثلا Jira که با اینها به خوبی یکپارچه میشود مدیریت میکنند. البته Jira فقط یک نمونه است. عدهای دیگر از ترکیب SVN، TeamCity و YouTrack استفاده میکنند و الی آخر. در این حالت دست بازتر است برای انتخاب.
با نصب Team Foundation Productivity Power Tools میتوانید محتویات فولدرهای گزارشات خود را خارج از Visual Studio و در محیط خود ویندوز مدیریت کنید
چیزی که متوجه شدم اینه که اگر چند نفر قرار باشه خارج از شبکه با این سیتمها کار کنند، باید یک سرور ( یک سیستم با Static IP ) داشته باشیم، آیا این تصور بنده صحیح است ؟
اینها دیگر مسایل مدیریت شبکه است. خارج از شبکه اگر منظور شما کارمندان یک شرکت هستند که قرار است به شبکه داخلی متصل شوند ... میشود از V.P.N استفاده کرد (در شبکه داخلی باید این سرور تنظیم شود و بله باید برای دسترسی از بیرون IP ثابت داشته باشد). زمانیکه کارمندی با V.P.N به شبکه شرکت متصل میشود، جزئی از شبکه داخلی خواهد شد و بر اساس سطح دسترسی تعریف شده، به منابع داخلی شبکه منجمله سورس کنترل، دسترسی خواهد داشت.
اگر قرار است برای عموم دنیا اینکار را انجام دهید میشود از یک VPS استفاده کرد با IP مشخص؛ یا حتی میتونید از سرویسهایی مانند bitbucket.org هم استفاده کنید. مهمترین مزیت آن دسترسی به private repository رایگان است.
من مدتهاست از TFS استفاده کردم ولی به خاطر هزینهی بالاش و البته اینکه Windows Server ندارم برای این پروژه،تصمیم گرفتم از SVN استفاده کنم ولی متاسفانه نفهمیدم بعضی جاهاشو و خب تا برام حل نشه نمیتونم ازش استفاده کنم!(ebook شما رو هم خوندم و خب خیلی خوب بود)ولی هنوز بعضی چیزا برام مبهمه:
اولا تفاوت Visual SVN و TortoiseSVN رو نمیفهمم؟!آیا دو تا رابط جدا هستند و کارایی یکسانی دارند یا هر کدوم کاربری متفاوت داره؟(چون اینطوری که اینجا نوشته برای نصب VisualSVN باید TortoiseSVNرو هم نصب کرد) دوما اینکه نمیفهمم باید SubVersion رو هم جدا نصب کنم یا همین رابطهای کاربری گرافیگی کافی هستند؟
از طرفی تا جایی که من خوندم برای Visual Studio 2012 باید 3.0 Visual SVN رو نصب کنم که من اینو از اینجا http://www.visualsvn.com/visualsvn/download/ دانلود میکنم ولی مثل ورژن قبلیش محیط Visual SVN Server رو نداره،برا همی Reopsitory رو باید با استفاده از TortoiseSVN (همونطور که توکتاب توضیح دادید ایجاد کنم که قبلا یک جا خوندم Repository که TortoiseSVNبه صورت Local هست.برای همین نفهیمدم به چه دردی میخوره اگه Local باشه؟!
- راهنمای سریع نصب SVN
و چند نکته:
- SVN یک سرور است که البته برای اجرا نیازی به ویندوز سرور ندارد. روی ویندوز XP هم نصب میشود.
- TortoiseSVN کلاینت SVN است. با استفاده از آن نیازی نیست تا فرامین کار کردن با SVN را حفظ کنید. با Windows explorer یکی میشود و بعد از آن در کلیک راست آن حضور خواهد داشت.
- Visual SVN Server یک نصاب ساده کننده نصب SVN در ویندوز است. خصوصا اینکه اعتبار سنجی یکپارچه با ویندوز را هم به صورت خودکار ارائه میدهد.
- Visual SVN یک افزونه است برای VS.NET جهت یکپارچه کردن آن با امکانات TortoiseSVNدرون ویژوال استودیو. یک نسخه رایگان هم به نام AnkhSVN بجای آن وجود دارد.
انتخاب بین SVN و git
مدتهاست که به دنبال خلاصی از دست SourceSafe هستیم ولی چون رییس نمیخواهد، نمیشود که نمیشود. رییس آنقدر به SourceSafe علاقه دارد که من خودم هم بعضی وقتها یادم میرود چرا میخواهم آن را کنار بگذارم. برای جایگزینی SourceSafe دو گزینه را نامزد کردهام: SVN و git. ولی متاسفانه انتخاب بین این دو برایم آنقدر سخت شده که بیحساب.
git در این دو سه ساله محبوبیت خیلی خیلی زیادی پیدا کرده است و روز به روز در حال پیشی گرفتن از SVN بوده است. git امکانات خیلی خوبی برای تیمهای decentralize دارد. به عنوان مثال وقتی که سرور خاموش است یا به اینترنت دسترسی ندارید باز هم میتواند از نسخه local خود به عنوان یک سورس کنترل استفاده کنید و بعداً که به سرور دسترسی پیدا کردید آن check-inهای local را به راحتی در سرور اصلی check-in کنید.
هم git و هم SVN محبوبیت خوبی در پروژههای کدباز دارند ولی حدس میزنم جا افتادن git در شرکتهای ایرانی خیلی طول بکشد. چون با وجود add-inهایی که برای Visual Studio دارد (مثل Git Extension) باز هم مهمترین ابزار کار با آن git bash است که یک ابزار خط فرمانی است. از دیگر سو SVN در حال حاضر توسط تعدادی از برنامهنویسان ایرانی و قاعدتا شرکتهای ایرانی مورد استفاده قرار میگیرد. add-inهای معروفتری مثل AnkhSVN دارد و رابط معروفی مثل TortoiseSVN دارد.
اگر از git استفاده کنم به طور حتم باید قید جا افتادن آن در شرکت خودمان را هم بزنم، چون ظاهر خط فرمانی و ریشه تمام لینوکسی آن هر کسی را وحشتزده میکند و اگر از SVN استفاده کنم میترسم که بیخودی خودم را از قافله فناوری عقب انداخته باشم. خصوصاً این که برای خودم احتمال کار روی پروژهها به صورت decenteralize بیشتر است.
توجه: StackOverflow پر است از بحثهای مقایسه git و SVN.
به روز رسانی: برای مقایسه این دو از دید یک برنامهنویس ایرانی، نگاهی هم به اینجا بیندازید.
Git revision control Source Control SourceSafe Subversion
انتخاب React یا Angular
درباره TFS هم یه تحقیق بکن
جوامع Open Source بیشتر از git و SVN استفاده میکنند تا TFS.
با توجه به این که برنامه نویسان دائما کد خود را اصلاح میکنند، پیگیری تغییرات امری بسیار مهم میباشد. با استفاده از سیستمهای کنترل نسخه نرم افزاری مانند (Apache Subversion (SVN میتوانید تیم خود را در یک صفحه نگاه دارید. در این دوره با نحوه استفاده از SVN برای پیگیری تغییرات کد خود و ادغام تغییرات متقابل، مفاهیم کلیدی و اصطلاحات نظیر trunks، commits و revisions، نحوهی ایجاد پروژه جدید جاوا، ایجاد تغییرات و ایجاد شاخهها آشنا میشوید. مدرس این دوره چگونگی پیدا کردن و حل اختلافات با استفاده از Eclipse، ایجاد یک انتشار و استفاده از SVN و Git را با هم بررسی میکند.
مباحث دوره:
Trunks، برچسبها و شاخهها
Checkout،commits و revisions
ادغام، قفل کردن، و کار با یک تیم
TortoiseSVN در ویندوز
یکپارچه سازی SVN با Eclipse
اتصال به یک پروژه
ایجاد یک پروژه جدید جاوا در Eclipse
اتصال به پروژه جاوا موجود با استفاده از Eclipse
کار با پروژههایی که به مکان جدید منتقل میشوند
ایجاد تغییرات و ایجاد شاخهها
ردیابی تغییرات و برخورد با اختلافات
ایجاد یک انتشار
سرفصلها:
معرفی
خوش آمدگویی
چیزی که باید بدانید
فایلهای تمرین
مفاهیم و اصطلاحات
مزایای کنترل نسخه: پشتیبان گیری، تاریخ، کار در تیم
Trunks، برچسبها و شاخهها
Checkout،commits و revisions
ادغام، قفل کردن، و کار با یک تیم
سرور شما: VisualSVN در ویندوز
سرور شما: Apache SVN در Mac
کلاینت خط فرمان
TortoiseSVN در ویندوز
ادغام SVN با Eclipse
نسخههای SVN، سازگاری به جلو / عقب و لینکها
اتصال به یک پروژه
ایجاد پروژه جدید جاوا در Eclipse
اتصال به یک پروژه جاوا موجود با استفاده از Eclipse
کار با پروژههایی که به مکان جدید منتقل میشوند
ایجاد / اتصال با استفاده از خط فرمان
ایجاد / اتصال با استفاده از TortoiseSVN
ایجاد تغییرات و ایجاد شاخهها
اولین commit: ایجاد یک تغییر، ایجاد یک نظر
به روز رسانی و همگام سازی
ایجاد شاخه با استفاده از Eclipse
به روزرسانی شاخه با آخرین تغییرات از تنه با استفاده از Eclipse
بازگشت شاخه به تنه با استفاده از Eclipse
پاک کردن شاخه با استفاده از Eclipse
ایجاد / به روز رسانی / ادغام با استفاده از TortoiseSVN
ایجاد / به روز رسانی / ادغام با استفاده از خط فرمان
تغییرات ردیابی و مقابله با اختلافات
تفاوت بینایی و تاریخچه با استفاده از Eclipse
مشاهده و حل اختلافات با استفاده از Eclipse
رولینگ تغییرات
درگیری / درگیری / عقبگرد با استفاده از TortoiseSVN
شاخهها و برچسبها برای عکسهای فوری با استفاده از Eclipse
ذخیره کد کامپایل شده (باینری) در SVN با استفاده از Eclipse
انتشارها/ عکسهای فوری/ باینریها با استفاده از TortoiseSVN
انتشارها/ عکسهای فوری/ باینریها با استفاده از خط فرمان
منابع تکمیلی
استفاده از SVN و GIT
اطلاعات تکمیلی و پیوندها
نتیجه
مراحل بعدی
سورس کنترل چیست؟ SVN چیست؟
سرس کنترل عبارت است از سیستمی برای کنترل و پیگیری تغییرات واحد اطلاعاتی دخیل در ایجاد یک برنامهٔ نرمافزاری. واحد اطلاعاتی مزبور میتواند شامل فایلهای سرس، راهنماها، میک فایلها، اشیاء نرمافزاری و .... سرس کنترل به خصوص در جایی اهمیت پیدا میکند که چند برنامهنویس بخواهند روی منابع مشترکی کار کنند. در این صورت است که مفاهیمی همانند مقایسه، ترکیب، تداخل و ... پیش میآیند که سرس کنترل باید بتواند راه حل مناسبی برای هر یک ارایه دهد. امروزه معمولاً از ابزارهای نرمافزاری برای این کار استفاده میشود. با این حال هنوز هم هستند شرکتهایی که از روشهای قدیمی مانند داشتن یک فایل متن در هر پوشه،هارد کپی و ... استفاده میکنند.
سرس کنترل عبارت است از سیستمی برای کنترل و پیگیری تغییرات واحد اطلاعاتی دخیل در ایجاد یک برنامهٔ نرمافزاری. واحد اطلاعاتی مزبور میتواند شامل فایلهای سرس، راهنماها، میک فایلها، اشیاء نرمافزاری و .... سرس کنترل به خصوص در جایی اهمیت پیدا میکند که چند برنامهنویس بخواهند روی منابع مشترکی کار کنند. در این صورت است که مفاهیمی همانند مقایسه، ترکیب، تداخل و ... پیش میآیند که سرس کنترل باید بتواند راه حل مناسبی برای هر یک ارایه دهد. امروزه معمولاً از ابزارهای نرمافزاری برای این کار استفاده میشود. با این حال هنوز هم هستند شرکتهایی که از روشهای قدیمی مانند داشتن یک فایل متن در هر پوشه،هارد کپی و ... استفاده میکنند.
این نرم افزار علاوه براینکه این امکان را فراهم میکنند که شما به صورت گروهی روی یک سورس کار کنید از سورس شما محافظت میکند ؛ همیشه یک نسخه به روز از سورس در یک مکان امن قرار دارد، تمامی تغییرات محفوظ میماند، حتی شما میتوانید قطعه کدی که سالها پیش نوشته اید را بازیابی نمایید و...
خیلی از ما تا کنون نام نرم افزارهای Source Control را نشنیده ایم، برخی شنیده ولی استفاده نکردایم بعضی دیگر هم بدون این نرم افزارها حتی یک خط کد حاضر نیستیم بنویسیم !
نرم افزارهای Source Control زیادی وجود دارد که برخی از آنها عبارتند از :
Microsoft Visual Source Safe
Rational Clear Case
Microsoft Team Fundation Server
CVS
Visual Source Hide
Subversion
نصب و کار کردن با برخی از این نرم افزارها مانند Source Safe و Team Fundation و Rational Clear بسیار مشکل بوده و توسعه گر را از ادامه کار خسته میکند، برخی هم فقط برای لینوکس بوده و در ویندوز کارایی ندارند (مانند CVS که نرم افزار بسیار خوبی میباشد) و اما نرم افزار SVN یا Subverion که یکی از قویترین و مشهورترین نرم افزارهای سورس کنترل در دنیا میباشد و علاوه بر سادگی، رایگان و سورس باز بودن از ویژگیهای زیادی نسبت به سایر نرم افزارها برخوردار است .
این نرم افزار دارای یک سرور و یک کلاینت میباشد، دقت نمایید که معمولا نرم افزار سرور را در یک PC یا Server جداگانه نصب میکنند تا تمامی سورسها و نسخههای آن در یک دستگاه دیگر و در یک جای امن باشد، اما در صورت نداشتن یک دستگاه جداگانه میتوانید سرور و کلاینت را در یک کامپیوتر نصب نمایید .
برای شروع کار ابتدا نرم افزار Visual SVN Server را دانلود کرده و نصب نمایید، در هنگام نصب تمام موارد را به صورت پیش فرض انتخاب نموده تا به تنظیمات زیر برسید :
فیلد Server Port را به 8443 تغییر داده، همچنین میتوانید فیلد Repositories را به دلخواه تغییر دهید، این مسیری است که تمام سورسها و نسخهها در آن ذخیره خواهد شد، نحوه تشخیص هویت را هم به صورت پیشفرض Use Subversion Authentication انتخاب نمایید .
دکمه Next را انتخاب کرده و عملیات نصب را به اتمام برسانید .
نرم افزار Visual Svn Server را اجرا کرده و قبل از هرچیز یک User ایجاد نمایید :
پس از ایجاد یک User جدید، روی درختواره Repositories کلیک راست نموده و گزینه Create New Repository را برگزینید.
در پنچره باز شده نام پروژه خود را وارد نمایید (پروژهای که قرار است تحت سورس کنترل قرار گیرد ) :
و سپس تیک Creat default structure را بزنید و در نهایت روی دکمه OK کلیک نمایید تا Repository ایجاد شود . تنها چیزی که ما الان لازم داریم آدرس Repository است، برای اینکار روی Repository که ایجاد کرده اید کلیک راست کرده و گزینه Copy URL to Clipboard را انتخاب نمایید.
این آدرس را در یک جا Paste نمایید چون در مرحله بعد به آن نیاز خواهیم داشت .
اکنون مخزن سورسهای ما آمادست، کار ما با Visual SVN Server تمام شده است، همچنین اگر این نرم افزار را روی یک PC دیگر نصب کردید کار ما با این PC نیز تمام شده است اکنون به سراغ کامپیوتری که سورسهای ما در آن قرار دارد میرویم .
برای کلاینت سورس کنترل، نرم افزارهای زیادی وجود دارد از جمله نرم افزار TortoiseSVN که رایگان بوده و میتوانید آن را از اینجا دانلود نمایید .
پس از دانلود و نصب نرم افزار tortoiseSVN به سراغ پوشه پروژه خود بروید، روی پوشه پروژه کلیک راست کرده و گزینه SVN Checkout را انتخاب کنید :
اکنون همان آدرسی که در مرحله قبل ذخیره کرده بودید (توسط Copy URL to Clipboard) را در این فیلد URL of repository وارد نمایید :
به فیلد ckeckout directory بسیار دقت نمایید، دراین فیلد باید آدرس پوشه پروژه را بدهید، اگر پروژه شما به نام MyWebsite و در C:InetpubWwwroot قرار دارد checkout directory باید C:InetpubwwwrootMywebsite باشد، بقیه فیلدها را هم به صورت پیشفرض رها کنید .
دکمه OK را بفشارید، احتمالا پیغام The target folder is not empty را دریافت خواهید کرد، گزینه Yes را انتخاب کنید و سپس Accept Permanently را برگزینید، در پنجره باز شده Username و Password که در Visual SVN Server ساخته بودید را وارد کرده و تیک Save Authentication را بزنید تا هر دفعه نیاز به وارد کردن این اطلاعات نباشد .
با این کار این پوشه به عنوان سورس Repository شما معرفی خواهد شد .
برای قرار گرفتن سورسها در Repository کافیست روی پوشه پروژه کلیک راست کرده و این دفعه گزینه "SVN Commit" را بفشارید :
یک پنجر مشابه پنجره زیر گشوده خواهد شد :
در بخش بالایی (Message) میتوانید توضحیاتی در مورد تغییرات خود روی پروژه بنویسید، در بخش پایینی فایلهایی که تغییر کرده است نمایش داده شده است، با انتخاب گزینه Select / Deselect all میتوانید همه فایلها را انتخاب نمایید . چون بار اولی است که این کار را برای پروژه انجام میدهید لازم است تا همه فایلها انتخاب شود بنابراین هم تیک Show universioned files و هم تیک select all را بزنید تا همه فایلها انتخاب گردد .
کار تقریبا تمام شده است، فایلهای شما در Repository قرار گرفته و ورژن اول سورس شما ایجاد شده است .
از این پس میتوانید پس از تغییر دادن در سورس پروژه (مثلا اضافه کردن یک ماژول و یا برطرف کردن یک Bug) همین کار را تکرار کنید، یعنی روی پوشه پروژه راست کلیک کرده و گزینه Commit را بفشارید، پیشنهاد میکنم حتما در قسمت Message توضیحات تغییرات خود را به دقت بنویسید چرا که با زیاد شدن Versionها در پیدا کردن یک نسخه از سورس خود به مشکل بر میخورید.
Comparison of version-control software - Wikipedia
فریمورک برنامه نویسی، چارچوبی برای توسعه و برنامه نویسی نرمافزار است که ساختار اصلی و چارچوب برنامه نویسی نرم افزاری را که قرار است ایجاد شود، مشخص میکند. این، کار برنامه نویسان را آسانتر میکند و از رویکردهای توسعه شیء و مؤلفه گرا پشتیبانی میکند.
به عنوان نوعی چارچوب اساسی، یک چارچوب بلوکهای ساختمانی قابل استفاده مجدد را برای مشکلات و برنامههای مختلف فراهم میکند. بلوکهای ساختمانی عملاً از قبل برنامه ریزی شدهاند و نیازی به توسعه از ابتدا ندارند.
اصطلاح فریم ورک اغلب در محیط IT به ویژه در زمینه توسعه نرمافزار و برنامهنویسی استفاده میشود. اصطلاحات آلمانی برای چارچوب عبارتند از چارچوب، ساختار اساسی، چارچوب توسعه، چارچوب نظارتی یا چارچوب / فریمورک برنامه نویسی. هیچ تعریف جهانی و مطلقی از چارچوب وجود ندارد. گاهی اوقات تعابیر و کاربردهای متفاوتی از این اصطلاح وجود دارد.
به طور کلی، فریمورک برنامه نویسی به چارچوبی گفته میشود که ساختار اصلی و چارچوب برنامهنویسی یک مشکل یا نرم افزاری را که باید برنامه ریزی شود، مشخص میکند. این کار برنامه نویسان را آسانتر میکند و از رویکردهای توسعه برنامهنویسی شی گرا و مبتنی بر مؤلفه پشتیبانی میکند. توسعه دهندگان از بلوکهای سازنده، توابع و اجزای چارچوب از پیش برنامه ریزی شده و قابل استفاده مجدد استفاده میکنند. اینگونه است که چارچوب، معماری اصلی برنامهها را تعیین میکند.
یک چارچوب یا فریم ورک برنامه نویسی به خودی خود یک برنامه کامل نیست. برنامهنویس، برنامه را در ساختار سفارش مشخص شده توسط چارچوب ایجاد میکند. مزیت استفاده از فریم ورک این است که بلوکهای ساختمان، توابع و مؤلفهها لازم نیست برای هر برنامه جدید توسعه یافته باشند و از مشکلات یا موارد استفاده خاص پشتیبانی کنند. چارچوبها برای بسیاری از وظایف توسعه مانند توسعه برنامههای کاربردی دسکتاپ و موبایل، برنامههای کاربردی وب، خدمات وب، برنامههای کاربردی آزمایشی یا برنامههای front-end و back-end و بسیاری موارد دیگر وجود دارند.
ساختار و اجزای یک فریمورک برنامه نویسی
با توجه به انواع مختلف و موارد استفاده فریمورکها، ساختار و اجزای آن میتوانند بسیار متفاوت باشند. مشخصات معماری و محتوا مختص دامنه یا محدود به موارد استفاده خاص است.
چارچوبها از کلاسهای مختلفی تشکیل شدهاند که تعاملات آنها تعریف شده است. الگوهای طراحی و اجزای چارچوب، نظم و ساختار طراحی برنامههایی را که قرار است ایجاد شوند، تعیین میکند. چارچوبها تا حدی به گونهای طراحی شدهاند که شامل قطعات دائمی و متغیر باشند. قطعات دائمی عملکرد اصلی را تشکیل میدهند و با عناصر قابل تغییر و طراحی جداگانه برای یک منطق برنامه خاص گسترش مییابند.
اجزای مشخص فریمورکهای برنامه نویسی، به عنوان مثال، محیطهای زمان اجرا، قالبها، ماژولهای استاندارد، APIها (واسطهای برنامهنویسی کاربردی) و کتابخانهها هستند. برنامه نویسان میتوانند به صورت انعطافپذیر به اجزا دسترسی داشته باشند. با این حال، استفاده تنها در چارچوب معماری و الگوی تعامل مشخص شده امکانپذیر است.
سعی کنید اصطلاحات چارچوب، SDK، پشته و کتابخانه را تعریف کنید
در محیط IT و برنامه نویسی، اغلب از اصطلاحاتی مانند چارچوب، SDK، پشته و کتابخانه استفاده میشود. انتقالها تا حدی روان هستند و به طور کلی تعریف نشده اند. گاهی اوقات خود تولیدکنندگان پلتفرمهای برنامه نویسی را Framework یا SDK مینامند. در زیر تلاشی برای تمایز بین اصطلاحات مختلف است.
SDK مخفف عبارت Software Development Kit است. در حالی که یک چارچوب یک ساختار پایه و یک ساختار سفارش برای اجرای یک برنامه برای یک برنامه خاص یا یک مشکل خاص است، یک SDK ابزارهای مورد نیاز برای برنامه نویسی بر روی پلتفرم مورد استفاده را فراهم میکند. این ابزارها را میتوان برای برنامه نویسی در چارچوب داده شده مورد استفاده قرار داد، اما هیچ مشخصات خاصی برای معماری و ساختار اولیه برنامههای ایجاد شده ارائه نمیدهد.
پشته، که به عنوان پشته نرمافزار یا پشته راه حل نیز شناخته میشود، از فناوریهای انتزاعی و منطقی انباشته شده تشکیل شده است. شما نقشهای خاصی را بر عهده میگیرید و اجزای کاربردی را برای حل یک کار ارائه میدهید. پایینترین جزء اغلب با سختافزار ارتباط برقرار میکند و برای مثال یک سیستم عامل است. بالاتر از این اجزایی مانند نرمافزار سرور، پایگاههای داده، کامپایلرها، کتابخانهها، محیطهای زمان اجرا و غیره هستند. جریان اطلاعات در یک پشته بین اجزا از طریق رابطهای تعریف شده انجام میشود.
نمونهای از پشتههای شناخته شده LAMP (لینوکس، آپاچی، MySQL،PHP) است. برای توسعه و بهره برداری از برنامههای کاربردی وب و خدمات وب استفاده میشود و از سیستم عامل لینوکس، وب سرور آپاچی، سیستم پایگاه داده MySQL و مفسر اسکریپت سمت سرور PHP تشکیل شده است.
کتابخانه مجموعهای از زیربرنامهها، زیر روالها یا توابع آماده است که میتواند برای حل یک مشکل در کد برنامه فراخوانی شود. زیربرنامهها، زیر روالها و عملکردهای یک کتابخانه از نظر موضوعی با یکدیگر مرتبط هستند. کتابخانهها زیرروالهایی را برای زبانهای برنامه نویسی ارائه میکنند که میتوان از آنها برای حل مسائل ریاضی، ایجاد خروجیهای گرافیکی یا تجزیه متون استفاده کرد.
چرا انتخاب و یادگیری زبان یا فریمورک مناسب برای توسعه دهندگان مهم است؟
اگرچه یادگیری زبانها و فریمورکهای جدید برای شما سرمایهگذاری زمانی قابل توجهی است و چه از نظر پول و چه در زمان کاری، بازدهی مستقیمی از آن دریافت نخواهید کرد. اما فناوری همیشه تقریباً هر سال در حال تغییر است، بنابراین ایده همگام شدن با زمان مهم است و انتخاب زبانها و چارچوبهای مناسب حتی میتواند زندگی شما را بهبود بخشد، روش کسب و کار شما را متحول کند و به توسعه کمک زیادی خواهد کرد.
انواع مختلف فریمورک(چارچوب اساسی) برنامه نویسی:
نمونههایی از فریمورکهای شناخته شده:
در زیر چند نمونه از فریمورکهای شناخته شده و پرکاربرد آورده شده است:
دات نت (net.)
برای توسعه و اجرای برنامهها برای سیستم عامل مایکروسافت ویندوز در نظر گرفته شده است. این روششناسی توسعه برنامههای کاربردی را در سیستمهای مایکروسافت یکپارچه و ساختار میدهد. فریم ورک دات نت از انواع زبانهای برنامه نویسی پشتیبانی میکند. برای کاربران، چارچوب دات نت به عنوان میانافزار عمل میکند، بدون آن برنامههایی که از فریم ورک استفاده میکنند قابل اجرا نیستند.
بوت استرپ (Bootstrap)
یک فریم ورک فرانتاند برای طراحی رابط کاربری برنامههای کاربردی وب و وب سایتها است. این شامل عناصر طراحی مبتنی بر HTML و CSS است. به عنوان مثال، میتوانید از آنها برای ایجاد فرمها، نوارهای پیمایش، پنجرههای ورود، دکمهها، جداول و موارد دیگر استفاده کنید.
یک مثال شناخته شده از یک چارچوب وب، جنگو است. این در پایتون پیادهسازی شده است و گزینههای مختلفی را برای برنامه نویسی وب سایتهای پویا و دسترسی به پایگاههای داده مبتنی بر SQL ارائه میدهد.
انگولار (Angular)
یک فریم ورک کاربردی وب فرانتاند تحت مجوز منبع باز است.
این توسط گوگل توسعه یافته و بر اساس جاوا اسکریپت است. برنامههای وب پویا را میتوان با Angular توسعه داد.
ویو (Vue)
یک فریمورک جاوا اسکریپت بسیار محبوب است که در سالهای گذشته به شدت رشد کرده است. Vue توسط Evan You زمانی که در Google بر روی AngularJS کار میکرد، ایجاد شد.
چرا Vue محبوب است؟
Vue یک چارچوب جاوا اسکریپت پیشرونده برای ساخت رابط است. از ابتدا به گونهای طراحی شده است که به صورت تدریجی قابل پذیرش باشد. یکی از مزیتهای اصلی Vue این است که با افزودن ادویههای خود به آن، مواد خوب بسیاری را از رقبای خود (Angular و React) گرفته است.
Vue از محبوبیت بالایی برخوردار است؛ به دلیل سادگی، انعطاف پذیری و مهمتر از همه که صرفاً با جاوا اسکریپت نوشته شده است. با این حال، Vue هنوز جدید است، جامعه هنوز کوچک است و اکثر توسعه دهندگان غیر انگلیسی زبان هستند.
ریکت (React)
React.js که معمولاً React نامیده میشود، یک فریمورک جاوا اسکریپت است که برای ساخت رابطهای کاربری استفاده میشود. هر برنامه وب React از اجزای قابل استفاده مجدد تشکیل شده است که بخشهایی از رابط کاربری را تشکیل میدهند.
داشتن این مولفههای قابل استفاده مجدد، توسعه را آسانتر میکند، زیرا نیازی به تکرار کدهای تکراری نداریم. ما فقط باید منطق آن را ایجاد کنیم و مؤلفه را در هر بخشی از کد که مورد نیاز است وارد کنیم.
React نیز یک اپلیکیشن تک صفحهای است. بنابراین به جای ارسال درخواست به سرور هر بار که قرار است صفحه جدیدی ارائه شود، محتویات صفحه مستقیماً از اجزای React بارگذاری میشود. این منجر به رندر سریعتر بدون بارگیری مجدد صفحه میشود.
نمونههای دیگر از چارچوبها عبارتند از:
- Qt: چارچوبی برای ایجاد رابط کاربری گرافیکی.
- آپاچی اسپارک: چارچوبی برای محاسبات خوشه ای.
- دروپال: یک چارچوب مدیریت محتوا.
- Robot: چارچوبی برای انجام تست خودکار نرم افزار.