The Software Development Lifecycle Flashcards
Define software engineering and explain the responsibilities of a software engineer.
Software engineering is the systematic approach to the design & development of software.
Responsibilities include:
* Design, build, & maintain software systems
* Write & test code
* Consult with stakeholders, third-party vendors, security specialists, & other team members
Discuss key advantages of applying the software development lifecycle (SDLC) when developing enterprise software.
- Gives development teams a process to follow rather than using an ad hoc approach to improve efficiency & reduce risks
- There are discreet phases to the SDLC and each phase is well-defined so team members know what they should be working on and when
- Because of well-defined phases, it facilitates communication among stakeholders, customers, & development team
- Team members know when development can move to the next phase
- Provides room for iteration where at the end of the cycle the process can incorporate additional requirements as needed
- Problem-solving is incorporated early in the cycle
- Well-defined roles reduce conflict & overlapping responsibilities
Describe each phase of the SDLC.
- Planning
* Requirements are gathered, analyzed, documented, & prioritized - Design
* Requirements gathered from the SRS are used to develop software architecture - Development (aka building or implementation phase)
* Developers start coding process once design document is completed - Testing
* Code needs to be thoroughly tested to ensure stability, security, and that it meets the requirements from the SRS
* Product bugs are reported, tracked, fixed, & retested
* Different levels of testing include: unit, integration, system, & acceptance - Deployment
* Application is released into production environment and made available to users - Maintenance
* Identify any bugs, user interface (UI) issues, new & changing requirements, code enhancements, feedback from stakeholders
Analyze common software engineering processes required for building high-quality software.
Requirements gathering
* 4 Broad Categories: Functional, External & user interface (UI), System features, Non-functional
Design
* Transforming requirements into code / software solution
Coding for quality
*Refers to characteristics of the code, including attributes: Maintainability, Readability, Testability, Security
Testing
* Verifies the software matches established requirements & is free of bugs
Releases
* Different releases are intended for different audiences (alpha, beta, GA)
Documenting
* System / User
Explain the requirement-gathering process.
- Defining a problem to be solved and how to go about solving the problem
- Identifying stakeholders
- Establishing goals & objectives
- Eliciting requirements from the stakeholders
- Documenting the requirements
- Analyzing & confirming the requirements
- Eliciting, documenting, & confirming
- Prioritizing the requirements
Differentiate between a User Requirement Specification (URS), a Software Requirement Specification (SRS), and a System Requirement Specification (SysRS) document.
Software Requirement Specification (SRS) - most common
* Document that captures functionalities the software should perform
User Requirement Specification (URS)
* Describes the business need & end-user expectations
System Requirement Specification (SysRS)
* Clearly outlines the requirements of the system
Compare and contrast waterfall, V-shape model, and agile methods of software development.
Waterfall
Sequential, linear pattern through discreet stages
- Pros:
* Team members understand their responsibilities due to discrete, well-defined stages
* Easier to estimate budget & allocate resources
- Cons:
* Lacks flexibility
* Change is hard to accommodate
V-Shape
Sequential. Each verification stage corresponds with validation stage
- Pros
* Easy to use
* Test plans designed upfront saves development and testing time
- Cons
* Rigid
* Does not readily accommodate changing requirements
Agile
Collaborative, cyclical.
- Pros
* Changing requirements handled easily
* Feedback incorporated regularly
- Cons
* Budgeting & resource allocation is challenging
* Project scope not clearly defined
Distinguish between functional, non-functional, and regression testing.
Functional
* Manual or automated
* Usability & Accessibility
Non-functional
* Performance, scalability, security, & availability
Regression (aka maintenance testing)
* Confirms changes/updates don’t break the application
Identify and describe different types of documentation.
Product - Relates to Functionality
Requirements
* Describes expected features & functionality
Design
* Consists of both conceptual & technical design documents
Technical
* Includes comments and working paper that explain how code works, documents that record ideas and thoughts during implementation
Quality Assurance (QA)
* Plans, data, scenarios, strategies, cases, traceability matrices
User
* FAQs, installation & help guides, tutorials, user manuals
Standard operating procedures (SOP)
* Step-by-step instructions on how to accomplish common yet complex tasks
Process - Describes How-To
Compare and contrast the common roles and responsibilities on a software engineering project.
There are many different roles involved in a software engineering project. Some of them include project manager or scrum master, stakeholder, system or software architect, UX designer, software developer, tester or QA engineer, site reliability or Ops engineer, product manager or owner, and technical writer or information developer.