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

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

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

فناوری‌ها و خدمات مهندسی نرم‌ افزار به کاربران برای بهبود بهره‌وری و کیفیت یاری می‌رساند. نمونه‌هایی از زمینه‌های بهبود: پایگاه داده‌ها، زبان‌ها، کتابخانه‌ها، الگوها، فرایندها و ابزار.

مهندسی نرم افزار یکی از مهم ترین عوامل علم مهندسی کامپیوتر و از دروس اصلی تمامی مقاطع رشته کامپیوتر می باشد( مهندسی نرم افزار ۱ و مهندسی نرم افزار ۲ )،لذا سعی کرده ایم این درس را با سرفصل دانشگاهی جامع و کامل برای شما عزیزان در قالب دوره آموزش جامع مهندسی نرم افزار پیشرفته، تهیه نماییم.این دوره برای مقاطع کاردانی،کارشناسی و کارشناسی ارشد مفید است.

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

در فصل اول و دوم این آموزش به بررسی مباحث تئوری مهندسی نرم افزار می پردازیم . این دو فصل بر خلاف سه فصل دیگر آموزش تئوری می باشند.

در فصل سوم به معرفی UML پرداخته می شود و در ادامه به بررسی و کار با نرم افزار Rational Rose پرداخته می شود و در پایان به صورت پروژه محور یک فروشگاه اینترنتی را به طور کامل تحلیل و طراحی می کنیم.

در فصل چهارم به معرفی نرم افزار Git می پردازیم( دوره آموزش نرم افزار گیت).  Git یک نرم‌افزار کنترل نسخه و از مدل نرم‌افزارهای آزاد و متن‌باز برای بازنگری کد منبع توزیع شده و مدیریت منبع کد است. این نرم افزار برای دنبال کردن تغییر فایلهای کامپیوتری و دنبال کردن کردن کارهای انجام شده روی آنها توسط افراد مختلف مورد استفاده است. گیت ابتدا برای توسعهٔ لینوکس ( ویکی پدیا ) توسط لینوس تروالدز به وجود آمد و اکنون پروژه‌های فراوانی از آن الهام گرفته‌اند.

هدف اولیه استفاده از نرم‌افزار گیت در پروژه‌های نرم‌افزاری است ولی می‌توان از آن تنها برای دنبال کردن تغییر فایل‌ها استفاده کرد.

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

در فصل آخر آموزش مهندسی نرم افزار Git Hub را معرفی می کنیم. گیت هاب (GitHub) یک سرویس میزبانی وب برای پروژه‌هایی است که از سیستم سورس کنترل گیت استفاده می‌کنند. گیت هاب توسط روبی آن ریلز و ارلنگ ساخته‌شده است.

یادگیری گیت هاب برای کسانی که طراح و توسعه دهنده وب هستند بسیار ضروری است

یکی از قابلیت‌های شاخص GitHub کپی کردن یک مخزن (repository) از اکانت کاربر اصلی به اکانت دیگر است که به آن Forking میگویند. سپس کاربر می‌تواند تغییرات مورد نظر خود را در مخزن ایجاد کند و می‌تواند تغییرات ایجادشده را بااطلاع رسانی (pull request) به کاربر اصلی آن مخزن اعلام کند و کاربر اصلی می‌تواند با یک کلیک تغییرات را به مخزن اصلی منتقل کند (merge).
این سه ویژگی fork, pull request و merge هستند که GitHub را قدرتمند می‌کند. درگذشته برای اینکه یک کاربر بتواند تغییراتی را در یک پروژه متن‌باز ایجاد کند باید ابتدا آن را دانلود می‌کرد، سپس تغییرات لازم را اعمال کند، بعدازآن فهرستی از تغییرات را به نام patch ایجاد و همراه پروژه به کاربر اصلی آن می‌فرستد. کاربر اصلی ابتدا باید به کاربر غریبه اعتماد کند سپس patch را مشاهده و در صورت درست بودن تغییرات را اعمال کند.
اما در GitHub زمانی که یک pull request رخ می‌دهد، کاربر اصلی می‌تواند پروفایل درخواست دهنده را ببینید و در صورت تأیید (merge) به اعتبار درخواست‌کننده اضافه می‌شود. این اعتبار می‌تواند به‌عنوان یک رزومه شناخته شود.
سایت GitHub دارای ویژگی‌های دیگری نیز هست. اگر بر روی پروژه‌های متن‌باز کار می‌کنید GitHub اولین قدم مهم است که باید بردارید. به دست آوردن اعتبار و شهرت در دنیای برنامه‌نویسی با استفاده از GitHub امکان‌پذیر است.

