Tutorial Questions on SE
TUTORIAL I (Unit 1)
- Define Software Engineering. Identify some of the characteristics of software.
- Outline the four layers of the layered approach in Software Engineering.
- List and explain the activities defined in the software process framework.
- Comment on the Incremental Model of software development. Express its advantages and disadvantages.
- Define the Software Development Life Cycle (SDLC). List its phases with a brief explanation
- Compare Agile Development with the traditional Waterfall approach.
- Explain the Spiral Model and compare it with the Incremental Model.
TUTORIAL II (Unit 2)
- Paint the role of Requirements Engineering in the process of Software Engineering.
- Paraphrase user requirements and system requirements.
- Journalize the structure of a Software Requirements Document.
- Express in detail the data model and object model of software engineering.
- Paraphrase Requirement Analysis. What are functional and non-functional requirements?
- Explain the importance of collecting requirements. How many types of requirements are there in Requirements Engineering?
- What do you understand with the term "Requirements Elicitation"? Discuss any two techniques of requirements elicitation.
Assignment Questions on SE
ASSIGNMENT I (Unit 1, 2, 3)
Set 1:
1. Define Software Engineering. State the difference between a program and software.
- Software Engineering is a systematic, disciplined, and quantifiable approach to the development, operation, and maintenance of software. It applies engineering principles to the creation of software, aiming for the production of high-quality, reliable, and cost-effective software products.
- A program is a set of instructions written in a programming language that performs a specific task.
- Software is a much broader term that includes the program itself, along with all associated documentation, data, and configuration files needed for it to operate correctly.
- Software engineering is a science because it relies on fundamental principles and theories.
- It uses scientific methods to analyze problems, model systems, and predict outcomes.
- Concepts like algorithms, data structures, and computational complexity are based on mathematical and logical foundations.
- It involves systematic analysis, experimentation, and the application of proven techniques to ensure predictable and reliable results.
- Requirements Engineering is a systematic process of discovering, documenting, analyzing, and managing software requirements.
- Its significance lies in ensuring that the software to be developed meets the actual needs of its users and stakeholders.
- Analysts, or requirements engineers, often face several significant challenges during the requirements-gathering process:
Stakeholder Communication Issues:
- Unclear or Conflicting Needs: Different stakeholders may have conflicting requirements, and it's the analyst's job to resolve these disputes.
- Tacit Knowledge: Users might not be able to articulate their needs because they are so familiar with their work. They often struggle to describe what they do and need until they see something concrete.
- Vague Language: Requirements are often written using vague terms like "fast," "easy to use," or "secure." These are subjective and can be interpreted differently by team members.
- Missing Requirements: Sometimes, critical requirements are simply forgotten or assumed, only to be discovered late in the development cycle when they are much more expensive to fix.
Scope Creep:
This is a major problem where new requirements are continuously added after the project has started. It can derail the project, leading to delays and increased costs.
The Requirements Engineering process is often iterative, meaning the steps may be repeated and revisited as the project evolves. The core steps are:
Requirements Elicitation: 👂
- This is the process of gathering information from stakeholders.
- It involves understanding their needs, wants, and constraints related to the new software system.
- Techniques like interviews, surveys, workshops, and observation are used to uncover both explicit and implicit requirements.
Requirements Analysis: 🧠
- Once requirements are gathered, this step involves examining them to identify conflicts, ambiguities, and inconsistencies.
- The goal is to refine the raw information into a clear, concise, and complete set of requirements.
- This is where the Analysts prioritize and group requirements, as not all of them will have equal importance.
Requirements Specification: ✍️
- This step is about documenting the analyzed requirements in a formal and structured way.
- The primary output is typically a Software Requirements Specification (SRS) document.
- This document serves as a blueprint for the development team and includes details on both functional requirements (what the system should do) and non-functional requirements (how the system should perform).
Requirements Validation: ✅
- Before development begins, the documented requirements must be validated.
- This means checking that they are complete, consistent, and accurate and that they truly meet the stakeholders' needs.
- Validation can involve reviews, prototyping, and generating test cases to ensure the requirements are feasible and testable.
Requirements Management: 🗓️
- This is an ongoing activity throughout the project lifecycle.
- It involves tracking requirements, managing changes, and maintaining traceability between requirements, design, and testing.
- Requirements often change during a project, and this step ensures that any modifications are handled in a systematic and controlled manner to prevent "scope creep" and project deviations.
5. Interpret the following design concepts: Abstraction, Patterns, and Modularity.
Abstraction:
- Abstraction is the process of hiding complex details and showing only the essential features.
- In software design, it allows developers to focus on the high-level design without getting bogged down in implementation details.
- For example, when you use a "Car" object, you can "drive" it without needing to know the complex internal mechanics of the engine.
Patterns:
- Design patterns are reusable solutions to common problems in software design.
- They are not a finished design that can be directly transformed into code but are templates or descriptions for solving a problem that can be adapted to specific situations.
- For example, the Singleton pattern ensures that a class has only one instance.
Modularity:
- Modularity is the concept of dividing a system into discrete, self-contained components called modules.
- Each module can be developed and tested independently before being integrated into the larger system.
- This makes the system easier to understand, develop, and maintain.
- For example, a web application might have separate modules for user authentication, product catalog, and payment processing.
Set 2:
- Discuss the major areas of Applications of Software.
- Distinguish between generic software and customized software. Which one has large share of market? Why?
- What is the need for documentation in Software Engineering.
- Paraphrase User Requirements and System Requirements.
- Paraphrase the importance of software design. Explain the meaning of coupling and cohesion in software design.
- Express your idea on design patterns. How can patterns be used in software design.