CSC375 · TU past paper
Software Engineering 2076 question paper
The complete TU 2076 exam paper for Software Engineering (CSC375), all 12 questions with solved model answers written to the mark scheme.
Tap a question to open its answer.
- 110 marksSoftware Process ModelsHideAnswer
What is software process model? Discuss waterfall model with its merits and demerits.[10]
Software Process Model and Waterfall Model
What is a Software Process Model? (2 marks)
A software process model is an abstract representation of a software process. It describes a structured set of activities, methods, practices, and transformations that are used to develop and maintain software and its associated products (plans, documents, code, test cases, manuals, etc.).
A software process model provides a framework that defines:
- The order in which activities are carried out
- The entry and exit criteria for each activity
- The deliverables produced at each stage
Common software process models include:
- Waterfall Model
- Incremental Model
- Spiral Model
- Agile Model
Waterfall Model (6 marks)
Definition
The Waterfall Model is a sequential software development approach where each fundamental activity of the process is represented as a separate phase, arranged in linear order. Each phase must be completed fully before proceeding to the next phase. The process is strictly sequential -- no backing up or repeating of phases is allowed. This model is strictly documented and predefined, with features expected at every phase of the Software Development Life Cycle (SDLC).
Phases of the Waterfall Model
The diagram below illustrates the sequential flow:
Requirements Definition | v System and Software Design | v Implementation and Unit Testing | v Integration and System Testing | v Operation and Maintenance1. Requirements Definition (System Requirements)
- All possible requirements of the system to be developed are captured and documented.
- Feasibility study is conducted.
- A Software Requirements Specification (SRS) document is produced.
2. System and Software Design
- The requirements gathered in the first phase are studied and system design is prepared.
- Hardware and software requirements are defined.
- Overall system architecture is designed.
3. Implementation and Unit Testing
- The design is translated into source code.
- Each unit (module) of the software is developed and tested individually to verify that it meets its specifications.
4. Integration and System Testing
- All units developed in the previous phase are integrated into a complete system.
- The integrated system is tested to ensure it meets the specified requirements.
- Errors and bugs are found and fixed.
5. Operation and Maintenance
- The software is deployed to the customer environment.
- Maintenance is carried out to correct errors discovered after deployment, improve performance, and adapt the software to a changed environment.
Merits of the Waterfall Model (1 mark)
Merit Explanation Simple and easy to understand The sequential nature makes it easy to manage and explain. Well-documented Each phase is strictly documented, making future maintenance easier. Easy to schedule and plan Clear milestones and deliverables at each phase allow better project management. Works well for small projects When requirements are well understood and fixed, this model is very effective. Structured approach Phases do not overlap, reducing confusion in large teams.
Demerits of the Waterfall Model (1 mark)
Demerit Explanation No working software until late No working software is produced until late during the life cycle, so the customer has to wait long. Cannot accommodate changing requirements This model cannot accept changes in requirements during development. Difficult to go back Once a phase is completed, it becomes very tough to go back to a previous phase and make changes. Risk reduction is difficult Since testing is done at a later stage, risk reduction strategy is difficult to prepare. Not suitable for complex projects Projects where requirements are unclear or likely to change are not well-suited for this model.
Summary
The Waterfall Model is the oldest and most widely used software process model. It is best suited for projects where:
- Requirements are clearly defined and stable
- The project is small and short in duration
- Technology is well understood
However, for large, complex, or requirement-changing projects, more flexible models such as the Spiral or Agile model are preferred over the Waterfall Model.
- 210 marksProject Management ActivitiesHideAnswer
Discuss different types of risks which are likely to arise in software projects. Briefly explain risk analysis stage during risk management process.[10]
According to the notes, there are three main categories of risks likely to occur in software projects: --- Project risks influence the schedule of a software project. If these risks occur, they delay the development process. Examples: - ...
- 310 marksIntroduction to System ModelingHideAnswer
Explain system modeling with suitable example.[10]
System modeling is the process of developing abstract models of a system, with each model presenting a different view or perspective of that system. It helps system analysts to validate the system's functionality and helps to communicate...
- 45 marksFunctional and Non-Functional RequirementsHideAnswer
Briefly explain functional, non-functional, and domain requirements. [5]
--- Functional requirements are statements of the services that the system must provide. They define the basic system behaviour -- what the system does or must not do -- and describe how the system responds to inputs. - These are the mai...
- 55 marksCoping with ChangeHideAnswer
What are rapid prototyping techniques? Briefly explain different rapid prototyping techniques. [5]
Rapid prototyping is a group of techniques used to quickly fabricate or develop a working model (prototype) of a software system or its components. The main goal is to quickly build a preliminary version of the system so that users and d...
- 65 marksRequirements SpecificationHideAnswer
What is formal specification? Discuss interface specification in detail. [5]
Formal specification is a technique of describing the properties and behavior of a software system using mathematically precise notations and languages. It provides an unambiguous, rigorous, and complete description of what a system shou...
- 75 marksArchitectural Design DecisionsHideAnswer
What are the activities of architectural design process? Discuss abstract machine model. [5]
The architectural design process includes the following three major activities: - The system is decomposed into major sub-systems. - Communication mechanisms between these sub-systems are identified. - Each sub-system is relatively indep...
- 85 marksArchitectural Design DecisionsHideAnswer
What is modular decomposition? Discuss object oriented model of decomposition. [5]
Modular Decomposition and Object Oriented Model of Decomposition
Modular Decomposition
Modular decomposition is a process of decomposing subsystems into modules. After the system has been decomposed into subsystems (during system structuring), each subsystem must be further decomposed into lower-level modules such as components, objects, or functions. It is one of the key activities of the architectural design process.
In short: System --> Subsystems --> Modules (via modular decomposition)
Two modular decomposition models are commonly used:
- Object Oriented Model (decomposition into objects/classes)
- Function Oriented (Pipeline) Model (decomposition into functions/processes)
Object Oriented Model of Decomposition
In the object oriented model, the system is decomposed into a set of loosely coupled objects with well-defined interfaces. Each object encapsulates its own private state (data/attributes) and operations (methods/behaviors).
Key characteristics of this model include:
Feature Description Encapsulation Each object hides its internal state from other objects Abstraction Objects expose only necessary interfaces Reusability Objects/classes can be reused across the system Maintainability Changes to one object have minimal impact on others Steps in Object Oriented Decomposition
- Define the context and modes of use of the system.
- Design the system architecture by identifying major subsystems.
- Identify the principal system objects (classes) from the requirements.
- Develop design models such as class diagrams, sequence diagrams, etc.
- Specify object interfaces -- define the operations each object provides.
Example
Consider a Patient Management System:
- It can be decomposed into objects such as
Patient,PatientRecord,Doctor,Appointment. - Each object has its own attributes and methods.
- Objects communicate with each other through well-defined interfaces.
Patient PatientRecord ----------- --------------- - patientID - recordID - name - diagnosis - age - treatment ----------- --------------- + register() + addRecord() + getDetails() + getHistory()These classes and their associations are modeled using UML Class Diagrams, which show the static structure of the system.
Advantages of Object Oriented Decomposition
- Software is easier to change and maintain compared to functional approaches.
- Promotes reusability of object classes.
- Closely models real-world entities, making design more intuitive.
- Supports incremental development -- individual objects can be developed and tested independently.
In summary, modular decomposition breaks subsystems into manageable modules, and the object oriented model does this by organizing the system around objects that encapsulate both data and behavior, making the system more modular, reusable, and maintainable.
- 95 marksSoftware Process ModelsHideAnswer
What is clean room software development? Discuss the characteristics of cleanroom software development. [5]
Cleanroom Software Development
Definition
Cleanroom software development is a formal software engineering approach that emphasizes the prevention of defects rather than their removal after the fact. It is based on the idea of developing software correctly the first time by using mathematical (formal) methods for specification and design, combined with statistical testing to certify software reliability. The name "cleanroom" is borrowed from the semiconductor manufacturing process, where defects are prevented by working in a controlled, contamination-free environment.
Characteristics of Cleanroom Software Development
1. Formal Specification
- Software requirements and design are expressed using mathematical/formal notations.
- This ensures that the specification is precise, unambiguous, and verifiable.
- Reduces misunderstandings between developers and clients at the earliest stage.
2. Incremental Development
- Software is developed in a series of increments (small, manageable pieces).
- Each increment is specified, designed, verified, and tested before the next one begins.
- This allows early detection of problems and reduces overall project risk.
3. Structured Programming
- Only well-defined, mathematically sound control structures are used (sequence, selection, iteration).
- No ad-hoc or unstructured code is permitted.
- This makes formal verification of the code feasible and practical.
4. Static Verification (Correctness Proofs)
- Code is not executed by developers for testing purposes during development.
- Instead, correctness is verified through formal inspections and mathematical proofs.
- Teams use structured walkthroughs and reviews to confirm that the code meets its specification before any execution.
5. Statistical Testing for Reliability Certification
- Testing is performed not to find bugs, but to certify the reliability of the software.
- Test cases are generated based on a statistical usage model that reflects how real users will use the system.
- This allows a quantitative, measurable statement of software reliability (e.g., Mean Time to Failure).
6. Team Organization
- The cleanroom process uses separate teams for development and testing.
- The development team focuses on correctness verification.
- The independent testing team performs statistical testing.
- This separation ensures objectivity and reduces bias.
7. Zero Defect Goal
- The primary goal is defect prevention, not defect correction.
- By combining formal methods with rigorous inspections, the aim is to deliver software with near-zero defects.
Summary Table
Characteristic Key Point Formal Specification Mathematical, precise requirements Incremental Development Small, verifiable increments Structured Programming Only formal control structures Static Verification No developer testing; proof-based Statistical Testing Reliability certification Separate Teams Development and testing are independent Zero Defect Goal Prevention over correction
Conclusion
Cleanroom software development is a disciplined, mathematically-grounded approach that combines formal methods, structured programming, and statistical testing to produce highly reliable software. Its core philosophy is that quality must be built in from the beginning, not inspected in at the end.
- 105 marksDevelopment TestingHideAnswer
Discuss path testing with suitable example. [5]
Path Testing
Definition
Path testing is a white-box (structural) testing technique that aims to design test cases such that every possible path through a program's control flow graph (CFG) is executed at least once. The goal is to ensure complete coverage of all independent paths in the program logic, thereby detecting errors in the program structure and logic.
Key Concepts
Control Flow Graph (CFG)
A CFG represents the program as a directed graph where:
- Nodes represent processing steps (statements or blocks)
- Edges represent flow of control between steps
- Decision nodes represent branching (if, while, for)
Cyclomatic Complexity
Cyclomatic complexity (V(G)) determines the number of independent paths to be tested:
$$V(G) = E - N + 2P$$
Where:
- E = Number of edges
- N = Number of nodes
- P = Number of connected components (usually 1)
Steps in Path Testing
- Draw the Control Flow Graph from the program
- Calculate Cyclomatic Complexity V(G)
- Identify all independent (basis) paths
- Design test cases for each path
- Execute tests and verify results
Example
Program: Find the largest of two numbers
1. Start 2. Read A, B 3. If A > B then 4. Print "A is largest" 5. Else 6. Print "B is largest" 7. EndStep 1: Draw the Control Flow Graph
[1] Start | [2] Read A, B | [3] A > B ? / \ Yes No | | [4] Print A [5] Print B \ / \ / [6] EndStep 2: Calculate Cyclomatic Complexity
Parameter Value Edges (E) 6 Nodes (N) 6 P 1 $$V(G) = E - N + 2P = 6 - 6 + 2(1) = \mathbf{2}$$
So there are 2 independent paths to test.
Step 3: Identify Independent Paths
Path Route Condition Path 1 1 -> 2 -> 3 -> 4 -> 6 A > B (True) Path 2 1 -> 2 -> 3 -> 5 -> 6 A > B (False) Step 4: Design Test Cases
Test Case Input Expected Output Path Covered TC1 A = 10, B = 5 "A is largest" Path 1 TC2 A = 3, B = 8 "B is largest" Path 2
Advantages of Path Testing
- Ensures complete logical coverage of the program
- Helps detect unreachable code and dead code
- Identifies logic errors that may not be found by black-box testing
- Provides a measurable coverage criterion using cyclomatic complexity
Disadvantages
- Becomes complex and impractical for large programs with many paths
- Does not test data-related errors (e.g., wrong formula)
- Number of paths can grow exponentially with nested loops and conditions
Summary
Path testing is a systematic white-box technique that guarantees all independent execution paths are tested at least once. By using cyclomatic complexity as a guide, testers can determine the minimum number of test cases required to achieve full path coverage, making it a powerful method for ensuring program correctness.
- 115 marksValidation and Verification TestingHideAnswer
Write Short notes on: a. Reliability validation b. Reverse engineering [5]
Short Notes
a. Reliability Validation
Reliability validation is a part of the broader software validation activity in software engineering. Validation is concerned with building the right system -- it is intended to show that a system conforms to its specifications and meets the user's expectations.
Reliability validation specifically focuses on verifying that the software performs its intended functions correctly and consistently over time, under defined conditions, without failure.
Key Points:
-
Purpose: To demonstrate that the software can be trusted by its users. As noted in software engineering principles, the trust challenge requires developing techniques that demonstrate software can be trusted -- reliability validation directly addresses this challenge.
-
Importance in Safety-Critical Systems: In areas such as space, aviation, and nuclear power plants, the cost of software failure can be massive because lives are at risk. Reliability validation is therefore critical in such domains.
-
Cost Consideration: Roughly 60% of software costs are development costs and 40% are testing costs. For real-time and safety-critical software, validation and testing require even more extensive effort than web-based systems.
-
Process: It involves:
- Running the system under realistic conditions
- Measuring failure rates
- Comparing results against reliability requirements specified during software specification
-
Outcome: A validated, reliable software system improves overall software quality, reliability, and productivity -- all recognized advantages of proper software engineering practice.
b. Reverse Engineering
Reverse engineering in software engineering is the process of analyzing an existing software system to identify its components, their relationships, and to extract design and requirement information -- essentially working backwards from the implemented system to recover higher-level abstractions such as design documents or specifications.
Key Points:
-
Definition: It is the process of recovering the design, architecture, or requirements of a software system from its source code, binary, or documentation when the original design artifacts are unavailable or outdated.
-
Why It Is Needed:
- Over time, software evolves to meet changing customer needs. As noted, software evolution is a fundamental software engineering activity, and evolution costs often exceed development costs for customer software.
- Original documentation may be lost, incomplete, or outdated after repeated maintenance cycles.
-
Goals of Reverse Engineering:
- Understand the existing system before making changes
- Recover lost documentation
- Support software re-engineering or migration to a new platform
- Detect security vulnerabilities
-
Process Steps:
- Information extraction -- collecting data from source code or binaries
- Analysis -- understanding the structure and behavior
- Abstraction -- producing higher-level design or requirement models
-
Relation to Software Evolution: Since software must be written and maintained to meet changing needs of customers, reverse engineering is a practical tool used during the evolution phase of the software process.
Note: The reference notes do not cover reverse engineering in explicit detail; the above is supplemented with standard, correct software engineering knowledge consistent with the curriculum context provided.
-
- 125 marksInteraction ModelsHideAnswer
Discuss the importance of use case diagram in object-oriented development. Draw a use case diagram for library system. [5]
Use case diagrams show the interactions between the system and its environment. They are one of the key UML diagram types used in object-oriented development. Their importance can be discussed as follows: Use case diagrams help identify ...