معرفی سایت گیت هاب ( Github )
سایت گیت هاب همه عملکردهای مورد نیاز کاربران در یک جامعه مجازی را در دسترس قرار داده است. برخی از این عملکردها یا functionality عبارتند از: فید، دنبال کننده و گراف شبکه برای نمایش دادن توسعه دهندگانی که بر یک نسخه مرجع (مخزن) کار می‌کنند.

 

سرفصل های آموزش جامع مهندسی نرم افزار :

فصل اول: بررسی مباحث تئوری مهندسی نرم افزار 

  • تعریف مهندسی نرم افزار
  • چرا مهندسی نرم افزار اهمیت دارد؟
  • محصول کار چیست؟
  • ماهیت نرم افزار
  • تعریف نرم افزار
  • منحنی شکست سخت افزار
  • منحنی شکست نرم افزار
  • زمینه های کاربرد نرم افزار
  • لایه های مهندسی نرم افزار
  • تحلیل و روش های صحیح مطالعه ی سیستم ( تحلیل نیازمندی ها، تعیین نیاز های نرم افزار، FAST، اصول تحلیل، میدان اطلاعات، پرسش نامه ، مصاحبه، نشست یا سمینار، تهیه فرم، مدل سازی، نمونه سازی نرم افزار، شیوه های نمونه سازی، بازنمایی، فرایند های مهندسی نرم افزار)
  • فعالیت های چتری
  • اصول کلی
  • مفهوم افسانه ها در مهندسی نرم افزار
  • شروع به کار
  • تعیین مجموعه وضایف
  • مثالی از سیستم
  • مدل های فرایند تجویزی (مدل آبشاری، مدل V، مدل RAD، مدل فرایند افزایشی)
  • مدل های فرایند تکمیلی (مدل مارپیچ، مدل مارپیچ Win-Win، مدل CBD)
  • مدل توسعه همروند
  • مدل روش های رسمی
  • تکنیک های نسل چهارم
  • فرایند یکپارچه
  • فرایند تیمی و شخصی
  • مسائل زمان بندی
  • نمودار خطی زمان بندی
  • پیگیری برنامه زمانی
  • تکنیک های کاهش زمان پروژه
  • مدیریت زمان پروژه
  • وظایف مدیر پروژه هنگام بروز خطا
  • تحلیل مقادیر بدست آمده
  • پیگیری خطا
  • برآورد مالی و تعیین منابع مورد نیاز جهت انجام پروژه
  • روش های تخمین هزینه (روش های قیاسی، روش های تجربی، روش بالا به پایین، روش پایین به بالا)
  • طراحی (طراحی در حیطه مهندسی نرم افزار، فواید طراحی، تکامل طراحی نرم افزار، مفاهیم طراحی، مفاهیم طراحی شی گرا، کلاس های طراحی)
  • مدل طراحی (عناصر طراحی داده، عناصر طراحی معماری، عناصر طراحی واسط ها، عناصر طراحی در سطح مولفه ها، عناصر طراحی در سطح استقرار)
  • طراحی معماری (معماری نرم افزار، اهمیت معماری ، ژانر های معماری، سبک های معماری، طبقه بندی سبک های معماری، الگوهای معماری ، طراحی معماری، توصیف ساخت نمونه ای از سیستم، پیچیدگی های معماری، زبان های توصیف معماری، نگاشت تبدیل،مراحل طراحی نگاشت، پالایش طراحی معماری)
  • تحلیل و طراحی واسط
  • تحلیل واسط (تحلیل کاربران، مدل سازی و تحلیل وظایف، تحلیل محتوای صفحه نمایش، تحلیل محیط کار)
  • مراحل طراحی واسط (الگوهای طراحی واسط کاربری، مسائل طراحی)
  • طراحی واسط برنامه تحت وب (دستورالعمل و اصول طراحی، ارزیابی طراحی تحت وب)
  • کیفیت طراحی برنامه های تحت وب
  • اهداف طراحی
  • هرم طراحی برنامه تحت وب
  • طراحی واسط برنامه های تحت وب
  • طراحی زیبایی (مسائل مهم چیدمان، مسائل گرافیکی)
  • طراحی محتوا (اشیای محتوایی، مسائل طراحی محتوا)
  • طراحی معماری (معماری محتوا، معماری برنامه های تحت وب)
  • طراحی ابر رسانه ای به روش شی گرا (OOHDM)
  • طراحی مفهمومی ابر رسانه ای به روش شی گرا (OOHDM)
  • کیفیت نرم افزار ؟
  • ابعاد کیفیت نرم افزار
  • فاکتور های کیفیت نرم افزار
  • کیفیت محصول
  • کیفیت فرایند تولید محصول (کنترل کیفیت، تضمین کیفیت، هدف از تضمین)
  • FTR
  • پیاده سازی (برنامه نویسی گروهی با نرم افزار های مدیریت سورس کنترل)
  • معرفی نرم افزار های مدیریت سورس کنترل (Github، SVN، TFS)
  • ابزار های TFS
  • TFS و نحوه کنترل پروژه از طریق آن ( نصب و راه اندازی، ایجاد یک پروژه TFS، ارتباط با Visual Studio، آپلود سورس کد، چک کردن برنامه ، ارتباط بین اعضا)
  • GIT و نحوه کنترل پروژه از طریق آن (تعریف، چه کسانی باید از Git استفاده کنند، نصب و دانلود Git، پیکربندی Git، راهنمای Git، معماری Git، روند کار، ویرایش فایل، نمایش تغییرات، Initialize Repository، پاک کردن فایل از Repository، انتقال و تغییر نام )
  • تست (تست آلفای یک پروژه تعریف شده، تست بتای یک پروژه ی تعریف شده، تست پیکربندی، Recovery Test، Security Test، Stress Test، Performance Test، Load Test، Installation Test، Black Box Test, White Box Test، Unit Test، مدیریت تغییرات، موارد تغییر، Load Test، Basis Path Test، فرایند اشکال زدایی (Debuging)، روش های اشکال زدایی، تصحیح خطا)
  • توسعه
  • ساختار ورژن های یک نرم افزار
  • تعریف
  • ساختار SemVer
  • نحوه کار با SemVer
  • نام گداری صحیح ورژن ها
  • نسخه های مختلف نرم افزار (Pre-Alpha، Alpha، Beta، RC، RTM، Final)
  • کنترل ورژن های نرم افزار (فرایند کنترل ورژن ها)

