67% found this document useful (3 votes)
2K views44 pages

COM 324 Software Engineering

The document discusses various specializations within computer science including artificial intelligence, computer engineering, computer graphics, computer programming, computer networks, data processing, database systems, information science, knowledge engineering, management information systems, neural networks, robotic technology, systems analysis, software engineering, and software engineering methodology. It also discusses software, the differences between software engineering and computer science, attributes of good software, software costs, the software process, software process models, and software engineering methods.

Uploaded by

Adesoji Elewode
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
67% found this document useful (3 votes)
2K views44 pages

COM 324 Software Engineering

The document discusses various specializations within computer science including artificial intelligence, computer engineering, computer graphics, computer programming, computer networks, data processing, database systems, information science, knowledge engineering, management information systems, neural networks, robotic technology, systems analysis, software engineering, and software engineering methodology. It also discusses software, the differences between software engineering and computer science, attributes of good software, software costs, the software process, software process models, and software engineering methods.

Uploaded by

Adesoji Elewode
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 44

Introduction

The possibilities for specialization within the computer science field are wide,
and new specializations continue to evolve as advances are made in computer
hardware and Software and as more applications for computer technology are
discovered.

Listed below are some popular areas of specialization in Computer science


offered as degree programmes in some universities or often as areas of
specialization at postgraduate levels:

Artificial Intelligence
AI is a complex, highly interdisciplinary branch of computer science that
attempts to incorporate the principles of human intelligence and reasoning into
computing systems.

Computer Engineering
This is a broad discipline that incorporates the fields of computer science and
electrical engineering. Computer engineering emphasizes the theory, design, and
development of computers and computer-related technology, both hardware and
Software.

Computer Graphics
This specialization is related to graphic design and the visual arts, combines
video and computer technologies to produce two-, three-, and four-dimensional
graphic images (such as those seen in video games and computer- animated films)
using computers.

Computer Programming
One of the most open-ended and commonly pursued specializations, computer
programming involves the study of how to instruct computers to perform certain
tasks and how to write detailed instructions that list the steps a computer must
follow in order to solve a problem. Such study also involves testing computer
programs for problems (debugging).

1
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Computer Networks
This is the study of the principles of communication between computers. Computer
networking emphasizes the design of local area networks (LANs), which connect
computers within a small geographical area, and wide area networks (WANs), which
use telephone lines or radio waves to connect computers thousands of miles
apart.

Data Processing
A broad, often confusing term used to describe a wide range of fields involving
the study of how data is stored in computers (for example, stacks, queues, and
files) and how data can be processed to solve accounting and management
problems. In most cases, data processing courses are offered in business rather
than science departments.

Database Systems
This involves the study of systems, known as databases that can efficiently
store, process, and retrieve substantial quantities of information.

Information Science
This rapidly expanding interdisciplinary field examines the nature of
information itself as well as the processes by which information transfer
occurs. Information science involves the analysis and development of systems for
the storage and dissemination of information using computers,
telecommunications, or other technologies.

Knowledge Engineering
Knowledge engineering is a subfield of artificial intelligence that produces a
type of computer system called an expert system. Expert systems are computer
programs designed to perform at the level of the human expert, solving problems
that are beyond the capability of conventional computer systems.

Management Information Systems (MIS)

2
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
MIS programs emphasize the understanding and application of computer technology
to organizational problems, the design of computer-based systems for data
processing, and the design of decision-support systems for management.

Neural Networks
The study of computer systems modeled after the biological nervous system.
Neural networks are designed to imitate the workings of the human brain and are
used in areas such as voice and pattern recognition and speech synthesis.

Robotic Technology
A branch of computer science that applies artificial intelligence and
engineering concepts to create and program mechanical devices (robots) that are
able to perform a variety of tasks including some previously performed by
humans.

Systems Analysis
This involves the analysis of existing computer systems and the design of new
systems that meet the specific information needs of an organization.

Software Engineering
A still-evolving discipline based on computer science, computer technology,
management, and engineering economics, concerned with the cost- effective
development and modification of computer Software components.

Software engineering may use computer-aided Software engineering (CASE) to


reduce the time required by programmers to generate new programs and revise old
ones.

3
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Chapter One
Fundamentals of Software Engineering
Software
Software simply refers to computer programs and associated documentation such as
requirements, design models and user manuals. Software products may be developed
for a particular customer or may be developed for a general market.

Software products may be:


 Generic
 or Customised

Generic
This software are developed to be sold to a range of different customers e.g. PC
Software such as Excel or Word.

Customised

4
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
They are also called bespoke software or Tailor-made software. They are
developed for a single customer according to their specification that is,
specifically designed for a particular purpose, department or company.

New Software can be created by developing new programs, configuring generic


Software systems or reusing existing Software.

Software Engineering
Software engineering is an engineering discipline that is concerned with all
aspects of Software production. Software engineers should adopt a systematic and
organised approach to their work and use appropriate tools and techniques
depending on the problem to be solved, the development constraints and the
resources available.

Software Engineering vs Computer Science


Computer science is concerned with theory and fundamentals; Software engineering
is concerned with the practicalities of developing and delivering useful
Software. Computer science theories are still insufficient to act as a complete
underpinning for Software engineering (unlike e.g. physics and electrical
engineering).

Software Engineering Methodology


The body of methods, rules, postulates, procedures, and processes that are used
to manage a Software engineering project are collectively referred to as a
Software engineering methodology.

