PROG 301: Application Development and Emerging Technologies
PROG 301: Application Development and Emerging Technologies
PROG 301
Application Development and
Emerging Technologies
2
STUDENT
Name:
Student Number:
Program:
Section:
Home Address:
Email Address:
Contact Number:
PROFESSOR
Name:
Academic Department:
Consultation Schedule:
Email Address:
Contact Number:
3
Lesson Objectives:
At the end of this lesson, you will be able to:
1. Define what is a software and its classes
2. Identify the basic principles of a software
3. Identify the software evolution and laws
Getting Started:
Software is more than just a program code. A program is an executable code, which serves
some computational purpose. Software is considered to be collection of executable programming
code, associated libraries and documentations. Software, when made for a specific requirement is
called software product.
Classes of Software
• System software: Helps
run the computer hardware
and computer system itself.
System software includes
operating systems, device
drivers, diagnostic tools and
more. System software is
almost always pre-installed
on your computer.
6
Basic Principles
1. Software, commonly known as programs or apps, consists of all the instructions that tell the
hardware how to perform a task.
2. These instructions come from a software developer in the form that will be accepted by
the platform (operating system + CPU) that they are based on.
3. For example, a program that is designed for the Windows operating system will only work for
that specific operating system. Compatibility of software will vary as the design of the software
and the operating system differ. Software that is designed for Windows XP may experience a
compatibility issue when running under Windows 2000 or NT.
4. Software, in its most general sense, is a set of instructions or programs instructing a computer
to do specific tasks. Software is a generic term used to describe computer programs. Scripts,
applications, programs and a set of instructions are all terms often used to describe software.
7
Software Evolution
The process of developing a software
product using software engineering
principles and methods is referred to
as software evolution. This includes the
initial development of software and its
maintenance and updates, till desired
software product is developed, which
satisfies the expected requirements.
Evolution starts from the requirement
gathering process. After which developers
create a prototype of the intended software
and show it to the users to get their
feedback at the early stage of software
product development. The users suggest
changes, on which several consecutive
updates and maintenance keep on
changing too. This process changes to the
original software, till the desired software is accomplished. Even after the user has desired software
in hand, the advancing technology and the changing requirements force the software product to
change accordingly. Re-creating software from scratch and to go one-on-one with requirement is
not feasible. The only feasible and economical solution is to update the existing software so that it
matches the latest requirements.
Lesson Objectives:
At the end of this lesson, you will be able to:
1. Define the software paradigms
2. Identify the characteristics of a good software
3. Identify examples and use case scenarios
• This Paradigm is known as software engineering paradigms where all the engineering
concepts pertaining to the development of software are applied. It includes various
researches and requirement gathering which helps the software product to build. It
consists of the following
• Requirement gathering
• Software design
• Programming
10
Operational
• This tells us how well software works in operations. It can be measured on:
• Budget - cost
• Usability - the degree of ease with which products such as software and Web
applications can be used to achieve required goals effectively and efficiently.
• Efficiency - is defined as a level of performance that uses the lowest amount of
inputs to create the greatest amount of outputs.
11
Maintenance
This aspect briefs about how well a software has the capabilities to maintain itself in the ever-
changing environment:
• Modularity the extent to which
a software/Web application may be
divided into smaller modules.
• Maintainability - is defined as the
degree to which an application is
understood, repaired, or enhanced.
• Flexibility - it normally refers to the ability for the solution to adapt to possible or
future changes in its requirements.
• Scalability - is the ability of a program to scale
13
Lesson Objectives:
At the end of this lesson, you will be able to:
1. Define what is a Software Development Life Cycle or SDLC
2. Define the steps and procedures in SDLC
3. Provide examples for each steps and procedures in SDLC
4. Define the SDL Models
Steps in SDLC
SDLC Model
Waterfall Model
Waterfall model is the simplest model of software
development paradigm. It says the all the phases of
SDLC will function one after another in linear
manner. That is, when the first phase is finished then
only the second phase will start and so on.
Iterative Model
This model leads the software development process in
iterations. It projects the process of development in
cyclic manner repeating every step after every cycle of
SDLC process.
15
Spiral Model
Spiral model is a combination of both, iterative
model and one of the SDLC model. It can be
seen as if you choose one SDLC model and
combine it with cyclic process (iterative model).
System Implementation
Implementation
Implementation refers to activities that occur before the system is turned over to its users.
Its purpose is to:
Coding
Coding is the process where the physical design specifications developed by the analysis team are
converted into computer codes by the programming team. This can be an involved and intensive
activity that depends on the size and complexity of the system. No matter what development
methodology is used, once the coding has begun, the testing process can begin and proceed in
parallel. With each program module produced, it can be tested individually, then as part of a larger
program, and then as part of a larger system. These different types of testing will be discussed in
the next subsections.
Testing
Even though testing is done during implementation, the planning for testing should start earlier in
the project. Planning covers determining what needs to be tested and collecting test data. Testing
is the process of examining a product to ascertain what defects it contains. To conduct a test,
16
programmers should have already built the software and have in hand well-defined standards for
what composes a defect. The product can be tested through reviewing their construction and
composition or through exercising their function and examining the results. Software testing
usually begins early in the systems development life cycle, although many of the actual testing
activities are carried out during implementation.
Types of Testing
Components can be tested individually or in groups, or the entire system can be tested as a whole.
There are three testing types and these are:
1. Unit testing
2. Integration testing
3. System testing
Each of this type correlated to a specific phase of the SDLC. Unit Testing Sometimes called
module testing, unit testing is the process of testing individual code modules before they are
integrated with other modules. The objective of unit testing is to identify and fix as many errors as
possible before modules are combined into larger software units (such as programs, classes, and
subsystems). Unit testing is often automated but it can also be done manually. Unit testing can be
tedious and time consuming. It requires patience and meticulousness on the part of the
development team. Unit testing should be done with an awareness that it may not be possible to
test a module for every input scenario that will occur when the program is run in a real-world
environment. Once all of the modules in a program have been found to be working in the most
efficient and error-free manner possible, larger components of the program can be assessed by
means of integration testing.
Integration Testing
Combining modules and testing them is called integration testing. The use of this test is to identify
errors that were not or could not be detected by unit testing individual modules. Such errors could
result from several problems, including:
System Testing
In system testing, instead of integrating modules into programs for testing, the programs are
integrated into systems. Not only do individual modules and programs are tested several times in
system testing, but also interfaces between modules and programs. Usually, system testing is
performed first by developers or test personnel to make sure that the system does not fail and meets
the developers’ understanding of user requirements. If a system is developed in several iterations,
system testing is performed mostly at the end of each iteration to identify significant issues such
as performance problems that will need to be dealt with in the next iteration.
Acceptance Testing
After the system tests are complete, the system is now ready for acceptance testing. This is testing
the system in the environment where it will eventually be used. Acceptance means that users
normally sign off on the system and “accept” it once they are satisfied with it. In other words,
acceptance testing is a way for users to verify if the system meets their requirements. Usually,
acceptance testing is the last round of testing before the system is handed over to its users.
1. Alpha testing – user testing of a completed information system using simulated data
2. Beta testing – user testing of a completed information system using real data in the real
user environment
In alpha testing, the whole system is implemented in a test environment to find out whether the
system is openly destructive to itself or to the rest of the environment. There are several types of
tests done during alpha testing and these are as follows:
Recovery testing – forces the software (or environment) to fail in order to verify that
recovery is properly performed
Security testing – verifies that protection mechanisms built into the system will protect it
from improper penetration
Stress testing – tries to break the system
Performance testing – determines how the system performs in the range of possible
environments in which it may be used; often the goal is to have the system perform with
similar response time and other performance measures in each environment
The purpose of beta testing is to ascertain whether the software, documentation, technical support,
and training activities work as planned. Beta testing can be considered as a preparation of the
installation phase. Problems not covered in alpha and beta testing in any of these areas should be
fixed before users can accept the system.
18
Installation
After the new system has been developed and tested, it must be installed and placed into operation.
Installation is the process of moving from the current information system to the new one. There
are many constraints when installing a new system and making it operational. These include cost,
customer relations, employee relations, logistical complexity, and overall exposure to risk. Some
other important issues to consider when planning installation are as follows:
Approaches to Installation
There are different approaches to installation and the most commonly used are:
1. Direct installation
2. Parallel installation
3. Phased installation
Direct Installation
In direct installation, the old system is turned off and the new system is turned on. The figure
below shows the timeline for direct installation.
In direct installation, the users use the new system. Whatever errors found from the new system
will have a direct impact on the users and how they do their jobs. If the new system fails,
considerable delay may occur until the old system can operate again and business transactions are
re-entered to make the database updated.
operated in parallel. Moreover, direct installation requires a complete installation of the whole
system.
If neither of the condition applies, then parallel or phased installation is used to minimize the risk
of system unavailability.
Parallel Installation
In parallel installation, the old system continues to operate along with the new system until the
users and management are satisfied with the performance of the new system and has been
thoroughly tested and determined to be error-free and ready to operate independently. All of the
work done by the old system is performed in parallel by the new system. The time allotted for
parallel operation is often determined ahead and limited to minimize the cost of dual operation.
The figure below illustrates the timeline for parallel installation.
An advantage of parallel installation is its low risk of system failure and the negative consequences
that may result from that failure. If both systems are operated completely, then the old system
serves as a backup for the new system. Any failure in the new system can be mitigated by relying
on the old system.
Phased Installation
In Phased Installation, the new system is installed and brought into operation in a series of steps
or phases. Components or functions are added to the operational system on each phase. The system
is tested in each phase to make sure that it is ready for the next phase. Phased installation can be
20
combined with parallel installation, especially when the new system will take over the operation
of multiple existing systems.
1. Good software can be characterized on three grounds: one is operability which tells us how
well software works in operations. Choose three factors where it can be measured and
discuss it in your own words.
2. Software paradigms are commonly used to develop large software applications. Give an
example where it can be applied and explain its use in that field.
3. What is the importance of continuous evolution in software? Provide an example by citing
well-known applications which have obtained transformation over the years.
1. In your own understanding, what is a software? How is it related to hardware and people
ware?
2. What are the software paradigms and how do they affect software development?
3. Which phase of SDLC is the most critical part? Justify you answer by citing an example.
4. Why is it important for any organization to integrate training and support in their
computing infrastructure?
Rubrics:
22
Lesson Objectives:
1. Understand the principle of requirements gathering and specifications
2. How and what requirements to gather.
3. Define the techniques in requirements gathering
4. Identify the importance of requirements gathering
Requirements Gathering
Requirements Gathering is a
fundamental part of any software
development project. It is the
process of generating a list of
requirements (functional, system,
technical, etc.) from all the
stakeholders (customers, users,
vendors, IT staff) that will be used
as the basis for the formal
definition of what the project is.
Lesson Objectives:
1. Understand the principle of data gathering guidelines
2. Understand the requirements gathering framework
3. Define the techniques in requirements gathering
4. Identify the requirements analysis techniques
traceable, helps to identify business opportunities, and are defined to a facilitate system
design
Requirements Analysis Techniques
• Gantt Charts
• Gant charts used in
project planning as
they provide a visual
representation of tasks
that are scheduled
along with the
timelines. The Gant
charts help to know
what is scheduled to
be completed by
which date. The start
and end dates of all
the tasks in the project can be seen in a single view.
• Gap Analysis
• Gap analysis is a technique
which helps to analyze the gaps
in performance of a software
application to determine
whether the business
requirements are met or not. It
also involves the steps that are
to be taken to ensure that all
the business requirements are
met successfully. Gap denotes
the difference between the
present state and the target state.
Gap analysis is also known as
need analysis, need assessment or need-gap analysis.
32
After understanding the principle of requirements gathering, specifications and data gathering
guidelines, explain how these does affect the business requirements in software development. Give
an example of an existing organization or IT firm and relate how these principles affect the
business operations.
Rubrics:
33
Getting Started:
• Software design is a process to transform
user requirements into some suitable form,
which helps the programmer in software
coding and implementation.
• The design process establishes a plan that takes the user requirements as challenges and
works to identify optimum solutions. The plan should determine the best possible design
for implementing the intended solution.
• High-level design. The high-level design breaks the system’s architectural design into a
less-abstracted view of sub-systems and modules and depicts their interaction with each
other. This high-level design perspective focuses on how the system, along with all its
components, implements in the form of modules. It recognizes the modular structure of
each sub-system and their interaction among one another.
35
Modularity
• Split your software into smaller pieces with maybe maximum of 5–10 interfaces. These
interface “groups” are called software components. Main idea of the software component
is to provide a single purpose for the software that is being developed.
• When you have a modular software, it’s easy to move or even remove things if needed and
even share the design work between multiple developers per software component. Having
modularity also increases maintainability by making it easier to find necessary information
to edit from the right component. It can also be basis for your source code name spacing
or structure as well as isolating the test cases per component.
Maintainability
• With good software design it’s easier to maintain the software. You can spot straight away
from the design how much a bug fix or introduction of a new feature will change the
existing code base.
36
• As good design should also show interactions between software components and their
interfaces, it will also reveal possible effects of changing code in another component that
depends on the one needing the change.
• Working especially with old code bases that do not have any software design can be very
painful and cause many unexpected bugs.
Performance
• Good software design can be used to easily pinpoint performance bottlenecks in your
software — especially if the design is done to the level of that granularity.
• This means the design should tell how your system works internally and how it uses
resources such as threads, database connections and other things that might make a hit to
the performance.
• Sometimes it’s very easy to debug or use some logging functionality to find the bottlenecks
from the source code but sometimes the design can tell it by a single image.
Portability
• By including dependencies to other software modules, such as 3rd party libraries, in to your
design makes the software much easier to port into another environment.
• Having these documented in a single place makes it super easy to discover what needs to
be changed if using another environment or if it can be done at all.
Usability
• Generating a design document for your customers from the software design is a good idea.
It provides them an overview how the software they are about to take into use works.
• You might need to consider if you want to publish only your public interfaces and leave
your internal design out of the document as good design makes it possible to very easily
write the software from scratch.
Trackability
37
• Usually projects have requirements coming from either a customer or from an internal
source. Good design also tracks the requirements and proves on the design level that all
that is required from a piece of software is actually there and that it’s understood correctly.
• This brings even more value to the provided design document as the customers can actually
see what of their requirements are done and where.
• To integrate this with source code, some kind of linking between the design, requirements
and the source code is more than advised.
Deployment
• Design should also provide information what the software deliverables are and where
should they be placed in the deployment.
• This information is very important for your customers as well as integration as they need
to know where to look for your library/executable/whatever your software is about.
• It makes it easier to spot right away if the latest delivery is missing some crucial parts of
the software by simply taking a look at your design.
38
Lesson Objectives:
1. Understand the software design levels
2. Understand the taxonomy of architectural styles
• Interface design is the specification of the interaction between a system and its
environment.
• This phase proceeds at a high level of abstraction with respect to the inner workings of the
system i.e, during interface design, the internal of the systems are completely ignored and
the system is treated as a black box.
• Attention is focused on the dialogue between the target system and the users, devices, and
other systems with which it interacts.
39
• The design problem statement produced during the problem analysis step should identify
the people, other systems, and devices which are collectively called agents.
Interface Design
• Interface design should include the following details:
• Precise description of events in the environment, or messages from agents to which
the system must respond.
• Precise description of the events or messages that the system must produce.
• Specification on the data, and the formats of the data coming into and going out of
the system.
Architectural Design
• Architectural design is the specification of the major components of a system, their
responsibilities, properties, interfaces, and the relationships and interactions between them.
In architectural design, the overall structure of the system is chosen, but the internal details
of major components are ignored.
• The architectural design adds important details ignored during the interface design. Design
of the internals of the major components is ignored until the last phase of the design.
• The architectural design is the highest abstract version of the system. It identifies the
software as a system with many components interacting with each other. At this level, the
designers get the idea of proposed solution domain.
• The software needs the architectural design to represents the design of software. IEEE
defines architectural design as “the process of defining a collection of hardware and
software components and their interfaces to establish the framework for the development
of a computer system.” The software that is built for computer-based systems can exhibit
one of these many architectural styles.
40
• The use of architectural styles is to establish a structure for all the components of the
system.
• Pipes are used to transmit data from one component to the next.
• Each filter will work independently and is designed to take data input of a certain form and
produces data output to the next filter of a specified form. The filters don’t require any
knowledge of the working of neighboring filters.
• If the data flow degenerates into a single line of transforms, then it is termed as batch
sequential. This structure accepts the batch of data and then applies a series of sequential
components to transform it.
Layered architecture
• A number of different layers are
defined with each layer
performing a well-defined set of
operations. Each layer will do
some operations that becomes
closer to machine instruction set
progressively.
Architectural Design
• Issues in architectural design
includes:
• Allocation of functional
responsibilities to
components.
• Component Interfaces
Detailed Design
• Detailed design is closely related to architecture and construction; therefore successful
designers (during detailed design) are required to have or acquire full understanding of the
system’s requirements and architecture.
• Just as architecture provides the bridge between requirements and design, detailed design
provides the bridge between design and code.
43
The major tasks identified for carrying out the detailed design activity include:
1. Understanding the architecture and requirements
2. Creating detailed designs
3. Evaluating detailed designs
4. Documenting software design
5. Monitoring and controlling implementation
44
Lesson Objectives:
1. Understand what is software testing
2. Understand the taxonomy of architectural styles
Let’s break down the basic definition of Software testing into the following parts:
1. Process: Testing is a process rather than a single activity.
2. All Life Cycle Activities: Testing is a process that’s take place throughout the Software
Development Life Cycle (SDLC).
◦ The process of designing tests early in the life cycle can help to prevent
defects from being introduced in the code. Sometimes it’s referred
as “verifying the test basis via the test design”.
◦ The test basis includes documents such as the requirements and design
specifications.
3. Static Testing: It can test and find defects without executing code. Static Testing is done
during verification process. This testing includes reviewing of the documents (including
source code) and static analysis. This is useful and cost effective way of testing.
4. Dynamic Testing: In dynamic testing the software code is executed to demonstrate the
result of running tests. It’s done during validation process.
45
5. Planning: We need to plan as what we want to do. We control the test activities, we report
on testing progress and the status of the software under test.
6. Preparation: We need to choose what testing we will do, by selecting test conditions
and designing test cases.
7. Evaluation: During evaluation we must check the results and evaluate the software under
test and the completion criteria, which helps us to decide whether we have finished testing
and whether the software product has passed the tests.
8. Software products and related work products: Along with the testing of code the testing of
requirement and design specifications and also the related documents like operation, user
and training material is equally important.
During the design phase, if there are issues in design, it may lead to bugs in
future
Testers can miss bugs during testing phase due to human error, lack of time,
insufficient experience etc
Customers may not have the bandwidth to test every feature of the product
and may release the product to their end users which can lead to end users
finding errors in the application
46
An organizations business and reputation depends on the quality of its products and in some
cases even the revenue may be dependent on the sales of software product.
Users may prefer to buy a competing product over a product that has poor quality and this
can result in loss of revenue for the organization. In today’s world, quality is one of the top
priorities for any organization.
Testing Methods
Static Testing: It is also known as Verification in Software Testing. Verification is a static
method of checking documents and files.
Verification is the process, to ensure that whether we are building the product right i.e., to
verify the requirements which we have and to verify whether we are developing the product
accordingly or not.
Validation is a dynamic process of testing the real product. Validation is the process,
whether we are building the right product i.e., to validate the product which we have
developed is right or not.
Testing Approaches
White Box Testing: It is also called as Glass Box, Clear Box, Structural Testing.
47
White Box Testing is based on applications internal code structure. In white-box testing,
an internal perspective of the system, as well as programming skills, are used to design test
cases.
Black Box Testing is a software testing method in which testers evaluate the functionality
of the software under test without looking at the internal code structure.
Grey Box Testing: Grey box is the combination of both White Box and Black Box
Testing.
The tester who works on this type of testing needs to have access to design documents.
This helps to create better test cases in this process.
Testing Levels
Unit Testing: Unit Testing is done to check whether the individual modules of the source
code are working properly. i.e. testing each and every unit of the application separately by
the developer in the developer’s environment.
Integration Testing: Integration Testing is the process of testing the connectivity or data
transfer between a couple of unit tested modules.
It is subdivided into Top-Down Approach, Bottom-Up Approach and Sandwich
Approach (Combination of Top Down and Bottom Up).
System Testing (end to end testing): It’s a black box testing.
Testing the fully integrated application this is also called as end to end scenario testing.
To ensure that the software works in all intended target systems. Verify thorough testing
of every input in the application to check for desired outputs.
Testing of the users experiences with the application
Acceptance Testing: To obtain customer sign-off so that software can be delivered and
payments received.
Testing Artifacts
Some of the test deliverables are as follows:
48
• Test plan
• Traceability matrix
• Test case
• Test script
• Test suite
• Test data or Test Fixture
• Test harness
Principles of Software Testing
Testing shows presence of defects
Exhaustive testing is impossible
Early testing
Defect clustering
Pesticide paradox
Testing is context dependent
Absence of error – fallacy
49
Make a research applying the SDLC process. Include all processes identified on this module. The
user fishbone in defining the gaps and techniques on data gathering should apply only based on
the current circumstances that we have. In doing the output of the research, use the following:
i. Proposed topic
ii. Rationale
iii. Research Questions
iv. Significance of the Study
1. Explain in your own words, what software design is. Give an example on how you can
make a good system design.
2. What is the importance of doing software testing?
3. What are the different testing styles that you can use in your system? What is more
feasible in your project?
Rubrics:
50
SUGGESTED LINKS
Link 1
https://www.youtube.com/watch?v=SS3k1X6r7s0
Link 2
https://www.youtube.com/watch?v=I1RIhmf0IlI
Link 3
https://www.youtube.com/watch?v=bNDlg1h-za0
REFERENCES/ATTRIBUTIONS:
• Chapter 7 from J. Preece, Y. Rogers, H. Sharp: Interaction Design: Beyond Human-Computer
Interaction.
• “Applying Requirements Management with Use Cases,” Roger Oberg (IBM Rational
Software)
• Constance L. Heitmeyer. “Software cost reduction”. In John J. Marciniak, editor,
Encyclopedia of Software Engineering. John Waley & Sons, 2nd edition, 2002
• Alistai Sutcliffe, "Scenario-based requirements analysis." Requirements Engineering Journal,
London, UK, 1998.
• Satzinger, John W., Jackson, Robert B., Burd, Stephen D., (2004), Systems analysis and design
in a changing world (3rd ed.), Course Technology ß Hoffer, Jeffrey A., George, Joey F., Joseph
S., (2005), Modern systems analysis and design (3rd ed.), Upper Saddle River, N.J. : Prentice
Hall
• http://www-306.ibm.com/software/awdtools/reqpro/
• http://cs.sru.edu/~mullins/cpsc100book/module02_introduction/module02-
03_introduction.html
• http://cs.sru.edu/~mullins/cpsc100book/module02_introduction/module02-
03_introduction.html
• https://www.techopedia.com/definition/4356/software
• https://www.bbconsult.co.uk/blog/requirements-gathering
• https://www.tutorialspoint.com/software_engineering/software_engineering_overview