It has been a common pitfall in the software industry to readily define Quality with the attributes of the final Product alone. Our organization, however, recognizes that the Quality of a Product is only as good as the method employed to create it. Thus, for TSPI, Quality Assurance is two-tiered commitment:
at
the Product Level, and
at
the Process Level
The granularity of our attentiveness to quality ranges from the Source Code walk-throughs, to Design Specification reviews, to Post-mortem project analyses. This culture of quality has been imbibed to us after our long business relationships with Japanese clients, whose demand for high quality project deliverables cannot be overemphasized. We even adopted the Japanese principle of “Kaizen” or Continuous Improvement, which has been traditionally practiced in the manufacturing industry.
ENSURING PRODUCT QUALITY
Although all projects have distinct requirements, all members of a project development team in
TSPI share one common goal: to deliver a high-quality software system which satisfies or exceeds the customer’s technical and business requirements in a timely manner. With this end in mind, Quality Assurance is performed during every stage of the software development cycle, to each project deliverable, big or small. Our QA team is not a monolithic group, which is totally separated from the Development team, united only by the project specification. The QA engineer’s involvement starts from as early as the Requirement Analysis phase and even goes as far as the Maintenance phase (please refer to the table below). His work is not limited to testing the source codes written by the development team but to checking all project documentations as well. The mandate of our QA engineer is NOT to prove that there are no more problems in the Software system being developed, but rather, to prove that there are still problems yet to be uncovered, so we must find them before the client does. This basic difference in mindset, results to high quality Test Items, which checks the behavior of the system under various “stressful” conditions.
PROJECT
DEVELOPMENT PHASE |
DEVELOPMENT
|
QUALITY
ASSURANCE TEAM RESPONSIBILITY |
| REQUIREMENT
|
Identify
System Boundaries, major System components,
interaction between these components when
external stimuli is applied to the system.
Define
system throughput requirements.
Identify
major technologies and operating platforms
Prepare
a Requirement Specification document
Review
Requirement Specification together with
the QA team
Prepare
a Project Development Plan
Review
Requirement Specification together with
the client
|
Identify
the attributes of the external components
interacting with the System to be developed
Identify
the “Use Cases” at the System Level
Identify
technologies needed to Test the system
Review
Requirement Specification together with
the Development team
Prepare
a System Test Plan
Review
Requirement Specification together with
the client
|
| BASIC DESIGN |
Define
Overall Architecture of the software system,
identifying all functional blocks and their
interface
Prepare
Basic Design Specification documents for
each functional block
Review
Basic Design Specification documents together
with the QA team
Review
Basic Design Specification together with
the client
|
Identify
the “Use Cases” for each Functional block
Create
Test Items for the “Blackbox” testing of
the whole system
Review
Basic Design Specification documents together
with the Development team
Review
Basic Design Specification together with
the client
|
| DETAILED
DESIGN |
Identify
processes, subroutines, etc. composing each
function block and define the process flow
within each process, subroutine, etc.
Prepare
Detailed Design Specification documents
for each functional block
Review
Basic Design Specification documents together
with the QA team
Review
Detailed Design Specification together with
the client
|
Create
Test Items for the “Whitebox” testing of
each functional block
Develop
tester programs which will automate testing
as much as possible
Review
Detailed Design Specification documents
together with the Development team
Review
Detailed Design Specification together with
the client
|
| CODING |
Write
program code based on the Detailed Design
specification
Review
codes together with the QA team
|
Review
codes submitted by the development team
Create
additional Test Items for the “Whitebox”
testing of each functional block
Develop
tester programs which will automate testing
as much as possible
|
| UNIT TESTING |
Revise
program codes based on the result of Whitebox
Testing
|
Perform
“Whitebox” testing for each functional block
Perform
regression testing everytime revised version
of program code is released
|
|
SYSTEM TESTING |
Revise
program codes based on the result of Blackbox
Testing
|
Perform
“Blackbox” testing for the entire software
system
Perform
regression testing everytime revised version
of program code is released
|
| ACCEPTANCE
TESTING |
Revise
program codes based on the result of Acceptance
Testing
|
Perform
acceptance testing at the client site using
actual client environment
Perform
regression testing everytime revised version
of program code is released
|
| MAINTENANCE |
Perform
revisions requested by the client
|
Perform
regression testing everytime revised version
of program code is released
|
ENSURING PROCESS QUALITY
We pay special attention to detailed documentation of the entire development process, and all project deliverables, including source codes, to make our operations transparent to our client, thereby reducing the possibility of misunderstanding. As much as possible we incorporate internationally accepted standards such as SDL (Specification and Design Language) and UML (Universal Modeling Language) together with our own design methodologies to ensure standardization of workflow processes.
We conduct Post-mortem analysis of all projects completed, and document all our best practices in a centralized Knowledge Base for all engineers to refer to. We conduct regular internal audit not only of the engineering processes but all support areas including HR and Finance.
Our immediate target is to employ Software Capability Maturity Model (CMM) in all areas of our operation.
|