Testing and QA On Development Stack With Agile Methodologies
Testing and QA On Development Stack With Agile Methodologies
Lets discuss briefly what is the problem with traditional waterfall development methodology? The biggest disadvantage is it assumes that every
requirement are identified before any coding and design occurs, involving
Test Design phases:
1. Identify test conditions and test cases.
2. Design test cases.
3. Test strategies.
4. Risk evaluation.
5. Incident management.
By disintegrating waterfall model into smaller and shorter interations, we
are capable of react flexibly and gradually as user requirements are clarified
as we develop.
Agile software development methodology is all about releasing new
functionalities in smaller cycles based on small and highly efficient team(s)
which are self-organized. A sprint can be considered as a cycle or iteration,
usually takes 1 to 6 weeks. Each sprint has its task, after a sprint have
been design, its invulnerable, meaning that task can not be thrown or
added during a sprint. A sprint involves all the software development steps
1
system where all the automated tests runs on every commit, notify
resposible people if there is any failure, break, error.
Opensource your software components will increase risk
Opensource is a wonderfull fenomena, but one of its drawback is
quality. Many people are working on the same code-base. These
developers are taking measures to implement their tests first then write
their code using TDD to increase code coverage, however they test
are usually stuck at unit level, defects commonly occur at component
level. How to prevent this?
We may conclude that to achieve a well-tested and high quality software we must know the capabilities of our development stack, other tools
supporting QA described in the following sections.
The term is quite familiar with developers, however problems and quality
aspects become vital when your are working with more than two people. Therefore, you must get familiar with the building blocks of your
development stack. We will particularly take a closer look at web-based
development stacks based on MVC architecture.
Unlike programming and development methodologies, to get familiar
with a development stack is quite a challange. It could be complex, difficult
to setup, with long learning curve. Lets take a look at each building block
or component individually:
2.1
Server-side language
There are many web-frameworks based on both object oriented and scripting languages. Among object oriented languages JAVA is the most wellknown and used. The reason is fairly simple, because the language itself
follow clearly stated standards and technologies, not to mention many big
companies like Google, Oracle have committed themselves with it like Playframework or Oracle JEE and lets not forget Spring-framework. However,
in order to develop a web application in Java may take some time and lot
of efforts, which is not affordable in some cases, hence web-frameworks
based script languages are more suitable for startup solutions and prototype
applications like Ruby on Rails, eg.: Twitter was originally written in Ruby
on Rails, later ported to JVM. There are some interesting developments
going on mixing the flexibility of scripting languages with JVM architecture
like Groovy or design a new functional language like Scala. The above
2.2
Database engine
2.3
3.1
3.2
For example:
Feature: Addition
In order to avoid silly mistakes
I want to be told the sum of two numbers
Scenario: Add two numbers
Given I have entered 50
And I have entered 20
When execute Addition
Then the result should be 70
A step definition code is needed, for example:
Given I have entered (.*) do |n|
adder = Adder.new
adder.push(n.to_i)
end
execute Addition do
adder.execute
end
Its your choice which you method do you prefer. Tests itself does not
improve our code as well as tests does not find bugs for you. However a
developer uses TDD, must think, before coding. A developer must think,
how a function, a class, a module and a component should work, what side
affects (state transformations) will it make and so on. All these thoughts are
implemented in test cases. TDD is a safety belt for your software.
Mock-Objects
Mock objects are simply simulated objects, simulating the behavior of real
objects in a controlled manner. Mock objects are created by developers to
test certain behaviors of an object. When do we need them:
1. Slow runs.
2. Difficult to produce.
3. Producing non-deterministic results.
4. Does not yet exists.
5. Intended only for testing purposes.
Continous Integration
A continous integration system (CI) are systems that build, test software
automatically and generate report. They can run slow, data-intensive tests
or verification of proper performance test on different platforms. Users are
getting immediate feedback of current or previous status and stages of the
software.
The primary advantage of using a CI system from QA aspects is immediate feedback on any defect. Both developer team and testing team can
react to this, localizing the source of that defect is fairly simple, because on
the report, we know, which modules test case(s) have been broken. Also
metrics are generated from automated testing like:
1. code coverage
2. code complexity
3. feature completeness
Continous integration itself does not give you quality at all. The core of
a good continous integration system is the work-flow that developer team
has set-up for themselves. A good layout of code repository is also very
important, for example product owners request the current version of the
software is quite simple: we take the latest stable version of the software
and deliver it, however when product owners wants a version with certain
set of features included under-development and bug-fixed functionalities,
we may have a hard time to produce it, CI is useless if the repository layout
is not configured properly.
Conclusion
Despite the knowledge of software testing and QA there are many other
methodologies, architectures, techniques and tools we must get familiar
with especially in a rapidly changing world of Agile development. Testing
and QA questions and answers on a development stack itself is crucial
to fullfill a good quality software. QA engineers, disciplined team and
management is required.
7