Solved Question Paper- Software Engineering | Software Engineering solved paper 2022-ASTU

1.   Answer the correct option from the following :


(i)   What is Software Engineering?

(a)  Designing a software     

(b) Testing a software

(c) Application of engineering principles to the design a software

(d) None of the above


(ii)   AMC stands for

a.   Annual maintenance cost

b.   Annual maintain Cost

c.   Average maintenance Cost

d.   None of the above


(AMC stands for Annual Maintenance Contract)


(iii)  Which of the following is known as meta model?

a.   Spiral model

b.   Iterative model

c.   RAD model

d.   Prototype model


(iv)  Characteristics of good SRS document

a.   Concise

b.   Unambiguous

c.   Structured

d.   All of the above


(v)    Verification is the process of determining whether the input of one phase of software development conforms to that of its previous phase

a.   True

b.   False

Verification is the process of determining whether the output of one phase of software development conforms to that of its previous phase.


(vi)   Unit testing is referred to as testing in the ___________, whereas integration and system testing are referred to as testing in the ____________

a.   Small, large

b.   Large, small

c.   None of the above


(vii)  DFD stands for

a.   Data Found Diagram

b.   Database Flow Diagram

c.   Data Fault Diagram

d.   None of the above


DFD stands for Data Flow Diagram


(viii)  What does a data store symbol in the Data Flow Diagram signify?

a.   Logical File

b.   Physical File

c.   Data Structure

d.   All of the above


(ix)  Branch coverage-based testing is stronger than statement coverage-based testing

a.   True

b.   False


(x)   Unit testing is undertaken after a module has been coded and reviewed

a.   True

b.   False


2. (a)  What is the principal aim of the software engineering discipline? Explain in detail.

Ans: Software engineering is an engineering discipline that's applied to the development of software in a systematic approach.  The main aim of software engineering is to develop reliable and efficient software within budget in the given schedule. The goal of software engineering is to produce software that is efficient, easy to use, and easy to maintain.

Software engineering is committed to delivering quality software. Software engineering applies a disciplined and organized approach to develop software with the stated goal of improving quality, time and budget efficiency. One of the main objectives of software engineering is to produce high-quality software.


(b) What are the major differences between the exploratory and modern software development practices? Explain the advantages of exploratory software development practices.

Ans: In exploratory software development style (builds and fix style), the programmer used to develop the program on based of their intuition rather than making use of software engineering discipline. There was no systematic model or phases to develop any program simply they use to do the program on ad-hoc basis.

This style of development gives complete freedom to programmers to choose activities which they like to develop software. This style does not use any rules to start developing any software. In the exploratory style, normally a program is quickly developed. The different imperfections that are subsequently noticed are fixed.

In modern software development style, software is developed through several well-defined stages: requirement analysis and specification, design, coding, testing etc.

An important difference of exploratory and modern software development practices is that the exploratory software development style is based on error correction while the modern software engineering principles are primarily based on error prevention.

In the exploratory style, errors are detected only during the final product testing. In contrast, the modern practice of software development is to develop the software through several well-defined stages such as requirements specification, design, coding, testing, etc., and attempts are made to detect and fix as many errors as possible in the same phase in which they occur.

In the exploratory style, coding was considered synonymous with software development. For instance, exploratory programming style believed in developing a working system as quickly as possible and then successively modifying it until it performed satisfactorily.

In the modern software development style, coding is regarded as only a small part of the overall software development activities. There are several development activities such as design and testing which typically require much more effort than coding.

 


Advantages of exploratory software development practices:


In exploratory software development style (builds and fix style), the programmer used to develop the program on based of their intuition rather than making use of software engineering discipline. There was no systematic model or phases to develop any program simply they use to do the program on ad-hoc basis.

This style of development gives complete freedom to programmers to choose activities which they like to develop software. This style does not use any rules to start developing any software. In the exploratory style, normally a program is quickly developed. The different imperfections that are subsequently noticed are fixed.


(c)  What is Spiral Model? Explain all the phases of it in details.

