Explain how prototyping model help in developing software? Differentiate between Evolutionary and throw-away prototype model.
The prototyping model is a popular software development methodology that involves creating a working model of a software application before creating the final product. This model can be used to help in the development of software in several ways:
– Prototyping can help in gathering requirements for the software application by creating a workingmodel that can be used to test and validate user requirements.
– The prototyping model allows for early feedback from users, which can be used to refine the software application.
– By creating a working model of the software early in the development process, the prototyping model can help in reducing the risk of costly errors or defects in the final product.
– The prototyping model can help in speeding up the development process by allowing developers to quickly create a working model of the software application.
Overall, the prototyping model can be a useful tool in the software development process, helping to ensure that the final product meets the needs of the end-users while reducing the risk of errors or defects.
Evolutionary and throwaway prototype models are two different approaches to software prototyping.
Here are the key differences between the two:
1. Purpose: The purpose of an evolutionary prototype model is to gradually refine and improve a prototype until it becomes a final product, while the purpose of a throwaway prototype model is to quickly build a prototype to test out ideas and gather feedback, with no intention of using the prototype as the basis for the final product.
2. Iterations: The evolutionary prototype model involves multiple iterations of prototyping, with each iteration building on the previous one to refine and improve the prototype. The throwaway prototype model typically involves a single iteration of prototyping, with the prototype being discarded after it has served its purpose.
3. Deliverables: The deliverables of the evolutionary prototype model are working prototypes that can be used to gradually refine and improve the final product. The deliverables of the throwaway prototype model are feedback and insights gathered from testing the prototype, which can be used to inform the design of the final product.
4. Timeframe: The evolutionary prototype model typically takes longer than the throwaway prototype model, as it involves multiple iterations and more time spent refining and improving the prototype. The throwaway prototype model can be completed quickly, as the focus is on building a prototype to test ideas and gather feedback.
5. Cost: The cost of the evolutionary prototype model is typically higher than the throwaway prototype model, as it involves multiple iterations of prototyping and more time spent refining and improving the prototype.
In summary, the evolutionary prototype model is used to gradually refine and improve a prototype until it becomes the final product, while the throwaway prototype model is used to quickly build a prototype to test ideas and gather feedback, with no intention of using the prototype as the basis for the final product. The two models differ in their iterations, deliverables, timeframe, and cost.
Differentiate between functional and non-functional requirement. Describe any three functional and non-functional requirement for library management system.
| Functional Requirements | Non-Functional Requirements |
| Defines a system or its component. | Defines the quality attribute of a software system. |
| Specifies “What should the software system do?” | Places constraints on “How should the software system fulfill the functional requirements?” |
| Specified by user. | Specified by technical people like architect, software developers. |
| It is mandatory. | It is not mandatory. |
| Defined at a component level. | Applied to a system as a whole. |
| It is captured in use case. | It is captured as a quality attribute. |
| Helps you verify the functionality of the software. | Helps you verify the performance of the software. |
| Functional Testing like System Integration, End to End, API testing, etc. are done. | Non-Functional Testing like Performance, Stress, Usability, Security testing etc. are done. |
| Usually easy to define. | Usually more difficult to define. |
| Example:
i. Authentication of user whenever they log into the system. ii. System shutdown in case of a cyber-attack. iii. A verification email is sent to user whenever they register for the first time on some software system. |
Example:
i. Emails should be sent with a latency of no greater than 12 hours from such an activity. ii. The processing of each request should be done within 10 seconds. iii. The site should load in 3 seconds when the number of simultaneous users are >10000 |
Library management system
Functional Requirements:
1. User Registration: The system should allow users to register for a library account, which includes providing personal information, such as name, address, and contact details.
2. Book Checkout: The system should allow users to check out books from the library by scanning the book’s barcode or entering its ID number. The system should automatically update the book’s availability status and the user’s account information.
3. Book Reservations: The system should allow users to reserve books that are currently checked out by other users. Once the reserved book becomes available, the system should notify the user
Non-Functional Requirements:
1. Performance: The system should be able to handle a large number of users simultaneously and process requests quickly, to provide a smooth user experience.
2. Security: The system should have appropriate security measures in place to protect user data and prevent unauthorized access, such as user authentication and encryption of sensitive data.
3. Accessibility: The system should be accessible to users with disabilities, such as providing alternative input methods for users who cannot use a mouse or keyboard, and providing audio descriptions for users with visual problems.
Explain in detail about the activities carried out in software configuration management. Why it is required?
Software Configuration Management (SCM) is a process to systematically manage, organize, and control the changes in the documents, codes other entities during the Software Development Life Cycle. The primary goal is to increase productivity with minimal mistakes. SCM is a part of cross-disciplinary field of configuration management and it can accurately determine who made which revision.
Tasks in SCM process:
a) Configuration Identification:
Configuration identification is a method of determining the scope of the software system. With the help of this step, you can manage or control something even if you don’t know what it is. It is a description that contains the CSCI type (Computer Software Configuration Item), a project identifier and version information.
Activities during this process:
– Identification of configuration Items like source code modules, test case, and requirements specification.
– Identification of each CSCI in the SCM repository, by using an object-oriented approach
– The process starts with basic objects which are grouped into aggregate objects. Details of what, why, when and by whom changes in the test are made
– Every object has its own features that identify its name that is explicit to all other objects
– List of resources required such as the document, the file, tools, etc.
Example: Instead of naming a File login.php it should be named login_v1.2.php where v1.2 stands for the version number of the file. Instead of naming folder “Code” it should be named “Code_D’ where D represents code should be backed up daily.
b) Baseline:
A baseline is a formally accepted version of a software configuration item. It is designated and fixed at a specific time while conducting the SCM process. It can only be changed through formal change control procedures.
Activities during this process:
– Facilitate construction of various versions of an application
– Defining and determining mechanisms for managing various versions of these work products
– The functional baseline corresponds to the reviewed system requirements
– Widely used baselines include functional, developmental, and product baselines
– In simple words, baseline means ready for release.
c) Change Control:
Change control is a procedural method which ensures quality and consistency when changes are made in the configuration object. In this step, the change request is submitted to software configuration manager.
Activities during this process:
– Control ad-hoc change to build stable software development environment. Changes are committed to the repository
– The request will be checked based on the technical merit; possible side effects and overall impact on other configuration objects.
– It manages changes and making configuration items available during the software lifecycle
d) Configuration Status Accounting:
Configuration status accounting tracks each release during the SCM process. This stage involves tracking what each version has and the changes that lead to this version.
Activities during this process:
– Keeps a record of all the changes made to the previous baseline to reach a new baseline
– Identify all items to define the software configuration
– Monitor status of change requests
– Complete listing of all changes since the !ast baseline
– Allows tracking of progress to next baseline
– Allows to check previous releases/versions to be extracted for testing
e) Configuration Audits and Reviews:
Software Configuration audits verify that the entire software product satisfies the baseline needs. It ensures that what is built is what is delivered.
Activities during this process:
– Configuration auditing is conducted by auditors by checking that defined processes are being followed and ensuring that SCM goals are satisfied.
– To verify compliance with Configuration control standards auditing and reporting the changes made.
– SCM audits also ensure that traceability is maintained during the process.
– Ensures that changes made to a .baseline comply with the configuration status reports
– Validation of completeness and consistency
Explain the Agile software development and its applications.
AGILE methodology is a practice that promotes continuous iteration of development and testing throughout the software development lifecycle of the project. In the Agile model, both development and testing activities are concurrent, unlike the Waterfall model.
– Agile development emphasizes breaking down the project into small increments or iterations, each delivering a potentially shippable product. The development team works on short cycles called sprints, typically lasting 1-4 weeks.
– Agile development promotes close collaboration between the development team and the customer or end-user. Customer feedback is taken regularly to ensure the project aligns with their requirements and expectations.
– Adaptive and flexible: Agile projects are designed to be adaptable to changing requirements. The development team embraces change and is prepared to adjust their plans based on feedback and evolving priorities.
– Cross-functional teams: Agile teams are typically cross-functional, consisting of members with diverse skills necessary to complete the project. Roles may include developers, testers, designers, and product owners, among others
– Focus on working software: The primary goal of Agile is to deliver working software at the end of each iteration. This enables early value delivery and frequent validation of the product.
Some of the applications of agile software development are:
1. Web and Mobile Application Development: Agile software development is commonly used in the development of web and mobile applications because of the need for rapid iteration and response to changing user needs and market conditions.
2. Software Product Development: Agile software development can be used to develop software products, such as enterprise software or consumer applications. Agile development allows teams to quickly develop and test new features, and make changes based on customer feedback and market trends.
3. Game Development: Agile software development can be used in game development to improve game design and user experience. Agile development allows teams to quickly develop and test new game features, and make changes based on player feedback and market trends.
Differentiate between software engineering and system engineering.
Software engineering and system engineering are two related but distinct fields. Here are some key differences between the two:
1. Focus: Software engineering is primarily concerned with the development of software applications, while system engineering is concerned with the development of complex systems that may include hardware, software, and other components.
2. Scope: Software engineering focuses on the design, development, testing, and maintenance of software applications, while system engineering focuses on the design, development, testing, and maintenance of complex systems that may include multiple software applications, hardware components, and other subsystems.
3. Development Process: Software engineering typically follows a software development life cycle (SDLC), which includes phases such as requirements gathering, design, development, testing, and maintenance. System engineering typically follows a systems engineering process (SEP), which includes phases such as requirements analysis, design, implementation, testing, and maintenance.
4. Skill Set: Software engineers require expertise in programming languages, software development tools, and software design patterns. System engineers require expertise in systems architecture, systems integration, and systems analysis.
5. Deliverables: The deliverables of software engineering include software applications, software documentation, and software testing reports. The deliverables of system engineering include systems architecture diagrams, systems integration plans, and systems testing reports.
What do you understand by software quality assurance?
Software Quality Assurance (SQA) is a systematic and planned approach to ensure that software products and processes meet specified quality standards. It involves a set of activities and processes designed to prevent defects, identify and resolve issues, and enhance the overall quality of software. Here’s an explanation of software quality assurance with an example: Software Quality Assurance involves various activities throughout the software development lifecycle. One crucial aspect is the establishment of quality standards and processes. SQA defines guidelines and procedures to be followed by the development team to maintain and enhance the quality of the software. For example, let’s consider a software development project that aims to build an ecommerce website. In the context of SQA, the quality assurance team would define quality standards for the website, such as performance benchmarks, security requirements, and usability guidelines. These standards would be communicated to the development team. During the development phase, SQA activities would include conducting code reviews to ensure adherence to coding standards, performing unit testing to identify and fix defects in individual modules, and conducting integration testing to validate the interaction between different components. Furthermore, SQA involves functional testing to verify that the website features work as intended, usability testing to assess user-friendliness, and security testing to identify vulnerabilities and ensure data protection.
What is behavioral model? Explain with an example.
Behavioral Models:
Behavioral Models are models of the dynamic behavior of a system as it is executing. They show what happens or what is supposed to happen when a system responds to stimulus from its environment. We can think of those stimuli as being of two types:
i. Data: Some data arrives that has to be processed by the system.
ii. Events: Some event happens that triggers system processing.
Data-driven Modeling:
Many business systems are data-processing systems that are primarily driven by data. They are controlled by the data input to the system, with relatively little external event processing. Data-driven models show the sequence of actions involved in processing input data and generating on associated output.

