Overview of Software Engineering Principles
Overview of Software Engineering Principles
SOFTWARE ENGINEERING
The software is instruction or computer program that when executed provide desired
features, function, and performance.
Engineering on the other hand, is all about developing products, using well-defined,
scientific principles and methods.
Software Characteristics
Different individuals judge software on different basis. This is because they are
involved with the software in different ways. For example, users want the software to
perform according to their requirements. Similarly, developers involved in designing, coding,
and maintenance of the software evaluate the software by looking at its internal
characteristics, before delivering it to the user.
Classification of Software
Software can be applied in countless fields such as business, education, social sector,
and other fields. It is designed to suit some specific goals such as data
processing, information sharing, communication, and so on. It is classified according to the
range of potential of applications.
These classifications are listed below.
• System software: This class of software manages and controls the internal operations of a
computer system. It is a group of programs, which is responsible for using computer
resources efficiently and effectively. For example, an operating system is a system software,
which controls the hardware, manages memory and multitasking functions, and acts as an
interface between application programs and the computer.
• Real-time software: This class of software observes, analyzes, and controls real world
events as they occur. Generally, a real-time system guarantees a response to an external event
within a specified period of time. An example of real-time software is the software used for
weather forecasting that collects and processes parameters like temperature and humidity
from the external environment to forecast the weather. Most of the defence organizations all
over the world use real-time software to control their military hardware.
Software Evolution
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.
Lehman has given laws for software evolution. He divided the software into three different
categories:
4. Embedded Software:
Embedded software resides within the system or product and is used to implement and
control feature and function for the end-user and for the system itself. Embedded
software can perform the limited and esoteric function or provided significant function
and control capability.
5. Product-line Software:
Designed to provide a specific capability for use by many different customers, product
line software can focus on the limited and esoteric marketplace or address the mass
consumer market.
6. Web Application:
It is a client-server computer program which the client runs on the web browser. In their
simplest form, Web apps can be little more than a set of linked hypertext files that
present information using text and limited graphics. However, as e-commerce and B2B
application grow in importance. Web apps are evolving into a sophisticate computing
environment that not only provides a standalone feature, computing function, and
content to the end user.
7. Artificial Intelligence Software:
Artificial intelligence software makes use of a nonnumerical algorithm to solve a
complex problem that is not amenable to computation or straightforward analysis.
Application within this area includes robotics, expert system, pattern recognition,
artificial neural network, theorem proving and game playing.
Software Myth:
The development of software requires dedication and understanding on the developers' part.
Many software problems arise due to myths that are formed during the initial stages of
software development. Unlike ancient folklore that often provides valuable lessons, software
myths propagate false beliefs and confusion in the minds of management, users and
developers.
Management Myth:
User Myth:
Developer Myth:
4. Tools
The software engineering tool is an automated support for the software development.
The tools are integrated i.e the information created by one tool can be used by the other tool.
For example: The Microsoft publisher can be used as a web designing tool.
Classical waterfall model is the basic software development life cycle model. It is
very simple but idealistic. Earlier this model was very popular but nowadays it is not used.
But it is very important because all the other software development life cycle models are
based on the classical waterfall model.
Classical waterfall model divides the life cycle into a set of phases. This model
considers that one phase can be started after completion of the previous phase. That is the
output of one phase will be the input to the next phase. Thus the development process can be
considered as a sequential flow in the waterfall. Here the phases do not overlap with each
other. The different sequential phases of the classical waterfall model are shown in the below
figure:
1. Feasibility Study: The main goal 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 determine the
various possible strategies to solve the problem. These different identified solutions are
analyzed based on their benefits and drawbacks, The best solution is chosen and all the
other phases are carried out as per this solution strategy.
2. 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: Firstly all the requirements regarding the
software are gathered from the customer and then the gathered requirements are
analyzed. The goal of the analysis part is to remove incompleteness (an
incomplete requirement is one in which some parts of the actual requirements
have been omitted) and inconsistencies (inconsistent requirement is one in which
some part of the requirement contradicts with some other part).
Requirement specification: These analyzed requirements are documented in a
software requirement specification (SRS) document. SRS document serves as a
contract between development team and customers. Any future dispute between
the customers and the developers can be settled by examining the SRS document.
3. Design: The aim of the design phase is to transform the requirements specified in the
SRS document into a structure that is suitable for implementation in some programming
language.
4. Coding and Unit testing: In coding phase software design is translated into source
code using any suitable programming language. Thus each designed module is coded.
The aim of the unit testing phase is to check whether each module is working properly
or not.
5. Integration and System testing: Integration of different modules are undertaken soon
after they have been coded and unit tested. Integration of various modules is carried out
incrementally over a number of steps. During each integration step, previously planned
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 the acceptance testing to determine whether to accept the delivered
software or to reject it.
6. Maintainence: Maintenance is the most important phase of a software life cycle. The
effort spent on maintenance is the 60% of the total effort spent to develop a full
software. There are basically 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 porting the
software to work in a new environment such as work on a new computer platform
or with a new operating system.
Advantages of Classical Waterfall Model
Classical waterfall model is an idealistic model for software development. It is very simple,
so it can be considered as the basis for other software development life cycle models.
No feedback path: In classical waterfall model evolution of a software from one phase
to another phase is like a waterfall. It assumes that no error is ever committed by
developers during any phases. Therefore, it does not incorporate any mechanism for
error correction.
Difficult to accommodate change requests: This model assumes that all the customer
requirements can be completely and correctly defined at the beginning of the project,
but actually customers’ requirements keep on changing with time. It is difficult to
accommodate any change requests after the requirements specification phase is
complete.
No overlapping of phases: This model recommends that new phase can start only after
the completion of the previous phase. But in real projects, this can’t be maintained. To
increase the efficiency and reduce the cost, phases may overlap.
Prototype is defined as first or preliminary form using which other forms are copied or
derived.
Prototype model is a set of general objectives for software.
It does not identify the requirements like detailed input, output.
It is software working model of limited functionality.
In this model, working programs are quickly produced.
1. Communication
In this phase, developer and customer meet and discuss the overall objectives of the software.
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.
NOTE: The description of the phases of the spiral model is same as that of the process
model.
REFERENCES
1. [Link]
2. [Link]
3. [Link]
The process of collecting the software requirement from the client then understand, evaluate
and document it is called as requirement engineering.
Requirement engineering constructs a bridge for design and construction.
4. Negotiation
In negotiation task, a software engineer decides the how will the project be achieved with
limited business resources.
To create rough guesses of development and access the impact of the requirement on the
project cost and delivery time.
5. Specification
In this task, the requirement engineer constructs a final work product.
The work product is in the form of software requirement specification.
In this task, formalize the requirement of the proposed software such as informative,
functional and behavioral.
The requirement are formalize in both graphical and textual formats.
6. Validation
The work product is built as an output of the requirement engineering and that is accessed
for the quality through a validation step.
The formal technical reviews from the software engineer, customer and other stakeholders
helps for the primary requirements validation mechanism.
7. Requirement management
It is a set of activities that help the project team to identify, control and track the
requirements and changes can be made to the requirements at any time of the ongoing
project.
These tasks start with the identification and assign a unique identifier to each of the
requirement.
After finalizing the requirement traceability table is developed.
The examples of traceability table are the features, sources, dependencies, subsystems and
interface of the requirement.
Eliciting Requirements
The main motive is to identify the problem, give the solutions for the elements, negotiate
the different approaches and specify the primary set of solution requirements in an
environment which is valuable for achieving goal.
2. Quality Function Deployment (QFD)
In this technique, translate the customer need into the technical requirement for the software.
QFD system designs a software according to the demands of the customer.
QFD consist of three types of requirement:
Normal requirements
The objective and goal are stated for the system through the meetings with the customer.
For the customer satisfaction these requirements should be there.
Expected requirement
These requirements are implicit.
These are the basic requirement that not be clearly told by the customer, but also the
customer expect that requirement.
Exciting requirements
These features are beyond the expectation of the customer.
The developer adds some additional features or unexpected feature into the software to make
the customer more satisfied.
For example, the mobile phone with standard features, but the developer adds few
additional functionalities like voice searching, multi-touch screen etc. then the customer
more exited about that feature.
3. Usage scenarios
Till the software team does not understand how the features and function are used by the end
users it is difficult to move technical activities.
To achieve above problem the software team produces a set of structure that identify the
usage for the software.
This structure is called as 'Use Cases'.
4. Elicitation work product
The work product created as a result of requirement elicitation that is depending on the size
of the system or product to be built.
The work product consists of a statement need, feasibility, statement scope for the system.
It also consists of a list of users participate in the requirement elicitation.
Requirement Engineering
1. Feasibility Study
2. Requirement Elicitation and Analysis
3. Software Requirement Specification
4. Software Requirement Validation
5. Software Requirement Management
1. Feasibility Study:
The objective behind the feasibility study is to create the reasons for developing the software
that is acceptable to users, flexible to change and conformable to established standards.
Types of Feasibility:
This is also known as the gathering of requirements. Here, requirements are identified with
the help of customers and existing systems processes, if available.
Analysis of requirements starts with requirement elicitation. The requirements are analyzed to
identify inconsistencies, defects, omission, etc. We describe requirements in terms of
relationships and also resolve conflicts if any.
The models used at this stage include ER diagrams, data flow diagrams (DFDs), function
decomposition diagrams (FDDs), data dictionaries, etc.
o Data Flow Diagrams: Data Flow Diagrams (DFDs) are used widely for modeling the
requirements. DFD shows the flow of data through a system. The system may be a
company, an organization, a set of procedures, a computer hardware system, a
software system, or any combination of the preceding. The DFD is also known as a
data flow graph or bubble chart.
o Data Dictionaries: Data Dictionaries are simply repositories to store information
about all data items defined in DFDs. At the requirements stage, the data dictionary
should at least define customer data items, to ensure that the customer and developers
use the same definition and terminologies.
o Entity-Relationship Diagrams: Another tool for requirement specification is the
entity-relationship diagram, often called an "E-R diagram." It is a detailed logical
representation of the data for the organization and uses three main constructs i.e. data
entities, relationships, and their associated attributes.
After requirement specifications developed, the requirements discussed in this document are
validated. The user might demand illegal, impossible solution or experts may misinterpret the
needs. Requirements can be the check against the following conditions -
New requirements emerge during the process as business needs a change, and a better
understanding of the system is developed.
The priority of requirements from different viewpoints changes during development process.
The business and technical environment of the system changes during the development.
Collection of software requirements is the basis of the entire software development project.
Hence they should be clear, correct, and well-defined.
Department Of Computer Applications
Indo-American college, Cheyyar7
Software Engineering
o Clear
o Correct
o Consistent
o Coherent
o Comprehensible
o Modifiable
o Verifiable
o Prioritized
o Unambiguous
o Traceable
o Credible source
Analysis model operates as a link between the 'system description' and the 'design model'.
In the analysis model, information, functions and the behaviour of the system is defined and
these are translated into the architecture, interface and component level design in the 'design
modeling'.
Requirements modeling in software engineering is part of analysis and design. It's the
planning stage of developing a software application. Requirements modeling focuses on the
'what', not the 'how'. In other words, requirements modeling identifies what requirements the
application must meet in order to be successful.
Requirements modeling includes many sub-stages, one of them being data modeling.
Generally speaking, requirements modeling will begin with scenario-based modeling, which
results in creating a use case. A use case, simply put, is a primary example of how the
software application will be used and what it is expected to do. Once a use case exists, one of
the stages that follow will be data modeling.
Data modeling, sometimes also called information modeling, is the process of visually
representing what data the application or system will use, and how it will flow. The resulting
diagram or other visual representation is meant to be designed in a way that is as easy to
understand as possible. The fundamental elements that a data model needs to include and
describe are the data objects, more frequently called 'entities', the attributes of those
objects/entities, and the relationships between the objects/entities.
The process of creating a model for the storage of data in a database is termed as data
modeling. It is a theoretical presentation of data objects and associations among various data
objects. Data modeling is a process of formulating data in an information system in a
structured format. It helps in analyzing data easily which will further help in meeting
business requirements.
The process of data modeling requires data modelers which will precisely work with
stakeholders and prospective users of an information system. Data modeling process ends
with the creation of a data model that supports the business information system infrastructure.
This process also involves understanding the structure of an organization and proposing a
solution that enables the organization to achieve its objectives. It bridges the gaps between
technical and functional areas.
Visual representation of data helps improve data analysis. It provides a holistic picture
of the data which can be used by developers to create a physical database.
All important data of an enterprise are accurately presented in the model. The data
model reduces the chances of data omission. Data omission can lead to incorrect
results and faulty reports.
The data model portrays a better understanding of business requirements.
It helps in the creation of a robust design that brings the entire data of an organization
on the same platform. It assists in identifying the redundant, duplicate, and missing
data as well.
A qualified data model helps in providing better consistency across all projects of an
enterprise.
It improves data quality.
It helps Project Managers with a better scope and quality management. It also
improves performance to the core.
It defines relational tables, stored procedures, and primary and foreign keys.
Advantages
Data objects provided by the functional team are presented accurately with data
modeling.
Data modeling allows you to query data from the database and derive various reports
based on the data. It indirectly contributes to data analysis with the help of reports.
These reports can be used for improving the quality and productivity of the project.
Businesses have plenty of data in a variety of formats. Data modeling provides a
structured system for such unstructured forms of data.
Data modeling improves business intelligence by making data modelers work closely
with the ground realities of the project which include gathering data from multiple
unstructured sources, reporting requirements, spending patterns, etc.
Disadvantages
Development of a data model is a very tedious job. One should be aware of the
physical characteristics of the data storage.
This system involves complex application development and knowledge of
biographical truth.
The model is not quite user-friendly. Small changes induced in the system require
major modification in the entire application.
REFERENCES
[Link]
[Link]
Data Engineering: Design Process and Design Quality - Design Concepts - The Design Model
Creating an Architectural Design: Software Architecture - Data Design -Architectural Design -
Mapping Data Flow into Software Architecture; Performing User Interface Design: Golden
Rules.
The main aim of design engineering is to generate a model which shows firmness, delight and
commodity.
Software design is an iterative process through which requirements are translated into the
blueprint for building the software.
1)Software Quality
A design is generated using the recognizable architectural styles and compose a good design
characteristic of components and it is implemented in evolutionary manner for testing.
A design of the software must be modular i.e the software must be logically partitioned into
elements.
In design, the representation of data , architecture, interface and components should be distinct.
A design must carry appropriate data structure and recognizable data patterns.
Design components must show the independent functional characteristic.
A design creates an interface that reduce the complexity of connections between the
components.
A design must be derived using the repeatable method.
The notations should be use in design which can effectively communicates its meaning.
2)Quality attributes
Functionality:
It evaluates the feature set and capabilities of the program.
Usability:
It is accessed by considering the factors such as human factor, overall aesthetics, consistency and
documentation.
Reliability:
It is evaluated by measuring parameters like frequency and security of failure, output result
accuracy, the mean-time-to-failure(MTTF), recovery from failure and the the program
predictability.
Performance:
It is measured by considering processing speed, response time, resource consumption,
throughput and efficiency.
Supportability:
It combines the ability to extend the program, adaptability, serviceability. These three term
defines the maintainability.
Testability, compatibility and configurability are the terms using which a system can be easily
installed and found the problem easily.
Supportability also consists of more attributes such as compatibility, extensibility, fault
tolerance, modularity, reusability, robustness, security, portability, scalability.
3)Design concepts
1. Abstraction
A solution is stated in large terms using the language of the problem environment at the highest
level abstraction.
The lower level of abstraction provides a more detail description of the solution.
A sequence of instruction that contain a specific and limited function refers in a procedural
abstraction.
A collection of data that describes a data object is a data abstraction.
2. Architecture
3. Patterns
A design pattern describes a design structure and that structure solves a particular design
problem in a specified content.
4. Modularity
Software is separately divided into name and addressable components. Sometime they are
called as modules which integrate to satisfy the problem requirements.
Modularity is the single attribute of a software that permits a program to be managed easily.
5. Information hiding
Modules must be specified and designed so that the information like algorithm and data
presented in a module is not accessible for other modules not requiring that information.
6. Functional independence
The functional independence is the concept of separation and related to the concept of
modularity, abstraction and information hiding.
The functional independence is accessed using two criteria i.e Cohesion and coupling.
Cohesion
7. Refinement
8. Refactoring
It is a reorganization technique which simplifies the design of components without changing its
function behaviour.
Refactoring is the process of changing the software system in a way that it does not change the
external behaviour of the code still improves its internal structure.
9. Design classes
The design phase of software development deals with transforming the customer requirements as
described in the SRS documents into a form implementable using a programming language.
The software design process can be divided into the following three levels of phases of design:
1. Interface Design
2. Architectural Design
3. Detailed Design
Interface Design:
Interface design is the specification of the interaction between a system and its environment.
this phase proceeds at a high level of abstraction with respect to the inner workings of the system
i.e, during interface design, the internal of the systems are completely ignored and the system is
treated as a black box. Attention is focussed on the dialogue between the target system and the
users, devices, and other systems with which it interacts. The design problem statement produced
during the problem analysis step should identify the people, other systems, and devices which are
collectively called agents.
Precise description of events in the environment, or messages from agents to which the
system must respond.
Precise description of the events or messages that the system must produce.
Specification on the data, and the formats of the data coming into and going out of the
system.
Specification of the ordering and timing relationships between incoming events or
messages, and outgoing events or outputs.
Architectural Design:
Architectural design is the specification of the major components of a system, their
responsibilities, properties, interfaces, and the relationships and interactions between them. In
architectural design, the overall structure of the system is chosen, but the internal details of
major components are ignored.
Issues in architectural design includes:
Detailed Design:
Design is the specification of the internal elements of all major system components, their
properties, relationships, processing, and often their algorithms and the data structures.
The detailed design may include:
Data Design
Like other software engineering activities, data design (sometimes referred to as data
architecting) creates a model of data and/or information that is represented at a high level of
abstraction (the customer/user’s view of data). This data model is then refined into progressively
more implementation-specific representations that can be processed by the computer-based
system. In many software applications, the architecture of the data will have a profound
influence on the architecture of the software that must process it.
The structure of data has always been an important part of software design. At the
program component level, the design of data structures and the associated algorithms required to
manipulate them is essential to the creation of high-quality applications. At the application level,
the translation of a data model (derived as part of requirements engineering) into a database is
pivotal to achieving the business objectives of a system. At the business level, the collection of
information stored in disparate databases and reorganized into a “data warehouse” enables data
mining or knowledge discovery that can have an impact on the success of the business itself. In
every case, data design plays an important role.
Data design at the component level focuses on the representation of data structures that
are directly accessed by one or more software components. Wasserman has proposed a
set of principles that may be used to specify and design such data structures. In actuality,
the design of data begins during the creation of the analysis model. Recalling that
requirements analysis and design often overlap, we consider the following set of
principles for data specification:
1. The systematic analysis principles applied to function and behavior should also be
applied to data. We spend much time and effort deriving, reviewing, and specifying
functional requirements and preliminary design. Representations of data flow and content
should also be developed and reviewed, data objects should be identified, alternative data
organizations should be considered, and the impact of data modeling on software design
should be evaluated. For example, specification of a multiringed linked list may nicely
satisfy data requirements but lead to an unwieldy software design. An alternative data
organization may lead to better results.
2. All data structures and the operations to be performed on each should be identified.
The design of an efficient data structure must take the operations to be performed on the
data structure into account . For example, consider a data structure made up of a set of
diverse data elements. The data structure is to be manipulated in a number of major
software functions. Upon evaluation of the operations performed on the data structure, an
abstract data type is defined for use in subsequent software design. Specification of the
abstract data type may simplify software design considerably.
3. A data dictionary should be established and used to define both data and program
design. The concept of a data dictionary has been introduced in . A data dictionary
explicitly represents the relationships among data objects and the constraints on the
elements of a data structure. Algorithms that must take advantage of specific
relationships can be more easily defined if a dictionarylike data specification exists.
4. Low-level data design decisions should be deferred until late in the design process. A
process of stepwise refinement may be used for the design of data. That is, overall data
organization may be defined during requirements analysis, refined during data design
work, and specified in detail during componentlevel design. The top-down approach to
data design provides benefits that are analogous to a top-down approach to software
design—major structural attributes are designed and evaluated first so that the
architecture of the data may be established.
5. The representation of data structure should be known only to those modules that must
make direct use of the data contained within the structure. The concept of information
hiding and the related concept of coupling provide important insight into the quality of a
software design. This principle alludes to the importance of these concepts as well as "the
importance of separating the logical view of a data object from its physical view".
6. A library of useful data structures and the operations that may be applied to them
should be developed. Data structures and operations should be viewed as a resource for
software design. Data structures can be designed for reusability. A library of data
structure templates (abstract data types) can reduce both specification and design effort
for data.
7. A software design and programming language should support the specification and
realization of abstract data types. The implementation of a sophisticated data structure
can be made exceedingly difficult if no means for direct specification of the structure
exists in the programming language chosen for implementation.
5)Architectural Design
Introduction: The software needs the architectural design to represents the design of software.
IEEE defines architectural design as “the process of defining a collection of hardware and
software components and their interfaces to establish the framework for the development of a
computer system.” The software that is built for computer-based systems can exhibit one of these
many architectural styles.
Each style will describe a system category that consists of :
A set of components(eg: a database, computational modules) that will perform a function
required by the system.
The set of connectors will help in coordination, communication, and cooperation between
the components.
Conditions that how components can be integrated to form the system.
Semantic models that help the designer to understand the overall properties of the system.
The use of architectural styles is to establish a structure for all the components of the system.
Taxonomy of Architectural styles:
Call and Return architectures: It is used to create a program that is easy to scale and modify.
Many sub-styles exist within this category. Two of them are explained below.
Remote procedure call architecture: This components is used to present in a main
program or sub program architecture distributed among multiple computers on a network.
Main program or Subprogram architectures: The main program structure decomposes
into number of subprograms or function into a control hierarchy. Main program contains
number of subprograms that can invoke other components.
Object Oriented architecture: The components of a system encapsulate data and the
operations that must be applied to manipulate the data. The coordination and
communication between the components are established via the message passing.
Layered architecture:
A number of different layers are defined with each layer performing a well-defined
set of operations. Each layer will do some operations that becomes closer to machine
instruction set progressively.
At the outer layer, components will receive the user interface operations and at the
inner layers, components will perform the operating system
interfacing(communication and coordination with OS)
Intermediate layers to utility services and application software functions.
6)Software Architecture
1. The representation of software architecture allows the communication between all stakeholder
and the developer.
2. The architecture focuses on the early design decisions that impact on all software engineering
work and it is the ultimate success of the system.
3. The software architecture composes a small and intellectually graspable model.
4. This model helps the system for integrating the components using which the components are
work together.
The architectural style is a transformation and it is applied to the design of an entire system.
The main aim of architectural style is to build a structure for all components of the system.
An architecture of the system is redefined by using the architectural style.
An architectural pattern such as architectural style introduces a transformation on the design of
an architecture.
The software is constructed for computer based system and it shows one of the architectural
style from many of style.
The design categories of architectural styles includes:
1. A set of components such as database, computational modules which perform the function
required by the system.
2. A set of connectors that allows the communication, coordination and cooperation between the
components.
3. The constraints which define the integration of components to form the system.
4. Semantic model allows a designer to understand the overall properties of a system by using
analysis of elements.
Architectural design
The architectural design starts then the developed software is put into the context.
The information is obtained from the requirement model and other information collect during
the requirement engineering.
All the following entities communicates with the target system through the interface that is small
rectangles shown in above figure.
Superordinate system
These system use the target system like a part of some higher-level processing scheme.
Subordinate system
This systems is used by the target system and provide the data mandatory to complete target
system functionality.
Peer-level system
These system interact on peer-to-peer basis means the information is consumed by the target
system and the peers.
Actors
These are the entities like people, device which interact with the target system by consuming
information that is mandatory for requisite processing.
Defining Archetype
An archetype is a class or pattern which represents a core abstraction i.e critical to implement or
design for the target system.
A small set of archetype is needed to design even the systems are relatively complex.
The target system consists of archetype that represent the stable elements of the architecture.
Archetype is instantiated in many different forms based on the behavior of the system.
In many cases, the archetype is obtained by examining the analysis of classes defined as a part
of the requirement model.
ATAM was developed by the Software Engineering Institute (SEI) which started an iterative
evaluation process for software architecture.
The design analysis activities which are executed iteratively that are as follows:
1. Collect framework
Collect framework developed a set of use cases that represent the system according to user point
of view.
2. Obtained requirement, Constraints, description of the environment.
These types of information are found as a part of requirement engineering and is used to verify
all the stakeholders are addressed properly.
Module view: This view is for the analysis of assignment work with the components and the
degree in which abstraction or information hiding is achieved
Process view: This view is for the analysis of the software or system performance.
Data flow view: This view analyzes the level and check whether functional requirements are met
to the architecture.
The sensitivity of quality attributes achieved by making the small changes in the architecture
and find the sensitivity of the quality attribute which affects the performance.
The attributes affected by the variation in the architecture are known as sensitivity points.
Mapping Requirements in Software Architecture
Software requirements can be mapped into various representations of the design model.
The architectural styles represent radically different architectures, so it should come as no
surprise that a comprehensive mapping that accomplishes the transition from the requirements
model to a variety of architectural styles does not exist. In fact, there is no practical mapping for
some architectural styles, and the designer must approach the translation of requirements to
design for these styles in an ad hoc fashion.
To illustrate one approach to architectural mapping, we consider the call and return
architecture—an extremely common structure for many types of systems. The mapping
technique to be presented enables a designer to derive reasonably complex call and return
architectures from data flow diagrams within the requirements model. The technique, sometimes
called structured design, has its origins in earlier design concepts that stressed modularity , top-
down design , and structured programming . Stevens, Myers, and Constantine were early
proponents of software design based on the flow of data through a system. Early work was
refined and presented in books by Myers and Yourdon and Constantine.
The type of information flow is the driver for the mapping approach required in step 3. In
the following sections we examine two flow types.
Transform Flow
Recalling the fundamental system model (level 0 data flow diagram), information must
enter and exit software in an "external world" form. For example, data typed on a keyboard,
tones on a telephone line, and video images in a multimedia application are all forms of external
world information. Such externalized data must be converted into an internal form for
processing. Information enters the system along paths that transform external data into an
internal form. These paths are identified as incoming flow. At the kernel of the software, a
transition occurs. Incoming data are passed through a transform center and begin to move along
paths that now lead "out" of the software. Data moving along these paths are called outgoing
flow. The overall flow of data occurs in a sequential manner and follows one, or only a few,
"straight line" paths. When a segment of a data flow diagram exhibits these characteristics,
transform flow is present.
Transaction Flow
Transaction flow is characterized by data moving along an incoming path that converts
xternal world information into a transaction. The transaction is evaluated and, based on its value,
flow along one of many action paths is initiated. The hub of information flow from which many
action paths emanate is called a transaction center.
It should be noted that, within a DFD for a large system, both transform and transaction
flow may be present. For example, in a transaction-oriented flow, information flow along an
action path may have transform flow characteristics.
Software Engineering User Interface Design
User interface is the front-end application view to which user interacts in order to use the
software. The software becomes more popular if its user interface is:
Attractive
Simple to use
Responsive in short time
Clear to understand
Consistent on all interface screens
There are two types of User Interface:
1. Command Line Interface: Command Line Interface provides a command prompt, where
the user types the command and feeds to the system. The user needs to remember the
syntax of the command and its use.
2. Graphical User Interface: Graphical User Interface provides the simple interactive
interface to interact with the system. GUI can be a combination of both hardware and
software. Using GUI, user interprets the software.
User Interface Design Process:
The analysis and design process of a user interface is iterative and can be represented by a
spiral model. The analysis and design process of user interface consists of four framework
activities.
[Link], task, environmental analysis, and modeling: Initially, the focus is based on the profile
of users who will interact with the system, i.e. understanding, skill and knowledge, type of user,
etc, based on the user’s profile users are made into categories. From each category requirements
are gathered. Based on the requirements developer understand how to develop the interface.
Once all the requirements are gathered a detailed analysis is conducted. In the analysis part, the
tasks that the user performs to establish the goals of the system are identified, described and
elaborated. The analysis of the user environment focuses on the physical work environment.
Among the questions to be asked are:
Golden Rules:
The following are the golden rules stated by Theo Mandel that must be followed during the
design of the interface.
REFERENCES:
[Link]
[Link] [Link]
[Link]
Software Engineering
UNIT-IV:
Software testing can be stated as the process of verifying and validating that a software or
application is bug free, meets the technical requirements as guided by it’s design and
development and meets the user requirements effectively and efficiently with handling all the
exceptional and boundary cases.
The process of software testing aims not only at finding faults in the existing software but also at
finding measures to improve the software in terms of efficiency, accuracy and usability. It
mainly aims at measuring specification, functionality and performance of a software program or
application.
1. Verification: it refers to the set of tasks that ensure that software correctly implements a
specific function.
2. Validation: it refers to a different set of tasks that ensure that the software that has been built
is traceable to customer requirements.
1. Manual Testing: Manual testing includes testing a software manually, i.e., without using any
automated tool or any script. In this type, the tester takes over the role of an end-user and tests
the software to identify any unexpected behavior or bug. There are different stages for manual
testing such as unit testing, integration testing, system testing, and user acceptance testing.
Testers use test plans, test cases, or test scenarios to test a software to ensure the completeness of
testing. Manual testing also includes exploratory testing, as testers explore the software to
identify errors in it.
2. Automation Testing: Automation testing, which is also known as Test Automation, is when
the tester writes scripts and uses another software to test the product. This process involves
automation of a manual process. Automation Testing is used to re-run the test scenarios that were
performed manually, quickly, and repeatedly.
Apart from regression testing, automation testing is also used to test the application from load,
performance, and stress point of view. It increases the test coverage, improves accuracy, and
saves time and money in comparison to manual testing.
1. Unit Testing: A level of the software testing process where individual units/components of a
software/system are tested. The purpose is to validate that each unit of the software performs as
designed.
2. Integration Testing: A level of the software testing process where individual units are
combined and tested as a group. The purpose of this level of testing is to expose faults in the
interaction between integrated units.
3. System Testing: A level of the software testing process where a complete, integrated
system/software is tested. The purpose of this test is to evaluate the system’s compliance with the
specified requirements.
4. Acceptance Testing: A level of the software testing process where a system is tested for
acceptability. The purpose of this test is to evaluate the system’s compliance with the business
requirements and assess whether it is acceptable for delivery.
1) Unit testing
Unit testing focus on the smallest unit of software design, i.e module or software component.
Test strategy conducted on each module interface to access the flow of input and output.
The local data structure is accessible to verify integrity during execution.
Boundary conditions are tested.
In which all error handling paths are tested.
An Independent path is tested.
Following figure shows the unit testing:
Stub Driver
Stub does not accept test case data. Driver accepts test case data.
It replace the modules of the program into subprograms Pass the data to the tested components and
and are tested by the next driver. print the returned result.
2) Integration testing
a. Top-down integration
Following are the problems associated with top-down approach of testing as follows:
Top-down approach is an incremental integration testing approach in which the test conditions
are difficult to create.
A set of errors occur, then correction is difficult to make due to the isolation of cause.
The programs are expanded into various modules due to the complications.
If the previous errors are corrected, then new get created and the process continues. This
situation is like an infinite loop.
b. Bottom-up integration
In bottom up integration testing the components are combined from the lowest level in the
program structure.
The low level components are merged into clusters which perform a specific software sub
function.
A control program for testing(driver) coordinate test case input and output.
After these steps are tested in cluster.
The driver is removed and clusters are merged by moving upward on the program structure.
3) Regression testing
In regression testing the software architecture changes every time when a new module is added
as part of integration testing.
4) smoke testing
The developed software component are translated into code and merge to complete the product.
In regression tested components are tested again to It permit the software development team
verify the errors. to test projects on a regular basis.
Regression testing needs extra manpower because Smoke testing does not need an extra
the cost of the project increases. manpower because it does not affect the
cost of project.
Testers conduct the regression testing. Developer conducts smoke testing just
before releasing the product.
Alpha testing is executed at developers end by the Beta testing is executed at end-user sites in the
customer. absence of a developer.
It handles the software project and applications. It usually handles software product.
It is not open to market and the public. It is always open to the market and the public.
Alpha testing does not have any different name. Beta testing is also known as the field testing.
Alpha testing is not able to test the errors because the In beta testing, the developer corrects the errors
developer does not known the type of user. as users report the problems.
In alpha testing, developer modifies the codes before In beta testing, developer modifies the code after
release the software without user feedback. getting the feedback from user.
Scalability Testing:
Scalability Testing is a type of software testing which is carried out to check the
performance of a software application or system in terms of its capability to scale up or
scale down the number of user request load.
Software testing is a process that can be systematically planned and specified. Test case
design can be conducted, a strategy can be defined, and results can be evaluated against
prescribed expectations.
Debugging occurs as a consequence of successful testing. That is, when a test case uncovers an
error, debugging is the process that results in the removal of the error. Although debugging can
and should be an orderly process, it is still very much an art. A software engineer, evaluating the
results of a test, is often confronted with a "symptomatic" indication of a software problem. That
is, the external manifestation of the error and the internal cause of the error may have no obvious
relationship to one another. The poorly understood mental process that connects a symptom to a
cause is debugging.
Debugging is not testing but always occurs as a consequence of testing.4 Referring to figure, the
debugging process begins with the execution of a test case. Results are assessed and a lack of
correspondence between expected and actual performance is encountered. In many cases, the
noncorresponding data are a symptom of an underlying cause as yet hidden. The debugging
process attempts to match symptom with cause, thereby leading to error correction.
The debugging process will always have one of two outcomes: (1) the cause will be
found and corrected, or (2) the cause will not be found. In the latter case, the person performing
debugging may suspect a cause, design a test case to help validate that suspicion, and work
toward error correction in an iterative fashion.
During debugging, we encounter errors that range from mildly annoying (e.g., an incorrect
output format) to catastrophic (e.g. the system fails, causing serious economic or physical
damage). As the consequences of an error increase, the amount of pressure to find the cause also
increases. Often, pressure sometimes forces a software developer to fix one error and at the same
time introduce two more.
Psychological Considerations
Unfortunately, there appears to be some evidence that debugging prowess is an innate
human trait. Some people are good at it and others aren't. Although experimental evidence on
debugging is open to many interpretations, large variances in debugging ability have been
reported for programmers with the same education and experience. Commenting on the human
aspects of debugging, Shneiderman states:
Although it may be difficult to "learn" debugging, a number of approaches to the problem can be
proposed. We examine these in the next section.
Debugging Approaches
Regardless of the approach that is taken, debugging has one overriding objective: to find and
correct the cause of a software error. The objective is realized by a combination of systematic
evaluation, intuition, and luck. Bradley describes the debugging approach in this way:
Debugging is a straightforward application of the scientific method that has been developed over
2,500 years. The basis of debugging is to locate the problem's source [the cause] by binary
partitioning, through working hypotheses that predict new values to be examined.
Take a simple non-software example: A lamp in my house does not work. If nothing in the house
works, the cause must be in the main circuit breaker or outside; I look around to see whether the
neighborhood is blacked out. I plug the suspect lamp into a working socket and a working
appliance into the suspect circuit. So goes the alternation of hypothesis and test.
In general, three categories for debugging approaches may be proposed : (1) brute
force, (2) backtracking, and (3) cause elimination.
The brute force category of debugging is probably the most common and least efficient method
Department Of Computer Application
Indo-American College,Cheyyar 13
Software Engineering
for isolating the cause of a software error. We apply brute force debugging methods when all
else fails. Using a "let the computer find the error" philosophy, memory dumps are taken, run-
time traces are invoked, and the program is loaded with WRITE statements. We hope that
somewhere in the morass of information that is produced we will find a clue that can lead us to
the cause of an error. Although the mass of information produced may ultimately lead to success,
it more frequently leads to wasted effort and time. Thought must be expended first!
Backtracking is a fairly common debugging approach that can be used successfully in small
programs. Beginning at the site where a symptom has been uncovered, the source code is traced
backward (manually) until the site of the cause is found. Unfortunately, as the number of source
lines increases, the number of potential backward paths may become unmanageably large.
Any discussion of debugging approaches and tools is incomplete without mention of a powerful
ally—other people! Each of us can recall puzzling for hours or days over a persistent bug. A
colleague wanders by and in desperation we explain the problem and throw open the listing.
Instantaneously (it seems), the cause of the error is uncovered. Smiling smugly, our colleague
wanders off. A fresh viewpoint, unclouded by hours of frustration, can do wonders. A final
maxim for debugging might be: "When all else fails, get help!"
Once a bug has been found, it must be corrected. But, as we have already noted, the correction of
Department Of Computer Application
Indo-American College,Cheyyar 14
Software Engineering
a bug can introduce other errors and therefore do more harm than good. Van Vleck suggests
three simple questions that every software engineer should ask before making the "correction"
that removes the cause of a bug:
1. Is the cause of the bug reproduced in another part of the program? In many situations, a
program defect is caused by an erroneous pattern of logic that may be reproduced elsewhere.
Explicit consideration of the logical pattern may result in the discovery of other errors.
2. What "next bug" might be introduced by the fix I'm about to make? Before the correction
is made, the source code (or, better, the design) should be evaluated to assess coupling of logic
and data structures. If the correction is to be made in a highly coupled section of the program,
special care must be taken when any change is made.
3. What could we have done to prevent this bug in the first place? This question is the first
step toward establishing a statistical software quality assurance approach . If we correct the
process as well as the product, the bug will be removed from the current program and may be
eliminated from all future programs.
1. Black Box Testing: The technique of testing in which the tester doesn’t have access to the
source code of the software and is conducted at the software interface without concerning with
the internal logical structure of the software is known as black box testing.
2. White-Box Testing: The technique of testing in which the tester is aware of the internal
workings of the product, have access to it’s source code and is conducted by making sure that all
internal operations are performed according to the specifications is known as white box testing.
End users, testers and developers. Normally done by testers and developers.
THis can only be done by trial and error Data domains and internal boundaries can be
method. better tested.
Control structure testing is used to increase the coverage area by testing various control
structures present in the program. The different types of testing performed under control
structure testing are as follows-
1. Condition Testing
2. Data Flow Testing
3. Loop Testing
1. Condition Testing :
Condition testing is a test cased design method, which ensures that the logical condition and
decision statements are free from errors. The errors present in logical conditions can be incorrect
boolean operators, missing parenthesis in a booleans expression, error in relational operators,
arithmetic expressions, and so on.
The common types of logical conditions that are tested using condition testing are-
1. A relation expression, like E1 op E2 where ‘E1’ and ‘E2’ are arithmetic expressions and
‘OP’ is an operator.
2. A simple condition like any relational expression preceded by a NOT (~) operator.
For example, (~E1) where ‘E1’ is an arithmetic expression and ‘a’ denotes NOT operator.
3. A compound condition consists of two or more simple conditions, Boolean operator, and
parenthesis.
For example, (E1 & E2)|(E2 & E3) where E1, E2, E3 denote arithmetic expression and ‘&’
and ‘|’ denote AND or OR operators.
4. A Boolean expression consists of operands and a Boolean operator like ‘AND’, OR, NOT.
For example, ‘A|B’ is a Boolean expression where ‘A’ and ‘B’ denote operands and |
denotes OR operator.
2. Data Flow Testing :
The data flow test method chooses the test path of a program based on the locations of the
definitions and uses all the variables in the program.
The data flow test approach is depicted as follows suppose each statement in a program is
assigned a unique statement number and that theme function cannot modify its parameters or
global variables.
For example, with S as its statement number.
If statement S is an if loop statement, them its DEF set is empty and its USE set depends on the
state of statement S. The definition of the variable X at statement S is called the line of statement
S’ if the statement is any way from S to statement S’ then there is no other definition of X.
A definition use (DU) chain of variable X has the form [X, S, S’], where S and S’ denote
statement numbers, X is in DEF(S) and USE(S’), and the definition of X in statement S is line at
statement S’.
A simple data flow test approach requires that each DU chain be covered at least once. This
approach is known as the DU test approach. The DU testing does not ensure coverage of all
branches of a program.
However, a branch is not guaranteed to be covered by DU testing only in rar cases such as then
in which the other construct does not have any certainty of any variable in its later part and the
other part is not present. Data flow testing strategies are appropriate for choosing test paths of a
program containing nested if and loop statements.
3. Loop Testing :
Loop testing is actually a white box testing technique. It specifically focuses on the validity of
loop construction.
Following are the types of loops.
1. Simple Loop – The following set of test can be applied to simple loops, where the
maximum allowable number through the loop is n.
1. Skip the entire loop.
2. Traverse the loop only once.
3. Traverse the loop two times.
4. Make p passes through the loop where p<n.
5. Traverse the loop n-1, n, n+1 times.
2. Concatenated Loops – If loops are not dependent on each other, contact loops can be
tested using the approach used in simple loops. if the loops are interdependent, the steps are
followed in nested loops.
3. Nested Loops – Loops within loops are called as nested loops. when testing nested loops,
the number of tested increases as level nesting increases.
The following steps for testing nested loops are as follows-
1. Start with inner loop. set all other loops to minimum values.
2. Conduct simple loop testing on inner loop.
3. Work outwards.
4. Continue until all loops tested.
4. Unstructured loops – This type of loops should be redesigned, whenever possible, to
reflect the use of unstructured the structured programming constructs.
Black box testing refers to a software testing method where the SUT (Software under Test)
functionality is tested without worrying about its details of implementation, internal path
knowledge and internal code structure of the software.
This method of testing is completely based on the specifications and requirements of the
software.
The focus of the black box testing is upon the output and inputs of the software system rather
than the program’s internal knowledge.
The system that undergoes this type of testing is considered as the “black box”, and it can be any
software like a database, website or an Operating System.
Black box testing focuses on testing the complete functionality of the system as well as its
behavior.
This testing method is also referred to as behavioral testing and functional testing.
This testing method is critical during the stages of software testing life cycle like regression
testing, acceptance, unit, system, integration and software development.
The techniques of Black box testing are beneficial for the end users who wish to perform
software verification.
The following are the techniques employed while using Black box testing for a software
application.
It is one among the useful and critical Black box testing technique that helps in equivalence
partitioning. BVA helps in testing any software having a boundary or extreme values.
This technique is capable of identifying the flaws of the limits of the input values rather than
focusing on the range of input value. Boundary Value Analysis also deals with edge or extreme
output values.
This technique of Black box testing is widely used to write test cases. It can be useful in
reducing a broad set of possible inputs to smaller but effective ones.
It is performed through the division of inputs as classes, and each class is given a value.
It is applied when the need for exhaustive testing arises and for resisting the redundancy of
inputs.
This technique usually considers the state, outputs, and inputs of a system during a specific
period.
Based on the type of software that is tested, it checks for the behavioral changes of a system in a
particular state or another state while maintaining the same inputs.
The test cases for this technique are created by checking the sequence of transitions and state or
events among the inputs.
The whole set of test cases will have the traversal of the expected output values and all states.
In some instances, the inputs combinations can become very complicated for tracking several
possibilities.
Such complex situations rely on decision tables, as it offers the testers an organized view about
the inputs combination and the expected output.
This technique is identical to the graph-based testing technique; the major difference is using
tables instead of diagrams or graphs.
Graph-Based Testing:
This technique of Black box testing involves a graph drawing that depicts the link between the
causes (inputs) and the effects (output), which trigger the effects.
This testing utilizes different combinations of output and inputs. It is a helpful technique to
understand the software’s functional performance, as it visualizes the flow of inputs and outputs
in a lively fashion.
REFERENCES:
TEXT BOOK: Roger S Pressman, “Software Engineering - A Practitioner’s Approach”, Sixth
Edition, McGraw Hill International Edition, New York: 2005.
[Link]
[Link] [Link]
[Link]
UNIT-V:
The management spectrum focuses on the four P’s; people, product, process and project. Here,
the manager of the project has to control all these P’s to have a smooth flow in the progress of
the project and to reach the goal.
The four P’s of management spectrum are
1. People
2. Product
3. Process
4. Project
The four P’s of management spectrum has been described briefly in below.
The People:
People of a project includes from manager to developer, from customer to end user. But mainly
people of a project highlight the developers. It is so important to have highly skilled and
motivated developers that the Software Engineering Institute has developed a People
Management Capability Maturity Model (PM-CMM),
The Product:
The product is the ultimate goal of the project. This is any types of software product that
has to be developed. To develop a software product successfully, all the product objectives and
scopes should be established, alternative solutions should be considered and technical and
management constraints should be identified beforehand. Lack of these information, it is
impossible to define reasonable and accurate estimation of the cost, an effective assessment of
risks, a realistic breakdown of project tasks or a manageable project schedule that provides a
meaningful indication of progress.
The Process:
A software process provides the framework from which a comprehensive plan for
software development can be established. A number of different tasks sets— tasks, milestones,
work products, and quality assurance points—enable the framework activities to be adapted to
the characteristics of the software project and the requirements of the project team.
Finally, umbrella activities overlay the software process model. Umbrella activities are
independent of any one framework activity and occur throughout the process.
The Project:
The project is the complete software project that includes requirement analysis,
development, delivery, maintenance and updates. The project manager of a project or sub-project
is responsible for managing the people, product and process. The responsibilities or activities of
software project manager would be a long list but that has to be followed to avoid project failure.
A software project could be extremely complex and as per the industry data the failure
rate is high. Its merely due to the development but mostly due to the steps before development
and sometimes due to the lack of maintenance.
Once a project is found to be possible, computer code project managers undertake project
designing. Project designing is undertaken and completed even before any development activity
starts. Project designing consists of subsequent essential activities:
Project size:
What’s going to be downside quality in terms of the trouble and time needed to develop the
product?
Cost:
What proportion is it reaching to value to develop the project?
Duration:
However long is it reaching to want complete development?
Effort:
What proportion effort would be required?
The effectiveness of the following designing activities relies on the accuracy of those
estimations.
Estimation is the process of finding an estimate, or approximation, which is a value that can be
used for some purpose even if input data may be incomplete, uncertain, or unstable.
Estimation determines how much money, effort, resources, and time it will take to build a
specific system or product. Estimation is based on −
Available Documents/Knowledge
Assumptions
Identified Risks
Observations on Estimation
Estimation need not be a one-time task in a project. It can take place during −
o Acquiring a Project.
Project scope must be understood before the estimation process begins. It will be helpful
to have historical Project Data.
Department Of Computer Applications
Indo-American College, Cheyyar 5
Software Engineering
Project metrics can provide a historical perspective and valuable input for generation of
quantitative estimates.
Planning requires technical managers and the software team to make an initial
commitment as it leads to responsibility and accountability.
Use at least two estimation techniques to arrive at the estimates and reconcile the
resulting values. Refer Decomposition Techniques in the next section to learn about
reconciling estimates.
Plans should be iterative and allow adjustments as time passes and more details are
known.
Decompose the software into functions that can each be estimated individually.
Derive effort and cost estimates by applying the size values to your baseline productivity
metrics.
Combine function estimates to produce an overall estimate for the entire project.
Step 3 − Generate an estimate of the effort and cost. You can arrive at the effort and cost
estimates by breaking down a project into related software engineering activities.
Identify the sequence of activities that need to be performed for the project to be
completed.
Estimate the effort (in person hours/days) required to complete each task.
Combine effort estimates of tasks of activity to produce an estimate for the activity.
Obtain cost units (i.e., cost/unit effort) for each activity from the database.
Combine effort and cost estimates for each activity to produce an overall effort and cost
estimate for the entire project.
Step 4 − Reconcile estimates: Compare the resulting values from Step 3 to those obtained from
Step 2. If both sets of estimates agree, then your numbers are highly reliable. Otherwise, if
widely divergent estimates occur conduct further investigation concerning whether −
The scope of the project is not adequately understood or has been misinterpreted.
Historical data used for the estimation techniques is inappropriate for the application, or
obsolete, or has been misapplied.
Step 5 − Determine the cause of divergence and then reconcile the estimates.
Estimation Accuracy
How closely the historical data or industry data used to calibrate the model matches the
project you are estimating.
The stability of both the product requirements and the environment that supports the
software engineering effort.
Whether or not the actual project was carefully planned, monitored and controlled, and
no major surprises occurred that caused unexpected delays.
Use relatively simple decomposition techniques to generate project cost and effort
estimates.
Use one or more empirical estimation models for software cost and effort estimation.
To ensure accuracy, you are always advised to estimate using at least two techniques and
compare the results.
Estimation Issues
Often, project managers resort to estimating schedules skipping to estimate size. This may be
because of the timelines set by the top management or the marketing team. However, whatever
the reason, if this is done, then at a later stage it would be difficult to estimate the schedules to
accommodate the scope changes.
While estimating, certain assumptions may be made. It is important to note all these
assumptions in the estimation sheet, as some still do not document assumptions in estimation
sheets.
Even good estimates have inherent assumptions, risks, and uncertainty, and yet they are often
treated as though they are accurate.
The best way of expressing estimates is as a range of possible outcomes by saying, for example,
that the project will take 5 to 7 months instead of stating it will be complete on a particular date
or it will be complete in a fixed no. of months. Beware of committing to a range that is too
narrow as that is equivalent to committing to a definite date.
You could also include uncertainty as an accompanying probability value. For example,
there is a 90% probability that the project will complete on or before a definite date.
Organizations do not collect accurate project data. Since the accuracy of the estimates
depend on the historical data, it would be an issue.
For any project, there is a shortest possible schedule that will allow you to include the
required functionality and produce quality output. If there is a schedule constraint by
management and/or client, you could negotiate on the scope and functionality to be
delivered.
Agree with the client on handling scope creeps to avoid schedule overruns.
Failure in accommodating contingency in the final estimate causes issues. For e.g.,
meetings, organizational events.
Resource utilization should be considered as less than 80%. This is because the resources
would be productive only for 80% of their time. If you assign resources at more than
80% utilization, there is bound to be slippages.
Estimation Guidelines
During estimation, ask other people's experiences. Also, put your own experiences at
task.
Assume resources will be productive for only 80 percent of their time. Hence, during
estimation take the resource utilization as less than 80%.
Resources working on multiple projects take longer to complete tasks because of the
time lost switching between them.
Always build in contingency for problem solving, meetings and other unexpected events.
Allow enough time to do a proper project estimate. Rushed estimates are inaccurate,
high-risk estimates. For large development projects, the estimation step should really be
regarded as a mini project.
Where possible, use documented data from your organization’s similar past projects. It
will result in the most accurate estimate. If your organization has not kept historical data,
now is a good time to start collecting it.
Use developer-based estimates, as the estimates prepared by people other than those who
will do the work will be less accurate.
Use several different people to estimate and use several different estimation techniques.
Reconcile the estimates. Observe the convergence or spread among the estimates.
Convergence means that you have got a good estimate. Wideband-Delphi technique can
be used to gather and discuss estimates using a group of people, the intention being to
produce an accurate, unbiased estimate.
Project resources simply mean resources that are required for successful development
and completion of project. These resources can be capital, people, material, tool, or supplies that
are helpful to carry out certain tasks in project. Without these resources, it is impossible to
complete project. In project planning phase, identification of resources that are required for
completion of project and how they will be allocated is key element and very important task to
do. In project management, some resources that are required are assigned to each task of project
to get job done.
There are three types of resources that are considered and are very essential for execution of
project and completion of project on time and on budget. These resources can be denoted by
pyramid which is also known as Resource Pyramid. At base of pyramid i.e. last layer, hardware
and software tools are present, then at middle layer, reusable components are present, and at top
of pyramid i.e. top layer, human resources are present. This is shown in following diagram :
When software planner wants to specify resources, they specify it using four characteristics :
Description of resource
Resource availability
Time of resource when it will be available
Duration of resource availability
Department Of Computer Applications
Indo-American College, Cheyyar 11
Software Engineering
Types of resources :
1. Human Resource –
Human plays an important role in software development process. No matter what size is
and how much complexity is there in project, if you want to perform project task in an
effective manner, then human resources are very essential. In software industry, people are
assigned some organizational positions such as manager, software developer, software
testing, engineer, and so on. These positions are according to their skills and specialty.
For small project only, single individual can perform all these roles. But for large project,
team of people works on it. The total number of people that are required for project is
estimated by calculating development effort inters of person-months.
2. Reusable Components –
For bringing ease in software development process or to accelerate development process
software, industry prefers to use some ready software components. The components can be
defined as the software building blocks that can be created and reused in software
development process. Generally, regardless of their type, size, or complexity, all projects
need money. Managing budget for project is one of most important tasks that all project
managers have to do. The reusable resources also known as cost resources are very helpful
as they help in reducing overall cost of development. The use of components emphasizes
reusability. This is also termed as Component-Based Software Engineering.
3. Hardware and Software tools –
These are actually material resources that are part of project. This type of resource should
be planned before starting development of project otherwise it way causes problems for the
project.
For example, if you require certain software elements during performing task and somehow
you can’t manage to get them on time, even they could take few weeks to ship from
manufacturer and this will cause delay to your project.
Project Scheduling
A schedule in your project’s time table actually consists of sequenced activities and
milestones that are needed to be delivered under a given period of time.
Project schedule simply means a mechanism that is used to communicate and know about that
tasks are needed and has to be done or performed and which organizational resources will be
given or allocated to these tasks and in what time duration or time frame work is needed to be
performed. Effective project scheduling leads to success of project, reduced cost, and increased
customer satisfaction. Scheduling in project management means to list out activities,
deliverables, and milestones within a project that are delivered. It contains more notes than your
average weekly planner notes. The most common and important form of project schedule is
Gantt chart.
Process :
The manager needs to estimate time and resources of project while scheduling project. All
activities in project must be arranged in a coherent sequence that means activities should be
arranged in a logical and well-organized manner for easy to understand. Initial estimates of
project can be made optimistically which means estimates can be made when all favorable things
will happen and no threats or problems take place.
The total work is separated or divided into various small activities or tasks during project
schedule. Then, Project manager will decide time required for each activity or task to get
completed. Even some activities are conducted and performed in parallel for efficient
performance. The project manager should be aware of fact that each stage of project is not
problem-free.
Software Quality Assurance (SQA) is simply a way to assure quality in the software. It
is the set of activities which ensure processes, procedures as well as standards suitable for the
project and implemented correctly.
Objectives of FTR
1. FTR is useful to uncover error in logic, function and implementation for any
representation of the software.
2. The purpose of FTR is to ensure that software meets specified requirements.
3. It is also ensure that software is represented according to predefined standards.
4. It helps to review the uniformity in software development process.
5. It makes the project more manageable.
Besides the above mentioned objectives, the purpose of FTR is to enable junior engineer
to observer the analysis, design, coding and testing approach more closely.
Steps in FTR
1. Involvement of people
2. Advance preparation Advance preparation should occur but it should be very short that is
at the most 2 hours of work for each person can be spent in this preparation
3. Short duration The short duration of the review meeting should be less than two hour.
Rather than attempting to review the entire design walkthrough are conducted for
modules or for small group of modules.
The focus of the FTR is on work product (a software component to be reviewed). The
review meeting is attended by the review leader, all reviewers and the producer.
The review leader is responsible for evaluating for product for its deadlines. The copies
of product material is then distributed to reviewers. -The producer organises
“walkthrough” the product, explaining the material, while the reviewers raise the issues
based on theirs advance preparation.
One of the reviewers become recorder who records all the important issues raised during
the review. When error are discovered, the recorder notes each.
At the end of the review, the attendees decide whether to accept the product or not, with
or without modification.
During the FTR, the reviewer actively record all the issues that have been raised.
At the end of meeting these all raised issues are consolidated and review issue list is
prepared.
Finally, formal technical review summary report is produced.
3. Review guidelines
Guidelines for the conducting of formal technical review must be established in advance.
These guidelines must be distributed to all reviewers, agreed upon, and then followed.
For example,
1. Concentrate on work product only. That means review the product not the producers.
2. Set an agenda of a review and maintain it.
3. When certain issues are raised then debate or arguments should be limited. Reviews
should not ultimately results in some hard feelings.
4. Find out problem areas, but don’t attempt to solve every problem noted.
5. Take written notes (it is for record purpose)
6. Limit the number of participants and insists upon advance preparation.
7. Develop a checklist for each product that is likely to be reviewed.
8. Allocate resources and time schedule for FTRs in order to maintain time schedule.
9. Conduct meaningful trainings for all reviewers in order to make reviews effective.
10. Reviews earlier reviews which serve as the base for the current review being conducted.
REFERENCES:
TEXT BOOK: Roger S Pressman, “Software Engineering - A Practitioner’s Approach”, Sixth
Edition, McGraw Hill International Edition, New York: 2005.
[Link]
[Link] [Link]
[Link]
The key elements of software design that contribute to a model's firmness, delight, and commodity include modularity, distinct representation of data architecture, and well-defined interfaces . These elements ensure that the design is logically partitioned, reducing complexity and enhancing usability and reliability . The design's ability to effectively communicate its meaning through appropriate notations is also crucial .
'Information hiding' enhances software quality by reducing system complexity and increasing modularity, allowing for independent development and maintenance of components . It ensures that only the modules needing direct data structure access are aware of it, thereby protecting data integrity and reducing inter-module dependencies . This principle helps in minimizing the impact of changes and keeping components decoupled .
The top-down approach to data design allows the establishment and evaluation of major structural attributes upfront, ensuring a robust data architecture foundation . This method helps in organizing complex data structures into manageable components and provides a clear, overall framework that guides detailed design activities . By focusing on high-level design first, potential issues can be identified early, reducing the risk of costly redesigns later .
Reusable components reduce software development costs by providing ready-made building blocks that can be integrated into new projects, cutting down on development time and resources . They emphasize reusability, which means less need for custom development, thus lowering the financial and time investments required for a project . This approach is also supported by the principles of Component-Based Software Engineering .
Understanding project scope is crucial before estimation because it defines the boundaries and requirements of the project, influencing all subsequent planning activities . An accurate scope ensures relevant tasks and objectives are identified, thereby facilitating realistic estimations of size, effort, resources, and costs . This understanding helps in setting achievable goals and timelines, reducing risks of overruns and project failure .
The specification of component interfaces is vital as it defines how the different components of the system will interact, directly impacting the overall architectural design . Well-defined interfaces facilitate clear communication and coordination between components, ensuring that each component's responsibilities are met without interference . It also supports scalability and flexibility, allowing for components to be altered or replaced with minimal impact on the system . Proper interface design is essential for maintaining the integrity and functionality of the software architecture .
'Sliding Window Planning' mitigates risks by enabling project managers to make incremental and informed decisions at various stages of development, allowing for flexibility and adaptation as more details become available . This method prevents premature commitments and accommodates changes in project scope, resources, and team composition, thus minimizing schedule slippage and potential project failure .
Project scheduling contributes to customer satisfaction and project success by providing a clear timeline of activities, deliverables, and milestones, ensuring that tasks are completed in a logical order and within stipulated time frames . Effective scheduling leads to reduced costs, efficient resource allocation, and timely project delivery, which significantly enhances customer trust and satisfaction . By identifying potential bottlenecks and adjusting plans proactively, it aligns project outputs with customer expectations .
Modularity is critical in software design because it allows for logical partitioning of a system into smaller, manageable components, which simplifies development and testing . This decomposition promotes independent functioning, easier debugging, and maintenance . By reducing interdependence, modularity enhances scalability and adaptability, allowing updates or additions without affecting the entire system . It also supports reusability, as modules can be adapted to other projects with minimal changes .
Data-centered architecture promotes integrability by allowing existing components to be changed and new client components to be added without affecting other parts of the system . This architecture centralizes data in a repository that can be accessed and modified by various components, facilitating seamless updates and integration . Its structure supports a high degree of modular interaction through a central data store, promoting reusability and adaptation .