Ans: Spiral model is one of the most important Software Development Life Cycle models, which provides support for Risk Handling. The spiral model is a combination of waterfall model and prototype models. This model is best used for large projects which involve continuous enhancements. 

 

In its diagrammatic representation, it looks like a spiral with many loops. The exact number of loops of the spiral is unknown. The number of loops varies based on each project. Each loop of the spiral is called a Phase of the software development process.

Each phase of the Spiral Model is divided into four quadrants. The functions of these four quadrants are discussed below:


Objectives determination and identify alternative solution:  

At the start of every phase, requirements are collected from the customer, and objectives are identified. These objectives are elaborated on and analyzed in this quadrant. In this quadrant more discussion with clients is done to collect their requirements and if possible a prototype is created in the presence of the client to evaluate the product quality. Normally during this phase requirement gathering exercise, change requests are also seen from clients and these requests are treated as risks for the next development phases. It is important to also identify alternative solutions in case the attempted version fails to perform.


Identify and resolve risks: 

During the second quadrant, all the possible solutions are evaluated to select the best possible solution. Then the risks associated with that solution are identified and the risks are resolved using the best possible strategy. At the end of this quadrant, the prototype is built for the best possible solution.


Develop next version of the product: 

During the third quadrant, the identified features are developed and verified through testing. At the end of the third quadrant, the next version of the software is available.


Review and plan for the next phase: 

In the fourth quadrant, the customers evaluate the developed version of the software. The customer tells whether any changes need to be done in the software or not. The project is reviewed, and a choice made whether to continue with a further period of the spiral. If it is determined to keep, plans are drawn up for the next step of the project.


3. (a)  Briefly explain the job responsibilities for managing software products.

Ans: To build great software, product managers need to play several different roles simultaneously. They work with the development and engineering teams to build out new features that best address customer and market needs. 

Their roles and responsibilities depend on the industry and organization they work in as well as the software they’re working on. In most cases, their primary goal is to ensure that the software meets its corresponding strategic goals and that the product teams are working well.

They are responsible for managing how customers use and interact with the product, including UX design, marketing strategy, customer insights research, pricing decisions, and more. A product manager’s job is to translate user requirements into executable work items that the development team can implement in the product.

The following duties, tasks, and responsibilities software product manager has to manage.

  • Translating business goals into specific software requirements 
  • Oversee and manage the software development lifecycle.
  • Prioritizing software features based on market need analyses and company strategies
  • Ensuring that the software solution is successfully meeting business goals and users' needs
  • Analyze the complete competitive landscape to see what competitors are doing in the market.
  • Figure out the strengths and weaknesses of the competitors and use them to make a great product.
  • Analyze trend reports, industry content, market statistics, sales data, user stories, mockups, and metrics to come up with a working strategy.
  • Manage the development process and the team members to ensure a quick and efficient product launch.
  • Manage the workflow of the marketing and sales teams. Develop a complete product requirements document and as well as templates for reference.
  • Work on the prioritization of new features based on usability, functionality, and user experience.
  • Help figure out a proper pricing model based on what other tech companies and startups are charging for similar software.
  • Maintain a complete backlog of all the activities, processes, and workflows of all the relevant teams, stakeholders, and any external influencers and consultants.

 


(b)  What are empirical estimation techniques? Explain their types.

Ans: Empirical estimation techniques are based on making an educated guess of the project parameters and common sense. While using this technique, prior experience with development of similar project is helpful. These techniques are based on the data collected from a previously implemented project and also based on some guesses as well as assumptions. This technique takes into account the size of the software in order to provide an estimate of the amount of work required.

Two popular empirical estimation techniques are:

·   Expert judgment technique

·   Delphi cost estimation

 

Expert Judgment Technique:

It is one of the most widely used estimation techniques. In this technique, an expert makes an educated guess of the problem size after analyzing the problem thoroughly. This technique captures the experience and the knowledge of the estimator who provides the estimate based on their experience from a similar project to which they have participated. Usually, the expert estimates the cost of the different components (i.e. modules or subsystems) of the system and then combines them to arrive at the overall estimate.


