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.
Describe each phase of the SDLC.
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.
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.