Explain the component based software engineering.
Component-based software engineering (CBSE) is a software development methodology that involves building software systems using pre-built, reusable software components. These components are typically designed to perform a specific function or set of functions and can be combined to create complex software systems. In CBSE, software components are treated as independent units that can be easily assembled to create software systems. This approach offers several benefits, including:
1. Reusability: Software components can be reused in multiple projects, reducing the need to develop new software from scratch and saving time and resources.
2. Modularity: Software components are designed to be modular, meaning they can be easily combined and configured to create different software systems.
3. Interoperability: Software components are designed to work together, allowing for easy integration with other components and systems.
4. Maintenance: Software components can be maintained and updated independently, reducing the impact of changes on the overall software system.
5. Quality: Software components are typically designed to be high-quality, reliable, and well-tested, reducing the risk of errors and defects in the overall software system.
Differentiate between verification and validation. Explain the software Inspection process.
| Verification | Validation |
| It includes checking documents, design, codes and programs. | It includes testing and validating the actual product. |
| Verification is the static testing. | Validation is the dynamic testing. |
| It does not include the execution of the code. | It includes the execution of the code. |
| It checks whether the software conforms to specifications or not. | It checks whether the software meets the requirements and expectations of a customer or not. |
| It can find bugs in the early stage of development. | It can only find the bugs that could not be found by verification. |
| Its goal is application and software architecture and specification. | Its goal is an actual product. |
| It comes before validation. | It comes after verification. |
Software Inspection
It is a control technique for ensuring that the documentation produced during a given phase remains consistent with the documentation of the previous phases and respects reestablished rules and standards. These involve people examining the source representation with the aim of discovering anomalies and defects. The aim of the inspection is to locate faults and the process should be driven by a fault checklist.
Inspection Process
i. Planning: The inspection is planned by the moderator which involves selecting an inspection team, and organizing a meeting room and materials.
ii. Overview: In this step, the software and documents to be inspected are presented to the inspection team.
iii. Individual Preparation: In this step, each inspection team member studies the specification and the program and looks for defects.
iv. Inspection Meeting: During this meeting, the readers read through the work product part by part, and inspectors point out defects for every part.
v. Rework: The author makes changes to the work product according to the action plan from the inspection meeting in this step.
vi. Follow up: In this step, the changes made by the author are checked to make sure that everything is correct. The moderator should decide whether reinspection of the code and document is required. If not the software is then approved by the moderator for release.
Differentiate between reengineering and reverse engineering.
Reengineering and reverse engineering are two related but distinct processes in software engineering. Here are some key differences between the two:
1. Purpose: Reengineering is the process of redesigning and improving an existing software system to meet new requirements, improve performance, or reduce costs. Reverse engineering is the process of analyzing an existing software system to understand its design, architecture, and functionality.
2. Approach: Reengineering typically involves a forward engineering approach, where the existing software system is analyzed and then redesigned and improved. Reverse engineering typically involves a backward engineering approach, where the existing software system is analyzed in reverse order, from code to design to requirements.
3. Output: The output of reengineering is a new and improved software system that meets the new requirements. The output of reverse engineering is a better understanding of the existing software system, which can be used for maintenance, migration, or reengineering.
4. Scope: Reengineering typically involves a large-scale redesign and improvement of an existing software system, while reverse engineering can be used for a range of purposes, from understanding the design of a single module to analyzing the architecture of a complex software system.
5. Process: Reengineering typically involves several stages, such as requirements gathering, analysis, design, implementation, and testing. Reverse engineering typically involves several stages, such as code analysis, design recovery, and reconstruction.
Suppose that a project was estimated to be 400 KLOC. Calculate the effort and development time for organic and semidetached.

Draw use case diagram and sequence diagram for online movie ticketing system.