Attributes of a Good Software


The Software should deliver the required functionality and performance to the
user and should be maintainable, dependable and usable.
 Maintainability: Software must evolve to meet changing needs
 Dependability: Software must be trustworthy
 Efficiency: Software should not make wasteful use of system resources
 Usability: Software must be usable by the users for which it was designed
 Robustness: Software should fail only under extreme conditions
5
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 Portability: Should be possible to move from one environment to another

Software Costs
Software costs often dominate computer system costs. The costs of Software on a
PC are often greater than the hardware cost. Software costs more to maintain
than it does to develop. For systems with a long life, maintenance costs may be
several times development costs.

Software engineering is concerned with cost-effective Software development.


Software Process
A Software process is a set of activities and associated results whose goal is
the development or evolution of Software product. Generic activities in all
Software processes are:
 Specification - what the system should do and its development constraints
 Development - production of the Software system
 Validation - checking that the Software is what the customer wants
 Evolution - changing the Software in response to changing demands

Software Process Model


A Software process model is a simplified representation of a Software process,
presented from a specific perspective. Examples of process perspectives are:
 Workflow perspective - sequence of activities
 Data-flow perspective - information flow
 Role/action perspective - who does what

Generic Software process models include:


 Waterfall model
 Evolutionary development
 Formal transformation
 Integration from reusable components

Software Engineering Methods

6
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Software engineering methods refer to structured approaches to Software
development which include system models, notations, rules, design advice and
process guidance
 Model descriptions: Descriptions of graphical models which should be
produced
 Rules: Constraints applied to system models
 Recommendations: Advice on good design practice
 Process guidance: What activities to follow

Ethical Responsibilities
Software engineering involves wider responsibilities than simply the application
of technical skills.

Software engineers must behave in an honest and ethically responsible way if


they are to be respected as professionals. Ethical behaviour is more than simply
upholding the law.

Professional Responsibility
Confidentiality
Engineers should normally respect the confidentiality of their employers or
clients irrespective of whether or not a formal confidentiality agreement has
been signed.

Competence
Engineers should not misrepresent their level of competence. They should not
knowingly accept work which is not within their competence.

Intellectual property rights


Engineers should be aware of local laws governing the use of intellectual
property such as patents, copyright, etc.

They should be careful to ensure that the intellectual property of employers and
clients is protected.

7
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Computer misuse
Software engineers should not use their technical skills to misuse other
people’s computers. Computer misuse ranges from relatively trivial (game
playing on an employer’s machine, say) to extremely serious (dissemination of
viruses).

Verification & Validation


In Software management project or Software engineering, verification and
validation (V&V) is the process of checking that a Software system meets
specifications and that it fulfills its intended purpose. It may also be
referred to as Software quality control.

It is not always easy to explain the difference between these two terms. To make
so, we have to ask the following questions:
 Validation: Are we building the right system?
 Verification: Are we building the system right?

In other words, validation is checking that the system will meet the customer’s
needs while verification is checking whether the system is well-engineered,
without error, etc.

Verification will help to determine whether the Software is of high quality, but
it will not ensure that the system is useful.

Software Engineering Models


The Software engineering models also called Software development models are the
various processes or methodologies that are being selected for the development
of a Software project depending on the project’s aims and goals.

There are many development life cycle models that have been developed in order
to achieve different required objectives. The models specify the various stages
of the process and the order in which they are carried out.

8
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
The selection of model has very high impact on the testing that is carried out.
It will define the what, where and when of our planned testing, influence
regression testing and largely determines which test techniques to use.

There are various Software development models or methodologies. These include:


1. Waterfall model
2. V model
3. Incremental model
4. RAD model
5. Agile model
6. Iterative model
7. Spiral model
8. Prototype model

Chapter Two
Software Engineering Models & Requirements
Waterfall Models
The Waterfall model was the first Process Model to be introduced. It is also
referred to as a linear-sequential model. It is very simple to understand and
use.

9
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
In a waterfall model, each phase must be completed fully before the next phase
can begin. This type of model is basically used for small where there are no
uncertain requirements. At the end of each phase, a review takes place to
determine if the project is on the right path and whether or not to continue or
discard the project. In this model the testing starts only after the development
is complete.

In Waterfall model, phases do not overlap.

Advantages
 This model is simple and easy to understand and use.
 It is easy to manage due to the rigidity of the model – each phase has
specific deliverables and a review process.
 In this model phases are processed and completed one at a time. Phases do
not overlap.
 Waterfall model works well for smaller projects where requirements are
very well understood.

10
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Disadvantages
 Once an application is in the testing stage, it is very difficult to go
back and change something that was not well-thought out in the concept
stage.
 No working Software is produced until late during the life cycle.
 High amounts of risk and uncertainty.
 Not a good model for complex and object-oriented projects.
 Poor model for long and ongoing projects.
 Not suitable for the projects where requirements are at a moderate to high
risk of changing.

When to use
 This model is used only when the requirements are very well known, clear
and fixed.
 Product definition is stable.
 Technology is understood.
 There are no ambiguous requirements
 Ample resources with required expertise are available freely
 The project is short.

Prototype Model
The basic idea here is to build a throwaway prototype to understand the
requirement instead of freezing the requirements before a design or coding can
proceed.

This prototype is developed based on the currently known requirements so that


the client can get an “actual feel” of the system, since interactions with the
prototype can enable the client to better understand the requirements of the
desired system.