فصل دوم: بررسی مباحث تئوری مهندسی نرم افزار 

  • RUP (Rational Unified Process)
  • تاریخچه RUP
  • تعریف RUP
  • چه کسانی از RUP استفاده می کنند؟
  • مفهوم Vision
  • مفهوم Vision Document
  • هدف از استفاده Vision Document
  • آموزش ساخت یک چشم Vision Document (سند چشم انداز)
  • RUP به عنوان یک رویکرد مهندسی در حیطه تولید نرم افزار (RUP Spirit، مفهوم معماری در RUP، ذینفع های معماری، معماری ۱+۴ در RUP)
  • معماری ۱+۴ در RUPر  (Logical View، Implementation View، Process View، Deployment View، Use Case View)
  • اصول هشت گانه RUPد (غلبه مستمر بر ریسک های عمده پروژه، اطمینان از ارائه ارزش برای مشتری ، تأکید و اسرار بر داشتن یک نرم افزار قابل اجرا، فراهم کردن راهکارهای مناسب برای مدیریت تغییرات از ابتدای پروژه، اولویت دهی به یک معماری قابل اجرا و اثبات آن، ایجاد سیستم با استفاده از مولفه ها، فعالیت در قالب یک و تنها یک تیم، در نظر گرفتن کیفیت در همه فعالیت ها)
  • RUP به عنوان یک چارچوب برای فرایند تولید عالی نرم افزار
  • ساختار پویا
  • فاز های RUP در ساختار پویا (Inception، Elaboraion، Construction، Transition)
  • ساختار های محتوایی
  • عناصر RUP  (مفهوم Discipline، مفهوم Role، مفهوم Activity، مفهوم Artifact، مفهوم Workflow)
  • سایر عناصر RUPر (Recommendations and Guidelines، Patterns and frames، Operation Manual Tool، Concept، Roadmap)
  • انواع Discipline
  • Category 1 (Original Discipline)
  • Category 2 (Supporting Discipline)

