Download as pptx, pdf, or txt
Download as pptx, pdf, or txt
You are on page 1of 66

SOFTWARE DEVELOPMENT

FOUNDATIONS AND CONCEPTS

BY JAPHET ADJETEY
Course outline
• Software Developments Foundations and concepts
• Fundamentals of OOP
• Exploring Abstraction , Encapsulation , Polymorphism and Inheritance
INTRODUCTION

What is Software Development?


It is a complex process to develop modern and professional software
today. This document tries to give a brief overview of Software
Development. Normally we use the terms System Engineering or
Software Engineering.
• System Engineering:
• The process of analyzing and designing an entire system, including the hardware
and the software.

Software Engineering:
• The discipline for creating software applications. A systematic approach to the
design, development, testing, and maintenance of software. A lot of systems
today have a mix of hardware and software that is tightly integrated, like modern
smartphones, tablets, etc. To create such systems, involve a lot of different
disciplines. Software is any set of machine-readable instructions that directs a
computer's processor to perform specific operations. The term is used to
contrast with computer hardware, the physical objects (processor and related
devices) that carry out the instructions. Computer hardware and software
require each other, and neither can be realistically used without the other.
SOFTWARE DEVELOPMENT
LIFECYCLE
The main parts or phases in the software development process are:
• Planning
• Requirements Analysis
• Design
• Implementation
• Testing
• Deployment and Maintenance
SOFTWARE DEVELOPMENT
LIFECYCLE
• Requirements
• In the requirements, we describe what the system should do. The
requirements include both functional requirements and non-
functional requirements [1].
• Functional Requirements: Statements of services the system
should provide, how the system should react to inputs and how
the system should behave in different situations. May state what
the system should not do.
• Non-Functional Requirements: Constraints on the services or
functions offered by the system such as timing constraints,
constraints on the development process, standards, etc. Often
apply to the system rather than individual features or services.
SOFTWARE DEVELOPMENT
LIFECYCLE
• Design
• In the design phase, we use the specification and transform it into
descriptions of how we should do it.
• In principle, requirements should state what the system should
do and the design should describe how it does this – but in
practice this is not so easy.
• In practice, requirements and design are inseparable.
SOFTWARE DEVELOPMENT
LIFECYCLE
• We can divide design into 2 main groups:
• Technical Design – Platform and Architecture Design, i.e., how to
build the software.
• UX Design – Design of User experience (UX) and the Graphical
User Interface (GUI), sometimes also called Human Machine
Interface (HMI). This is what the end user of the software sees.
SOFTWARE DEVELOPMENT
LIFECYCLE
• Implementation
• Software is usually designed and created
(coded/written/programmed) in integrated development
environments (IDE) like Eclipse, Xcode or Microsoft Visual Studio
that can simplify the process and compile the program to an
executable unit. Software is usually created on top of existing
software and the application programming interface (API) that
the underlying software frameworks provide, e.g. Microsoft .NET,
etc.
• Most of the software has a Graphical User Interface (GUI).
Normally you separate the GUI design and code in different layers
or files.
SOFTWARE DEVELOPMENT
LIFECYCLE
• Testing
• Testing can be performed on different levels and by different
persons. Testing is a very important part of software
development. About 50% of the software development is about
testing your software.
• Creating User-friendly Software is Crucial!
SOFTWARE DEVELOPMENT
LIFECYCLE
• Deployment
• What is Deployment?
• Software deployment is all the activities that make a software
system available for use.
• Examples:
• Get the software out to the customers
• Creating Installation Packages
• Documentation, e.g., Installation Guide, etc.
• Installation
SOFTWARE DEVELOPMENT
LIFECYCLE
• Maintenance
• When the software is deployed, or installed, you normally go into
a Maintenance phase. The maintenance of software involves bug
fixes of the software after the software is released, etc. At some
time, you also need to start planning new releases of the
software.
Software development methodologies
• Waterfall model
• V-model
• Spiral model
• Unified Process (UP)/ Rational Unified Process (RUP)
• Scrum
• Extreme Programming (XP)
• Lean Software Development
• TDD (Test Driven Development)
• Lean Software Development
• Kanban
Software development methodologies
These processes or models may be divided in 2 main
categories:
Plan-driven models and Agile methods. The Waterfall
model, V-model and the Spiral model is so-called plan-driven
models,
while Scrum and eXtreme Programming are so-called Agile
methods.
Software development methodologies

PLAN DRIVEN METHODS


