COM 324 Software Engineering
COM 324 Software Engineering
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.
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.
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.
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.
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.
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 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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
Modeling
This stage uses graphs, formal notations or other forms of abstraction or
descriptive notations to describe the components of the design.
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.
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.
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.
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.
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
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.
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)
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.
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.
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
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.
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
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.
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.
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
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
44
Elewode, Hezekiah Adesoji, COM 324: Introduction to Software Engineering, SOBAM, Abuja