فصل سوم: ( Uml , Rational Rose )

  • معرفی دوره و توضیح سرفصل در قالب پاورپوینت
  • مقدمه ای بر Uml و مدل سازی
  • بررسی معماری در زبان Uml
  • بررسی دیدگاه های مختلف Uml
  • معرفی نرم اقزار های کاربری Uml
  • معرفی قابلیت های نرم افزار Rational Rose
  • آمورش دانلود و نصب نرم افزار Rational Rose
  • معرفی ابزار های کاربردی نرم افزار Rational Rose
  • معرفی و بررسی نمودار Use Case Diagram به همراه رابطه های بین آن ها در قالب مثال کاربردی
  • معرفی و بررسی نمودار Class Diagram به همراه رابطه های آن ها
  • پیاده سازیClass Diagram در قالب پروژه مدیریت کتابخانه
  • پیاده سازیSequence Diagram در قالب پروژه مدیریت کتابخانه
  • پیاده سازیCollaboration Diagram در قالب پروژه مدیریت کتابخانه
  • پیاده سازیActivity Diagram در قالب پروژه مدیریت کتابخانه
  • پیاده سازیSate Chart Diagram در قالب پروژه مدیریت کتابخانه
  • پیاده سازیComponent Diagram در قالب پروژه مدیریت کتابخانه
  • پیاده سازیDeployment Diagram در قالب پروژه مدیریت کتابخانهپیاده سازی نمودار Use Case پروژه فروشگاه اینترنتی – صفحه اصلی وبسایت
  • پیاده سازی نمودار Use Case پروژه فروشگاه اینترنتی – سرویس های وبسایت
  • پیاده سازی نمودار Class پروژه فروشگاه اینترنتی – صفحه اصلی وبسایت
  • پیاده سازی نمودار Sequenceپروژه فروشگاه اینترنتی
  • پیاده سازی نمودار Collaborationپروژه فروشگاه اینترنتی
  • پیاده سازی نمودار Activity پروژه فروشگاه اینترنتی
  • پیاده سازی نمودار Component پروژه فروشگاه اینترنتی
  • پیاده سازی نمودار Deployment پروژه فروشگاه اینترنتی
  • تولید کد برنامه از روی مدل (مهندسی معکوس)

