Abstract
Software engineering process and practices paramount the crisis of cost, quality, and schedule constraints in developing software products. This chapter surveys the quality improvement techniques for the two fundamental artifacts of software product development, namely the architecture design and the source code. The information from top level research databases are compiled and an overall picture of quality enhancement in current software trends during the design, development, and maintenance phases are presented. This helps both the software developers and the quality analysts to gain understanding of the current state of the art for quality improvement of design and source code and the usage of various practices. The results indicate the need for more realistic, precise, automated technique for architectural quality analysis. The complex nature of the current software products requires the system developed to be beyond robust and resilient and building intelligent software that is anti-fragile and self-adaptive is favored. Innovative proposals that reduce the cost and time are invited.
TopIntroduction
Software Engineering has emerged legitimately in developing high quality software products right from its inception. The discipline of Software Engineering evolved over the past 70 years shaping its key activities providing a framework to the stakeholders to structure, plan, develop and control the software development process. The origin of software engineering dates back to 1950s, where the initial crisis was productivity and now it has evolved to quality. Software quality assessment and improvement is a vast area of research and many techniques and processes are proposed for quality improvement in various stages of the software life cycle. Any quality assurance technique strives to achieve zero errors post release. In spite of all these constant and effective techniques, there are still some failures in the software that makes the software difficult to survive. Irrespective of the type of software and the technology used in development, all software products face the challenges in incorporating high quality within the cost and time constraints. There are multiple definitions of Quality such as conformance to requirements, satisfying customer needs, achieving zero defects, etc. Software applications are becoming more complex day by day and it is difficult to maintain code quality that make the Quality-Cost balance a challenging task.
The study reported in this work will lay a foundation of quality needs and various strategies available that the stakeholders may select to build high quality software products considering the design architectures and the source code. It is mandatory to evaluate a software quality and the quality assessment has to be performed in parallel with the software development. Every industry is now computerized and is used in critical areas where quality becomes a key factor to ensure successful business and human safety. Software is becoming more and more complex and it is mandatory to select, apply and evaluate relevant techniques and processes to keep the risks low. Evaluation has to be done in order to understand a software product. Understanding involves testing of software whether it is easy to use, hard to modify, can be integrated with other programs, etc.
There exists a vast set of literature that discuss about software quality. They focus on a specific phase of a software development or adhere to certain techniques and tools. This work in contrast to the existing literature reviews; the quality aspects taking the two major artifacts of the software development are studied. They are the Architectural Design and the Source Code. All the Software Engineering principles, process models, quality frameworks, testing tools and techniques are aimed in fulfilling the user requirements and thus achieved desired quality. Even though the software development process generates different artifacts at different phases, all that is used to increase the quality of the developed source code. The quality of the source code is directly related to the design choices made during the analysis and the design phase. Hence, in contrast to the existing literature focusing of a particular phase or an artifact, this work discusses the quality improvement methods available for evaluating the design documents and the source code of an Object Oriented Software System.
Any software irrespective of the type, size, and technology goes through a series of phases as described in the life cycle models. There are five basic phases for the software development process. They are Planning & Analysis, Design, Development, Testing and Maintenance. The planning and analysis phase is involved in studying the scope of the project, understanding the requirements, planning the deliverables, cost estimates, etc. The design phase builds the architecture of the project and the development phase is where the actual product is coded and built. The testing phases assess the software for bugs next to which the software progresses to the maintenance phase. During maintenance, the software is maintained and upgraded from time to time for any changes. The quality activity of the software starts at the very early stages of planning where the deliverables and the quality control activities are finalized. Every artifact produced during the software development goes through a quality check process.
Key Terms in this Chapter
Scenario-Based Evaluation: A method of assessment, where the software components are checked against a sequence of operation of the functional requirements.
Software Structural Characteristics: Structural characteristics represent the blue print of software components and their relationships and hierarchy to satisfy the design goals. The position of critical components and their connection are important in achieving the quality requirements.
Software Ageing: The degradation in the performance or failure of operation of the software due to continuously running and depleting the operating system resources. Software Rejuvenation is a proactive method proposed as a solution for ageing software.
Fault Injection: It is a testing mechanism in which a fault is deliberated introduced in order to test the error handling functionality of the software to ensure its robustness.
Multi-Objective Optimization: Optimization problems arrive at a solution that best satisfies a goal. Multiple such goals need to be simultaneously satisfied for the class of Multi-Objective Optimization problems.
Code Smells: The locations in source code where modifications can be made to improve the overall quality. These locations need not contain a bug but, improvement may prevent the bug in near future.
Non-Functional Requirement: The quality requirements that needs to be incorporated in order to achieve customer satisfaction. They are usually not specified as a part of requirements specification, but are essential for success of project.