CC 106 Application Development and Emerging Technologies Final Module
CC 106 Application Development and Emerging Technologies Final Module
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
ADET 201
What are requirements and its specifications?
Application
• A requirementDevelopment and
is a statement about an intended product that specifies what it should do or
how it should perform.
Emerging Technologies
• Goal: To make as specific, unambiguous, and clear as possible.
• Functional Specifications: What the system should do
• Non-Functional Specifications: what constraints there are on the system its development -
(For example that a work processor runs on different platforms)
What requirements should be gathered?
• Functional: What the product should do.
• Data requirements: Capture the type, volatility, size/amount, persistence, accuracy and
the amounts of the required data.
• Environmental requirements:
• a) context of use
• b) Social environment (eg. Collaboration and coordination)
• c) how good is user support likely to be d) what technologies will it run on
• User Requirements: Capture the characteristics of the intended user group.
• Usability Requirement: Usability goals associated measures for a particular product.
• Interviews tend to be one on one, and elicit only one person’s perspective.
It can be very revealing to get a group of stakeholders together to discuss
issues and requirements.
• Naturalistic Observation
• It can be very difficult for humans to explain what they do or to even
describe accurately how they achieve a task.
• Spend time with stakeholders in their day-to-day tasks, observing work as
it happens
• Procedures and rules are often written down in a manual and these are a
good source of data about the steps involved in an activity and any
regulations governing a task.
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.
• Remember it’s all about the user. Consider always the user inputs. Find out how actual
users complete their tasks and exactly how they get things done – and how they want to
5
get things done. What do they need to do? How efficiently can we make that happen?
And what sorts of flexibility might be required?
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
• Gantt Charts
• Gant charts used in
project planning as
they provide a visual
representation of
tasks that are
scheduled along
with the timelines.
10
• 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.
1. Following the chosen company from previous activity, choose your own requirements
analysis techniques and present it to the class.
11
V. Overview of the Module This module will allow the reader to understand the importance
of research design and testing along with its components and
guidelines
VI. Module Outcomes
As for the outcome of the module, you are about to
• Learn on how to interpret a data
• Learn different ways on how to manage a data.
• Describe the requirements analysis process and
techniques
• Use the correct usability testing method for a software
development
• Distinguish a proper deployment plan based on real-life
scenarios.
Lesson Objectives:
1. Understand the principle of software design
2. Components of software design
3. Importance of software design
13
Getting Started:
• 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.
• Detailed design. Detailed design involves the implementation of what is visible as a
system and its sub-systems in a high-level design. This activity is more detailed towards
modules and their implementations. It defines a logical structure of each module and their
interfaces to communicate with other modules.
14
• This and how it’s done of course depends on project needs. Small projects can easily be
just drawn or written on a single paper while bigger projects usually tend to change a lot
during their lifetime affecting also the software design.
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.
• 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.
15
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
16
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.
Lesson Objectives:
1. Understand the software design levels
2. Understand the taxonomy of architectural styles
17
• 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.
• 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.
• Specification of the ordering and timing relationships between incoming events or
messages, and outgoing events or outputs. Architectural Design
• Architectural design is the specification of the major components of a system, their
responsibilities, properties, interfaces, and the relationships and interactions between
them. In architectural design, the overall structure of the system is chosen, but the internal
details of major components are ignored.
• 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.
• The use of architectural styles is to establish a structure for all the components of the
system.
• Each style will describe a system category that consists of :
• A set of components (eg: a database, computational modules) that will perform a function
required by the system.
19
• The set of connectors will help in coordination, communication, and cooperation between
the components.
• Conditions that how components can be integrated to form the system.
• Semantic models that help the designer to understand the overall properties of the system.
• 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:
• Gross decomposition of the
systems into
major components.
21
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.
• They must also be proficient in particular design strategies (e.g., object-oriented),
programming languages, and methods and processes for software quality control.
• Just as architecture provides the bridge between requirements and design, detailed design
provides the bridge between design and code.
22
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
Lesson Objectives:
1. Understand what is software testing
2. Understand the taxonomy of architectural styles
23
◦ Meets the business and technical requirements that guided it’s design and
development
◦ Works as expected
◦ Can be implemented with the same characteristic.
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.
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.
24
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.
Testing Approaches
White Box Testing: It is also called as Glass Box, Clear Box, Structural Testing.
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.
This testing is usually done at the unit level.
Black Box Testing: It is also called as Behavioral/Specification-Based/Input-Output
Testing.
26
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:
• Test plan
• Traceability matrix
• Test case
• Test script
27
• Test suite
of Software Testing
1. Make a research that apply the SDLC process. Include all process identified on this
module. User fishbone in defining the gaps, techniques on data gathering should
apply only based on the current circumstances that we have.
i. Proposed topic
ii. Rationale
iii. Research Questions
iv. Significance of the Study
1. Explain in your own words, software design give 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? Which do you
this is more feasible in your project?
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
29
• http://www-306.ibm.com/software/awdtools/reqpro/
• http://cs.sru.edu/~mullins/cpsc100book/module02_introduction/
module0203_introduction.html
• http://cs.sru.edu/~mullins/cpsc100book/module02_introduction/
module0203_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