# مشخصات درس‌نامه: به‌روزرسانی‌های امنیتی دوره‌ای و ارتقای ایمن وابستگی‌ها (SemVer & Updates) - **شناسه در سیلابس:** `L13.5` - **فصل:** فصل ۱۳: نگهداری محصول (Ch 13) - **نوع محتوا:** 📘 درس‌نامه متنی - **زمان تقریبی مطالعه:** ۱۶ دقیقه - **پیش‌نیازهای مستقیم:** `L13.4` (ثبت لاگ‌ها و ردگیری هوشمند خطاهای پروداکشن) --- ## ۱. اهداف یادگیری (Learning Objectives - Bloom's Taxonomy) دانشجو پس از مطالعهٔ این درس‌نامه باید بتواند: - [ ] **درک کند (Understand):** پدیده «پوسیدگی نرم‌افزار» (Software Rot) را تحلیل کرده و بداند چرا کدی که امروز کاملاً سالم است، شش ماه دیگر به دلیل کشف آسیب‌پذیری‌های امنیتی جدید (CVEs) نیازمند مراقبت و ارتقاست. - [ ] **تحلیل/ارزیابی کند (Evaluate):** ساختار سیستم نسخه‌بندی معنایی (Semantic Versioning - SemVer) شامل تفاوت‌های حیاتی Major، Minor و Patch را بشناسد و تفاوت نمادهای `^` و `~` در `package.json` را ارزیابی کند. - [ ] **به‌کار ببندد (Apply):** یک رویه ۴ مرحله‌ای ایمن برای به‌روزرسانی وابستگی‌ها (بررسی با `npm outdated` $\rightarrow$ ایجاد شاخه گیت اختصاصی $\rightarrow$ آپدیت با `npm update` $\rightarrow$ راستی‌آزمایی با `npm run build`) اجرا نماید. - [ ] **ایجاد کند (Create):** ربات هشدارهای امنیتی گیت‌هاب (GitHub Dependabot) را برای دریافت خودکار درخواست‌های ادغام (PR) اصلاحی آسیب‌پذیری‌های بحرانی فعال کند. --- ## ۲. محدوده و مرزهای محتوا (Scope & Boundaries) ### آنچه باید پوشش داده شود (In-Scope): 1. **استعاره سرویس دوره‌ای خودرو و تعویض روغن:** * خودرویی که در پارکینگ پارک شده هم روغن فاسد می‌کند؛ نرم‌افزاری که دست نخورده هم به مرور زمان مشمول کشف رخنه‌های امنیتی جهانی می‌شود. 2. **رمزگشایی از نگارش معنایی (Semantic Versioning - SemVer):** * ساختار سه‌گانه `MAJOR.MINOR.PATCH` (مثلاً نسخه `15.2.1`): - پچ (Patch): رفع باگ‌ها و آسیب‌پذیری‌های امنیتی؛ بدون هیچ تغییر در کارکرد قبلی (کاملاً امن برای آپدیت). - ماینور (Minor): اضافه شدن قابلیت‌های جدید با حفظ سازگاری با کدهای قبلی (Backward Compatible). - میجر (Major): تغییرات بنیادین و شکننده (Breaking Changes) که ممکن است کدهای فعلی را بشکند و نیازمند بررسی دقیق مستندات است. * تفاوت عملگر کلاهک (`^`) و مد (`~`) در قفل کردن نسخه‌ها در `package.json`. 3. **رویه استاندارد ۴ مرحله‌ای ارتقای بسته‌ها بدون خرابی پروژه:** * گام ۱: رصد وضعیت پکیج‌ها با دستور `npm outdated`. * گام ۲: ساخت برنچ مجزا در گیت (`git checkout -b chore/update-deps`) برای جلوگیری از خرابی شاخه اصلی. * گام ۳: اجرای `npm update` برای دریافت آخرین پچ‌ها و ماینورهای سازگار. * گام ۴: اجرای `npm run build` و تست‌های خودکار برای تایید سلامت کامل و ادغام در شاخه `main`. 4. **ابزار تعاملی ارتقای نسخه‌های ماژور (`npm-check-updates`):** * نحوه استفاده از `npx npm-check-updates -i` برای انتخاب آگاهانه پکیج‌هایی که می‌خواهیم به نسخه جدیدتر ببریم. 5. **فعال‌سازی هوشمند Dependabot در مخزن گیت‌هاب:** * دریافت ایمیل‌های هشدار خودکار در صورت کشف باگ‌های امنیتی بحرانی در کتابخانه‌ها و امکان مرج با یک کلیک. 6. **کال‌اوت‌های آموزشی و هشدار کوئرا:** * کال‌اوت بنفش (`
`): مفهوم Breaking Changes در آپدیت‌های ماژور (نظیر جهش از Next.js 14 به 15) و چرایی لزوم خواندن راهنمای رسمی ارتقا (Migration Guide). * کال‌اوت سبز (`
`): آرامش خاطر با به‌روزرسانی‌های ماهانه ۱۵ دقیقه‌ای که مانع از انباشت بدهی فنی (Technical Debt) می‌شود. * کال‌اوت قرمز (`
`): هرگز آپدیت‌های ماژور را بدون داشتن کامیت ذخیره و در شب پیش از ارائه به کارفرما انجام ندهید! ### آنچه نباید وارد آن شویم (Out-of-Scope): - بازنویسی کامل معماری کدها در اثر تغییر پارادایم‌های بنیادین فریم‌ورک‌ها. - انتشار دستی بسته‌های شخصی در رجیستری جهانی npm. --- ## ۳. مفاهیم کلیدی و کلمات تخصصی (Key Concepts & Terms) | اصطلاح انگلیسی | معادل فارسی مصوب | توضیح یک‌خطی ساده | | :--- | :--- | :--- | | Software Rot | پوسیدگی نرم‌افزار | فرسودگی تدریجی نرم‌افزار به دلیل منسوخ شدن کتابخانه‌ها و کشف آسیب‌پذیری‌های امنیتی جدید | | Semantic Versioning (SemVer) | نسخه‌بندی معنایی | سیستم استاندارد جهانی شماره‌گذاری نسخه‌ها به صورت MAJOR.MINOR.PATCH برای بیان ماهیت تغییرات | | Breaking Change | تغییر شکننده ناسازگار | تغییری در نسخه جدید یک کتابخانه که نیازمند بازنویسی بخش‌هایی از کدهای استفاده‌کننده است | | Dependabot | بات امنیتی دیپندابات | ربات خودکار گیت‌هاب برای اسکن وابستگی‌ها و ایجاد پول ریکوئست‌های خودکار ارتقای امنیتی | | Technical Debt | بدهی فنی | هزینه و زحمت پنهان ناشی از تعویق انداختن نگهداری، بازنویسی و به‌روزرسانی کدهای سیستم | | CVE (Common Vulnerabilities) | پایگاه جهانی آسیب‌پذیری‌ها | شناسه عمومی و استاندارد بین‌المللی برای گزارش رخنه‌های امنیتی کشف‌شده در نرم‌افزارها | --- ## ۴. جایگاه‌های تصاویر و نمودارها (Visual & Diagram Placeholders) > **راهنمای ایجنت نویسنده:** تمام تصاویر باید در پوشهٔ `images/` ذخیره شده و در جدول تک‌خانه‌ای وسط‌چین درج شوند: 1. **تصویر کاور درس:** `images/cover.png` * **موضوع:** جعبه دنده‌های نئونی دیجیتال که به آرامی در حال تعویض و روغن‌کاری هستند و قطعات قدیمی با قطعات نو و درخشان جایگزین می‌شوند. 2. **کالبدشکافی اعداد نسخه‌بندی معنایی (SemVer):** `images/semver-breakdown-anatomy.png` * **موضوع:** اینفوگرافیک توضیحی: نمایش عدد ۱۵.۲.۱ با فلش‌های رنگی روی Major (شکننده)، Minor (فیچر جدید)، و Patch (رفع باگ امنیتی). 3. **خروجی دستور `npm outdated` در ترمینال:** `images/npm-outdated-terminal-screen.png` * **موضوع:** اسکرین‌شات از جدول رنگی ترمینال با ستون‌های Package، Current، Wanted و Latest. 4. **درخواست ادغام خودکار امنیتی Dependabot در گیت‌هاب:** `images/github-dependabot-pr-preview.png` * **موضوع:** اسکرین‌شات از یک Pull Request خودکار در گیت‌هاب با تگ سبز «Security Update: bump library version to fix CVE». --- ## ۵. بخش‌بندی و ساختار محتوایی پیشنهادی درس‌نامه (`README.md`) 1. **تیتر اصلی:** `# به‌روزرسانی‌های امنیتی دوره‌ای و ارتقای ایمن وابستگی‌ها (SemVer & Updates)` 2. **مقدمه:** چرا کدی که امروز بی‌نقص کار می‌کند، اگر به حال خود رها شود سال آینده به لانه زنبور رخنه‌های امنیتی تبدیل خواهد شد؟ 3. **جدول کاور درس** 4. **پدیده پوسیدگی نرم‌افزار (Software Rot):** * جهان اطراف کد شما در حال حرکت است؛ مرورگرها آپدیت می‌شوند و هکرها رخنه‌های جدید کشف می‌کنند. 5. **زبان بین‌المللی نسخه‌ها: SemVer را مثل یک حرفه‌ای بخوانید:** * تفاوت Patch (بدون دردسر)، Minor (امکانات نو)، و Major (احتیاط، زمین لغزنده است!). * نمادهای `^` و `~` در `package.json` چه دستوری به npm می‌دهند؟ 6. **پروتکل ۴ گانه به‌روزرسانی بدون خرابکاری در پورتفولیو:** * گام ۱: بازرسی وضعیت با `npm outdated`. * گام ۲: باز کردن یک برنچ امن در گیت. * گام ۳: اجرای `npm update`. * گام ۴: راستی‌آزمایی با تست بیلد محلی `npm run build`. 7. **استفاده از ابزار شیک `npm-check-updates` برای ارتقای هدفمند:** * انتخاب گرافیکی بسته‌ها در ترمینال و مشاهده پیش‌نمایش نسخه‌های جدید. 8. **فعال‌سازی نگهبان خودکار گیت‌هاب (Dependabot):** * سپردن رصد ۲۴ ساعته آسیب‌پذیری‌های روز دنیا به ربات‌های گیت‌هاب. 9. **دستورات چندسکویی برای بررسی و آپدیت وابستگی‌ها:** * منوی کشویی سه‌گانه برای ویندوز، مک و لینوکس: - Windows (PowerShell): ```powershell npm outdated npm update npm run build ``` - macOS (Terminal): ```bash npm outdated npm update npm run build ``` - Linux (Bash): ```bash npm outdated npm update npm run build ``` 10. **باکس نکته Quera (`
`):** اهمیت مطالعه فایل CHANGELOG یا Releases در گیت‌هاب کتابخانه قبل از آپدیت‌های بزرگ ماژور. 11. **باکس هشدار Quera (`
`):** هرگز همه پکیج‌ها را به یکباره و بدون تست با دستورات فورس آپدیت نکنید؛ یک ناسازگاری کوچک می‌تواند ساعت‌ها وقت شما را برای ریکاوری تلف کند. 12. **باکس رضایت‌بخش Quera (`
`):** پورتفولیویی که همیشه تمیز، مدرن و مجهز به آخرین پچ‌های امنیتی روز دنیاست. 13. **جمع‌بندی درس‌نامه:** تسلط بر نگهداری زیرساختی؛ ورود به مبحث رشد و دیده شدن: سئو تکنیکال و تحلیل رفتار کاربر در درس بعدی. --- ## ۶. معیارهای پذیرش (Acceptance Criteria for Reviewer) - [ ] پدیده فرسودگی نرم‌افزار و ضرورت به‌روزرسانی‌های مستمر تشریح شود. - [ ] ساختار نسخه‌بندی معنایی (SemVer) و علائم `^` و `~` به روشنی آموزش داده شود. - [ ] پروتکل ۴ مرحله‌ای ایمن ارتقای وابستگی‌ها به همراه دستورات چندسکویی ارائه گردد. - [ ] شیوه فعال‌سازی و کاربرد Dependabot در مخزن گیت‌هاب تشریح شود.