• Waterfall model consists of the following phases:
• Requirements specification (Requirements analysis)
• Software design
• Implementation and Integration
• Testing (or Validation)
• Deployment (or Installation)
• Maintenance
Software development methodologies
PLAN DRIVEN METHODS
Traditionally with the Waterfall model, you can only start on the
next phase when the previous phase is finished. Therefore, it is
called the Waterfall method, see Figure 6-3.
Software development methodologies
PLAN DRIVEN METHODS
Software development methodologies
• V-model
• The V-model [5] is derived from the more traditional Waterfall
model.
• The V-model is an extension of the waterfall model, but it’s using
a more flexible approach.
• “The V-Model reflects a project management view of software
development and fits the needs of project managers,
accountants and lawyers rather than software developers or
users.”

Software development methodologies
Software development methodologies
• AGILE SOFTWARE DEVELOPMENT
• Agile software development is a group of software development
methods based on iterative and incremental development.
• A group of software development methods under agile
methodology includes :
• Iterative approach
• Incremental: Software available to Customers every 2-4 weeks
• Self-organizing and cross-functional Teams
• Refactoring
Software development methodologies
• Agile Features and Principles
Software development methodologies
Comparisons between Waterfall vs. Agile
• Agile is good for small projects – not so good for larger projects?
• If the Customer don’t know what he wants in detail – Scrum is a
good approach
• In Figure 6-9 we see some important differences between the
traditional waterfall method and the Agile Development
approach. We see that Agile delivers value in each iteration of
the development.
Software development methodologies
• Extreme Programming (XP)
• Extreme Programming or shorted XP is a popular Agile method.
Typical features in XP are as follows:
• Pair Programming
• Code Reviews
• Refactoring
• Unit Testing - In XP you start by writing Unit Tests before you
start coding
• Standup Meetings
SCRUM
• Scrum has been one of the commonest agile method popularly used
in software development.
FEATURES OF SCRUM

• Agile Software Development method


• Simple to understand
• Flexible
• Extremely difficult to master!
• Self-organizing Teams (3-9 persons)
• Scrum Team:
• Product Owner o Scrum Master o Development Team
FEATURES OF SCRUM
• Some important Scrum Events are:
• The Sprint (duration between 14-30 days)
• Sprint Planning Meeting (8 hours if 30 days’ sprint)
• Daily Scrum Meeting (Max 15 min, every day at the same time) (also
called Standup Meeting)
• Sprint Review (4 hours if 30 days’ sprint)
• An example of a Daily Scrum Meeting is shown in Figure 6-13. It is
normal to held this meeting as a “standup meeting”, where
participants standing during the meeting
KANBAN
• Kanban is based on Lean and Toyota production principles and Just-in-
Time principles. Kanban has fewer “rules” than scrum. Kanban is
flow-based, while Scrum is Time box-based (Sprints). Kanban focus on
limit the WIP (Work in Progress). Kanban has focus on estimation.
• In Kanban, they use a Kanban board (Figure 6-14) to track the
progress. The Kanban board is very like the Task board used in Scrum.
Software development methodologies
Comparisons between Waterfall vs. Agile
• Agile is more flexible than traditional methods (like the
waterfall).
• Here are some key factors that separates the traditional
waterfall method versus the more flexible Agile methods, such
as Scrum:
• Agile and Scrum is based on Iterations while Waterfall is
Sequential
• Agile and Scrum focus on less documentation
Software development roles
• Project Manager
• System Architect
• UX Designer
• Programmer, System Developer
• Tester
• Customer
Software development roles
• A System Engineer is a general person that could be a Programmer,
Architect, Designer, Tester in different phases in the project, or he
could be a tester in one project and a programmer in another project
– all in one person. That is usually the case in small companies, while
in larger companies these roles (designer, tester, programmer) could
be a full-time job.
Qualities of a good software
• Requirements Specification
• Technical Design
• User Experience (UX)
• Improved Code Quality and Implementation
• Testing
• System Documentation •
• User Documentation
CHALLENGES IN SOFTWARE
DEVELOPMENT
• Collaboration and communication within the team and with
stakeholders, etc. is crucial when it comes to creating good software.
• Creating software is complicated. It is important to understand the
customer’s needs! In some way, you need to find out what the
customer needs.
• Market research, etc. is a good start, but in the end, you need to go
much deeper to understand the customer. Most of the time the
customer doesn’t even know what they need.
Software systems
• Stand-alone applications
• These are application systems that run on a local computer, such as
a PC. They include all necessary functionality and do not need to
be connected to a network.
• Interactive transaction-based applications
• Applications that execute on a remote computer and are accessed
by users from their own PCs or terminals. These include web
applications such as e-commerce applications.
• Embedded control systems
• These are software control systems that control and manage
hardware devices. Numerically, there are probably more
embedded systems than any other type of system.
Software systems
• Batch processing systems
• These are business systems that are designed to process data in large
batches. They process large numbers of individual inputs to create
corresponding outputs.
• Entertainment systems
• These are systems that are primarily for personal use and which are
intended to entertain the user.
• Systems for modeling and simulation
• These are systems that are developed by scientists and engineers to
model physical processes or situations, which include many, separate,
interacting objects.
Software systems