Shortcomings of Expert judgment:

1.   Outcome is subject to human errors and individual bias.

2.   The expert may overlook some factors inadvertently.

3.   Expert may not have relevant experience and knowledge of all aspects of the project

 


Delphi Cost Estimation:

 


This technique tries to overcome some of the shortcomings of the expert judgment technique. Delphi cost estimation is carried out by a team comprising of a group of experts and a coordinator. The coordinator provides each estimator with a copy of the software requirements specification (SRS) document and a form for recording his cost estimate. Estimators complete their individual estimates and submit them to the coordinator. In their estimates, the estimators mention any unusual characteristic of the product which has influenced their estimation.

The coordinator prepares the summary of the responses of all the estimators, and also includes any unusual fact noted by any of the estimators. The prepared summary is distributed to the estimators. Based on this summary, the estimators re-estimate. This process is iterated for several rounds. However, no discussion among the estimators is allowed during the entire estimation process. After the completion of several iterations of estimations, the coordinator prepares the final estimate.


(c)  Briefly explain the basic COCOMO model in detail.

Ans: It is a single-valued model and calculates the software development cost and effort of a program by measuring Lines Of Code (LOC). It is the one type of static model to estimate software development effort quickly and roughly. The Basic model is good for quick estimates.

The basic COCOMO model gives an approximate estimate of the project parameters. The basic COCOMO estimation model is given by the following expressions:

Effort, E= a(KLOC)b PM

Time for development, Tdev = c(E)d  Months


Where,

E is the amount of effort required for the project in Person-Months (PM).

Tdev is estimated time to develop the software in months,

KLOC is the size of the code for the project in Kilo lines of code.

a, b, c, d is the constant parameter , values of a, b, c and depends upon the three modes of development of projects.


(a) Organic mode: It is for small sized simple software projects upto 2-50 KLOC (thousand lines of code) with experienced developers in a familiar environment.

 (b) Semi detached mode: It is for medium sized software projects upto 50-300 KLOC with average previous experience on similar projects.

 (c) Embedded mode:  It is for large and complex software projects typically over 300 KLOC with developers having very little previous experience.

The constant values of a , b , c and d of the Basic Model for the different categories of system:

Mode

a

b

c

d

Organic

2.4

1.05

2.5

0.38

Semidetached

3.0

1.12

2.5

0.35

Embedded

3.6

1.20

2.5

0.32




4. (a) What is cohesion and coupling? What is functional independence?

Ans: Cohesion: Cohesion is a measure of the functional strength of a module. It is defined as the degree to which the elements of a particular module are functionally related. Cohesion of a module represents how tightly bound the internal elements of the module are to one another.

The measure of how strongly the elements are related functionally inside a module is called cohesion. Cohesion is a measure of the degree to which the elements of the module are functionally related. It is a measure that defines the degree of intra-dependability within an element of a module. A good software design will have high cohesion. 

Coupling: Coupling is the measure of the degree of interdependence between the modules. Coupling between modules is the strength of interconnections between modules and a measure of interdependence among modules. Two modules with high coupling are strongly interconnected and thus dependent on each other. Two modules with low coupling are not dependent on one another.

Coupling is defined as the degree to which the two modules are dependent on each other. It measures the strength of relationships between modules. Coupling between any two modules is identified from the number and types of resources that the modules share with other modules. 

Highly coupled modules are joined by strong interconnections, while loosely coupled modules have weak interconnections. Independent modules have no interconnections.  Coupling is measured by the number of relations between the modules. A good software design will have low coupling. 

 

Functional Independence: Functional independence is achieved by developing functions that perform only one kind of task and do not excessively interact with other modules. Independence is important because it makes implementation more accessible and faster. Functional independence is essential for good software design.

 In software engineering, if a module is functionally independent of other module then it means it has high cohesion and low coupling. The independent modules are easier to maintain, test, and reduce error propagation and can be reused in other programs as well. Thus, functional independence is a good design feature which ensures software quality.

