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.
Set 3:
- Explain the concept of Software Engineering and its significance in the development of software.
- Analyze the performance of Waterfall model and its limitations.
- What is Requirement Analysis? Explain the steps involved in it with illustration.
- Distinguish between functional and non-functional requirements.
- List the golden rules of User Interface design.
Set 4:
- What are myths in software development? Identify the software myths related to management and practitioners.
- What are the advantages of iterative development? Compare iterative development with incremental development approach.
- Present Software Requirements Document (in IEEE Format).
- Explain the role of user requirements in the Requirements Engineering process.
- Discuss about Object Oriented Analysis and Design.
Set 5:
- Summarize the key principles of Agile Development Model.
- Write notes on Process Assessment.
- Describe five desirable characteristics of a good SRS document.
- Differentiate between monolithic and microservices architecture.
- The statement "Designing is not Coding and Coding is not Designing" is a fundamental principle in software engineering that highlights the distinct and sequential nature of these two activities.
- They are separate phases in the software development lifecycle, each requiring a different skill set and mindset.
Designing: The Blueprint Phase 🗺️
- Designing is a high-level, abstract process. It's the intellectual work of creating a plan or blueprint for the software. This phase happens before any code is written and focuses on the overall structure and architecture of the system.
- Designers analyze the requirements, user needs, and business goals to determine the best way to solve a problem. They decide on the system's architecture, its major components, and how they will interact.
- Design involves making high-level decisions without getting bogged down in the implementation details. It's about thinking in terms of modules, interfaces, and data flow, not specific lines of code.
Coding: The Construction Phase 🔨
- Coding, also known as implementation, is the low-level, concrete process of translating the design specifications into executable source code. This phase follows the design and focuses on the detailed mechanics of building the software.
- Coders take the design documents and write the actual code in a specific programming language. They focus on the syntax, algorithms, data structures, and the logic required to make the system function as designed.