• Data collection systems


• These are systems that collect data from their environment using a set of
sensors and send that data to other systems for processing.
• Systems of systems
• These are systems that are composed of several other software
systems
TYPES OF SOFTWARE SYSTEMS
• Generic products
• Stand-alone systems that are marketed and sold to any customer who
wishes to buy them.
• Examples – PC software such as graphics programs, project management
tools; CAD software; software for specific markets such as appointments
systems for dentists. Examples: Microsoft Office
• Customized products
• Software that is commissioned by a specific customer to meet their own
needs.
Software documentation
• Lots of documentation is involved in software development.
• Some important documents are:
• SRS – Software Requirements Specifications
• o A document stating what an application must accomplish
Software documentation
• SDD – Software Design Document o
• A document describing the design of a software application
• STP - Software Test Plan
• Documentation stating what parts of an application will be tested, and the
schedule of when the testing is to be performed
• STD - Software Test Documentation
• Contents: Introduction, Test Plan, Test Design, Test Cases, Test procedures,
Test Log, Summary
Software documentation
• SDD – Software Design Document o
• A document describing the design of a software application
• STP - Software Test Plan
• Documentation stating what parts of an application will be tested, and the
schedule of when the testing is to be performed
• STD - Software Test Documentation
• Contents: Introduction, Test Plan, Test Design, Test Cases, Test procedures,
Test Log, Summary
FUNDAMENTALS OF OOP
• Object-Oriented Programming (OOP) is a programming paradigm in
computer science that relies on the concept of classes and objects. It
is used to structure a software program into simple, reusable pieces
of code blueprints (usually called classes), which are used to create
individual instances of objects.
• Procedural programming is about writing procedures or methods that
perform operations on the data, while object-oriented programming
is about creating objects that contain both data and methods.
ADVANTAGES OF USING OOP
• OOP is faster and easier to execute
• OOP provides a clear structure for the programs
• OOP helps to keep the Java code DRY "Don't Repeat Yourself", and
makes the code easier to maintain, modify and debug
• OOP makes it possible to create full reusable applications with less
code and shorter development time
FUNDAMENTALS OF OOP
• Classes and objects are the two main aspects of object-oriented
programming.
• ILLUSTRATION BETWEEN OBJECTS AND CLASSES
• Example 1

CLASS OBJECT

Fruit Orange
Banana
Pear
Mango
FUNDAMENTALS OF OOP
Example 2

CLASS OBJECT

Car Audi
Volvo
Toyota
• So, a class is a template for objects, and an object is an instance of a
class.
• When the individual objects are created, they inherit all the variables and
methods from the class.
• On the other hand attributes are the information that is stored.
• Attributes are stored in the class template.
• When objects are instantiated ,individual objects contain data stored in
the attributes field.
• The state of an object is defined by the data in the object’s attributes
field.
• Methods
• Methods represents behaviours , perform actions and also return
information
About an object.
• Python is an object-oriented programming language.
• Everything in Python is associated with classes and objects, along with
its attributes and methods. For example: in real life, a car is an object.
The car has attributes, such as weight and color, and methods, such
as drive and brake.
• A Class is like an object constructor, or a "blueprint" for creating
objects.
THE FOUR PILLARS OF OOP

