SE VivaPrep
SE VivaPrep
2. GitHub
• Basic Workflow:
o Understand git clone, git pull, git push.
o Branching: git branch, git checkout, git merge.
o Handling conflicts during merge.
• Practical Uses:
o Version control.
o Collaboration.
o Maintaining a project history.
Steps to Build:
1. Create a directory for your project and include the above CMakeLists.txt and
a main.cpp file.
2. Run the following commands in the terminal:
Bash SCRIPT
CODE:
mkdir build
cd build
cmake ..
make
3. The sample executable will be created in the build directory.
1. Waterfall Model
Overview:
• The Waterfall model is a linear and sequential approach to software
development.
• Each phase must be completed before moving to the next.
• There is no overlap or iteration between phases.
Phases:
1. Requirement Analysis:
o Gather and document requirements.
o Outcome: Software Requirement Specification (SRS) document.
2. System Design:
o High-Level Design (HLD): System architecture and modules.
o Low-Level Design (LLD): Details for individual modules.
3. Implementation:
o Write and integrate the code based on the design.
4. Testing:
o Unit Testing, Integration Testing, and System Testing.
o Ensures software meets requirements.
5. Deployment:
o Deliver the software to the customer.
6. Maintenance:
o Post-deployment updates and bug fixes.
Advantages:
• Simple and easy to understand.
• Works well for small projects with clear, stable requirements.
Disadvantages:
• Rigid and inflexible; changes are dibicult to incorporate.
• Late discovery of errors during the testing phase.
• Unsuitable for complex or long-term projects.
Best Suited For:
• Small-scale projects with well-defined requirements.
2. Agile Model
Overview:
• The Agile model is iterative and incremental.
• It emphasizes flexibility, collaboration, and customer feedback.
• Development happens in small iterations called Sprints (2–4 weeks).
Key Features:
1. User Stories:
o Requirements are written from the user's perspective.
2. Sprints:
o Short cycles of development, testing, and review.
3. Daily Stand-Up Meetings:
o Team updates on progress, roadblocks, and plans.
4. Continuous Feedback:
o Customer feedback is incorporated after each sprint.
Advantages:
• Highly flexible and adaptive to changing requirements.
• Encourages collaboration between developers and customers.
• Faster delivery of working software.
Disadvantages:
• Requires constant customer involvement.
• Dibicult to predict cost and timeline.
• Less suitable for projects where requirements are not evolving.
Best Suited For:
• Dynamic projects with frequent changes in requirements.
• Projects focused on delivering a Minimum Viable Product (MVP).
3. Spiral Model
Overview:
• The Spiral model combines iterative development with a focus on risk
analysis.
• Each iteration, called a spiral, consists of planning, risk analysis,
engineering, and evaluation.
Phases:
1. Planning:
o Define objectives, alternatives, and constraints.
2. Risk Analysis:
o Identify and mitigate risks.
3. Engineering:
o Develop and verify the software increment.
4. Evaluation:
o Review deliverables with the customer.
Advantages:
• Risk-driven approach minimizes project risks.
• Suitable for complex projects requiring iterative refinement.
• Allows for incremental delivery of software.
Disadvantages:
• High cost and complexity.
• Requires expertise in risk assessment.
Best Suited For:
• Large, high-risk projects with evolving requirements.
5. Iterative Model
Overview:
• The Iterative model develops the software in small chunks (iterations).
• Each iteration refines the product, adding more functionality.
Phases:
1. Initial Planning.
2. Iterative Refinement:
o Design → Implement → Test → Evaluate.
3. Final Deployment.
Advantages:
• Early delivery of partially working software.
• Easier to accommodate changes.
Disadvantages:
• Requires good planning and design upfront.
• Not suitable for small projects.
Best Suited For:
• Medium-to-large projects with clear but expandable requirements.
Incremental Model
The Incremental Model is a type of software development approach that divides
the project into smaller, manageable increments or builds. Each increment adds a
specific set of functionalities to the existing product until the entire software
system is developed.
Key Characteristics
1. Step-by-Step Development:
o The project is broken into smaller parts (increments).
o Each increment focuses on delivering a subset of the overall
functionality.
2. Partial Delivery:
o Functional software is delivered at the end of each increment.
o The software evolves over multiple iterations.
3. Customer Feedback:
o Early increments can be reviewed and feedback can guide
subsequent development.
4. Overlapping Phases:
o Development and testing are performed iteratively for each
increment.
Advantages
1. Early Delivery:
o Early increments provide functional software, even if the complete
product is not yet ready.
2. Flexibility:
o Changes can be made in later increments based on feedback from
earlier ones.
3. Risk Management:
o Issues can be identified and resolved incrementally, reducing overall
risk.
4. Cost Management:
o Costs are spread out as each increment is delivered separately.
Disadvantages
1. Requires Planning:
o The model requires clear and thorough planning of increments.
2. Dependency Challenges:
o Later increments may depend heavily on earlier increments.
3. Overhead:
o Frequent testing and integration can introduce additional overhead.
he Incremental Model is most similar to the Iterative Model and shares some
characteristics with the Agile Model. Here's how they compare:
1. Repository Setup
• git init: Initialize a new Git repository in the current directory.
bash
Copy code
git init
• git clone: Clone an existing repository to your local machine.
bash
Copy code
git clone <repository_url>
2. Checking Repository Status
• git status: Check the status of the working directory (staged, unstaged,
untracked files).
bash
Copy code
git status
• git log: View the commit history.
bash
Copy code
git log
• git dib: See changes between the working directory and the staging area.
bash
Copy code
git diZ
6. Stashing Changes
• git stash: Save uncommitted changes for later use.
bash
Copy code
git stash
• git stash apply: Reapply the stashed changes.
bash
Copy code
git stash apply
• git stash list: View all stashes.
bash
Copy code
git stash list
7. Undoing Changes
• git checkout -- file: Discard changes in a file (unstaged changes).
bash
Copy code
git checkout -- file_name
• git reset: Unstage changes or move the branch pointer.
o Unstage files:
bash
Copy code
git reset file_name
o Reset branch to a specific commit:
bash
Copy code
git reset --hard commit_hash
8. Tagging
• git tag: Create or list tags for marking specific points in the history.
o Create a tag:
bash
Copy code
git tag tag_name
o Push tags to a remote repository:
bash
Copy code
git push origin tag_name
9. Collaborating
• git remote: Manage remote repositories.
o Add a remote:
bash
Copy code
git remote add origin <repository_url>
o List remotes:
bash
Copy code
git remote -v
• git rebase: Reapply commits on top of another base tip.
bash
Copy code
git rebase branch_name