CSC375 · TU past paper
Software Engineering 2081 question paper
The complete TU 2081 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 marksProject PlanningHideAnswer
Explain the importance of software pricing. Highlight COCOMO cost modeling technique. List its disadvantage.[10]
Software Pricing, COCOMO Cost Modeling, and Its Disadvantages
1. Importance of Software Pricing
Software pricing is a critical activity in software project management. It must take into account broader organizational, economic, political, and business considerations. Simply calculating the cost of development is not enough; pricing decisions are influenced by many strategic factors.
The major factors that affect software pricing are:
Factor Explanation Market Entry Strategy A development organization may quote a low price if it wants to move into a new segment of the software market. Accepting low profit in one project may give the opportunity of more profit later. Uncertain Cost Estimation If an organization has no clear idea about cost estimation, it may increase its price by adding a contingency amount to cover unexpected expenses. Unclear Requirements If the customer is not clear about their requirements, there is a chance of changing requirements later. In such cases, the organization may initially lower its price to win the contract. Financial Health If the financial health of the organization is not good, they may lower their price to gain a contract and establish themselves in business. Competitive Positioning Pricing helps an organization position itself competitively in the market against rival software vendors. Why Software Pricing Matters:
- It determines the profitability and sustainability of a software organization.
- It affects the bidding and tendering process for software contracts.
- It helps in resource planning -- knowing how much to invest in development, testing, and maintenance.
- Roughly 60% of costs are development costs and 40% are testing costs, so accurate pricing ensures these are covered.
- For customer software, evolution costs often exceed development costs, making long-term pricing strategy essential.
2. COCOMO Cost Modeling Technique
Definition
The Constructive Cost Model (COCOMO) is an algorithmic software cost estimation model. It predicts or estimates:
- The effort required for the project (in person-months)
- The total project cost
- The scheduled time for the project
This model depends on the number of lines of code (LOC) for software product development.
Estimation Approaches
COCOMO fits within the broader software estimation process, which includes estimating:
- Size of the software product
- Effort required
- Overall cost of the project
Estimation can be done using either:
- Top-down approach (also called Macro Model): Overall cost is derived from global properties of the project.
- Bottom-up approach: The cost of each software component is estimated individually and then combined to arrive at the overall project cost. COCOMO's detailed model is the leading method using this bottom-up approach.
Types / Levels of COCOMO
COCOMO is applied at three levels depending on the accuracy needed:
a) Basic COCOMO
- Estimates effort and duration based purely on lines of code (LOC).
- Uses the formula:
Effort (E) = a * (KLOC)^b [person-months] Duration (D) = c * (E)^d [months]Where
a,b,c,dare constants that depend on the project type.b) Intermediate COCOMO
- Extends Basic COCOMO by introducing cost driver attributes such as:
- Product attributes (reliability, complexity)
- Hardware attributes (memory constraints)
- Personnel attributes (analyst capability)
- Project attributes (use of software tools)
- These attributes adjust the effort estimate more accurately.
c) Detailed COCOMO (Advanced)
- Uses the bottom-up approach.
- The cost of each individual software component is estimated and then combined.
- It aims at constructing the estimate of a system from the knowledge gained about small software components and their interactions.
- Provides the most accurate estimate among the three levels.
Project Categories in COCOMO
Mode Description Example Organic Small, simple projects with experienced teams Payroll system Semi-detached Medium complexity, mixed experience Compiler design Embedded Complex, tight constraints (hardware/software) Air traffic control
3. Disadvantages of COCOMO
Despite being widely used, COCOMO has several notable disadvantages:
-
Dependence on Lines of Code (LOC)
- The model relies heavily on LOC as the primary input. LOC is difficult to estimate accurately at the early stages of a project, making early estimates unreliable.
-
Does Not Handle Modern Development Well
- COCOMO was designed for traditional software development. It does not adequately address object-oriented development, component-based development, or agile methodologies.
-
Difficulty in Accurate Cost Driver Assessment
- In Intermediate and Detailed COCOMO, the cost drivers (effort multipliers) are subjective and require expert judgment, which can introduce human bias into the estimation.
-
Not Suitable for All Project Types
- COCOMO is less effective for real-time systems, embedded systems, or projects with rapidly changing requirements, as these do not fit neatly into its three project categories.
-
Ignores Reuse and COTS Components
- The model does not properly account for reused code, commercial off-the-shelf (COTS) components, or third-party libraries, which are common in modern software development.
-
Historical Data Dependency
- The constants (
a,b,c,d) used in the formulas are derived from historical project data. If an organization's projects differ significantly from the data used to calibrate the model, the estimates will be inaccurate.
- The constants (
-
Does Not Consider Team Dynamics
- COCOMO does not fully account for team communication overhead, organizational culture, or management quality, all of which significantly affect project cost and schedule.
Summary Table
Aspect Detail Software Pricing Strategic decision based on market, finance, and requirements clarity COCOMO Type Algorithmic cost estimation model Input Lines of Code (KLOC) - 210 marksSoftware Process ModelsHideAnswer
What do you understand by software process model? Explain different software process activities.[10]
A software process model is an abstract representation of a software process. It describes a process from a particular perspective and presents a simplified description of a software development process, organized as a framework of activ...
- 310 marksObject-Oriented Design using UMLHideAnswer
Draw use case diagram, class diagram and sequence diagram for online book recommendation system. Make your own assumptions.[10]
Online Book Recommendation System - UML Diagrams
Assumptions
- Users can register, login, browse books, and receive recommendations
- The system recommends books based on user preferences, reading history, and ratings
- Users can search for books, add them to a wishlist, and rate/review books
- An Admin manages the book catalog and user accounts
- The system interacts with an external Payment Gateway for purchases
1. Use Case Diagram
Purpose: Shows interactions between the system and its environment (actors and use cases), focusing on functional requirements and providing an outside view of the system.
+----------------------------------------------------------+ | Online Book Recommendation System | | | | +----------------+ +-------------------------+ | | | Register | | Manage Book Catalog | | | +----------------+ +-------------------------+ | | ^ | | +----------------+ | (Admin) | | | Login | +-------------------------+ | | +----------------+ | Manage Users | | | | +-------------------------+ | | v | | +----------------+ +-------------------------+ | | | Search Book | | View Recommendation | | | +----------------+ +-------------------------+ | | | | | | v v | | +----------------+ +-------------------------+ | | | Rate & Review | | Update Preferences | | | +----------------+ +-------------------------+ | | | | +----------------+ +-------------------------+ | | | Add to | | Purchase Book | | | | Wishlist | +-------------------------+ | | +----------------+ | | | <<include>> | | +-------------------------+ | | | Process Payment | | | +-------------------------+ | +----------------------------------------------------------+ [User] -----> (Register, Login, Search Book, Rate & Review, Add to Wishlist, View Recommendation, Update Preferences, Purchase Book) [Admin] -----> (Login, Manage Book Catalog, Manage Users) [Payment Gateway] <----- (Process Payment)Textual Description of Relationships
Actor Use Case Relationship User Register Association User Login Association User Search Book Association User View Recommendation Association User Rate and Review Association User Add to Wishlist Association User Update Preferences Association User Purchase Book Association Purchase Book Process Payment <<include>>View Recommendation Update Preferences <<extend>>Admin Manage Book Catalog Association Admin Manage Users Association Payment Gateway Process Payment Association
2. Class Diagram
Purpose: Shows the static structure of the system - the object classes and associations between them, used when developing an object-oriented system model.
+------------------+ +----------------------+ | User | | Book | +------------------+ +----------------------+ | - userID: int | | - bookID: int | | - name: String | | - title: String | | - email: String | | - author: String | | - password: String| | - genre: String | | - preferences: | | - ISBN: String | | List<String> | | - price: float | +------------------+ | - rating: float | | + register() | +----------------------+ | + login() | | + getDetails() | | + updateProfile()| | + getAverageRating() | | + logout() | +----------------------+ +------------------+ | | | | 1 | 1..* | | v v +------------------+ +----------------------+ | WishList | | Review | +------------------+ +----------------------+ | - wishlistID:int | | - reviewID: int | | - userID: int | 1 * | - userID: int | | - bookList: |<-------->| - bookID: int | | List<Book> | | - rating: int | +------------------+ | - comment: String | | + addBook() | | - date: Date | | + removeBook() | +----------------------+ | + viewWishlist() | | + submitReview() | +------------------+ | + editReview() | +----------------------+ | | 1 | v +----------------------+ +-------------------------+ | RecommendationEngine | | Order | +----------------------+ +-------------------------+ | - engineID: int | | - orderID: int | | - algorithm: String | | - userID: int | +----------------------+ | - bookID: int | | + generateRecommend()| | - amount: float | | + updateModel() | | - status: String | | + fetchUserHistory() | +-------------------------+ +----------------------+ | + placeOrder() | | | + cancelOrder() | | uses | + getOrderStatus() | v +-------------------------+ +----------------------+ | | BookCatalog | | 1 +----------------------+ +-------------------------+ | - catalogID: int | | Payment | | - bookList: | +-------------------------+ | List<Book> | | - paymentID: int | | | - orderID: int | | | | - amount: float | | | | - method: String | | | | - status: String | | | +-------------------------+ | | | + processPayment() | | | | + refund() | | | +-------------------------+ +----------------------+Key Relationships
Class Related Class Multiplicity Relationship User WishList 1 to 1 Composition WishList Book 1 to many Association Book Review 1 to many Association RecommendationEngine BookCatalog uses Dependency Order Payment 1 to 1 Composition
3. Sequence Diagram (Purchase Book Use Case)
Purpose: Shows the time-ordered sequence of messages exchanged between objects to accomplish a specific use case, useful for understanding dynamic, run-time behaviour.
User BookCatalog Order Payment PaymentGateway | | | | | |--selectBook()-->| | | | | |--getDetails()-| | | |<--bookDetails---| | | | | | | | | |--placeOrder()------------------>| | | | | |--createOrder-| | | | | |--processPayment()-->| | | | | |--validateCard()--> | | | | |<--paymentApproved-- | | | |<--paymentResult-| | | | |<--orderConfirmed-- | | |<--orderStatus("Confirmed")------| | | | | | | | | |Flow Description:
- The User selects a book, and the system fetches its details from
BookCatalog. - The User places an order, which
Ordercreates and forwards toPayment. Paymentcalls the externalPaymentGatewayto validate the card and process the transaction.- On success, the payment result flows back through
PaymenttoOrder, and a confirmation is shown to the User.
Summary
The Use Case Diagram captures what the system does from the outside (registering, searching, rating, purchasing, and administering the catalog), the Class Diagram captures the static structure that makes those use cases possible (User, Book, WishList, Review, RecommendationEngine, BookCatalog, Order, and Payment, with their attributes, methods, and relationships), and the Sequence Diagram captures how objects collaborate over time to carry out one specific scenario, purchasing a book, from selection through payment confirmation. Together, these three views give a complete picture of the Online Book Recommendation System's structure and behaviour, which is exactly why UML modelling typically combines a structural view (class diagram), a behavioural/interaction view (sequence diagram), and a requirements view (use case diagram) rather than relying on any single diagram alone.
- 45 marksProject Management ActivitiesHideAnswer
How risk management is carried out during software development? Explain. [5]
Risk management is the process of identifying risks that might affect the project schedule or quality of the software being developed, and taking action to avoid or minimize these risks. It involves assessing major project risks to estab...
- 55 marksSoftware MaintenanceHideAnswer
'Software maintenance is one of the most importance activity.' Justify the statement with an example. [5]
Software maintenance refers to the time-to-time modification and evolution of a software system to meet the changing needs of customers and to correct errors discovered after deployment. It is one of the four fundamental software enginee...
- 65 marksValidation and Verification TestingHideAnswer
Difference between verification and validation. Explain software inspection process. [5]
--- Aspect Verification Validation --------- Definition Checking whether the system is built correctly (process-oriented) Checking whether the right system is built (product-oriented) Focus Confirms the system conforms to its specificati...
- 75 marksDesign PatternsHideAnswer
What do you understand by design patterns? What role does it have in object oriented design. [5]
Design patterns are typical solutions to common problems in software design. Each pattern acts like a blueprint that can be customized to solve a particular design problem in code. They represent formalized best practices that programmer...
- 85 marksApplication ArchitecturesHideAnswer
Explain any one application of architecture. [5]
Application architecture describes the patterns and techniques used to design and build an application. It is the process of defining the framework of an organization's application solutions against business requirements. It helps to ens...
- 95 marksRequirements Engineering ProcessHideAnswer
Briefly explain on the requirements of engineering process. [5]
Requirements engineering (RE) is a process that involves all of the activities required to create and maintain a system requirements document. Its purpose is to make the problem being stated clear and complete, and to ensure that the sol...
- 105 marksAgile Development TechniquesHideAnswer
What are the principles of agile development? Explain agile development techniques. [5]
Principles of Agile Development and Agile Development Techniques
Principles of Agile Development
Agile development is based on the Agile Manifesto, which emphasizes flexibility, collaboration, and customer satisfaction. The core principles are:
-
Customer Satisfaction: Highest priority is to satisfy the customer through early and continuous delivery of valuable software.
-
Welcome Changing Requirements: Agile processes welcome changing requirements, even late in development, to provide competitive advantage to the customer.
-
Frequent Delivery: Deliver working software frequently, from a couple of weeks to a couple of months, with preference for shorter timescales.
-
Collaboration: Business people and developers must work together daily throughout the project.
-
Motivated Individuals: Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
-
Face-to-Face Communication: The most efficient and effective method of conveying information is face-to-face conversation.
-
Working Software as Progress Measure: Working software is the primary measure of progress.
-
Sustainable Development: Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
-
Technical Excellence: Continuous attention to technical excellence and good design enhances agility.
-
Simplicity: Maximizing the amount of work not done is essential.
-
Self-Organizing Teams: The best architectures, requirements, and designs emerge from self-organizing teams.
-
Regular Reflection: At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Agile Development Techniques
The most significant approach to changing software development culture was the development of Extreme Programming (XP). The major agile development techniques are described below:
1. Extreme Programming (XP)
- XP is the most well-known agile technique that introduced a new approach to software development culture.
- It involves practices such as pair programming, test-driven development (TDD), continuous integration, and small releases.
- Requirements are expressed as user stories, and the team works in short iterations called sprints.
- XP emphasizes frequent feedback, simplicity in design, and constant communication among team members.
2. Scrum
- Scrum is an agile framework that organizes work into fixed-length iterations called sprints (usually 2-4 weeks).
- Key roles include: Scrum Master, Product Owner, and Development Team.
- Key artifacts include: Product Backlog, Sprint Backlog, and Increment.
- Daily stand-up meetings (Scrum meetings) are held to track progress.
3. Test-Driven Development (TDD)
- In TDD, developers write tests before writing the actual code.
- The cycle is: Write a failing test --> Write code to pass the test --> Refactor the code.
- This ensures that the software is always testable and meets requirements.
4. Pair Programming
- Two developers work together at one workstation.
- One writes the code (driver) while the other reviews it (observer/navigator).
- This improves code quality and encourages knowledge sharing.
5. Continuous Integration
- Code changes are integrated into the shared repository frequently (multiple times a day).
- Automated tests are run after each integration to detect errors early.
6. Refactoring
- The code is continuously improved and restructured without changing its external behavior.
- This keeps the codebase clean, simple, and maintainable.
Summary Table
Technique Key Feature Extreme Programming (XP) Pair programming, TDD, small releases Scrum Sprints, daily stand-ups, backlog Test-Driven Development Tests written before code Pair Programming Two developers, one workstation Continuous Integration Frequent code merging and testing Refactoring Continuous code improvement Note: XP is highlighted as the most significant agile development technique that changed software development culture.
-
- 115 marksDifference between Software Engineering anHideAnswer
Write short notes on: a. System engineering b. Release testing [5]
Short Notes
a. System Engineering (2.5 marks)
System engineering is a broad, interdisciplinary approach concerned with the design, implementation, management, and maintenance of complex systems in which software is one component among many (including hardware, people, processes, and organizations).
Key points:
- Scope: System engineering considers the system as a whole, not just the software. It includes hardware engineering, process design, and human factors alongside software development.
- Relationship to Software Engineering: Software engineering is a subset of system engineering. While software engineering focuses on building and maintaining software, system engineering addresses how all components work together to meet overall system goals.
- Activities involved:
- System specification: Defining what the overall system must do.
- System design: Deciding how responsibilities are distributed across hardware, software, and people.
- System integration: Combining all components and verifying they work together.
- System validation: Confirming the complete system meets user and business requirements.
- Importance: As software is trusted with all aspects of our lives (trust challenge) and failures in safety-critical areas such as aviation and nuclear power can be catastrophic (risk challenge), system engineering ensures that all parts of a complex system are properly coordinated and verified.
b. Release Testing (2.5 marks)
Release testing refers to the coding practices and test strategies that give teams confidence that a software release candidate is ready for users.
Key points:
- Definition: Release testing aims to find and eliminate errors and bugs from a software release so that it can be safely delivered to users (as per course notes).
- Primary Goal: The primary goal of the release testing process is to convince the customer that the system is good enough for use.
- Nature: It is typically a black-box testing process, meaning testers focus on the behavior of the system from the user's perspective rather than internal code structure.
- Difference from System Testing:
- System testing is carried out by the development team.
- Release testing is usually performed by a separate testing team that was not involved in development, ensuring an unbiased evaluation.
- Scope: Release testing covers functional requirements, performance, reliability, and usability to ensure the product meets its specification before deployment.
- Relation to User Testing: Even after thorough release testing, user testing is still essential because influences from the user's real working environment (performance, usability, robustness) cannot be fully replicated in a testing environment.
Summary Table
Aspect System Engineering Release Testing Focus Entire system (hardware + software + people) Software release candidate Goal Integrated, working system Convince customer system is ready Scope Broad, interdisciplinary Software quality and correctness - 125 marksStructural ModelsHideAnswer
Differentiate between structural and behavioral models. What is the importance of behavioral model. [5]
According to system modeling, different types of models represent a system from different perspectives. Structural and behavioral models are two important perspectives among them. Basis Structural Model Behavioral Model --------- Definit...