A module having high cohesion and low coupling is said to be functionally independent of other modules. By the term functional independence, we mean that a cohesive module performs a single task or function. A functionally independent module has minimal interaction with other modules.


(b)  What is DFD? Explain the components of DFD? Differentiate between DFD and UML diagram.

Ans: DFD stands for Data Flow Diagram. A data flow diagram is a graphical representation of the flow of data through a system. DFD is an important tool used by system analysts.  The flow of data within a system is represented by DFD. 

DFD is a visual representation of how data flows within a system. It is a modeling technique that is used to analyze, design and document the flow of data in a system.


Components of Data Flow Diagrams:

The data flow diagram shows data inputs, outputs, storage, and flow of data using symbols and shapes like rectangles, circles, and arrows. DFD mainly consists of four components. The components of DFD are:

    ·  External Entities

    ·  Processes

    ·  Data Store

    ·  Data Flow


Name

Description

Symbol

External Entity

It is represented by a rectangle and simply depicts a source or destination of data.







Process

It is represented by a circle and depicts how the data is handled and processed in the system.



Data Store

It is represented by open-ended rectangles and depicts a location where data is stored in the system. A repository of data.






Data Flow

It is represented by an arrow and depicts the flow of data between the entities, processes and data stores.


 


Difference between DFD and UML diagram:

  A DFD illustrates how data flows through a system, while UML is a    modeling language used in object oriented software design. UML   diagrams mainly represent the structural view and the behavioral   view of a system. 

  A data flow diagram describes how information is shared (routed)   through the various elements of the system. UML use case and   sequence diagrams are mostly used to illustrate the functional     requirements of a system in the object-oriented approach.

  UML is an object modelling system while DFD are data modelling      systems. In object models, we have systems based on object                orientation termed to as blue prints in a system. They include; class    diagrams, associations among the classes created and properties of      these classes among others. On the other hand, data models                  encompass units in the stage of database. They are concerned with      table schema that is, comparing a collection of tables.

 

(c) What do you understand by system testing? What are the different kinds of system testing that are usually performed on large software products?

Ans: System testing is a software testing technique where the fully integrated software is tested as a whole. The goal of system testing is to see if the software meets its requirements. It is performed after the entire software has been developed and all the individual modules have been integrated.

System testing validates the complete and fully integrated software product. It is carried out on the whole system. The purpose of system testing is to validate an application’s accuracy and completeness in performing the functions as designed. System testing aims to build confidence in the quality of the system as a whole.

System testing evaluates the overall functionality and performance of complete and fully integrated software. It tests if the system meets the specified requirements and if it is suitable for delivery to the end-users. System testing is performed after the integration testing and before the acceptance testing.


Types of System Testing:

System testing is a series of different type of tests with the purpose to evaluate the overall functionality and performance of complete and fully integrated software. The types of system testing that are usually performed on large software products are described below.


  Regression Testing: Regression testing is performed under system      testing to check and detect if there is a problem in the system as a        result of a change made to another component of the system. It            makes sure that any changes done during the development process      have not introduced a new defect and that previous defects will not      reappear as new software is added over time.

Load Testing: Load testing is performed under system testing to check whether the system can work under real-time loads or not.

Stress Testing: Stress Testing is a type of software testing performed to check the robustness of the system under the varying loads.

Functional Testing: This testing makes sure that the functionality of a software product is working as per the requirement specifications. Testers also try to find out if any functions are missing or if additional functions can be added to improve the quality of the software.

Recovery Testing: Recovery testing make sure that the software can recover from a hardware, software, or network failure and perform as expected after recovery. This testing determines whether operations can be continued after a disaster or after the integrity of the system has been lost.

Migration Testing: Migration testing is performed ensures that if the system needs to be modified on new infrastructure, it can be done without any difficulty.

