Software Quality - 4 Key facets (From Linked-in)

I have become active in the Linked-in Community, especially regarding predictive analytics, as there are many very good discussion groups.

So, to save effort and still get a couple of hours of sleep, a lot of my posting here will come from there.

The below is not a predictive analytics post, but an answer to question on how to ensure software quality beyond simply meeting the customer requirements that I thought I would share. There are other aspects besides Extensibility, Scalability, Traceability, and Reliability, but these are four pretty good starting pillars.

Software quality assurance requires disciplined software
development, risk management, planning, and ongoing evaluation. Many systems
start out as satisfactory to the users, but are illusions. One analogy is that
you can build a house without a satisfactory foundation and it might be fine at
first until it starts falling down and there is no way to repair it without
rebuilding.

The same thing often happens in software development. Many
times, what is intended as a throw-away solution for demonstration purposes but
lacks the robust architecture needed to support growing the systems are
implemented as production systems due to time or cost deadlines. However, the
cost is paid later.

Quality software should possess the following capabilities

1) The ability to add more stress in terms of users,
transactions, etc. by simply adding more hardware without software changes.
This is known as scalability. Some design approaches cannot scale beyond a
certain level and then fail.

2) The ability to extend functionality without redesigning
the system. This requires careful planning in creating a well-structured
(normalized) database, developing components in a modular way so that they can
be re-used easily, and creating the system in logical layers for presentation,
business rules, data access, etc. This can be thought of as extensibility.

3) Building a testing and documentation framework into the
system rather than as an afterthought (ensuring reliability). Many systems go
into production inadequately tested resulting in far greater cost than if they
had been tested thoroughly. Documentation goes along with this in describing
how the system is expected to operate, what defines success, and the methods
for verifying that the system works effectively.

4) An effective change management system must be used to
track all changes and help with the planning (Traceability). There are some
very good products available to help with this including Microsoft Team
Foundation Server.

A key method for achieving software quality is the use of an
iterative development cycle and test-driven development to regularly create
value for the customer and verify the software is meeting the requirements.
This fosters a framework for continuous improvement. It is usually impossible
to foresee all the requirements for a system and technology continually enables
new functionality, so incremental delivery is the most cost-effective long-term
strategy for not only customer satisfaction but ongoing software quality.

There are more formal definitions of software quality, but
reliability, scalability, extensibility, and traceability are key elements.
There are frameworks and approaches defined to help instill accountability into
the software development process to help achieve software quality including
Capability Maturity Model (CMM), Microsoft Solutions Framework (MSF), and
Agile/Scrum development approaches. The links for these are below: