Software Engineering
Software Engineering
software takes on a dual role. It is a product and, at the same time, the vehicle for
delivering a product. As a product, it delivers the computing potential embodied by
computer hardware or, more broadly, a network of computers that are accessible by
local hardware. Whether it resides within a cellular phone or operates inside a
mainframe computer, software is an information transformer—producing, managing,
acquiring, modifying, displaying, or transmitting information that can be as simple as a
single bit or as complex as a multimedia presentation.
As the vehicle used to deliver the product, software acts as the basis for the control
of the computer (operating systems), the communication of information (networks),
and the creation and control of other programs (software tools and environments).
Software delivers the most important product of our time—information.
The role of computer software has undergone significant change over a time span of
little more than 50 years. Dramatic improvements in hardware performance, profound
changes in computing architectures, vast increases in memory and storage capacity,
and a wide variety of exotic input and output options have all precipitated more
sophisticated and complex computer-based systems. The lone programmer of an
earlier era has been replaced by a team of software specialists, each focusing on one
part of the technology required to deliver a complex application.
Software is more than just a program code. A program is an executable code, which
serves some computational purpose. Software is considered to be a collection of
Engineering on the other hand, is all about developing products, using well-defined,
scientific principles and methods.
So, we can define software engineering as an engineering branch associated with the
development of software product using well-defined scientific principles, methods and
procedures. The outcome of software engineering is an efficient and reliable software
product.
Functionality:
It refers to the suitability, accuracy, interoperability, compliance, security of
software which is measured as degree of performance of the software against
its intended purpose.
Efficiency:
It is the ability of the software to use resources of system in the most effective
and efficient manner. Software must make effective use of syetm storage and
execute command as per required timing.
Usability:
The usability of the software is the simplicity of the software in terms of the
user. The easier the software is to use for the user, the more is the usability of
the software as more number of people will now be able to use it and also due
to the ease will use it more willingly.
Portability:
It is the ease with which software developers can relaunch software from one
platform to another, without (or with minimum) changes. In simple terms,
software must be made in way that it should be platform independent.
1. System Software –
System Software is necessary to manage the computer resources and support the
execution of application programs. Software like operating systems, compilers,
editors and drivers, etc., come under this category. A computer cannot function
without the presence of these. Operating systems are needed to link the machine-
dependent needs of a program with the capabilities of the machine on which it
runs. Compilers translate programs from high-level language to machine language.
3. Embedded Software –
This type of software is embedded into the hardware normally in the Read-Only
Memory (ROM) as a part of a large system and is used to support certain
functionality under the control conditions. Examples are software used in
instrumentation and control applications like washing machines, satellites,
microwaves, etc.
4. Reservation Software –
A Reservation system is primarily used to store and retrieve information and
perform transactions related to air travel, car rental, hotels, or other activities. They
also provide access to bus and railway reservations, although these are not always
integrated with the main system. These are also used to relay computerized
information for users in the hotel industry, making a reservation and ensuring that
the hotel is not overbooked.
5. Business Software –
This category of software is used to support business applications and is the most
widely used category of software. Examples are software for inventory
management, accounts, banking, hospitals, schools, stock markets, etc.
6. Entertainment Software –
Education and entertainment software provides a powerful tool for educational
agencies, especially those that deal with educating young children. There is a wide
range of entertainment software such as computer games, educational games,
translation software, mapping software, etc.
8. Scientific Software –
Scientific and engineering software satisfies the needs of a scientific or engineering
user to perform enterprise-specific tasks. Such software is written for specific
Evolution starts from the requirement gathering process. After which developers
create a prototype of the intended software and show it to the users to get their
feedback at the early stage of software product development. The users suggest
changes, on which several consecutive updates and maintenance keep on changing
too. This process changes to the original software, till the desired software is
accomplished.
Even after the user has desired software in hand, the advancing technology and the
changing requirements force the software product to change accordingly. Re-creating
software from scratch and to go one-on-one with requirement is not feasible. The
only feasible and economical solution is to update the existing software so that it
matches the latest requirements.
1.7 Software Myths
Beliefs about software and the process used to build it- can be traced to the earliest
days of computing myths have a number of attributes that have made them insidious.
Management myths: Manages with software responsibility, like managers in most
disciplines, are often under pressure to maintain budgets, keep schedules from
slipping, and improve quality.
Customer myths: The customer believes myths about software because software
managers and practitioners do little to correct misinformation. Myths lead to
false expectations and ultimately, dissatisfaction with the developer.
Myth: A general statement of objectives is sufficient to begin with writing
programs - we can fill in the details later.
Reality: Although a comprehensive and stable statement of requirements is not
always possible, an ambiguous statement of objectives is recipe for disaster.
Myth: Project requirements continually change, but change can be easily
accommodated because software is flexible.
Reality: It is true that software requirements change, but the impact of change
varies with the time at which it is introduced and change can cause upheaval
that requires additional resources and major design modification.
Practitioner’s myths: Myths that are still believed by software practitioners: during
the early days of software, programming was viewed as an art from old ways
and attitudes die hard.
Myth: Once we write the program and get it to work, our jobs are done.
Reality: Someone once said that the sooner you begin writing code, the longer
it‘ll take you to get done. Industry data indicate that between 60 and 80 percent
of all effort expended on software will be expended after it is delivered to the
customer for the first time.
Myth: The only deliverable work product for a successful project is the working
program.
Reality: A working program is only one part of a software configuration that
includes many elements. Documentation provides guidance for software
support.
Asst. Prof. Patil Girish S. Page 9
Myth: software engineering will make us create voluminous and unnecessary
documentation and will invariably slows down.
Reality: software engineering is not about creating documents. It is about
creating quality. Better quality leads to reduced rework. And reduced rework
results in faster delivery times.
2.1 Introduction:-
Communication
This is the first step where the user initiates the request for a desired software
product. The user contacts the service provider and tries to negotiate the terms,
submits the request to the service providing organization in writing.
Requirement Gathering
This step onwards the software development team works to carry on the project. The
team holds discussions with various stakeholders from problem domain and tries to
bring out as much information as possible on their requirements. The requirements
are contemplated and segregated into user requirements, system requirements and
functional requirements.
Feasibility Study
After requirement gathering, the team comes up with a rough plan of
software process. At this step the team analyzes if a software can be designed to fulfill
all requirements of the user, and if there is any possibility of software being no more
useful. It is also analyzed if the project is financially, practically, and technologically
feasible for the organization to take up.
System Analysis
At this step the developers decide a roadmap of their plan and try to bring up the best
software model suitable for the project. System analysis includes understanding of
software product limitations, learning system related problems or changes to be done
in existing systems beforehand, identifying and addressing the impact of project on
organization and personnel etc. The project team analyzes the scope of the project and
plans the schedule and resources accordingly.
Software Design
Next step is to bring down whole knowledge of requirements and analysis on the desk
and design the software product. The inputs from users and information gathered in
requirement gathering phase are the inputs of this step. The output of this step comes
in the form of two designs; logical design, and physical design. Engineers produce
meta-data and data dictionaries, logical diagrams, data-flow diagrams, and in some
cases pseudo codes.
Coding
This step is also known as programming phase. The implementation of software
design starts in terms of writing program code in the suitable programming language
and developing error-free executable programs efficiently.
Testing
An estimate says that 50% of whole software development process should be tested.
Errors may ruin the software from critical level to its own removal. Software testing is
done while coding by the developers and thorough testing is conducted by testing
experts at various levels of code such as module testing.
Integration
Software may need to be integrated with the libraries, databases, and other
program(s). This stage of SDLC is involved in the integration of software with outer
world entities.
Implementation
This means installing the software on user machines. At times, software needs post-
installation configurations at user end. Software is tested for portability and
adaptability and integration related issues are solved during implementation.
Operation and Maintenance
Planning – Software project plan has details of resources needed, tasks and risk
factors likely to occur, schedule
.
Modelling – Architectural models and design to better understand the problem and
for work towards the best solution.
Construction – Generation of code and testing of the system to rectify errors and
ensuring all specified requirements are met.
Prescriptive process model were originally proposed to bring order to the chaos
of software development. Prescriptive process model define a prescribed set of
process elements and a predictable process work flow.
The process starts with communication, where requirements are gathered from the
customer and recorded.
Then goes to the planning stage where the cost and time constraints are estimated, a
schedule is outlined and project tracking variables are defined.
Modelling is where a design based on the requirements and keeping the project
constraints in mind is created.
After this, code is generated and the actual building of the product is started in
the construction phase.
Testing (unit testing, integration testing) is done after code completion in this phase.
Deployment is the last stage where the product is delivered, customer feedback is
received and, support and maintenance for the product are provided.
It may be difficult for the customer to provide all the specific requirements
beforehand.
Cannot be used for complex and object-oriented projects.
Testing and customer evaluation are done at the last stages and hence the risk is
high.
Iteration of activities is not promoted which is unavoidable for certain projects.
May lead to “blocking states” in which some project team members must wait
for other members of the team to complete dependent tasks.
2. Quick design
Quick design is implemented when requirements are known.
It includes only the important aspects like input and output format of the
software.
It focuses on those aspects which are visible to the user rather than the
detailed plan.
It helps to construct a prototype.
3. Modeling quick design
This phase gives the clear idea about the development of software because the
software is now built.
It allows the developer to better understand the exact requirements.
4. Construction of prototype
Generation of code and testing of the system to rectify errors and ensuring all
specified requirements are met.
5. Deployment, delivery, feedback
Unit - III
3. Analysis and Design Tools
3.1 Decision Tree and Decision Table
1. Decision Table :
Decision Table is just a tabular representation of all conditions and actions.
Decision Trees are always used whenever the process logic is very
complicated and involves multiple conditions. The main components used for
the formation of Data Table are Conditions Stubs, Action Stubs, and rules.
2. Decision Tree :
Decision Tree is a graph which always uses a branching method in order to
demonstrate all the possible outcomes of any decision. Decision Trees are
graphical and shows better representation of decision outcomes. It consists of
three nodes namely Decision Nodes, Chance Nodes and Terminal Nodes.
condition.
Circle: A circle (bubble) shows a process that transforms data inputs into data
outputs.
Data Flow: A curved line shows the flow of data into or out of a process or data
store.
Data Store: A set of parallel lines shows a place for the collection of data items. A
data store indicates that the data is stored which can be used at a later stage or by
the other processes in a different order. The data store can have an element or
group of elements.
Source or Sink: Source or Sink is an external entity and acts as a source of system
inputs or sink of system outputs.
Data Dictionary comprises two words i.e. data which simply means information
being collected through some sources and dictionary means where this information
is available.
The mathematical operators used within the data dictionary are defined in the table:
Notations Meaning
x=y[a]z x includes of some occurrences of data element a which are between y and z.
3.3.1 Elements of DD
The data dictionary Element as following:
Name of the data item
Aliases
Description/purpose
Related data items
Range of values
Data structure definition/Forms
Aliases include other names by which this data item is called DEO for Data Entry
Operator and DR for Deputy Registrar.
3.3.2 Advantages of DD
Input Design :In an information system, input is the raw data that is processed
to produce output. During the input design, the developers must consider the input
devices such as PC, MICR, OMR, etc.
Therefore, the quality of system input determines the quality of system output.
Well-designed input forms and screens have following properties −
It should serve specific purpose effectively such as storing, recording, and
retrieving the information.
Asst. Prof. Patil Girish S. Page 28
It ensures proper completion with accuracy.
It should be easy to fill and straightforward.
It should focus on user’s attention, consistency, and simplicity.
All these objectives are obtained using the knowledge of basic design
principles regarding −
o What are the inputs needed for the system?
o How end users respond to different elements of forms and screens.
Objectives for Input Design
The objectives of input design are −
To design data entry and input procedures
To reduce input volume
To design source documents for data capture or devise other data capture
methods
To design input data records, data entry screens, user interface screens, etc.
To use validation checks and develop effective input controls.
Output Design
The design of output is the most important task of any system. During output
design, developers identify the type of outputs needed, and consider the necessary
output controls and prototype report layouts.
Objectives of Output Design
The objectives of input design are −
3.5 PseudoCode
Pseudocode is one of the system development tools in which the preliminary
steps of solutions are written using simple English language rather than
programming keywords. It is an informal high-level description of the operating
principle of a computer program or other algorithm. The pseudocode uses the
structural conventions of a normal programming language but is intended for
human reading rather than machine reading. Pseudocode typically omits details
that are essential for machine understanding of the algorithm, such as variable
declarations, system-specific code, and some subroutines.
Pseudocode is not an actual programming language. So it cannot be
compiled into an executable program. It uses short terms or simple English
language syntaxes to write code for programs before it is actually converted into
a specific programming language. This is done to identify top level flow errors,
and understand the programming data flows that the final program is going to
use. This definitely helps save time during actual programming as conceptual
errors have been already corrected. Firstly, program description and
functionality is gathered and then pseudocode is used to create statements to
Asst. Prof. Patil Girish S. Page 30
achieve the required results for a program. Detailed pseudocode is inspected
and verified by the designer’s team or programmers to match design
specifications. Catching errors or wrong program flow at the pseudocode stage
is beneficial for development as it is less costly than catching them later. Once
the pseudocode is accepted by the team, it is rewritten using the vocabulary and
syntax of a programming language. The purpose of using pseudocode is an
efficient key principle of an algorithm. It is used in planning an algorithm with
sketching out the structure of the program before the actual coding takes place.
EX:-
begin
N=1
Repeat
{
Display N
N=N+1
}
While n<=10
halt
Advantages of pseudocode –
Unit - IV
4. Software Testing
Asst. Prof. Patil Girish S. Page 31
4.1 Definition
Software testing is the process of finding errors in the developed
product. It also checks whether the real outcomes can match expected results, as
well as aids in the identification of defects, missing requirements, or gaps.
Testing is the penultimate step before the launch of the product to the market. It
includes examination, analysis, observation, and evaluation of different aspects of a
product.
Professional software testers use a combination of manual testing
with automated tools. After conducting tests, the testers report the results to the
development team. The end goal is to deliver a quality product to the customer,
which is why software testing is so important.
Importance of Software Testing
It’s common for many startups to skip testing. They might say that
their budget is the reason why they overlook such an important step. They think it
would lead to no major consequences. But to make a strong and positive first
impression, it needs to be top-notch. And for that, testing the product for bugs is a
must.
Verification Validation
1. Verification is a static practice of verifying 1. Validation is a dynamic mechanism of
documents, design, code and program. validating and testing the actual product.
2. It does not involve executing the code. 2. It always involves executing the code.
3. It is human based checking of documents and
3. It is computer based execution of program.
files.
4. Validation uses methods like black box
4. Verification uses methods like inspections,
(functional) testing, gray box testing, and
reviews, walkthroughs, and Desk-checking etc.
white box (structural) testing etc.
5. Validation is to check whether software
5. Verification is to check whether the software
meets the customer expectations and
conforms to specifications.
requirements.
6. It can catch errors that validation cannot catch. 6. It can catch errors that verification cannot
It is low level exercise. catch. It is High Level Exercise.
7. Target is requirements specification, application 7. Target is actual product-a unit, a module, a
and software architecture, high level, complete bent of integrated modules, and effective final
design, and database design etc. product.
8. Verification is done by QA team to ensure
8. Validation is carried out with the
that the software is as per the specifications in
involvement of testing team.
the SRS document.
9. It generally comes first-done before validation. 9. It generally follows after verification.
It is carried out to test functionality of the program and also called ‘Behavioral’
testing. The tester in this case, has a set of input values and respective desired
results. On providing input, if the output matches with the desired results, the
program is tested ‘ok’, and problematic otherwise.
1. Syntax Driven Testing – This type of testing is applied to systems that can
be syntactically represented by some language. For example- compilers,language
that can be represented by context free grammar. In this, the test cases are
generated so that each grammar rule is used at least once.
6. Compatibility testing – The test case result not only depend on product but also
infrastructure for delivering functionality. When the infrastructure parameters are
changed it is still expected to work properly. Some parameters that generally affect
compatibility of software are:
1. Processor (Pentium 3,Pentium 4) and number of processors.
2. Architecture and characteristic of machine (32 bit or 64 bit).
3. Back-end components such as database servers.
4. Operating System (Windows, Linux, etc)
A. Statement coverage: In this technique, the aim is to traverse all statement at least
once. Hence, each line of code is tested. In case of a flowchart, every node must be
traversed at least once. Since all lines of code are covered, helps in pointing out faulty
code. they were used or changed.
B. Branch Coverage: In this technique, test cases are designed so that each branch
from all decision points are traversed at least once. In a flowchart, all edges must be
traversed at least once.