Usability Testing: Usability testing examines software features to make sure users can access them conveniently and enjoys their experience.  The purpose of this testing to make sure that the system is well familiar with the user and it meets its objective for what it supposed to do.

Performance Testing: This testing makes sure the system’s performance under various conditions, in terms of performance characteristics.  Performance testing occurs throughout all steps in the testing process. It measures the scalability, responsiveness, and reliability of the software.

Scalability Testing: Scalability testing makes sure the system’s scaling abilities. This testing determines whether the application can scale or grow to accommodate the rising demand. 

Security Testing: This testing makes sure that the system does not allow unauthorized access to data and resources. The purpose of security testing is to determine, how well a system protects against unauthorized internal or external access or willful damage. Testing confirms that the program can access authorized personnel and that authorized personnel can access the functions available to their security level.


5.   Write short notes of the following (any three):

(a)   Verification and Validation

(b)  Aggression

(c)   Encapsulation

(d)  Class and Object


Ans:

(a)  Verification and Validation:

In software testing, verification and validation are the processes to check whether a software system satisfies the specifications and that it fulfills its intended purpose or not.

Verification: Are we building the product right?
Validation: Are we building the right product?

Verification: Verification is a process of determining if the software is designed and developed as per the specified requirements. It is the process of determining whether the output of one phase of software development conforms to that of its previous phase.

Verification is the process of evaluating a system or component to determine whether the products of a given development phase satisfy the conditions imposed at the start of that phase. It is the process of evaluating the intermediary work products of a software development lifecycle to check if we are in the right track of creating the final product.

Verification in Software Testing is a process of checking documents, design, code, and program in order to check if the software has been built according to the requirements or not.

 

Verification is the process to ensure that whether the product that is developed is right or not. The verification process involves activities like reviews, walkthroughs and inspection.

 

Validation: Validation is the process of checking if the software (end product) has met the client’s true needs and expectations.  It is the process of checking the validation of product. Validation helps to determine if the software team has built the right product. It is validation of actual and expected product. Validation is the dynamic testing.

Validation in Software Engineering is a dynamic mechanism of testing and validating if the software product actually meets the exact needs of the customer or not.

Validation is conducted after the completion of the entire software development process. It checks if the client gets the product they are expecting. Validation focuses only on the output; it does not concern itself about the internal processes. 


(c) Encapsulation: It is the concept of information hiding. In OOD, the attributes (data variables) and methods (operation on the data) are bundled together is called encapsulation. Encapsulation not only bundles important information of an object together, but also restricts access of the data and methods from the outside world. This is called information hiding.


(d) Class and Object: A class is a generalized description of an object. An object is an instance of a class. Class defines all the attributes, which an object can have and methods, which defines the functionality of the object.

All entities involved in the solution design are known as objects. For example, person, banks, company and customers are treated as objects. Every entity has some attributes associated to it and has some methods to perform on the attributes.


6.   (a)  What is Usecase diagram? Draw the Usecase diagram of Super Market Prize scheme.



(b)  For a software that computes the square root of an input integer that can assume values in the range of 0 and 5000. Determine the equivalence classes and the black box test suite.


(c)  Assume that the size of an organic type software product has been estimated to be 64,000 lines of source code. Assume that the average salary of a software developer is Rs. 25,000 per month. Determine the effort required to develop the software product, the nominal development time, and the cost to develop the product.



7.  (a) Draw a labeled DFD for student management system. Clearly show the context diagram and its hierarchical decompositions up to level 1. (Context diagram is the Level 0 DFD).


 


(b)  Explain all the phases of iterative waterfall model. How can you differentiate it with classical waterfall model?

Ans: All the phases of Iterative Waterfall Model in Software Life Cycle Model (SDLC) is the same as the classical waterfall model, and these phases are explained below:

Feasibility Study: The main aim of this phase is to determine whether it would be financially and technically feasible to develop the software. 
The feasibility study involves understanding the problem and then determining the various possible strategies to solve the problem. These different identified solutions are analyzed based on their benefits and drawbacks.