Prototyping is an attractive idea for complicated and large systems for which
there is no manual process or existing system to help determining the
requirements.

11
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
The prototypes are usually not complete systems and many of the details are not
built in the prototype. The goal is to provide a system with overall
functionality.

Advantages
 Users are actively involved in the development
 Since in this methodology a working model of the system is provided, the
users get a better understanding of the system being developed.
 Errors can be detected much earlier.
 Quicker user feedback is available leading to better solutions.
 Missing functionality can be identified easily
 Confusing or difficult functions can be identified.

Disadvantages
 Leads to implementing and then repairing way of building systems.
 Practically, this methodology may increase the complexity of the system as
scope of the system may expand beyond original plans.
 Incomplete application may cause application not to be used as the
full system was designed.
 Incomplete or inadequate problem analysis.

When to use
 Prototype model should be used when the desired system needs to have a lot
of interaction with the end users.

12
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 Typically, online systems, web interfaces have a very high amount of
interaction with end users, are best suited for Prototype model. It might
take a while for a system to be built that allows ease of use and needs
minimal training for the end user.
 Prototyping ensures that the end users constantly work with the system and
provide a feedback which is incorporated in the prototype to result in a
useable system. They are excellent for designing good human computer
interface systems.

Spiral Model
The spiral model is similar to the Incremental model, with more emphasis placed
on risk analysis. The spiral model has four phases: Planning, Risk Analysis,
Engineering and Evaluation. A Software project repeatedly passes through these
phases in iterations (called Spirals).

Planning Phase
Requirements like BRS, Business Requirement Specifications and SRS, System
Requirement specifications are gathered during the planning phase.

Risk Analysis
In this phase, processes are undertaken to identify risk and alternate
solutions. A prototype is produced at the end of this phase. If any risk is
found, alternate solutions are suggested and implemented.

Engineering Phase
In this phase, the Software is developed, and the testing takes place.

E valuation phase
Here, customers evaluate the output of the project to date before the project
continues to the next spiral.

Spiral model

13
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Advantages
 High amount of risk analysis hence, avoidance of Risk is enhanced.
 Good for large and mission-critical projects.
 Strong approval and documentation control.
 Additional Functionality can be added at a later date.
 Software is produced early in the Software life cycle.

Disadvantages
 Can be a costly model to use.
 Risk analysis requires highly specific expertise.
 Project’s success is highly dependent on the risk analysis phase.
 Doesn’t work well for smaller projects.

When to use
 When costs and risk evaluation is important
 For medium to high-risk projects
 Long-term project commitment unwise because of potential changes to
economic priorities
 Users are unsure of their needs
 Requirements are complex
 New product line
 Significant changes are expected (research and exploration)
14
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Incremental Model
In Incremental model, the whole requirement is divided into various modules.
Multiple developments then take place making this model a “multi-waterfall”
cycle.

Cycles are divided up into smaller, more easily managed modules. Each module
passes through the requirements, design, implementation and testing phases. A
working version of Software is produced during the first module. So we have
working Software early during the Software life cycle. Each subsequent release
of the module adds function to the previous release. The process continues till
the complete system is achieved.

Incremental model

Advantages
 Generates working Software quickly and early during the Software life
cycle.
 This model is more flexible – less costly to change scope and
requirements.
 It is easier to test and debug during a smaller iteration.
 In this model customer can respond to each built.
 Lowers initial delivery cost.

15
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 Easier to manage risk because risky pieces are identified and handled
during it’d iteration.
Disadvantages
 Needs good planning and design.
 Needs a clear and complete definition of the whole system before it can be
broken down and built incrementally.
 Total cost is higher than waterfall.

When to use
 This model can be used when the requirements of the complete system are
clearly defined and understood.
 Major requirements must be defined; however, some details can evolve with
time.
 There is a need to get a product to the market early.
 A new technology is being used
 Resources with needed skill set are not available
 There are some high risk features and goals.

Software Requirements
This is the process of establishing the specification or a description of a
Software system to be developed. It lays out functional and non-functional
requirements.

It establishes the basis for an agreement between customers and contractors or


suppliers (in market-driven projects) on what the Software product intends to or
not to do.

Software requirements specification permits a rigorous assessment of


