Software Engineering Over View
Software Engineering Over View
Definitions
IEEE defines software engineering as:
(1) The application of a systematic,disciplined,quantifiable approach
to the development,operation and maintenance of software; that is,
the application of engineering to software.
(2) The study of approaches as in the above statement.
Software Evolution
The process of developing a software product using software
engineering principles and methods is referred to as software
evolution. This includes the initial development of software and its
maintenance and updates, till desired software product is
developed, which satisfies the expected requirements.
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.
Software Paradigms
Software paradigms refer to the methods and steps, which are
taken while designing the software. There are many methods
proposed and are in work today, but we need to see where in the
software engineering these paradigms stand. These can be
combined into various categories, though each of them is contained
in one another:
Programming paradigm is a subset of Software design paradigm
which is further a subset of Software development paradigm.
Requirement gathering
Software design
Programming
Design
Maintenance
Programming
Programming Paradigm
This paradigm is related closely to programming aspect of software
development. This includes –
Coding
Testing
Integration
Operational
Transitional
Maintenance
Budget
Usability
Efficiency
Correctness
Functionality
Dependability
Security
Safety
Transitional
Portability
Interoperability
Reusability
Adaptability
Maintenance
This aspect briefs about how well a software has the capabilities to
maintain itself in the ever-changing environment:
Modularity
Maintainability
Flexibility
Scalability
SDLC Activities
SDLC provides a series of steps to be followed to design and
develop a software product efficiently. SDLC framework includes the
following steps:
Communication
This is the first step where the user initiates the request for a
desired software product. He contacts the service provider and tries
to negotiate the terms. He submits his 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. The requirements are
collected using a number of practices as given -
Feasibility Study
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
Coding
Testing
Integration
Implementation
Disposition
Waterfall Model
Iterative Model
The software is first developed on very small scale and all the steps
are followed which are taken into consideration. Then, on every
next iteration, more features and modules are designed, coded,
tested and added to the software. Every cycle produces a software,
which is complete in itself and has more features and capabilities
than that of the previous one.
V – model
At every stage, test plans and test cases are created to verify and
validate the product according to the requirement of that stage. For
example, in requirement gathering stage the test team prepares all
the test cases in correspondence to the requirements. Later, when
the product is developed and is ready for testing, test cases of this
stage verify the software against its validity towards requirements
at this stage.
This model is not suitable for large software projects but good one
for learning and experimenting.
For an in-depth reading on SDLC and its various models, click here.
Software Creation
Software Project Management
Managing People
Managing Project
Project Planning
Scope Management
Project Estimation
Project Planning
Software project planning is task, which is performed before the
production of software actually starts. It is there for the software
production but involves no concrete activity that has any direction
connection with software production; rather it is a set of multiple
processes, which facilitates software production. Project planning
may include the following:
Scope Management
It defines the scope of project; this includes all the activities,
process need to be done in order to make a deliverable software
product. Scope management is essential because it creates
boundaries of the project by clearly defining what would be done in
the project and what would not be done. This makes project to
contain limited and quantifiable tasks, which can easily be
documented and in turn avoids cost and time overrun.
Project Estimation
For an effective management accurate estimation of various
measures is a must. With correct estimation managers can manage
and control the project more efficiently and effectively.
Project manager can estimate the listed factors using two broadly
recognized techniques –
Decomposition Technique
This technique assumes the software as a product of various
compositions.
Putnam Model
This model is made by Lawrence H. Putnam, which is based on
Norden’s frequency distribution (Rayleigh curve). Putnam
model maps time and efforts required with software size.
COCOMO
COCOMO stands for COnstructive COst MOdel, developed by
Barry W. Boehm. It divides the software product into three
categories of software: organic, semi-detached and embedded.
Project Scheduling
Project Scheduling in a project refers to roadmap of all activities to
be done with specified order and within time slot allotted to each
activity. Project managers tend to tend to define various tasks, and
project milestones and arrange them keeping various factors in
mind. They look for tasks lie in critical path in the schedule, which
are necessary to complete in specific manner (because of task
interdependency) and strictly within the time allocated.
Arrangement of tasks which lies out of critical path are less likely to
impact over all schedule of the project.
Resource management
All elements used to develop a software product may be assumed
as resource for that project. This may include human resource,
productive tools and software libraries.
Experienced staff leaving the project and new staff coming in.
Change in organizational management.
Requirement change or misinterpreting requirement.
Under-estimation of required time and resources.
Technological changes, environmental changes, business
competition.
Configuration Management
Configuration management is a process of tracking and controlling
the changes in software in terms of the requirements, design,
functions and development of the product.
Baseline
A phase of SDLC is assumed over if it baselined, i.e. baseline is a
measurement that defines completeness of a phase. A phase is
baselined when all activities pertaining to it are finished and well
documented. If it was not the final phase, its output would be used
in next immediate phase.
Change Control
Gantt Chart
PERT Chart
Resource Histogram
Software Requirements
The software requirements are description of features and
functionalities of the target system. Requirements convey the
expectations of users from the software product. The requirements
can be obvious or hidden, known or unknown, expected or
unexpected from client’s point of view.
Requirement Engineering
The process to gather the software requirements from client,
analyze and document them is known as requirement engineering.
Feasibility Study
Requirement Gathering
Software Requirement Specification
Software Requirement Validation
When the client approaches the organization for getting the desired
product developed, it comes up with rough idea about what all
functions the software must perform and which all features are
expected from the software.
Requirement Gathering
SRS defines how the intended software will interact with hardware,
external interfaces, speed of operation, response time of system,
portability of software across various platforms, maintainability,
speed of recovery after crashing, Security, Quality, Limitations etc.
The requirements received from client are written in natural
language. It is the responsibility of system analyst to document the
requirements in technical language so that they can be
comprehended and useful by the software development team.
Interviews
Questionnaires
Task analysis
Domain Analysis
Every software falls into some domain category. The expert people
in the domain can be a great help to analyze general and specific
requirements.
Brainstorming
Prototyping
Observation
Clear
Correct
Consistent
Coherent
Comprehensible
Modifiable
Verifiable
Prioritized
Unambiguous
Traceable
Credible source
Software Requirements
We should try to understand what sort of requirements may arise in
the requirement elicitation phase and what kinds of requirements
are expected from the software system.
Functional Requirements
Requirements, which are related to functional aspect of software fall
into this category.
They define functions and functionality within and from the software
system.
Examples -
Non-Functional Requirements
Security
Logging
Storage
Configuration
Performance
Cost
Interoperability
Flexibility
Disaster recovery
Accessibility
easy to operate
quick in response
effectively handling operational errors
providing simple yet consistent user interface
User acceptance majorly depends upon how user can use the
software. UI is the only way for users to perceive the system. A well
performing software system must also be equipped with attractive,
clear, consistent and responsive user interface. Otherwise the
functionalities of software system can not be used in convenient
way. A system is said be good if it provides means to use it
efficiently. User interface requirements are briefly mentioned below
-
Content presentation
Easy Navigation
Simple interface
Responsive
Consistent UI elements
Feedback mechanism
Default settings
Purposeful layout
Strategical use of color and texture.
Provide help information
User centric approach
Group based view settings.
Modularization
Modularization is a technique to divide a software system into
multiple discrete and independent modules, which are expected to
be capable of carrying out task(s) independently. These modules
may work as basic constructs for the entire software. Designers
tend to design modules such that they can be executed and/or
compiled separately and independently.
Advantage of modularization:
Concurrency
Back in time, all software are meant to be executed sequentially. By
sequential execution we mean that the coded instruction will be
executed one after another implying only one portion of program
being activated at any given time. Say, a software has multiple
modules, then only one of all the modules can be found active at
any time of execution.
Example
Cohesion
Cohesion is a measure that defines the degree of intra-dependability
within elements of a module. The greater the cohesion, the better is
the program design.
Coupling
Coupling is a measure that defines the level of inter-dependability
among modules of a program. It tells at what level the modules
interfere and interact with each other. The lower the coupling, the
better the program.
Design Verification
The output of software design process is design documentation,
pseudo codes, detailed logic diagrams, process diagrams, and
detailed description of all functional or non-functional requirements.
Types of DFD
DFD Components
Levels of DFD
Structure Charts
Structure chart is a chart derived from Data Flow Diagram. It
represents the system in more detail than DFD. It breaks down the
entire system into lowest functional modules, describes functions
and sub-functions of each module of the system to a greater detail
than DFD.
HIPO Diagram
HIPO (Hierarchical Input Process Output) diagram is a combination
of two organized method to analyze the system and provide the
means of documentation. HIPO model was developed by IBM in year
1970.
Example
Structured English
Most programmers are unaware of the large picture of software so
they only rely on what their managers tell them to do. It is the
responsibility of higher software management to provide accurate
information to the programmers to develop accurate yet fast code.
IF-THEN-ELSE,
DO-WHILE-UNTIL
Analyst uses the same variable and data name, which are stored in
Data Dictionary, making it much simpler to write and understand
the code.
Example
Enter Customer_Name
SEEK Customer_Name in Customer_Name_DB file
IF Customer_Name found THEN
Call procedure USER_PASSWORD_AUTHENTICATE()
ELSE
PRINT error message
Call procedure NEW_CUSTOMER_REQUEST()
ENDIF
Pseudo-Code
Pseudo code is written more close to programming language. It may
be considered as augmented programming language, full of
comments and descriptions.
Pseudo code avoids variable declaration but they are written using
some actual programming language’s constructs, like C, Fortran,
Pascal etc.
Example
To create the decision table, the developer must follow basic four
steps:
Example
Conditions/Actions Rules
Shows Connected NNNNYYYY
Conditions Ping is Working NNYYNNYY
Opens Website YNYNYNYN
Check network cable X
Check internet router X XXX
Actions Restart Web Browser X
Contact Service provider XXXXXX
Do no action
Table : Decision Table – In-house Internet Troubleshooting
Entity-Relationship Model
Entity-Relationship model is a type of database model based on the
notion of real world entities and relationship among them. We can
map real world scenario onto ER database model. ER Model creates
a set of entities with their attributes, a set of constraints and
relation among them.
Data Dictionary
Data dictionary is the centralized collection of information about
data. It stores meaning and origin of data, its relationship with
other data, data format for usage etc. Data dictionary has rigorous
definitions of all names in order to facilitate user and software
designers.
Data dictionary is often referenced as meta-data (data about data)
repository. It is created along with DFD (Data Flow Diagram) model
of software program and is expected to be updated whenever DFD
is changed or updated.
Contents
Data Flow
Data Structure
Data Elements
Data Stores
Data Processing
= Composed of
{} Repetition
() Optional
+ And
[/] Or
Example
Primary Name
Secondary Name (Alias)
Use-case (How and where to use)
Content Description (Notation etc. )
Supplementary Information (preset values, constraints etc.)
Data Store
It stores the information from where the data enters into the
system and exists out of the system. The Data Store may include -
Files
o Internal to software.
o External to software but on the same machine.
o External to software and system, located on different
machine.
Tables
o Naming convention
o Indexing property
Data Processing
Structured Design
Structured design is a conceptualization of problem into several
well-organized elements of solution. It is basically concerned with
the solution design. Benefit of structured design is, it gives better
understanding of how the problem is being solved. Structured
design also makes it simpler for designer to concentrate on the
problem more accurately.
Design Process
Design Process
Top-down design takes the whole software system as one entity and
then decomposes it to achieve more than one sub-system or
component based on some characteristics. Each sub-system or
component is then treated as a system and decomposed further.
This process keeps on running until the lowest level of system in the
top-down hierarchy is achieved.
Bottom-up Design
The bottom up design model starts with most specific and basic
components. It proceeds with composing higher level of
components by using basic or lower level components. It keeps
creating higher level components until the desired system is not
evolved as one single component. With each higher level, the
amount of abstraction is increased.
Attractive
Simple to use
Responsive in short time
Clear to understand
Consistent on all interfacing screens
CLI provides a command prompt, the place where the user types
the command and feeds to the system. The user needs to
remember the syntax of command and its use. Earlier CLI were not
programmed to handle the user errors effectively.
CLI Elements
A text-based command line interface can have the following
elements:
GUI Elements
Sliders
Combo-box
Data-grid
Drop-down list
A model used for GUI design and development should fulfill these
GUI specific steps.
GUI Requirement Gathering - The designers may like to have list
of all functional and non-functional requirements of GUI. This
can be taken from user and their existing software solution.
User Analysis - The designer studies who is going to use the
software GUI. The target audience matters as the design
details change according to the knowledge and competency
level of the user. If user is technical savvy, advanced and
complex GUI can be incorporated. For a novice user, more
information is included on how-to of software.
Task Analysis - Designers have to analyze what task is to be
done by the software solution. Here in GUI, it does not matter
how it will be done. Tasks can be represented in hierarchical
manner taking one major task and dividing it further into
smaller sub-tasks. Tasks provide goals for GUI presentation.
Flow of information among sub-tasks determines the flow of
GUI contents in the software.
GUI Design & implementation - Designers after having information
about requirements, tasks and user environment, design the
GUI and implements into code and embed the GUI with
working or dummy software in the background. It is then self-
tested by the developers.
Testing - GUI testing can be done in various ways. Organization
can have in-house inspection, direct involvement of users and
release of beta version are few of them. Testing may include
usability, compatibility, user acceptance etc.
Example
FLUID
AppInventor (Android)
LucidChart
Wavemaker
Visual Studio
Parameter Meaning
n1 Number of unique operators
n2 Number of unique operands
N1 Number of total occurrence of operators
N2 Number of total occurrence of operands
V(G) = e – n + 2
Where
e is total number of edges
n is total number of nodes
The Cyclomatic complexity of the above module is
e = 10
n = 8
Cyclomatic Complexity = 10 - 8 + 2
= 4
Function Point
It is widely used to measure the size of software. Function Point
concentrates on functionality provided by the system. Features and
functionality of the system are used to measure the software
complexity.
External Input
External Output
Software system may need to share its files with some external
software or it may need to pass the file for processing or as
parameter to some function. All these files are counted as external
interface files.
External Inquiry
The table above yields raw Function Points. These function points
are adjusted according to the environment complexity. System is
described using fourteen different characteristics:
Data communications
Distributed processing
Performance objectives
Operation configuration load
Transaction rate
Online data entry,
End user efficiency
Online update
Complex processing logic
Re-usability
Installation ease
Operational ease
Multiple sites
Desire to facilitate changes
No influence
Incidental
Moderate
Average
Significant
Essential
Then,
Delivered Function Points (FP)= CAF x Raw FP
Cost = $ / FP
Quality = Errors / FP
Productivity = FP / person-month
Software Implementation
In this chapter, we will study about programming methods,
documentation and challenges in software implementation.
Structured Programming
In the process of coding, the lines of code keep multiplying, thus,
size of the software increases. Gradually, it becomes next to
impossible to remember the flow of program. If one forgets how
software and its underlying programs, files, procedures are
constructed it then becomes very difficult to share, debug and
modify the program. The solution to this is structured programming.
It encourages the developer to use subroutines and loops instead of
using simple jumps in the code, thereby bringing clarity in the code
and improving its efficiency Structured programming also helps
programmer to reduce coding time and organize code properly.
Functional Programming
Functional programming is style of programming language, which
uses the concepts of mathematical functions. A function in
mathematics should always produce the same result on receiving
the same argument. In procedural languages, the flow of the
program runs through procedures, i.e. the control of program is
transferred to the called procedure. While control flow is
transferring from one procedure to another, the program changes
its state.
Programming style
Programming style is set of coding rules followed by all the
programmers to write the code. When multiple programmers work
on the same software project, they frequently need to work with the
program code written by some other developer. This becomes
tedious or at times impossible, if all developers do not follow some
standard programming style to code the program.
Coding Guidelines
Software Documentation
Software documentation is an important part of software process. A
well written document provides a great tool and means of
information repository necessary to know about software process.
Software documentation also provides information about how to use
the product.
Software Validation
Validation is process of examining whether or not the software
satisfies the user requirements. It is carried out at the end of the
SDLC. If the software matches requirements for which it was made,
it is validated.
Validation ensures the product under development is as per
the user requirements.
Validation answers the question – "Are we developing the
product which attempts all that user needs from this software
?".
Validation emphasizes on user requirements.
Software Verification
Verification is the process of confirming if the software is meeting
the business requirements, and is developed adhering to the proper
specifications and methodologies.
Testing Approaches
Tests can be conducted based on two approaches –
Functionality testing
Implementation testing
Black-box testing
White-box testing
Testing Levels
Testing itself may be defined at various levels of SDLC. The testing
process runs parallel to software development. Before jumping on
the next stage, a stage is tested, validated and verified.
Unit Testing
Integration Testing
Even if the units of software are working fine individually, there is a
need to find out if the units if integrated together would also work
without errors. For example, argument passing and data updation
etc.
System Testing
Acceptance Testing
Testing Documentation
Testing documents are prepared at different stages -
Before Testing
After Testing
Types of maintenance
In a software lifetime, type of maintenance may vary based on its
nature. It may be just a routine maintenance tasks as some bug
discovered by some user or it may be a large event in itself based
on maintenance size or nature. Following are some types of
maintenance based on their characteristics:
Maintenance Activities
IEEE provides a framework for sequential maintenance process
activities. It can be used in iterative manner and can be extended
so that customized items and processes can be included.
Software Re-engineering
When we need to update the software to keep it to the current
market, without impacting its functionality, it is called software re-
engineering. It is a thorough process where the design of software
is changed and programs are re-written.
Re-Engineering Process
Reverse Engineering
It is a process to achieve system specification by thoroughly
analyzing, understanding the existing system. This process can be
seen as reverse SDLC model, i.e. we try to get higher abstraction
level by analyzing lower abstraction levels.
Program Restructuring
Forward Engineering
Example
In OOP, the objects are designed are very specific to their concern
and have fewer chances to be used in some other software.
Reuse Process
CASE Tools
CASE tools are set of software application programs, which are used
to automate SDLC activities. CASE tools are used by software
project managers, analysts and engineers to develop software
system.
Diagram tools
These tools are used for project planning, cost and effort
estimation, project scheduling and resource planning. Managers
have to strictly comply project execution with every mentioned step
in software project management. Project management tools help in
storing and sharing project information in real-time throughout the
organization. For example, Creative Pro Office, Trac Project,
Basecamp.
Documentation Tools
Analysis Tools
Design Tools
Programming Tools
Prototyping Tools
These tools assist in designing web pages with all allied elements
like forms, text, script, graphic and so on. Web tools also provide
live preview of what is being developed and how will it look after
completion. For example, Fontello, Adobe Edge Inspect, Foundation
3, Brackets.
Maintenance Tools