Software Engineering Fundamentals
Software engineering is the disciplined work of turning a need into software that can be tested, operated, and changed. It connects requirements, design, coding, review, testing, release, and maintenance so a team can manage quality and risk over the software's life.
itSoftware engineering | OpenSkills.info
Intro
Software Engineering Fundamentals
Software engineering is more than programming. Programming turns an idea into instructions a computer can run. Software engineering organizes the wider work needed to make those instructions useful, dependable, and changeable.
That wider work starts before code exists and continues after release. You clarify the problem. You identify constraints. You design a solution, build it, test it, release it, observe it, and maintain it. You also coordinate with people who use, fund, review, operate, and depend on the software.
The central problem is change. Needs change. Operating environments change. Teams change. Software that works today must remain understandable enough to change tomorrow.
A feedback system, not an assembly line
A simple map of the work looks linear:
need → requirements → design → construction → verification → release → operation → maintenance
Real projects move both ways through that map. A prototype can expose a missing requirement. A test can reveal a design flaw. Production behavior can change the next release plan. Maintenance can send the team back to requirements.
Treat each stage as a source of evidence. The team uses that evidence to decide what to do next. A life cycle model defines how the work is ordered and repeated, but no model removes the need for judgment.
Start with the problem
Continue the course
This section is part of the paid course.
See pricing to subscribe, or log in if you already have access.
Sources
- https://www.computer.org/education/bodies-of-knowledge/software-engineering
Supports
- SWEBOK v4.0 as the current official body-of-knowledge guide
- Reference-link rationale for the SWEBOK home
- https://ieeecs-media.computer.org/media/education/swebok/swebok-v4.pdf
Supports
- Software engineering knowledge areas and their relationships
- Requirements definitions, categories, sources, and acceptance criteria
- Design relationships, quality trade-offs, and design rationale
- Construction links to design, testing, configuration management, and quality
- Unit and integration testing definitions and testing across the life cycle
- Verification, validation, software quality, and configuration management
- Software process, operations, maintenance, professional practice, and security
- Quiz questions 1 through 7 and 9 through 11
- Reference-link rationales for SWEBOK
- https://www.acm.org/binaries/content/assets/education/se2014.pdf
Supports
- Joint ACM and IEEE Computer Society undergraduate software engineering curriculum guidance
- Expected professional capabilities and educational organization
- Reference-link rationale for the curriculum guidelines
- https://agilemanifesto.org/principles
Supports
- Frequent delivery, changing requirements, stakeholder collaboration, technical excellence, and regular process adjustment
- Feedback-loop treatment in the course
- Quiz question 5
- Reference-link rationale for the Agile principles
- https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
Supports
- Version control as a system that records file changes over time
- Comparison, restoration, collaboration, and local, centralized, and distributed models
- Reference-link rationale for Pro Git
- https://google.github.io/eng-practices/review/
Supports
- Reviewer and author guidance as a complete code-review practice
- Reference-link rationale for Google Engineering Practices
- https://google.github.io/eng-practices/review/reviewer/looking-for.html
Supports
- Review concerns including design, functionality, complexity, tests, naming, comments, style, and documentation
- Code-review checklist in the learner content
- https://google.github.io/eng-practices/review/reviewer/standard.html
Supports
- Improving code health while balancing forward progress
- Continuous improvement rather than requiring perfect code
- https://google.github.io/eng-practices/review/developer/small-cls.html
Supports
- Review, merge, design, and rework benefits of small coherent changes
- Quiz question 8
- https://csrc.nist.gov/pubs/sp/800/218/final
Supports
- Need to integrate secure development practices into life-cycle models
- SSDF purpose and its common vocabulary
- Quiz question 12
- Reference-link rationale for NIST SSDF
- https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-218.pdf
Supports
- SSDF practice groups Prepare the Organization, Protect the Software, Produce Well-Secured Software, and Respond to Vulnerabilities
- Security content in the intro, slides, cheatsheet, and video script
- https://github.com/sindresorhus/awesome
Supports
- Discovery of the curated Static Analysis and Code Quality awesome list
- Awesome Links research decision
- https://github.com/analysis-tools-dev/static-analysis
Supports
- Inclusion of pre-commit, Semgrep, CodeQL, and SonarQube as relevant static-analysis or code-quality ecosystem projects
- Awesome Links curation
- https://pre-commit.com/
Supports
- pre-commit as a multi-language hook management framework
- Configuration, commit-time execution, all-files execution, and continuous-integration use
- Awesome-link rationale for pre-commit
- https://docs.semgrep.dev/getting-started/
Supports
- Semgrep static analysis for bugs, security issues, and policy enforcement
- Editor, commit, and continuous-integration use
- Awesome-link rationale for Semgrep
- https://docs.github.com/en/code-security/concepts/code-scanning/codeql/codeql-code-scanning
Supports
- CodeQL as GitHub's analysis engine for vulnerabilities and errors
- Setup methods, queries, and code-scanning alerts
- Awesome-link rationale for CodeQL
- https://docs.sonarsource.com/sonarqube-server/
Supports
- SonarQube Server documentation scope for installation, analysis, issue management, and quality standards
- Awesome-link rationale for SonarQube Server
