|
It is an unfortunate fact
that, world-wide, half of all I.T. projects fail in
some respect. Some do not meet the business' deadlines,
others go over-budget , or don't meet the requirements
of the end-user and so are never used. Up to 30% of
those projects that are commissioned are in fact never
completed.
Bit-Simple Ltd. has never been involved with a failed
project, and we attribute our success in this field
to our robust development process. Our process is built
on the cornerstones of, auditability, peer review, repeatability,
rigorous software assisted testing run at regular intervals.
We also pride ourselves on flexibility and being willing
to accommodate to each customer's needs.
The the process we describe below implies
a single delivery of software at the end of the project.
In fact many projects don't work like that. We are equally
at home delivering systems on a feature driven basis,
where we hand over valuable features at the earliest possible
opportunity for your business to use. We can then add
to those features on a regular basis according to your
needs and respond flexibly to new or changing requirements.
In this situation steps 6 to 16 below may actually occur
many times over the course of a project.
Our process has the following major stages after our customers first contact us.
1. Requirements Gathering.
2. Requirements Analysis
3. Estimation
4. Project Planning
5. Quote
6. High Level Design and Test Plan
7. Component Design and Test Plan
8. Unit Design and Test Plan
9. Unit Development
10. Unit Test
11. Component Test
12. System Test
13. Acceptance Test
14. Handover
15. Training
16. Post Delivery Support
Each of these steps is closely guided
by written standards and practices that ensure nothing is omitted and that our work always conforms to the highest quality.
Requirements Gathering
This stage is where we find out what our
customer wants. We read the information they have sent us, we ask questions, we learn about their business needs
and how this system will fit in. We understand that our customers are experts in their own field and that to provide
the solution they want we must listen and ask questions
Requirements Analysis
Of course now you have told us what you
want, you will naturally want to know how long it will take and how
much it will cost. It is vitally important for your business
and ours that these figures are accurate. The purpose
of this stage is for us to determine with some accuracy
what we will have to do to delivery your project. The
possible structure of the finished software and what risks
and unknowns exist in the system's delivery. This is a
team activity normally involving several senior designers,
depending on the size the project.
Project Plan
To give an accurate delivery date or accurate
cost we need to consider the customer's deadlines, we
must plan how the work would be distributed amongst a team
of engineers and how many staff are needed. We consider
skills needed at different times in the project. Production
of different items including designs and test plans. We
perform a risk analysis of factors which could contribute
to any mode of project failure and we plan specific actions
to manage risks and mitigate the impact should they
occur.
We analyse the scope of unknowns within the project and
plan early investigations to resolve them consider various delivery models and discuss these with
the customer.Possible delivery strategies include phased delivery, or feature driven
development.
Quote
We can now provide a definitive cost quote
and a project plan for delivery. We are able to back up
these figures with our analysis of the project and demonstrate
that our estimate is reasoned and practical, and in doing
so give our customers early confidence in the completion
of the project.
In some cases we may work on a time and materials basis
if the project is open ended or relies on deliveries from other parties.
We also consider risk-sharing arrangements on a case-by-case basis.
High Level Design
High level design is performed internally
for all systems. For very large or very novel systems
we may perform an architectural design as a prelude to
this, but in many cases we can deploy standard software
architectures, that we are very familiar with. High level
design allows us to perform peer review on the senior
designers intentions. It allows us to sub divide later
work between teams of designers or implementers, by defining
the functional areas of the system and the interfaces
between them. Other outputs from this phase may include
message specifications, persistent data specifications,
shared memory specifications etc. although an individual
project may choose to document these in the corresponding
component design phases.
Component Design
Systems with components developed by different
teams will develop component designs, showing the units
of functionality within the component, the interfaces
between units and their responsibilities. We also design
the tests that will demonstrate the correct working of
the component.
Unit Design
On critical or large projects designs will
be produced for each unit of functionality allowing peer
review at the lowest level. In addition a test plan is
specified to demonstrate that the unit behaves correctly.
The exact definition of a unit will depend on the language
and technology in use.
Unit Test
Unit testing is performed by writing reusable
suites of automated tests to exercise the unit of functionality
in the manner proposed by the test plan. Unit testing
normally has strict code coverage requirements to ensure
that the software has been sufficiently tested.
Component Test
After the basic units of code have been
verified we put them together and verify the major components
of the application. Once again we write automated tests
to show that the components meet their design, and later
we run these tests regularly to show nothing has broken.
System Test
Where we put the monster we have created together and see if it sits up. System testing normally
involves writing automated suites of high level tests, but may have a manual element in some cases.
Acceptance Test
At the beginning a customer asked us to
make some software. During acceptance testing we demonstrate
what we have and show that it meets each of their requirements.
Handover
At this stage the customer takes over the
system we have made. We provide support and assistance
with installation, configuration.
Training
We can provide many forms of training,
including documentation, remote assistance and user support.
Post Delivery Support
After delivery we provide a warranty period,
for faults. We also provide a user support service which
may be extended on a subscription basis.
|