فصل چهارم: آموزش نرم افزار Git

  • مقدمه
  • نصب Git در ویندوز
  • تنظیمات Git
  • Help در Git
  • ایجاد Repository
  • پیام های Commit
  • وقایع (Log) در Git
  • کار با Log پیشرفته
  • معماری Git
  • Workflow در Git
  • مفهوم رمز نگاری در Git
  • کار کردن با اشاره گر HEAD در Git
  • نحوه اضافه کردن فایل در Git
  • نحوه تغییرات فایل در Git
  • مشاهده تغییرات در Git
  • کار با ابزار Kdiff3
  • مشاهده تغییرات در Indexing Staged
  • پاک کردن فایل در Git
  • تغییر و جابجایی فایل ها در Git
  • ایجاد Repository در گیت
  • Undo کردن در Git
  • Undo کردن Indexing Stage
  • Undo کردن Commit از Repository
  • Recovery از Repository
  • Revert کردن در Git
  • Reset کردن در Git
  • Soft Reset در Git
  • Hard Reset در Git
  • Mixed Reset در Git
  • پاک کردن فایل های Not Tracking
  • gitignore.
  • چگونگی تولید فایل gitignore.
  • global .gitignore در Git
  • gitignore. فایل هایی که از قبل Track شده اند
  • Track کردن پوشه خالی در Git
  • مفهوم Tree ish(درخت) در Git
  • لیست کردن درخت ها در Git
  • مشاهده commit ها در Git
  • مشاهده و مقایسه Commit ها در Git
  • مفهوم Branching (شاخه ها) در Git
  • مشاهده شاخه ها در Git
  • سوئیچ کردن شاخه ها در Git
  • ساختن و سوئیچ شاخه ها در Git
  • Clear بودن پوشه قبل از سوئیچ کردن
  • مقایسه کردن شاخه ها در Git
  • تغییر نام شاخه ها
  • حذف کردن شاخه ها
  • مشاهده پوشه ها و شاخه ها در Command Prompt
  • ادغام کردن شاخه ها
  • مشکلات ادغام کردن شاخه ها و رفع آن ها
  • Stash کردن
  • مشاهده درون Stash
  • Pop-Apply کردن دورن Stash
  • پاک کردن Stash بدون Apply
  • معرفی مخزن های Remote-Local
  • ایجاد Remote Repository
  • اضافه کردن Remote Repository
  • Push کردن شاخه در Remote
  • Pull کردن شاخه در Remote
  • Track کردن شاخه در Remote
  • دنبال کردن شاخه Remote های دنبال نشده
  • Push کردن تغییرات در Git
  • Fetch کردن تغییرات در Remote Repository
  • ادغام کردن Master با شاخه
  • وارسی Remote Repository
  • حذف شاخه Remote Repository
  • همکاری در Git
  • چگونگی همکاری و گردش کار در Git
  • ایجاد نام مستعار برای دستورات در Git
  • ایجاد SSH-Https در Git
  • استفاده از Git در Text Editor ها
  • کار با Source Tree
  • کار با Local Repository در Source Tree
  • کار با Remote Repository در Source Tree
  • کار با Clone در Source Tree
  • کار با Push در Source Tree
  • کار با Pull در Source Tree
  • حل مشکل Conflicts در Source Tree
  • کار با فایل .gitignore در Source Tree

فصل پنجم: آموزش GitHub 

  • GitHub چیست ؟
  • پروفایل در GitHub
  • اصطلاحات کاربری GitHub
  • ساخت Repository در GitHub
  • پاک کردن Repository در GitHub
  • Forking کردن Repository در GitHub
  • جریان کاری GitHub
  • ساخت و ادغام Branch ها در GitHub
  • License ها در GitHub
  • فایل README در GitHub
  • فایل .gitignore در GitHub
  • نوشتن Commit در GitHub
  • Pull Request در GitHub
  • Emojis در GitHub
  • Task List در GitHub
  • جست و جو در GitHub
  • جست و جوی پیشرفته در GitHub
  • File Finder در GitHub
  • Subscription در GitHub
  • مشاهده Repository و دنبال کردن افراد در GitHub
  • تنظیم اعلان ها ، متد های دریافت و ایمیل ها
  • کار با @ در GitHub
  • Auto Linking در GitHub
  • Issues در GitHub
  • فیلتر کردن Issues , Label در GitHub
  • گروه بندی Issues و Pull Request همراه با Milestone در GitHub
  • Tagو Release در GitHub
  • امنیت در GitHub
  • پروتکل های دسترسی به Repository در GitHub
  • مشاهده گزارشات امنیت در GitHub
  • Block و Unblock کردن کابران در GitHub
  • تغییر حالت دید Repository در GitHub
  • تغییر نام ، انتقال ، حذف و بایگانی در GitHub
  • LFS در GitHub
  • کنترل ورژن فایل های غیر کدی در GitHub
  • همکاری و سطح دسترسی GitHub
  • Keyboard Shortcuts در GitHub
  • معرفی Gist
  • Fork و Clone گردن در Gist
  • ساخت wiki برای Repository در GitHub
  • معرفی برنامه Atom و Markdown
  • تصاویر در Markdown
  • لیست و جدول ها در Markdown
  • Fenced Code Blocks در Markdown
  • دانلود و نصب GitHub Desktop
  • GitHub Desktop
  • Add کردن فایل در GitHub Desktop
  • Push کردن فایل در GitHub Desktop
  • ساختن شاخه در GitHub Desktop
  • Merge کردن شاخه در GitHub Desktop
  • Conflicts Merge در GitHub Desktop