Project managers or teams, leaders examine each of the solutions in terms of what kind of resources required, what would be the cost of development and what would be the development time for each solution. Based on this analysis they pick the best solution and determine whether the solution is feasible financially and technically. They check whether the customer budget would meet the cost of the product and whether they have sufficient technical expertise in the area of development.

 

Requirements analysis and specification: The aim of the requirement analysis and specification phase is to understand the exact requirements of the customer and document them properly. This phase consists of two different activities


Requirement gathering and analysis: The aim of ‘requirements gathering’ is to collect all relevant information from the customer regarding the product to be developed and then the gathered requirements are analyzed.

The goal of the requirements analysis part is to remove incompleteness and inconsistencies in these requirements. Once all ambiguities, inconsistencies, and incompleteness have been resolved and all the requirements have been properly understood, the requirements specification activity can start.

Requirement specification: The customer requirements identified during the requirements gathering and analysis activity are organized into a software requirement specification (SRS) document. SRS document serves as a contract between the development team and customers. Any future dispute between the customers and the developers can be settled by examining the SRS document.

 

 

Design: The goal of this phase is to convert the requirements specified in the SRS document into a structure that is suitable for implementation in some programming language. There are two design approaches being used at present: traditional design approach and object-oriented design approach.

 

Coding and Unit testing: In the coding phase software design is translated into source code. This phase is also called the implementation phase since the design is implemented into a workable solution in this phase.  Each component of design is implemented as a program module.

The end-product of this phase is a set of program modules that been individually tested. After coding is complete, each module is unit-tested to determine the correct working of all individual modules. The aim of the unit testing phase is to check whether each module is working properly or not.  

Integration and System testing Once the modules have been coded and unit tested, the Integration of different modules is undertaken. Integration of various modules is carried out incrementally over a number of steps. During each integration step, previously planned modules are added to the partially integrated system and the resultant system is tested. Finally, after all the modules have been successfully integrated and tested, the full working system is obtained and system testing is carried out on this. 

System testing consists of three different kinds of testing activities as described below: 

    Alpha testing: Alpha testing is the system testing performed by the development team.

Beta testing: Beta testing is the system testing performed by a friendly set of customers.

Acceptance testing: After the software has been delivered, the customer performed acceptance testing to determine whether to accept the delivered software or reject it.

 

Maintenance: Maintenance is the most important phase of a software life cycle. The effort spent on maintenance is 60% of the total effort spent to develop full software. Maintenance can be referred as a process of enhancement in the software product according to the changing requirements of the user.

 There are three types of maintenance

 

     Corrective Maintenance: This type of maintenance is carried out to correct errors that were not discovered during the product development phase.

Perfective Maintenance: This type of maintenance is carried out to enhance the functionalities of the system based on the customer’s request.

Adaptive Maintenance: Adaptive maintenance is usually required for modifying the system to cope with changes in the software environment.



Differentiation between Classical Waterfall model and iterative Waterfall Model:

Iterative Waterfall is basically a replacement of Classical Waterfall Model. Classical Waterfall Model is hard to use. In practice it is not possible to strictly follow the classical waterfall model for software development work. So Iterative Waterfall Model is introduced after making certain necessary changes in the Classical Waterfall Model. The iterative waterfall model is cyclic, it’s possible to go from one stage to the previous one, whenever a project is not satisfying the demands of the customer.

 

The fundamental distinction between the iterative waterfall model and the classical waterfall model is that the iterative waterfall model provides feedback path from every phase to its preceding phase.

The phases of Iterative Waterfall Model are the same as the Classical Waterfall Model. The only advancement that Iterative Waterfall Model has over classical waterfall model is that in the iterative model, we have feedback paths that link every phase with one another and with the help of those, we can go to the previous phases and make the modifications that may be required in the software in the later phases of the development. The feedback paths allow for correction of the errors committed during a phase, as and when these are detected in a later phase. The iterative nature of the model allows for changes and adjustments to be made in the project


Post a Comment

0 Comments