requirements before design can begin and reduces later redesign. It should also
provide a realistic basis for estimating product costs, risks, and schedules.[1

Types of Requirements
User Requirements
16
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Statements in natural language plus diagrams of the services the system provides
and its operational constraints written for customers.

System Requirements
A structured document, setting out detailed descriptions of the system’s
functions, services and operational constraints..

Functional requirement
This defines a function of a system or its component. A function is described as
a set of inputs, the behavior, and outputs.

Non-functional requirement
This is a requirement that specifies criteria that can be used to judge the
operation of a system, rather than specific behaviors.

Domain Requirements
Requirements that come from the application domain of the system and that
reflect characteristics of that domain.

Guidelines for Writing Requirements


 Invent a standard format and use it for all requirements
 Use language in a consistent way. Use “shall” for mandatory
requirements, “should” for desirable requirements
 Use text highlighting to identify key parts of the requirement
 Avoid the use of computer jargon.

Requirement Documents
The requirements document is the official statement of what is required of the
system developers. It should include both a definition of user requirements and
a specification of the system requirements.

17
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
It is not a design document, and should set up what the system should do rather
than how it should do it.

Users of a Requirement Documents


 System customers
 Requirements Managers
 System engineers
 System test engineers
 System maintenance engineers

Requirement Definitions
These are Constraints, demands, necessities, needs, or parameters that must be
met or satisfied, of a Software system to be developed.

Requirements Validation
Requirements validation is concerned with demonstrating that the requirements
define the system that the customer really wants. Requirements error costs are
high, so validation is very important.

Requirements Reviews
Regular reviews should be held while the requirements definition is being
formulated. Both client and contractor staff should be involved in reviews.

Requirements Management
Requirements management is the process of managing changing requirements during
the requirements engineering process and system development

Requirements Checking
 Validity: ensures that the system provides the functions that best support
customer’s needs
 Consistency: ensures that there is no requirements conflicts

18
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 Completeness: checks to ensure that all functions required by the customer
arev included
 Realism: ensures that the requirements can be implemented within available
budget and technology
 Verifiability: ensures that the requirements can be checked

Chapter Three
Design Process in Software Engineering
Software Design
A Software design creates meaningful engineering representation (or model) of
some Software product that is to be built.

Designers must strive to acquire a repertoire of alternative design information


and learn to choose the elements that best match the analysis model.

A design model can be traced to the customer's requirements and can be assessed
for quality against predefined criteria. During the design process the Software
requirements model (data, function, and behavior) is transformed into design

19
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
models that describe the details of the data structures, system architecture,
interfaces, and components necessary to implement the system.

Each design product is reviewed for quality (i.e. identify and correct errors,
inconsistencies, or omissions, whether better alternatives exist, and whether
the design model can be implemented within the project constraints) before
moving to the next phase of Software development.

Attributes of Good Design


A good design must:
 implement all explicit requirements from the analysis model and accommodate
all implicit requirements desired by the user
 be a readable and understandable guide for users who generate code, test
components, or support the system
 provide a complete picture (data, function, behavior) if the Software from an
implementation perspective

Software Design Quality


A design should:
 exhibit an architecture that has been created using recognizable
architectural styles or patterns and that can be implemented in an
evolutionary manner
 be modular
 contain distinct representations of data, architecture, interfaces, and
components (modules)
 lead to data structures that are appropriate for the objects to be
implemented and be drawn from recognizable design patterns
 lead to components that exhibit independent functional characteristics
 lead to interfaces that reduce the complexity of connections between modules
and with the external environment
 be derived using a repeatable method that is driven by information obtained
during Software requirements analysis
20
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 be represented using a notation that effectively communicates its meaning

Software Design Stages


There are four major phases in most, if not all, Software engineering
methodologies. These phases are:
 Understanding the problem
 Identify alternative solutions
 Modeling
 Repeat process for each identified abstraction

Understanding the problem


This stage looks at the problem from different angles to discover the design
requirements.

Identify alternative solutions


This stage evaluates possible solutions and chooses the most appropriate
depending on the designer's experience and available resources.

Modeling
This stage uses graphs, formal notations or other forms of abstraction or
descriptive notations to describe the components of the design.

Software Design Phases


There are four fundamental phases in most, if not all, Software engineering
methodologies. These phases are:
 Analysis
 Design
 Implementation
 Testing.

These phases address what is to be built, how it will be built, building it, and
making it of high quality.

Analysis Phase

21
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
The analysis phase defines the requirements of the system, independent of how
these requirements will be accomplished. It defines the problem that the
customer tries to solve. The result at the end of this phase is a requirement
document.

Ideally, this document states in a clear and precise fashion what is to be


built. This analysis represents the ``what'' phase. The requirement document
tries to capture the requirements from the customer's perspective by defining
goals and interactions at a level removed from the implementation details.

The requirement document may be expressed in a formal language based on


mathematical logic. Traditionally, the requirement document is written in
English or another written language.

The requirement document does not specify the architectural or implementation


details, but specifies information at the higher level of description. The
problem statement, the customer's expectations, and the criteria for success are
examples of high-level descriptions.

The analysis team develops the requirement document, which talks about things
and actions on things. This document should also include states, events, typical
scenarios of usage, and a typical scenario of usage.

Design Phase
In this phase, the architecture is established. This phase starts with the
requirement document delivered by the requirement phase and maps the
requirements into architecture.

The architecture defines the components, their interfaces and behaviors. The
deliverable design document is the architecture. The design document describes a
plan to implement the requirements. This phase represents the ``how'' phase.

Details on computer programming languages and environments, machines, packages,


application architecture, distributed architecture layering, memory size,
platform, algorithms, data structures, global type definitions, interfaces, and
22
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
other engineering details are established. The design may include the usage of
existing components.

Implementation Phase
Here, the team builds the components either from scratch or by composition.
Given the architecture document from the design phase and the requirement
document from the analysis phase, the team should build exactly what has been
requested, though there is still room for innovation and flexibility.

The implementation phase deals with issues of quality, performance, baselines,


libraries, and debugging. The end deliverable is the product itself.

Testing Phase
It is simply stated that quality is very important. Many companies have not
learned that quality is important and deliver more claimed functionality but at
a lower quality level. It is much easier to explain to a customer why there is a
missing feature than to explain to a customer why the product lacks quality. A
customer satisfied with the quality of a product will remain loyal and wait for
new functionality in the next version. Quality is a distinguishing attribute of
a system indicating the degree of excellence.

In many Software engineering methodologies, the testing phase is a separate


phase which is performed by a different team after the implementation is
completed. There is merit in this approach; it is hard to see one's own
mistakes, and a fresh eye can discover obvious errors much faster than the
person who has read and re-read the material many times. Unfortunately,
delegating testing to another team leads to a slack attitude regarding quality
by the implementation team.

Alternatively, another approach is to delegate testing to the whole


organization.

23
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Software Design Types
Data Design
 High level model depicting user’s view of the data or information
 Design of data structures and operators is essential to creation of high-
quality applications
 Translation of data model into database is critical to achieving system
business objectives
 Reorganizing databases into a data warehouse enables data mining or knowledge
discovery that can impact success of business itself

Architectural Design
 Provides an overall view of the Software product
 Derived from Information about the application domain relevant to Software,
relationships and collaborations among specific analysis model elements and
availability of architectural patterns and styles
 Usually depicted as a set of interconnected systems that are often derived
from the analysis packages with in the requirements model

Interface Design
 Interface is a set of operations that describes the externally observable
behavior of a class and provides access to its public operations
 Important elements are User interface (UI), External interfaces to other
systems and Internal interfaces between various design components
 Modelling

Component-Level Design
 Describes the internal detail of each Software component
 Defines Data structures for all local data objects, Algorithmic detail for
all component processing functions and Interface that allows access to all
component operations
 Modeling using UML component diagrams, UML activity diagrams, pseudocode, and
sometimes flowcharts

24
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Deployment-Level Design
 Indicates how Software functionality and subsystems will be allocated within
the physical computing environment
 Modeled using UML deployment diagrams
 Descriptor form deployment diagrams show the computing environment but does
not indicate configuration details
 Instance form deployment diagrams identifying specific named hardware
configurations are developed during the latter stages of design

Software Design Strategies


There are two generic approaches for Software designing:
 Top down design
 Bottom up design

Top down Design


A system is composed of more than one sub-systems and it contains a number of
components. Further, these sub-systems and components may have their on set of sub-
system and components and creates hierarchical structure in the system.

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 and when all components are composed the whole system comes
into existence.

Top-down design is more suitable when the Software solution needs to be designed
from scratch and specific details are unknown.

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
25
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
not evolved as one single component. With each higher level, the amount of
abstraction is increased.

Bottom-up strategy is more suitable when a system needs to be created from some
existing system, where the basic primitives can be used in the newer system.

Both top-down and bottom-up approaches are not individually practicable, instead, a
good combination of both is used.

The FURPS
FURPS is an acronym representing a model for classifying Software quality
attributes (functional and non-functional requirements):
 Functionality - Capability (Size & General Feature), Reusability
(Compatibility, Interoperability, Portability), Security (Safety &
Exploitability)

 Usability - Human Factors, Consistency, Documentation, Responsiveness

 Reliability - Availability (Failure Frequency


(Robustness/Durability/Resilience), Failure Extent & Time-Length
(Recoverability/Survivability)), Predictability (Stability), Accuracy
(Frequency/Severity of Error)

 Performance - Speed, Efficiency, Resource Consumption (power, ram, cache,


etc.), Throughput, Capacity, Scalability
 Supportability (Serviceability, Maintainability, Sustainability, Repair
Speed) - Testability, Flexibility (Modifiability, Configurability,
Adaptability, Extensibility, Modularity), Installability, Localizability

The model, developed at Hewlett-Packard was first publicly elaborated by Grady


and Caswell. FURPS+ is now widely used in the Software industry.

26
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Chapter Four
Verification & Validation Process
Introduction
In Software project management, Software testing, and Software engineering,
Verification and Validation (V&V) is the process of checking that a Software
system meets specifications and that it fulfills its intended purpose. It may
also be referred to as Software quality control.

In the context of testing, Verification and Validation are very widely and
commonly used terms. Most of the times, we consider the terms same, but actually
the terms are quite different.

Verification & Validation has two principal objectives:


 Discovery of defects in a system
 Assessment of the system to determine its usability

There are two aspects of V&V tasks


 Producer view of quality
 Consumers view of quality

27
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Producer’s view
In simpler terms, this means the developers perception of the final product.

Consumers view
This means users perception of final product.

Verification
Verification is a process of evaluating the intermediary work products of a
Software development lifecycle to check if it is in the right track of creating
the final product.
The intermediary products can include the documents which are produced during
the development phases like, requirements specification, design documents, data
base table design, ER diagrams, test cases, e.t.c.

We sometimes tend to neglect the importance of reviewing these documents but we


should understand that reviewing itself can find out many hidden anomalies when
if found or fixed in the later phase of development cycle, can be very costly.
In other words we can also state that verification is a process to evaluate the
mediator products of Software to check whether the products satisfy the
conditions imposed during the beginning of the phase.

Validation
Validation is the process of evaluating the final product to check whether the
Software meets the business needs. In simple words the test execution which we
do in our day to day life are actually the validation activity which includes
functional testing, regression testing, systems testing etc…

Verification vs Validation
The terms Verification and Validation are frequently used in the Software
testing and the meaning of each term is mostly vague and debatable. You must
have encountered these kinds of usage and interpretations, and it is my humble
attempt here to distinguish between them as clearly as possible.

28
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Verification Validation

Definition The process of evaluatingThe process of evaluating


work-products (not the actualSoftware during or at the end
final product) of aof the development process to
development phase todetermine whether it satisfies
determine whether they meetspecified business
the specified requirementsrequirements
for that phase

Objective To ensure that the product isTo ensure that the product
being built according to theactually meets the user’s
requirements and designneeds, and that the
specifications. In otherspecifications were correct in
words, to ensure that workthe first place. In other
products meet their specifiedwords, to demonstrate that the
requirements. product fulfills its intended
use when placed in its
intended environment.

Question Are we building the productAre we building the right


right? product?

Evaluation Plans, Requirement Specs,The actual product/Software.


Items Design Specs, Code, Test
Cases

Activities  Reviews  Testing


 Walkthroughs
 Inspections

It is entirely possible that a product passes when verified but fails when
validated. This can happen when, say, a product is built as per the
specifications but the specifications themselves fail to address the user’s
needs. Therefore:
 Trust but verify
 Verify but also validate

Software Testing Process


There are basically five stages of Testing in Software development project.
These stages are:
 Unit testing

29
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 Module testing
 Sub-system testing
 System testing
 Acceptance testing

Unit testing
This stage tests individual software components or modules. It is typically done
by the programmer and not by testers, as it requires detailed knowledge of the
internal program design and code.

Module testing
This stage tests each integrated modules to verify combined functionality.
Modules are typically code modules, individual applications, client and server
applications on a network, etc. This type of testing is especially relevant to
client/server and distributed systems.

Sub-system testing
This is the testing of collections of modules integrated into sub-systems to
also ensure that it is in the right track of creating the final product.
System testing
Here, the entire system is tested as per the requirements prior to delivery.

Acceptance testing
Normally this type of testing is done to verify if the system meets the customer
specified requirements. User or customer does this testing to determine whether
to accept application.

Software Testing Strategies


Software testing must be planned carefully to avoid wasting development time and
resources. Testing begins “in the small” and progresses “to the large”.
Initially individual components are tested and debugged. After the individual

30
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
components have been tested and added to the system, integration testing takes
place. Once the full software product is completed, system testing is performed.

The Test Specification document should be reviewed like all other software
engineering work products.

Strategic Approach to Software Testing


 Many software errors are eliminated before testing begins by conducting
effective technical reviews
 Testing begins at the component level and works outward toward the
integration of the entire computer-based system.
 Different testing techniques are appropriate at different points in time.
 The developer of the software conducts testing and may be assisted by
independent test groups for large projects.
 Testing and debugging are different activities.
 Debugging must be accommodated in any testing strategy.

Software Testing Strategy


Unit Testing
Makes heavy use of testing techniques that exercise specific control paths to
detect errors in each software component individually

Integration Testing
Focuses on issues associated with verification and program construction as
components begin interacting with one another
Validation Testing
Provides assurance that the software validation criteria (established during
requirements analysis) meets all functional, behavioral, and performance
requirements

System Testing
Verifies that all system elements mesh properly and that overall system function
and performance has been achieved

31
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Strategic Testing Issues
 Specify product requirements in a quantifiable manner before testing starts.
 Specify testing objectives explicitly.
 Identify categories of users for the software and develop a profile for each.
 Develop a test plan that emphasizes rapid cycle testing.
 Build robust software that is designed to test itself.
 Use effective formal reviews as a filter prior to testing.
 Conduct formal technical reviews to assess the test strategy and test cases.
 Develop a continuous improvement approach for the testing process

Integration Testing Strategies


Top down Testing
In this approach testing is conducted from main module to sub module. If the sub
module is not developed, a temporary program called STUB is used for simulate
the sub module.

Advantages
 Advantageous if major flaws occur toward the top of the program.
 Once the I/O functions are added, representation of test cases is easier.
 Early skeletal Program allows demonstrations and boosts morale.
Disadvantages
 STUB modules must be produced
 STUB modules are often more complicated than they first appear to be.
 Before the I/O functions are added, representation of test cases in stubs can
be difficult.
 Test conditions ma be impossible, or very difficult, to create.
 Observation of test output is more difficult.
 Allows one to think that design and testing can be overlapped.
 Induces one to defer completion of the testing of certain modules.

Bottom up testing

32
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
In this approach testing is conducted from sub module to main module, if the
main module is not developed a temporary program called DRIVERS is used to
simulate the main module.

Advantages
 Advantageous if major flaws occur toward the bottom of the program.
 Test conditions are easier to create.
 Observation of test results is easier.

Disadvantages
 Driver Modules must be produced.
 The program as an entity does not exist until the last module is added.

Thread-based testing
A thread is the smallest unit of work that a system can execute. Thread testing, a
software testing technique used during early integration testing phase to verify
the key functional capabilities that carry out specific task.
Advantage
 These kinds of techniques are very helpful if an application is of type that
uses client server architecture.

Disadvantages
 Performing Thread testing on valid business transaction through the integrated
client, server and network is very critical.

Stress-based testing
This is a type of non-functional testing that involves testing a system beyond
normal operational capacity, often to a breaking point, in order to observe the
results. It is a form of software testing that is used to determine the
stability of a given system.

It puts greater emphasis on robustness, availability, and error handling under a


heavy load, rather than on what would be considered correct behavior under
normal circumstances.
33
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
The goals of such tests may be to ensure the software does not crash in
conditions of insufficient computational resources (such as memory or disk
space).

Chapter Five
Software Project Management
Software Project
A Software Project is the complete procedure of software development from
requirement gathering to testing and maintenance, carried out according to the
execution methodologies, in a specified period of time to achieve intended
software product.

Software projects versus other Engineering projects


Many of the techniques of general project management are applicable to software
project management, but Fred Brooks pointed out that the products of software
projects have certain characteristics that make them different:

Invisibility
When a physical artifact such as a bridge or road is being constructed, the
progress being made can actually be seen. With software, progress is not
immediately visible.

Complexity

34
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Per dollar, pound or euro spent, software products contain more complexity than
other engineered artifacts.

Flexibility
The ease with which software can be changed is usually seen as one of its
strengths. This means the software systems are likely to be subject to a high
degree of change.

Proposal writing
Software engineering proposal is a document that a software developer submits to
a business customer for acceptance. The proposal describes the problem to be
solved and explains the resulting benefits to the customer.

The key for a great proposal is to invent a great idea. There is no “official
template” for writing software proposals.

The most important thing about a software engineering proposal is that the
proposal is about the problem domain, not about the idiosyncrasies of software
engineering or programming

The proposal should clearly describe the motivation for the proposed work and
the proposed solution along with its expected business value.

The proposal should not contain any technical jargon. There are three key
components of a software engineering proposal:

Diagnose Problem ==> Prescribe Treatment ==> Plan of Work

Problem diagnosis
Describe the problem domain; describe clearly what kinds of issues exist in the
current practice that you would like to address.

35
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Be as specific as you can and provide as many details and examples as possible.
Describe the problem domain and the problem that you’re planning to solve.

People usually make a mistake of describing at a very high level the problem,
too generic, and then make a huge leap and dive deep into the tiny detail of
their own solution. You must make effort to bridge this gap incrementally. Start
with a brief description of high-level context (few sentences or a paragraph),
then describe some specific issues that you’re interested in, then provide more
specific details about the sub-issues that your work will tackle.

Proposed treatment
Describe how you propose to address the diagnosed problems. What specific
interventions will you introduce? What kind of metrics will you use to evaluate
your success in solving the targeted problems? How will you know that you
achieved your objective?

Discuss the business value of your proposed solution. What will your customer
and users gain from your proposed system that they are lacking now? Be as
specific as possible in describing the envisioned benefits of your proposed
solution. Provide example scenarios of how your proposed system will be used and
explain how this solution is better than the current practice.

Plan of work
Make a convincing case that you know how to achieve the proposed goal. Step-by-
step, go in details about what needs to be accomplished, how long it will take,
and how it relates to other parts . You cannot know all the details yet, because
you haven’t even started, but your plan should outline the main steps so that
it is clear that you have a plan. Do not just copy a generic plan from a
textbook, because that looks lame.

Describe your team. What are the strengths and expertise of each team member?
Explain why your team size is adequate to tackle the problem, and why the
problem size requires your team and not fewer people.

36
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Keep in mind that this is only an initial plan so that you can give your
customer a preliminary estimate of costs and expected completion date. You will
need to adjust both of these estimates as you progress, but hopefully not by
much.

State how you will know that you succeeded. How will you measure the success of
your system in addressing the customer’s problem that you diagnosed?

Your proposal must be written in lay language, plain English, and you should
avoid any engineering terminology (unless your problem domain is an engineering
process, i.e., you will develop software to improve an engineering process).

The proposal should accurately describe the user experience, though in lay
language rather than using software engineering jargon. The proposal is about
the user experience of the proposed system, so this must be as accurate as
possible. Otherwise, the decision to accept or reject the proposal will be based
on inadequate information. On the other hand, the proposal should avoid
discussing the implementation details of the system. It is useful, though, to
include what is necessary to accomplish the proposed goal, such as access to
certain data (e.g., financial reports, traffic reports, etc., depending on the
problem domain), other resources (e.g., sensors, devices, equipment), or
expertise (e.g., statistician, security expert). It helps to know whether such
resources are available and at what cost.

Although a naive user may not be interested in specific algorithms or software


libraries that you may be planning to use, it is important that you mention
their existence. The reason is again that your customer (or course instructor)
needs to be assured that you know what you are up to. Otherwise, the customer
may be worried that you don’t really know what you may need, and this may be an
open-ended project that may take forever and very likely may fail. If you say
that you will reuse an existing software or algorithm, this significantly
reduces the uncertainty about the proposed work.

Project Planning
37
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Software project planning is task, which is performed before the production of
software actually starts. It involves no concrete activity that has any
direction with software production.

Rather it is a set of multiple processes, which facilitates software


production. Project planning may include the following:
 Scope Management
 Project Estimation

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 define various tasks, and project milestones and then
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 and strictly within the time allocated.
For scheduling a project, it is necessary to:
 Break the project down tasks into smaller, manageable form
 Find out various tasks and correlate them
 Estimate time frame required for each task
 Divide time into work-units
 Assign adequate number of work-units for each task
 Calculate total time required for the project from start to finish
Project Execution & Monitoring
Here, the tasks described in project plans are executed according to their
schedules.

Execution needs monitoring in order to check whether everything is going


according to the plan. Monitoring is observing to check the probability of risk
and taking measures to address the risk or report the status of various tasks.

Project Monitoring & Tracking

38
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
The main goal of project managers for monitoring a project is to get visibility
into the project execution so that they can determine whether any action needs
to be taken to ensure that the project goals are met in terms of effort,
schedule, and quality.

Different levels of monitoring might be done for a project. Measurements taken


on the project are employed for monitoring.

Personnel Selection
Personnel selection is the methodical process used to hire individuals. Although
the term can apply to all aspects of the process (recruitment, selection,
hiring, acculturation, etc.) the most common meaning focuses on the selection of
workers.

In this respect, selected prospects are separated from rejected applicants with
the intention of choosing the person who will be the most successful and make
the most valuable contributions to the organization. Its effect on the group is
discerned when the selected accomplish their desired impact to the group,
through achievement or tenure.

The procedure of selection takes after strategy to gather data around a person
so as to figure out whether that individual ought to be utilized. The strategies
used must be in compliance with the various laws in respect to work force
selection.

Report Writing
In academia there is some overlap between reports and essays, and the two words
are sometimes used interchangeably, but reports are more likely to be needed for
business, scientific and technical subjects, and in the workplace. Whereas an
essay presents arguments and reasoning, a report concentrates on facts.

Essentially, a report is a short, sharp, concise document which is written


for a particular purpose and audience. It generally sets outs and analyses a

39
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
situation or problem, often making recommendations for future action. It is a
factual paper, and needs to be clear and well-structured.

Software Management Structure


Organisation
An organisation is an entity comprising multiple people, such as an institution
or an association that has a collective goal and is linked to an external
environment.

Programming team
A programming team is a team of people who develop or maintain computer
software. They may be organised in numerous ways, but the egoless programming
team and chief programmer team are two common structures typically used.

Egoless programming team


Egoless programming is a style of computer programming in which personal factors
are minimized so that quality may be improved.
Chief programmer team
A chief programmer team is a programming team organized in a star around a
"chief" role, granted to the software engineer who understands the system's
intentions the best.

The concept is similar to that of a surgical team in which a surgeon who


performs the operation is supported by medical staff such as an anesthetist and
nurses.

Programming task
Analysis
This is the process of studying a procedure or business in order to identify its
goals and purposes and create systems and procedures that will achieve them in
an efficient way".

Design

40
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Design is the process of defining the architecture, components, modules,
interfaces, and data for a system to satisfy specified requirements. Systems
design could be seen as the application of systems theory to product
development.

Coding
In Computer science, code is a term used for both the statements written in a
particular programming language - the source code.

And a term for the source code after it has been processed by a compiler and
made ready to run in the computer is the object code

Validation
In software project management, software testing, and software engineering,
verification and validation (V&V) is the process of checking that a software
system meets specifications and that it fulfills its intended purpose. It may
also be referred to as software quality control.

Programming productivity
Programming productivity (also called software productivity or development
productivity) describes the degree of the ability of individual programmers or
development teams to build and evolve software systems.
Productivity traditionally refers to the ratio between the quantity of software
produced and the cost spent for it. Here the delicacy lies in finding a
reasonable way to define software quantity.

Programming Constraints
In order to fully understand and manage programmers’ productivity, it must be
realized that there are controllable constraints on the programmer from five
distinct categories:
 Financial Constraints
 Time Constraints
41
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
 Software Specifications
 Programming Methodology
 Corporate Environment.

Financial Constraints
Financial constraints are not necessarily only the money allocated to the
development of the specific project. Many financial decisions made before,
during, and after the development process significantly affect productivity of
software development.
Development is only the beginning, and we must look at the entire life of the
software, including future maintenance and enhancements.

Time Constraints
Most software development projects are set up to be developed within a specific
time framework. Not only must the budget be met, but also the project must be
finished on time.

In general we must realize that a project is normally undertaken to meet


specific needs. These needs can be either to satisfy a software development
contract or to fulfill the business needs of the developing organization. Any
delay can be costly in uncollected payments or lost productivity in other areas
of the organization.

Software Specifications
Much has been said about the effects of systems analysis and design on the
development process. It is clear that a better analysis before the programming
certainly helps the process.

When major adjustments and/or adaptations must be done before completion of the
development cycle, the effort necessary generally increases significantly and
therefore the cost and the time increase also.

Programming Methodology

42
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
Programming methodology is one aspect which has evolved significantly since the
beginning of Computer programming. It is probably the single most important
single factor in programmer productivity.

Different facets of programming methodology influence productivity


significantly.
Corporate Environment
There are many factors of the corporate environment which affect programming
productivity. Some of these are easy to define and manage, while others are more
difficult to deal with.

Budget
Salaries
Financial Constraints Availability of Computer Resources
Availability of Programming Tools and
Resources
Time to Completion
Time Constraints Cost of Delay
Limited Programmers
CASE
Portability
Software Specifications
Efficiency
Flexibility
Programming Language
Structured Programming
Object-Oriented Programming
Program Generators
Programming Methodology
Prototyping
Maintainability and Upgradeability
Commenting and Formatting
Defect Detection and Removal Techniques
Organizational Structure
Corporate Environment Geographic Location
Internal Politics

43
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja
References
Vivian Nwaocha, (2008), Software Engineering Methodologies, National Open
University of Nigeria, Lagos.

Somerville, I. (2002), Software Engineering Methodology, McGraw-Hill, 5th


Edition.

Assignment
What are the advantages and the disadvantages of Stress-based Software testing?

Compare and contrast Software project management and other types of engineering
project management.

It's a very difficult thing to measure programmers’ productivity objectively


and it gets more difficult with size. What are the accurate gauge of
developers’ performance in Software engineering project?

44
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja

You might also like