• Encapsulation
Encapsulation is accomplished when each object
maintains a private state, inside a class. Other objects can
not access this state directly, instead, they can only
invoke a list of public functions. The object manages its
own state via these functions and no other class can alter
it unless explicitly allowed.
aBSTRACTION
Abstraction is an extension of encapsulation.
It is the process of selecting data from a larger pool to show only the
relevant details to the object. Suppose you want to create a dating
application and you are asked to collect all the information about your
users. You might receive the following data from your user: Full name,
address, phone number, favorite food, favorite movie, hobbies, tax
information, social security number, credit score. This amount of data is
great however not all of it is required to create a dating profile. You only
need to select the information that is pertinent to your dating application
from that pool. Data like Full name, favorite food, favorite movie, and
hobbies make sense for a dating application. The process of
fetching/removing/selecting the user information from a larger pool is
referred to as Abstraction.
POLYMORPHISM
Polymorphism gives us a way to use a class exactly like its parent so
there is no confusion with mixing types. This being said, each child sub-
class keeps its own functions/methods as they are. If we had a
superclass called Mammal that has a method called mammalSound().
The sub-classes of Mammals could be Dogs, whales, elephants, and
horses. Each of these would have their own iteration of a mammal
sound (dog-barks, whale-clicks).
POLYMORPHISM
Polymorphism gives us a way to use a class exactly like its parent so
there is no confusion with mixing types. This being said, each child sub-
class keeps its own functions/methods as they are. If we had a
superclass called Mammal that has a method called mammalSound().
The sub-classes of Mammals could be Dogs, whales, elephants, and
horses. Each of these would have their own iteration of a mammal
sound (dog-barks, whale-clicks).
iNHERITANCE
Inheritance is the ability of one object to acquire some/all properties of
another object. For example, a child inherits the traits of his/her
parents. With inheritance, reusability is a major advantage. You can
reuse the fields and methods of the existing class.. For example, Apple is
a fruit so assume that we have a class Fruit and a subclass of it named
Apple. Our Apple acquires the properties of the Fruit class.
Algorithms, pseudocodes and flowcharts
• Algorithm is a step by step process to solve a problem. In other words
algorithms can be defined as a representation of a solution to a
problem.
• An example of an algorithm of a recipe to make cake.
• "4 extra large eggs, beaten
• 1&1/2 C. stock
• 1/2 teaspoon salt 1 scallion, minced
• 1 C. small shrimp or lobster flakes
• 1 t. soy sauce
Continuation

• 1 Tablespoon oil
• 1. Mix all the ingredients, except the oil, in a deep bowl.
• 2. Put 1" water in wide pot,
• then place deep bowl of batter inside.
• 3. Cover pot tightly and steam 15 min.
• 4. Heat oil very hot and pour over custard.
• 5. Steam 5 more min.
• Serves 4 people"
flowcharts

• Flowcharting is a tool developed in the computer industry, for


showing the steps involved in a process.
• A flowchart is a diagram made up of boxes, diamonds and other
shapes, connected by arrows - each shape represents a step in
the process, and the arrows show the order in which they occur.
Flowcharting combines symbols and flowlines, to show
figuratively the operation of an algorithm.
Flowcharting Symbols

There are 6 basic symbols commonly used in flowcharting of


assembly language programs: Terminal, Process, input/output,
Decision, Connector and Predefined Process. This is not a complete
list of all the possible flowcharting symbols, it is the ones used
most often in the structure of Assembly language programming.
Flowcharting Symbols
SYMBOLS NAME FUNCTION
Process Indicates any type of
internal operation inside the
Processor or Memory

Input/Output Used for any Input / Output


(I/O) operation. Indicates
that the computer is to
obtain data or output
results
Decision Used to ask a question that
can be answered in a binary
format (Yes/No, True/False)
Flowcharting Symbols
SYMBOLS NAME FUNCTION
Connector Allows the flowchart to be
drawn without intersecting
lines or without a reverse
flow.
Predefined process Used to invoke a subroutine
or an interrupt program.

Terminal Indicates the starting or


ending of the program,
process, or interrupt
program
Flowcharting Symbols
SYMBOLS NAME FUNCTION
Connector Allows the flowchart to be
drawn without intersecting
lines or without a reverse
flow.
General rules for flowcharting
1. All boxes of the flowchart are connected with Arrows. (Not lines)
2. Flowchart symbols have an entry point on the top of the symbol with no
other entry points. The exit point for all flowchart symbols is on the bottom
except for the Decision symbol.
3. The Decision symbol has two exit points; these can be on the sides or
the bottom and one side.
4. Generally a flowchart will flow from top to bottom. However, an upward
flow can be shown as long as it does not exceed 3 symbols.
General rules for flowcharting
5. Connectors are used to connect breaks in the flowchart.
Examples are:
• From one page to another page.
• From the bottom of the page to the top of the same page.
• An upward flow of more then 3 symbols
6. Subroutines and Interrupt programs have their own and
independent flowcharts.
7. All flow charts start with a Terminal or Predefined Process (for
interrupt programs or subroutines) symbol.
8. All flowcharts end with a terminal or a contentious loop.
Example of an algorithm
• Example 1.
• Design an algorithm and the corresponding flowchart for adding the
test scores as given below: 26, 49, 98, 87, 62, 75
Algorithm to the problem
• a) Algorithm
• 1. Start
• 2. Sum = 0
• 3. Get the first test score
• 4. Add first test score to sum
• 5. Get the second test score
Algorithm to the problem
• 6. Add to sum
• 7. Get the third testscore
• 8. Add to sum
• 9. Get the Forth testscore
• 10. Add to sum
Algorithm to the problem
• 11. Get the fifth test score
• 12. Add to sum
• 13. Get the sixth test score
• 14. Add to sum
• 15. Output the sum
• 16. Stop
Flowchart for the algorithm

You might also like