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.
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.
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.
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.
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.
· 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.
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.
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 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
0 Comments
if you have any doubts plz let me know...