Zum Inhalt springen

English:Software Engineering

Aus MOOCsWiki Staging
Version vom 29. August 2026, 14:25 Uhr von Glanz (Diskussion | Beiträge) (aiMOOC über GPT aiMOOC Action erstellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
aiMOOC-Siegel

Software Engineering



Introduction

Software engineering is the disciplined practice of planning, designing, building, testing, operating, and improving software systems. It is broader than simply writing code. A useful software system must solve a real problem, satisfy requirements, work reliably, protect users and data, remain understandable to other developers, and be maintainable over time. The field combines ideas from Computer science, Engineering, Project management, Human–computer interaction, and Information security.

This aiMOOC is designed for Grades 11–13. You will learn how professional software teams move from an idea to a dependable product, how they make design decisions, how they collaborate with version control, how they test software, and how they respond when requirements change. You will also examine ethical, security, accessibility, and sustainability questions.

A lifecycle diagram is useful as a map, but real projects do not always move through the stages once in a perfect circle. Teams often revisit requirements, redesign components, fix defects, and release improved versions.


What Software Engineering Is

Software engineering applies systematic and disciplined methods to software throughout its life. According to current professional descriptions of the field, important areas include Requirements engineering, Software architecture, Software design, construction, Software testing, maintenance, configuration management, operations, quality, security, and engineering management.

Programming is a central skill, but software engineering asks additional questions: What should we build? Why is it needed? How should parts interact? How do we know it works? How will a team change it safely? How will it behave when something fails? Who could be harmed by a mistake?

A small personal script may be understandable to one programmer without much planning. A larger system used by many people needs clearer interfaces, traceable decisions, tests, documentation, version history, security controls, deployment procedures, and shared team practices.


Engineering Goals and Constraints

Software teams rarely optimize only one goal. They work with competing constraints such as time, cost, functionality, usability, reliability, security, performance, maintainability, accessibility, and legal requirements. Improving one property can affect another. For example, adding a complex feature may increase user value but also increase testing effort and maintenance cost.

A strong engineering decision is therefore not simply a technically impressive solution. It is a solution that fits the problem and makes its trade-offs understandable.

Concern Guiding question Example evidence
Correctness Does the software do what its specification requires? Passing tests and verified acceptance criteria
Reliability Does it continue to behave dependably under expected conditions? Stable operation and failure handling
Maintainability Can another developer understand and change it safely? Clear structure documentation and automated tests
Security Does the system protect data and limit misuse? Threat analysis access control and secure configuration
Usability Can intended users complete their tasks effectively? User testing and accessibility review
Performance Does the system respond within acceptable resource limits? Measurements from realistic workloads


From Problem to Product

A software project begins with a problem or opportunity, not with a programming language. Before implementation, a team should understand the people affected, the context in which the software will operate, and the outcomes that matter.

A useful problem statement explains the current situation, the desired improvement, important constraints, and the main stakeholders. It should avoid pretending that the solution is already known. For example, “Students need a faster way to find available study rooms” leaves room for investigation, while “Build a mobile app with six screens” jumps directly to a solution.


Requirements Engineering

Requirements engineering is the process of discovering, analyzing, documenting, validating, and managing what a system should do and the conditions it must satisfy. Requirements can come from users, customers, laws, organizational policies, technical systems, or safety needs.

Functional requirements describe behavior or services. An example is: “A registered learner can submit an assignment before the deadline.” Non-functional requirements describe qualities or constraints. Examples include response time, security, accessibility, reliability, supported devices, and data retention.

Good requirements are specific enough to evaluate. Teams often express user-focused needs as user stories and add acceptance criteria that state what must be true for the work to be considered complete.

A simple example:

User need: A student wants to see which assignments are due soon.

Acceptance criteria: The system shows all unfinished assignments due within seven days, sorted by deadline.

Requirements can change. Managing change is part of engineering. A team should record important decisions, evaluate their impact, and update tests and documentation when necessary.


Modeling the Lifecycle

Different projects use different development processes. A predictive process may plan much of the work in advance. An iterative process develops the solution in repeated cycles, learning from feedback. Many modern teams combine practices rather than following one method mechanically.

The Waterfall model is often shown as sequential phases such as requirements, design, implementation, testing, deployment, and maintenance. This can make responsibilities and milestones clear, especially when requirements are stable or formal approval is necessary. However, expensive late changes are a risk when earlier assumptions turn out to be wrong.

Scrum is one framework associated with Agile software development. Agile approaches emphasize frequent delivery, feedback, collaboration, and the ability to respond to change. Agile does not mean “no planning” or “no documentation.” It means choosing planning and documentation that support learning and useful delivery rather than treating a fixed plan as more important than evidence.


Software Design and Architecture

Software design turns requirements into a plan for how the system will be organized. Software architecture describes important high-level structures: major components, responsibilities, interfaces, data flows, deployment boundaries, and constraints.

A good design reduces unnecessary complexity. One common principle is separation of concerns: different parts of the system should have clear responsibilities. A user interface, for example, should not contain all database logic, security rules, and business calculations in one place.

Other useful ideas include:

  1. Abstraction: Hide unnecessary detail behind a clear interface.
  2. Modularity: Divide a system into parts that can be understood and changed with limited impact.
  3. Cohesion: Keep closely related responsibilities together.
  4. Coupling: Avoid unnecessary dependencies between components.
  5. Encapsulation: Protect internal state and expose controlled operations.
  6. Interface: Define how components communicate without requiring knowledge of all internal details.


UML and Design Communication

The Unified Modeling Language provides several kinds of diagrams for communicating software structure and behavior. A class diagram can show classes, attributes, operations, and relationships. A sequence diagram can show how participants exchange messages over time. Diagrams are models, not the system itself; they should simplify the part of the design that people need to discuss.

Before drawing a detailed diagram, decide what question the diagram should answer. A simple diagram that clarifies a design decision is often more useful than a complex diagram that records every implementation detail.


Implementation and Code Quality

Implementation transforms a design into executable software. Professional code should be understandable not only to the computer but also to people who will review, test, debug, and maintain it.

Useful practices include meaningful names, small focused units of code, consistent formatting, clear interfaces, appropriate comments, automated checks, and removal of duplication when it improves clarity. Comments should explain important intent, assumptions, or reasons. They should not merely repeat what obvious code already states.

Refactoring means improving the internal structure of existing code without intentionally changing its observable behavior. Refactoring can reduce duplication, simplify complex functions, improve names, and isolate responsibilities. Safe refactoring is easier when automated tests protect expected behavior.

Technical debt is a useful metaphor for design or implementation choices that make future changes harder. Some debt is accepted deliberately to meet a deadline, but hidden or unmanaged debt can slow development and increase defects.


Version Control and Collaboration

Version control records changes to files so that a team can review history, work in parallel, compare versions, and recover from mistakes. Git is a distributed version control system widely used for software projects.

A commit records a snapshot of selected changes together with metadata such as the author and a message. A branch allows a line of work to develop separately. A merge combines histories. Teams often review changes before merging them into a shared main branch.

Branching strategies differ. The diagram above shows one possible workflow, not a universal rule. A small team may use short-lived branches and frequent integration, while another project may use different release branches or review policies.

Good commit messages describe the purpose of a change. A useful code review examines correctness, clarity, tests, security, maintainability, and consistency with requirements. Review should focus on the software and the reasoning, not on attacking the person who wrote it.


Testing and Quality Assurance

Software testing provides evidence about software quality by executing or evaluating the system under defined conditions. Testing can reveal defects, but passing tests do not prove that a non-trivial program is perfect. Tests are strongest when they are connected to risks and requirements.

Unit tests examine small units such as functions or classes. Integration tests examine how components work together. System tests examine the complete system or a large part of it. Acceptance tests evaluate whether agreed user or business needs are satisfied.

The testing pyramid is a heuristic suggesting many fast focused tests near the unit level and fewer broad end-to-end tests. It is not a law for every system. The right test mix depends on architecture, risk, cost, technology, and the kinds of failures that matter.


Designing Effective Tests

A good test has a clear purpose, controlled conditions, an action, and an expected outcome. For a login feature, useful cases include valid credentials, invalid credentials, missing input, locked accounts, and rate limits. Boundary values are especially important. If a field accepts 1 to 100 characters, test values near the limits rather than only typical values.

A regression test checks that behavior that worked before still works after a change. When a defect is fixed, teams often add a test that would have detected it.

Quality assurance is broader than testing. It also includes reviews, standards, monitoring, risk management, usability work, accessibility checks, security practices, and improvement of the development process itself.


Continuous Integration Delivery and Operations

Continuous integration means integrating changes frequently and checking them with automated builds and tests. The goal is to find integration problems early rather than allowing incompatible changes to accumulate.

Continuous delivery extends this idea so that software is kept in a state that can be released reliably. Continuous deployment goes further by automatically deploying each change that passes the required pipeline checks. These terms are related but not identical.

DevOps connects development and operations practices so that teams can deliver and operate software with faster feedback and shared responsibility. Useful operational signals include availability, error rates, response times, resource use, and user-visible failures.

Deployment is not the end of engineering. Software must be monitored, patched, supported, and eventually replaced or retired. Software maintenance includes correcting defects, adapting software to changed environments, improving qualities, and evolving functionality.


Security Privacy Accessibility and Ethics

Software can affect people's money, communication, education, safety, opportunities, and privacy. Engineering therefore includes responsibilities beyond technical correctness.

Security by design means considering threats throughout development rather than adding security only before release. Teams should validate inputs, protect secrets, keep dependencies updated, use appropriate authentication and authorization, log important events safely, and apply least privilege.

Privacy by design means collecting only data that is needed, being clear about how it is used, protecting it, limiting retention, and respecting applicable rules. Test data should not expose real personal information without a valid reason and appropriate safeguards.

Accessibility means designing so that people with disabilities can use the software. Important practices include keyboard access, sufficient text alternatives, meaningful structure, readable contrast, captions for important video content, and testing with accessibility tools and users.

Professional ethics includes honesty about limitations, respect for users, avoidance of deceptive interfaces, responsible handling of vulnerabilities, respect for intellectual property and licenses, and attention to harms that may fall unevenly on different groups.


Sustainability

Software also consumes physical resources. Efficient algorithms, sensible data storage, reduced unnecessary network traffic, longer hardware life, and right-sized infrastructure can lower energy and material use. Sustainable engineering is not only about execution speed; it includes the full lifecycle of devices, servers, maintenance, and replacement.


Project Management and Teamwork

Software engineering is collaborative. Common roles include software developer, tester, product owner, business analyst, user-experience designer, security specialist, operations engineer, data engineer, and project manager. Small teams may combine several roles in the same person.

Teams coordinate work using backlogs, issue trackers, milestones, boards, design documents, meetings, and asynchronous communication. A useful work item states the goal, context, acceptance criteria, dependencies, and risks.

Estimates are uncertain because software work often includes discovery. A responsible estimate communicates assumptions and confidence rather than pretending to know an exact future.

A retrospective is a structured opportunity to ask what helped the team, what caused friction, and what experiment could improve the next cycle. The goal is continuous improvement, not blame.


Responsible Use of AI in Software Engineering

Generative AI tools can assist with brainstorming, explanations, code drafts, tests, documentation, refactoring suggestions, and search. They can also produce incorrect code, insecure patterns, invented APIs, outdated assumptions, or text that does not fit the project.

You should treat AI output as a proposal that requires engineering judgment. Before accepting generated code, check the requirement, understand the code, run tests, inspect security and privacy implications, verify licenses or usage conditions where relevant, and review dependencies. Never paste confidential credentials, private user data, or restricted source code into a tool unless the organization has explicitly approved that use.

AI can accelerate implementation, but it does not remove responsibility. The team that ships the software remains accountable for its behavior.


Mini Case Study: School Event Booking System

Imagine that your school wants a web application for booking seats at student performances. The initial request is simply: “Make booking easier.”

A software engineering team would investigate before coding. Stakeholders might include students, families, event organizers, office staff, and administrators. Functional requirements could include browsing events, reserving seats, canceling within a policy, and showing remaining capacity. Non-functional requirements could include accessibility, privacy, fast response, and reliable operation during popular booking periods.

A first design might contain a user interface, an event service, a booking service, and a database. A critical invariant is that the system must not sell more seats than the venue allows. This creates a testing and concurrency problem: two users may try to reserve the final seat almost simultaneously.

The team could implement the smallest useful version, add automated tests, review changes through version control, deploy to a test environment, run accessibility checks, conduct user testing, and collect feedback. Monitoring after release could reveal failed bookings, slow responses, or confusing steps. Those findings become inputs for the next iteration.

This example shows why software engineering is a cycle of reasoning, implementation, evidence, and improvement rather than a one-time act of coding.


Interactive Tasks


Quiz: Test Your Knowledge

What best describes software engineering? (Systematic development and maintenance of software) (!Writing code without planning) (!Choosing the newest programming language) (!Designing computer hardware only)




What does a functional requirement describe? (Behavior the system must provide) (!The color of the project board) (!The salary of the development team) (!The brand of the computers)




Why are acceptance criteria useful? (They make expected outcomes testable) (!They remove the need for users) (!They guarantee zero defects) (!They replace version control)




What is a main purpose of software architecture? (Organizing major system structures) (!Choosing office furniture) (!Replacing all documentation) (!Avoiding all future changes)




What does refactoring aim to improve? (Internal code structure) (!User requirements only) (!Network ownership) (!Computer screen size)




What does version control help a team manage? (Changes to project files) (!Only password strength) (!Only user interviews) (!Only processor speed)




What is the main focus of a unit test? (A small unit of software) (!The entire organization) (!A legal contract) (!A hardware factory)




What is continuous integration intended to encourage? (Frequent integration with automated checks) (!Rare integration after long delays) (!Manual copying between computers) (!Removing all automated tests)




What does least privilege mean? (Give only needed access) (!Give every user administrator access) (!Share one password with everyone) (!Disable all authorization rules)




How should generated AI code be treated? (As output that needs review) (!As automatically correct software) (!As a replacement for requirements) (!As proof that testing is unnecessary)





Memory Game

Requirement A documented need or constraint that software should satisfy
Architecture The high level organization of components and their relationships
Commit A recorded version control change with metadata
Regression A failure in behavior that previously worked correctly
Refactoring Improvement of internal code structure without intended behavior change
Deployment Release of a software version into a target environment
Accessibility Design that enables people with disabilities to use a system





Drag and Drop

Match the correct terms. Topic
Describes user visible behavior Functional requirement
Defines major components and interfaces Software architecture
Checks a small isolated unit Unit test
Records a project change Version control commit
Keeps software ready for reliable release Continuous delivery




...


Crossword Puzzle

Requirements What do engineers analyze to understand system needs and constraints?
Architecture What describes the major structures and relationships of a software system?
Repository What stores version controlled project history and files?
Refactoring What improves internal code structure without intentionally changing behavior?
Deployment What places a software release into a target environment?
Maintenance What continues after release to correct adapt and improve software?





LearningApps


Cloze Text

Complete the text.
Software engineering uses a

approach to building and maintaining software. A project begins by understanding stakeholder

. High level structural decisions belong to software

. Version control records changes in a shared

. Automated

provides evidence that expected behavior still works. Frequent integration can detect conflicts

. Secure systems should give accounts only the access they

. After release software still requires monitoring and

.




Open-Ended Tasks


Easy

  1. Problem statement: Choose a school or everyday problem that software might help solve. Write a one-paragraph problem statement that names the users, the problem, the desired outcome, and two constraints without deciding the technology in advance.
  2. User story: Write three user stories for a simple application and add two measurable acceptance criteria to each story.
  3. Test case: Select one familiar feature such as login, search, or file upload. Create a test table with normal cases, boundary cases, and error cases, then explain which risk each case addresses.
  4. Version control: Create a small local Git repository, make three meaningful commits, and write a short reflection on what makes a commit message useful to another developer.


Standard

  1. Requirements interview: Interview a classmate acting as a customer for a small software idea. Record needs, conflicts, assumptions, and unanswered questions, then revise your requirements after the interview.
  2. Software design: Design a component or class diagram for a school event booking system. Explain the responsibility of each part and identify one dependency you would try to reduce.
  3. Code review: Exchange a small program with a peer. Review it for correctness, readability, testability, security, and maintainability, then discuss one suggested improvement respectfully.
  4. Agile software development: Run a short team iteration for a tiny project. Use a backlog, choose a limited goal, build a working increment, demonstrate it, and conduct a retrospective with one improvement experiment.


Advanced

  1. Software testing: Build a small application with automated unit and integration tests. Introduce one controlled defect, show which test detects it, fix the defect, and explain why the test should remain as a regression test.
  2. Threat modeling: Create a data-flow sketch for a web application and identify at least five plausible threats. Rank them by impact and likelihood, then propose realistic mitigations and remaining risks.
  3. Continuous integration: Configure a simple continuous integration pipeline for a sample repository so that each proposed change runs automated checks. Document one failed run and explain how the feedback improved the code.
  4. Software engineering project: In a team, design and build a small software product for a real user group. Produce requirements, a design model, source history, automated tests, a release, user feedback, and a final evaluation of technical debt, ethics, accessibility, and future maintenance.



Learning Assessment

  1. Requirements trade-off: Given a request for a feature that improves convenience but collects more personal data, propose a solution and justify the trade-off among user value, privacy, development effort, and maintainability.
  2. Architecture decision: Compare two possible architectures for a small application, identify likely failure points and dependencies, and defend one choice using explicit criteria rather than personal preference.
  3. Test strategy: Design a risk-based test strategy for an online booking system and explain why different risks require different combinations of unit, integration, system, and acceptance tests.
  4. Change impact analysis: A new requirement changes how user accounts are verified. Trace which requirements, components, tests, documentation, and deployment steps may need revision.
  5. Incident analysis: Analyze a fictional production failure, distinguish immediate symptoms from root causes, and propose technical and process changes that would reduce the chance of recurrence.
  6. Responsible AI use: Evaluate a scenario in which a developer accepts AI-generated code without understanding it. Identify possible correctness, security, licensing, privacy, and maintainability risks and propose a safer workflow.




Evidence of Learning

  1. Knowledge: You can explain the software lifecycle, requirements, architecture, implementation, testing, version control, deployment, maintenance, security, accessibility, and professional responsibility.
  2. Reasoning skills: You can compare alternatives, identify constraints, make trade-offs explicit, trace the impact of changes, and justify decisions with evidence.
  3. Technical skills: You can use version control, create basic models, write test cases, perform structured reviews, interpret automated checks, and document decisions.
  4. Collaboration skills: You can ask useful stakeholder questions, give and receive review feedback, divide work responsibly, and communicate uncertainty.
  5. Products: Your portfolio can include requirements, diagrams, a repository history, source code, automated tests, review notes, a release, and a reflective project report.
  6. Transfer: You can apply software engineering thinking to unfamiliar projects by starting from stakeholder needs, identifying risks, choosing suitable methods, and validating outcomes rather than copying one process mechanically.




OERs on the Topic


Useful related open learning topics include Software development process, Agile software development, Software architecture, Unified Modeling Language, Software testing, Version control, Git, DevOps, Computer security, Software maintenance, and Open-source software.


Linked Learning Areas

Software engineering connects computer science with mathematics, design, communication, business, law, and social responsibility. At school level, it can link programming projects with data protection, user-centered design, project planning, technical writing, and ethical analysis. In vocational education it connects strongly to software development, system integration, testing, IT operations, and quality assurance. At university level it develops into specialized study of architecture, formal methods, distributed systems, software analytics, security engineering, human-computer interaction, and engineering management.


aiMOOC Projects

MOOCwiki · Deutsch

Nach dem Lernen ist vor dem Lernen

Entdecke direkt den nächsten Lernkurs. Weitere Inhalte erscheinen, wenn Du weiter nach unten scrollst.

Zur MOOCwiki-Hauptseite

Mediathek

Mediathek

Inhalte werden geladen ...

Mediathek wird aus dem Wiki geladen ...