SCM — Software Configuration Management
Practice of identifying artifacts & handling changes systematically.
الـ SCM هو إنك تعرف تحدد الـ artifacts بتاعة المشروع وتتعامل مع التغييرات اللي بتحصل بنظام عشان النظام يحافظ على سلامته (maintain its integrity) على المدى الطويل.
بيشمل تقنيات عشان:
- تقيّم التغييرات المقترحة.
- تتتبع التغييرات (Tracking).
- تحتفظ بنسخ من النظام زي ما كان في أوقات مختلفة.
من الآخر الـ SCM = تخصص وتقنيات لبدء وتقييم والتحكم في التغييرات اللي بتحصل في السوفتوير أثناء وبعد المشروع.
- Change Management (إدارة التغييرات).
- Configuration Management (إدارة التكوين).
- وأحياناً بيدخل معاهم الـ Release Planning.
- "إيه هي النسخة الصح من الـ module اللي المفروض أكمل كود عليها؟"
- "إيه نسخة الـ design document اللي ماشية مع نسخة السوفتوير اللي شغالين عليها؟"
- "إيه النسخة اللي متسطبة عند شركة ABC دلوقتي؟"
- "إيه التغييرات اللي نزلت في النسخة دي؟"
Key SCM Terms ⭐
كل مصطلح ممكن ييجي في الـ exam. الـ Baseline ده بييجي في كل امتحان تقريباً يا ريس.
| Term | Definition |
|---|---|
| Configuration Item (CI) | أي حاجة HW/SW بنعاملها ككيان واحد عشان نديرها (زي source code، test suites، docs). |
| Version | نسخة معينة ومحددة من الـ CI. |
| Baseline ⭐ | specification أو product اتراجع بشكل رسمي واتفقنا عليه، وبيبقى الأساس اللي هنكمل تطوير عليه، ومينفعش يتغير إلا بـ formal change control process. |
| Version Control | إنك تحتفظ بنسخ مختلفة، بس من غير تحكم رسمي أوي في التغييرات اللي بينهم. |
| Workspace | مكان معزول بتاخد فيه نسخة عشان تشتغل براحتك. |
| Check-in | إنك تحفظ الـ CI في الـ controlled area (الريبو الأساسي). |
| Check-out | تاخد نسخة من الـ CI من الريبو وتشتغل عليها. |
| Branch | خط تطوير منفصل (مثلاً فرع عشان نصلح فيه bug بعيد عن الـ main). |
| Merging | إنك تدمج الـ branches دي تاني مع بعض. |
| Build | نسخة شغالة فيها مجموعة قدرات معينة جاهزة. |
| Building | إنك تجمّع النظام من مكوناته اللي تحت الـ config mgmt. |
| Release | الإعلان الرسمي وتوزيع النسخة المعتمدة. |
| Change Request (CR) | طلب رسمي للتغيير، لازم يوافق عليه الـ CCB بناءً على حدث متسجل. |
| CCB | مجموعة الأشخاص (Board) اللي عندهم الصلاحية ياخدوا قرارات في تغييرات الـ configuration. |
| Impact Analysis | بندرس تأثير التغيير المطلوب على كل طبقات الـ docs والـ components قبل ما نعمله. |
Version Control Systems
Repository of files + tracking every change with who/when/what/why.
- الـ VCS عبارة عن مخزن ملفات (repository).
- كل تغيير بيتحفظ وبنعرف مين اللي عمله.
- بيتتبع النسخ والتغييرات من خلال إجابة الأسئلة دي:
- إمتى؟ التغيير حصل إمتى؟
- مين؟ مين اللي عمل التغيير ده؟
- إيه؟ إيه اللي اتغير بالظبط؟
- ليه؟ (وده بنكتبه في الـ commit messages)
- Reversion: تقدر ترجع لنسخة كانت شغالة وكويسة لو التغيير اللي عملته بوّظ الدنيا.
- Change / Bug Tracking: بتتتبع التغييرات ومين صلح الـ bug.
- Branches: تقدر تعمل features جديدة من غير ما تبوظ الكود الشغال.
- Merging branches: بتدمج الكود الجديد مع القديم في أمان.
- Parallel work: كذا developer يقدروا يشتغلوا على نفس الفايل مع بعض.
Answer: (f) (a), (c), (d).
Centralized (SVN, CVS)
سيرفر واحد فيه كل النسخ، وكل client بياخد نسخة يشتغل عليها. لو السيرفر وقع كله بيقف.
Distributed (Git, Mercurial)
كل developer بيبقى عنده نسخة كاملة (full copy) من الريبو. وتقدر تشتغل offline عادي.
Version Numbering ⭐ (Critical Exam Topic)
Q1.12 / Q1.09 في كل امتحان بتلاقي أسئلة عن إزاي تفك وتفهم الـ version numbers دي.
الشكل القياسي للـ version number هو:
major.minor.milestone.revision-build
المعطى: 3.2.3.2 = ؟
- الـ major = 3، يعني الإصدار الأساسي التالت.
- الـ minor = 2، يعني تاني تحديث فرعي في v3.
- الـ milestone = 3، يعني Release Candidate (RC).
- الـ revision = 2، يعني تاني تصليح للـ bugs (second bug-fix).
المعطى: 3.2.4.2 = ؟
- الـ milestone = 4، يعني Final Release.
- الـ revision = 2، يعني تاني تصليح للـ bugs (second bug-fix).
المعطى: Fifth bug-fix للـ beta من v2.3 = ؟
- عشان هي beta، يبقى الـ milestone = 2.
- عشان هو fifth bug-fix، يبقى الـ revision = 5.
- الشكل النهائي هيبقى:
2.3.2.5(وممكن يتحط build اختياري في الآخر زي-33)
Change Control
How changes are formally proposed, evaluated, and approved.
الـ CR ده بيبقى طلب عشان:
- نكبّر أو نصغّر الـ scope بتاع المشروع.
- نعدل سياسات، خطوات، خطط، أو إجراءات (policies/processes).
- نغير في التكلفة أو الميزانية.
- نراجع أو نعدل الجدول الزمني (schedules).
الـ CR ممكن أي حد يعمله في أي وقت خلال الـ SW life cycle.
- تصليح Bugs (إجراء تصحيحي).
- إضافة Features (حاجات جديدة).
- تبسيط الكود (اللي هو الـ refactoring).
- تغيير الجدول الزمني.
- حد بيقدم (submits) طلب تغيير CR.
- الـ CR بيتسجل في الـ bug tracking system.
- بيتعمل Impact analysis عشان نشوف تأثيره (تكلفة، وقت، وتأثير فني).
- الـ CCB (مجلس إدارة التغييرات) بيراجع ويقرر.
- لو توافق عليه: بيتوزع على حد، يتنفذ، يتجرب (tested)، وينزل (deployed).
- لو اترفض: بيتسجل الرفض مع الأسباب.
Git Basics
Created by Linus Torvalds, 2005. For Linux Kernel development.
- اللي عمله هو Linus Torvalds.
- ابتدى سنة 2005.
- كان معمول عشان يديروا بيه تطوير الـ Linux Kernel.
- هو Distributed VCS، سريع جداً، وفيه check عشان الفايلات متبوظش.
- نظام Distributed للـ version control.
- بيتتبع التغييرات في الفايلات على مر الوقت (over time).
- بيسمح للناس تشتغل وتتعاون مع بعض في المشاريع (collaboration).
- سريع وكفاءته عالية.
- بيدعم التطوير اللي مش خطي (non-linear) يعني تقدر تعمل branches.
- مفتوح المصدر (Open-source) ومجاني.
Git Workflow ⭐
أسئلة منورة في كل امتحان عن التلاتة دول مع بعض: add → commit → push.
المكان اللي بتكتب فيه الكود
مرحلة التجهيز للـ commit
الريبو اللي على جهازك
مرفوع على GitHub/GitLab
| Command | Purpose |
|---|---|
git status |
Check status |
git init |
Creates new local Git repo |
git add <file> |
Stage file for commit |
git add . |
Stage all changes |
git commit -m "msg" |
Create commit with message |
git commit -a -m "msg" |
Commit all tracked files |
git clone <url> |
Clone existing repo |
git push |
Push commits to remote |
git pull |
Fetch + merge from remote |
git log |
Show commit history |
Standard sequence to add a new untracked file to a shared Git repo:
git add <file>— stage the filegit commit -m "message"— create commit locallygit push— push to remote (shared) repo
# 1. Initialize a new repo
mkdir my-project
cd my-project
git init
# 2. Add a file
echo "# My Project" > README.md
git add README.md
git status # File now staged
# 3. Commit it
git commit -m "first commit"
# 4. First-time identity setup
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# 5. Check log
git log
git log --pretty=full
Git Branching
Separate development lines. Feature, Release, Hotfix branches.
الـ Branch = مسار تطوير منفصل جوه الريبو بتاعك. بيسمحلك تشتغل على features أو تجارب أو تصليح bugs من غير ما تأثر على الكود الأساسي (الـ main).
Creating & Switching
git branch <name> # Create branch
git checkout <name> # Switch to it
# Or combined:
git checkout -b <name> # Create + switch
# List branches
git branch -l
- Feature Branches: عشان نطور features جديدة.
- Release Branches: عشان نجهز نسخة هتنزل للسوق.
- Hotfix Branches: عشان نصلح bugs عاجلة جداً في الكود الشغال.
# Switch to target branch (e.g. master/main)
git checkout master
# Merge source branch into target
git merge first-branch
# Verify with log
git log
# Delete merged branch
git branch -d first-branch
Exam Bank — Lecture 17
8 أسئلة من امتحانات حقيقية. ركز على الـ Versioning والـ Git workflow والـ Baseline.
(a) They allow tracking changes in the code
(b) They helps discover bugs in the code
(c) They allow developers to work in parallel, even on the same file
(d) They allow retrieving an older version of the code
- (a) ✓ — الـ VCS بيتتبع كل تغيير ومين عمله وإمتى.
- (b) ❌ — الـ VCS ملوش دعوة باكتشاف الـ bugs بنفسه.
- (c) ✓ — أكتر من developer بيقدروا يشتغلوا مع بعض في نفس الوقت بالـ branches.
- (d) ✓ — تقدر ترجع لأي نسخة قديمة في أي وقت بكل سهولة.
git add filename— بيحطه في الـ stagegit commit— بيحفظه local عندكgit push— بيرفعه للـ remote
git init بيكريت repo جديد (مش لواحد موجود). ·
B — مينفعش تعمل commit قبل الـ add. ·
C — مفيش أمر اسمه git change أصلاً.
major.minor.milestone.revision-build.
Milestone values are: 0=pre-alpha, 1=alpha, 2=beta, 3=RC, 4=final.
Which option represents the fifth bug-fix of the beta version of v2.3?v2.3يعني major=2 و minor=3.- beta يعني milestone=2.
- خامس bug-fix يعني revision=5.
- رقم الـ build اختياري؛ هنا
33مجرد build ID.