Qafoo GmbH - passion for software quality ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :Author: Tobias Schlitt :Date: Wed, 01 Dec 2010 10:37:26 +0100 :Revision: 34 :Copyright: All rights reserved ============================== Your softwares quality matters ============================== .. contents:: Contents :depth: 2 Raising and continuously monitoring the quality of software allows you to improve the Return On Investment, to reduce the time to market and to increase customer satisfaction for your software product. No matter if you develop for company internal use only, on a customer basis or standard software. .. image:: /images/whitepaper/stairways_to_quality.png :width: 500 :height: 225 :alt: Stairways to quality :align: center ------------ Introduction ------------ Quality impacts various areas of your company's software development projects. In following, we give a summary on which areas of your projects will suffer from a significant improvement by taking care for software quality. Business goals ============== Quality assurance processes enable your team to continuously measure and increase software quality and therefore to raise your softwares reliability, stability and usability. You will pay less for endless bug fixing sessions, warranty issues and project mis-planning. Align to your development processes to business critical values: Streamlined planning and more efficient development will increase your return on investment. Earlier stability and less bugs will lower the time to market and raise customer satisfaction. Project management ================== Highly automated quality assessment tools — like software metrics, automated testing and continuous integration — give you a sound indicator for project success. Ease your project management and secure your project plan by the use of quality assurance processes, supported by market leading tools. Identify issues before they become critical and especially before your customer takes notice or your project plan breaks. Constantly monitor your projects hot spots and adjust your efforts to the important pieces of your software. Paying attention to software quality makes your project management reliable, measurable and efficient. Developer motivation ==================== Increase the motivation and creativity of your development crew by enabling them to produce high quality software and to assess this benefit. Use state of the art software development methods like test driven development, which have proved to increase software quality dramatically while reducing development time and hassle. Apply cutting edge technology the secure way and experience how following quality standards and process releases pressure and increases efficiency of your project team. Taking care for software quality speeds up development and brings back the fun into coding. --------------- Quality aspects --------------- Software quality can be seen from different points of view. It is important to notice, that all of these view points essentially influence each other. Most importantly: Common notions of technical software quality have high impact on your projects business goals. .. image:: /images/whitepaper/quality_attributes.png :width: 292 :height: 525 :alt: Quality assurance influence :align: right :class: outstanding High level quality ================== Business goals of your software development projects — like customer satisfaction, return on investment (ROI) and time to market (TTM) — are business economical notions of software quality. These are highly influenced by technical software quality aspects: The usability and responsiveness of an application influences customer satisfaction significantly and therefore also the ROI. Stability and robustness have influences there, too, but also interfere with TTM — getting software stable and robust is essential for coming onto the market. The maintainability and extensibility of your software describe, how easy and fast defects can be repaired and new features can be realized. Both of these quality aspects influence how well your project team can reach stability and robustness and how costly it will be to maintain these properties during subsequent project cycles. Time to market and return on investment for feature additions and bug fixes are essentially impacted by these properties, but also the customer satisfaction. Low level quality ================= Depending on how modular software is designed and developed, sub-teams can work on dedicated parts without interfering each other. But impacts to other quality aspects are also evident: Modularization results in clear interface definitions and decoupling of software components. This raises maintainability and extensibility, as well as stability and robustness. Reusable software components allow your development team to decrease the time to market for new products significantly. In addition, components which are frequently re-used become less error prone, i.e. stable and robust. Good documentation increases the reusability of software components, but also has direct influence to maintainability and extensibility. Testability is an important factor for how easy software can be tested in an automatic way. Automatic unit, integration, system and front-end test allow you to assess correct functionality and absence of once fixed bugs easily and continuously. Test automation reduces the time a project team needs to spend and therefore the time to market. Beside that, automated testing is less error prone and allows to asses correct functionality of software at any time. It is also proved that software which is written with testability in mind becomes also more modular, re-usable, extensible and maintainable. ------------------- Influencing quality ------------------- In order to influence software quality aspects, it is most important to measure these in the first place: Only what is measurable can be influenced. .. note:: Contact us for an `individual training`__ on software quality aspects and quality assurance. __ /services/training.html Measuring ========= Software quality can be measured on different levels and to different degrees: The business goals of customer satisfaction, return on investment and time to market can be measured in a business economical way. Usability and responsiveness can be assessed through the customer directly or by dedicated usability laboratory tests. To measure technical aspects of software quality, like maintainability and extensibility, a variety of software metrics exits. For example, the maintainability index <> is such a metric, which can be computed automatically, in order to give project management a sound quality indicator. Other low level quality aspects can be assessed automatically, even in greater detail, by computing complexity metrics — for example cyclomatic complexity or code rank — and through automatic code attribute checks, like consistent code style and documentation. Furthermore, automated unit, integration and front-end testing can give sound impressions on stability and robustness. It is however important to note, that sound knowledge on high-quality software design and development are still irreplaceable in a project team. Influencing =========== Software quality can be increased on various areas of what we call the software quality life cycle. It is important to take all steps in the software development project into account, when attempting to increase software quality. .. image:: /images/whitepaper/quality_life_cycle.png :width: 292 :height: 209 :alt: Quality life cycle :align: left Understanding the requirements of your customers is essential for producing high-quality software. In addition, the ability to define a well-suited architecture and software design are skills that no development project must miss. A development team must be trained these arts, so that alignment of internal and external views on a software product can take place. Establishing processes for documenting requirements analysis, software architecture and design, as well as a far reaching review process for these, avoid crucial risks from scratch. Loose coupling of software components and modules, development in direction of reusability and testability and a sound realization of software design are skills every developer needs to have in order to produce high quality software. Under these circumstances, the conflation of implementation, testing and integration of software can happen. Quality methodologies like unit and integration testing, measuring of software metrics and assessment of quality aspects help a team to constantly watch and increase software quality. Concepts like continuous integration and following development processes like test driven development (TDD), code review and pair programming allow your project team to straightly align itself to high-quality software development. Of course, a high degree of automation rounds off the software quality life cycle, together with the constant tracking of issues and problems, in order to explicit duties in direction of software quality. ------- Effects ------- Having presented a round up on software quality aspects, how these can be measured and influenced, we return to the effects of software quality to your software development projects. .. image:: /images/whitepaper/cost_to_fix.png :width: 417 :height: 225 :alt: Cost per fix in different project statges :align: center Business goals ============== Watching and influencing software quality helps you reaching your business goals: Quality aspects like stability, maintainability, extensibility, modularity and reusability have direct impact to customer satisfaction. Furthermore, ensuring these aspects to be honored allows you to increase the return on investment of your software by saving costs for issue fixing and through decreasing investments. Continuous quality assurance has proved to reduce time to market, while delivering better software products. Project management ================== Continuous integration on basis of various software metrics and automatic testing give your project management sound indicators for the state of software quality in a project. Particular definition and documentation of requirements, software architecture and design, as well as tracking of issues and tasks allows your team to assess the success of the project. Both factors give project management essential tools to react on upcoming issues in good time and to avoid many of them up front. Management of software projects is greatly eased through the overall application of software quality assurance. Developer motivation ==================== Constant fixing of issues, peeved customers and overtime greatly reduce a developers motivation and creativity. Software quality assurance allows to to abolish these issues. On that basis, your crew becomes more productive and effective, which again supports your business goals. Software quality assurance greatly helps to reach this state and countless projects have shown that developer satisfaction is increased. ---------- Investment ---------- .. note:: Let Qafoo experts `assist you with the migration`__ to high quality PHP software. __ /services/consulting.html Reaching software quality is a sustainable investment. The Qafoo experts can assist you efficiently with reaching this goal. We will analyze your existing development processes, provide detailed recommendations for adjustments and establishment of new process. Our quality experts can guide you through the complete change in direction of high-quality software development, to ensure a smooth and rapid migration phase. We also train your crew in multifarious areas of software quality aspects, fully adjusted to your individual needs. Various case studies, e.g. by IBM, have shown that changes in direction of software quality — like the migration to a test driven development approach —, do not result in significant run-time increase, even for the spin-off project. Instead, project run-times are reduced, especially for subsequent projects. Please contact us, in order to `discuss your individual migration plan`__ in direction of high quality PHP software. __ /contact.html .. Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79