Software Engineering Flashcards
(14 cards)
Explain the Software Development Life Cycle (SDLC).
SDLC phases include:
1. Requirements Analysis: Gathering and documenting system requirements
2. Design: Creating system architecture and detailed design
3. Implementation: Writing and coding the software
4. Testing: Verifying functionality and finding defects
5. Deployment: Releasing software to production
6. Maintenance: Ongoing support and updates
Popular methodologies include Waterfall (sequential), Agile (iterative), and DevOps (continuous integration/deployment).
What is version control and why is Git important?
Version control systems track changes to code over time, enabling collaboration, rollback capabilities, and branching. Git is a distributed version control system offering:
- Local and remote repositories
- Branching and merging capabilities
- Conflict resolution
- History tracking and blame functionality
- Integration with platforms like GitHub, GitLab
Essential for team development and code management.
Describe different testing methodologies.
Unit Testing: Testing individual components in isolation
Integration Testing: Testing component interactions
System Testing: Testing complete system functionality
Acceptance Testing: Validating system meets requirements
Test-Driven Development (TDD): Writing tests before implementation
Behavior-Driven Development (BDD): Tests based on user behavior scenarios
What are design patterns? Give examples.
Design patterns are reusable solutions to common programming problems. Examples:
- Singleton: Ensures only one instance of a class exists
- Factory: Creates objects without specifying exact classes
- Observer: Notifies multiple objects about state changes
- Strategy: Encapsulates algorithms and makes them interchangeable
- MVC (Model-View-Controller): Separates application logic, presentation, and user input
Explain Agile methodology and Scrum framework.
Agile emphasizes iterative development, customer collaboration, and responding to change. Scrum is a popular Agile framework featuring:
- Sprints: Short development cycles (1-4 weeks)
- Roles: Product Owner, Scrum Master, Development Team
- Ceremonies: Sprint planning, daily standups, sprint review, retrospective
- Artifacts: Product backlog, sprint backlog, increment
Benefits include faster delivery, better customer feedback, and improved team collaboration.
What is continuous integration and continuous deployment (CI/CD)?
CI/CD automates software development workflow:
- Continuous Integration: Automatically merge code changes, run tests, build applications
- Continuous Deployment: Automatically deploy to production after passing tests
- Continuous Delivery: Automatically deploy to staging; manual production deployment
Benefits include faster releases, reduced integration problems, early bug detection, and consistent deployment processes. Tools include Jenkins, GitLab CI, GitHub Actions.
Explain microservices architecture.
Microservices decompose applications into small, independent services communicating over networks. Characteristics:
- Single responsibility per service
- Independent deployment and scaling
- Technology diversity allowed
- Decentralized governance
Advantages: scalability, technology flexibility, fault isolation. Challenges: complexity, network latency, data consistency, distributed system debugging.
What is refactoring and why is it important?
Refactoring improves code structure without changing external behavior. Goals include:
- Improving code readability and maintainability
- Reducing complexity and technical debt
- Enhancing performance
- Making code more flexible for future changes
Common refactoring techniques: extract method, rename variables, eliminate code duplication. Essential for long-term code health and team productivity.
Describe code review best practices.
Effective code reviews involve:
- Small, focused changes for easier review
- Clear descriptions of what and why changes were made
- Constructive feedback focusing on code, not person
- Automated checks for style and basic issues
- Timely reviews to maintain development velocity
Benefits include bug detection, knowledge sharing, and code quality improvement.
What is technical debt and how do you manage it?
Technical debt represents shortcuts taken during development that require future rework. Types include:
- Code debt (poor code quality)
- Architecture debt (suboptimal design decisions)
- Test debt (insufficient testing)
- Documentation debt (missing/outdated docs)
Management strategies: regular assessment, prioritization, dedicated refactoring time, preventing accumulation through code standards and reviews.
Explain different software architecture patterns.
Common architectural patterns:
- Layered Architecture: Organized in horizontal layers (presentation, business, data)
- Event-Driven: Components communicate through events
- Pipeline: Data flows through series of processing steps
- Client-Server: Clients request services from servers
- Peer-to-Peer: Nodes act as both clients and servers
- Service-Oriented: Business functions exposed as services
Each pattern suits different requirements and constraints.
What is DevOps and its key practices?
DevOps bridges development and operations teams to improve collaboration and productivity. Key practices:
- Infrastructure as Code: Managing infrastructure through code
- Automated Testing: Comprehensive test suites at all levels
- Monitoring and Logging: Observability into system behavior
- Configuration Management: Consistent environment setup
- Deployment Automation: Reliable, repeatable deployments
Benefits include faster delivery, higher quality, improved collaboration, and better system reliability.
Describe software metrics and their importance.
Software metrics quantify various aspects of development:
- Code Quality: Cyclomatic complexity, code coverage, duplication
- Productivity: Lines of code, story points, velocity
- Reliability: Bug density, mean time to failure, availability
- Performance: Response time, throughput, resource utilization
- Process: Lead time, deployment frequency, change failure rate
Metrics guide decision-making, identify improvement areas, and track progress over time.
What is API design and REST principles?
Good API design follows principles like:
- Consistency in naming and behavior
- Simplicity and ease of use
- Proper documentation and examples
- Error handling with meaningful messages
- Versioning for backward compatibility
REST principles include stateless communication, uniform interface, cacheable responses, and layered system architecture. Well-designed APIs improve developer experience and system integration.