tags:

views:

1020

answers:

6

How does quality assurance fit into the design phase of software development?

What (if any) quality assurance activities are done in the design phase?

+2  A: 

A good design is a testable design. IMO, one needs to always be thinking of how one would test the software even during the design phase. Of course, the level of attention required would depend on whether you are doing detailed design or a high-level architecture. Using a methodology, such as TDD, will force the focus on the importance of testing during design. Of course, one shouldn't overlook other aspects of QA such as usability testing, performance testing, etc. These too are important factors to consider during design -- both how to achieve your goals and how to evaluate whether the goals are achieved.

tvanfosson
+6  A: 

The most useful thing that QA can do during the design phase is make sure that the supplied spec has a set of clear, testable goals. And use those goals to come up with a test plan.

This is so that they can answer two very important questions "Can this be tested" and "How long will it take to test". The first is important to ensure that everyone knows the criteria fro when a project can be considered completed. And the second is neccesary as it forms a part of the overall cost of implementation.

Jack Ryan
A: 

Quality Assurance does not really fit into the design phase at all. QA is about fixing defects after they occured, something that was common practice in the last millenium. Of course there may be defects in the specification documents produced during desing, but aside from those you have no product yet, therefore no defects to find.

Quality Management on the other hand is the way to go in the 21st century. It is an integrated approach to defect prevention. It is crucial to integrate it into your project from the very beginning, so it definitely must fit into design.

There are thousands of books and webpages about this subject, but IMO the most important things are:

  1. Learn from earlier mistakes. Analyse similar projects and see what were the biggest mistakes made there. Try to avoid them in your project.
  2. After the project is completed, do an after action review to find out what was missed in step 1 above. Use that information on the next similar project.
Treb
This argument doesn't really address the question, "Quality Assurance" and "Quality Management" may be different things, although I'm a bit skeptical about that, but either one would be a "quality policy".
chills42
Well, when I answered the question, the title read 'Quality assurance during design phase', so it does address the original question. And QM and QA *are* different things, and concentrating only on QA is a *huge* mistake. I've done it, got burned...
Treb
+1  A: 

There's rougly an Architectural Design phase and a detailed design phase.

QA activities during these phases may include:

  • Assuring that the architecture supports all the (non)-functional requirements
  • Assuring that all important modules are covered and correctly designed in the detailed designs
  • Assuring that the design documents are under configuration (change) management
  • Doing (formal) reviews to review the architecture and its documentation
  • Assuring that predefined design standards are followed

This is sometimes referred to as 'Software Qualiy Critical Design Reviews'. You can see an example checklist here.

Razzie
A: 

To understand how it fits in your particular development process, you have to consider:

  • The quality of the product is responsibility of the whole team. Each role group must bring their corresponding value to the project (bring help to the project if you feel some skills are missing). Don't have the quality team do activities that are/should be peer reviews i.e. architecture/design reviews.
  • QA isn't the place where you throw away any missing responsibility in the project i.e. project management should care about budget, risks, etc. Its the responsibility of this role to make sure all of those are in place. Beyond that, you use audits+mentoring to help every team member fulfill their roles.
  • QA does contributes to the architecture/design based on their view that it should be testable. They actively consider/plan/design how they will be testing the said architecture/design, which is an important factor to have an effective/successful testing effort.
  • QA contributes to a variety of artifacts, just like the development side do. Always focused on how it relates to the goals they want to achieve.
  • QA needs to prepare to start the test automation right from the start of the development. This also involve an important coordination with the developers and the plan in order to use a development approach that will allow the qa team to continuosly/gradually do the test automation.
  • Just like the development activities are scoped/prioritized, the qa team must do the same. There are so many variations of testing that can be done in a project that it is impossible to actually do it all with complete coverage. This will impact the qa effort in the project, and also can help making it clear what is being left out of scope on the qa team side (other measures might be in place to tackle it from other roles).
  • How/when the activities are done has close relation to the processes and practices used. A simplification would be: if you are involving development activities/effort, there is something meaningful to the qa effort that should be going on as well.
  • Most of the roles and activities in the different methodologies are there to add to different aspects of quality of the project and the relate product(s).
eglasius
A: 

Design phase: A lack of quality in the design process can invalidate good requirements specification and can make correct implementation impossible. Industry practice shows that use of checklist during design helps improve design quality

Have we addressed all the requirements mentioned in the SRS? Has the SRS been put under document control? Have the requirements related to the following features been addressed during the design? Performance, security, concurrency, usability, portability, testability, language/DB/OS/hardware requirements, development environment, compatibility, adherence to industry standards, scalability, exception handling

Is the design methodology chosen appropriate for the type of software project to be developed. Clarity: Is the design documentation clear/unambiguous? Can he design be technically justified Compatibility with existing Software Have the effect of this design on existing software been identified Have we done the impact analysis Does this design rely on the side effects of other software? Does this design have any dependency on any other related design?

Component Level: Are the interfaces well defined? Are the main data structures defined Are the main algorithms defined Is the data/control flow defined Data Structure and Algorithms Are the data structures defined Are the access methods to the data structures defined? Are the algorithms defined? Do the data structures and algorithms solve the problems

Error/Exception Handling Are data type errors handled? Does the software validate user input? Does the software give explicit, non-threatening messages if error occurs? (Quality of error messages). Can the software be restarted from any point after an error? Does the software gracefully handle exception conditions such as access violations and floating point errors.

Procedure Interfaces Does the number of actual parameters match the number for formal parameters? Do the type and size of actual parameters match the type and size of formal parameters? Have we specified the local and global functions correctly? Are global variables defined and used consistently across modules? Is all communication documented (i.e. parameters and shared data)?

Procedure Level Does the procedure do something very similar to an existing procedure? Is there a library procedure that will do the same thing? Is the procedure excessively complex Could the procedure be broken into separate, more logical pieces. Is the procedure of acceptable size?

Does the procedure do only one logical thing? Does the procedure rely on procedure scope static variable? Is the procedure easily maintained and cocrrectly referenced? Can the procedure be easily tested? Are the side-effect described?

Quality Are the goals of design stated (reliability, flexibility, maintainability, performance etc)? Does the design satisfy its stated goals? (Traceability to Requirements) Is there evidence that more than one design option was considered? Are several design options listed along with the reason for their adoption or rejection? Are the design assumptions stated Are the design trade-offs stated Is the design efficient? Is the design maintainable? Is the design portable? Can the design handle changes to the external environment with minimum modifications? Is the design parameter driven or are the values hard coded in the programes.

Requirements Does the design satisfy every requirements? Is there traceability between the design and the system specifications? Can the design meet development cost requirements? Can the be completed in the given time frame? Does the design stay within the requirement memory constraints Does the design stay within the required disk usage constraints Does the design satisfy the response time requirements? Will the design handle the expected rate of transactions? Will the design handle the expected data flow volumes?