Comprehensive Study Guide for Software Quality Assurance
Concepts and Definitions of Software Quality Assurance
Software quality is defined as the degree to which a software product meets established requirements. However, this quality is further dependent upon how accurately those established requirements represent the actual needs, wants, and expectations of the stakeholders.
Software quality assurance (SQA) is a specific set of activities designed to define and assess the adequacy of software processes. Its primary goal is to provide evidence that establishes confidence that the software processes used are appropriate for and capable of producing software products of suitable quality for their intended purposes.
An essential organizational trait of the SQA function is that it may be organizationally independent of the project. This independence ensures that SQA is free from technical, managerial, and financial pressures that might stem from the project itself.
Characterizations of SQA include:
- Integration: SQA is based on the planning and implementation of a series of activities integrated into every stage of the software development process.
- Product Adherence: SQA ensures software development products adhere to specified technical requirements and maintain suitability for the stakeholder's intended use.
- Process Appropriateness: SQA refers to the technical appropriateness of the development process.
An extended definition of SQA incorporates the importance of the quality of software operation, as well as the significant impact that keeping to schedule and budget has on the final software quality product.
Principles of Software Quality Assurance
Customer Focus: Organizations rely on their customers and must understand current and future needs, fulfill requirements, and strive for customer satisfaction. This requires obsessive knowledge of customer needs and delivery methods.
- Example: In 2016, the beauty brand Sephora used technology to create a personalized experience. This included a comprehensive app, a virtual try-on feature for makeup products, and a strong online community to provide a seamless customer experience, recognizing the need to be more customer-focused.
Leadership: Leaders within an organization should create an internal environment where employees are fully involved in achieving quality targets.
- Example: Mark Zuckerberg, one of the world's most successful leaders, attributes part of his success to passion. Zuckerberg prioritizes hiring for passion over skill, as he believes this passion motivates employees across all aspects of their work.
Involvement of People-employees: Involving employees at all levels allows an organization to benefit from their full range of capabilities to promote software quality. Enterprises have recognized that they are dependent on their employees, leading to the creation of departments focused on employee participation.
- Example: The Human Resources (HR) department has evolved from a purely transactional entity focused on administration to a transformational role aimed at ensuring employee involvement.
Process Approach: Managing resources and activities as processes improves efficiency. This involves establishing organization processes that operate as an integrated and complete system.
- Example: Graham Stanley describes the process approach in teaching writing, treating all writing as a creative act that specifically requires time and positive feedback to be executed well.
System Approach to Management: Identifying, understanding, and analyzing interrelated processes as a system helps achieve higher effectiveness.
- Example: A system-oriented manager only makes decisions after identifying the impact those decisions will have on all other departments (such as Finance or HR) and the organization as a whole.
Continual Improvement: A permanent objective for any organization is the continuous improvement of quality and the effectiveness/efficiency of processes. This is an ongoing effort to improve services, products, or processes.
- Example: Annual brainstorming sessions or think tanks bring management together to resolve problems and consistently improve business operations.
Factual Approach to Decision-making: Objective decision-making should be based on data and information to lead to positive actions.
- Example: When hiring a new employee, HR and department heads must have sufficient information about the candidate to determine if their employment will be helpful to the company.
Mutually Beneficial Supplier Relationships: Organizations and their suppliers are interdependent. Relationships based on mutual benefits improve the performance, quality, and efficiency of the organization.
- Decisions should not be made in isolation, as they can impact others in the marketplace and potentially harm the organization.
Software Product Components
A professional software product is more than just "code" or programming language instructions. It includes maintenance services throughout its life cycle, such as user instructions, corrections, adaptations, and improvements.
Software products comprise several components required for operational success:
- Computer Programs (The Codes): Collections of instructions executed by a computer to perform specific applications and tasks.
- Procedures: These define the order and schedule for performing software or project programs. They also include methods for handling common software malfunctions.
- Documentation: Designed to support and instruct new version developers, maintenance staff, and end-users.
- Data Necessary for Operating the Software System (Data): This includes parameters, lists of codes, and standard test data.
Standard test data is specifically used to verify that no undesirable changes occurred in the code or data during maintenance and bug corrections, and to help detect causes of malfunctions.
Software Errors, Faults, and Failures
Software Errors: These are made by software designers or programmers. They can include grammatical errors in code lines or logical errors in implementing specification requirements. Crucially, all software errors are human errors.
Software Faults / Software Defects: These occur when software errors cause improper functioning in a specific application or, rarely, the software in general. Not all errors result in faults; in many cases, erroneous code does not affect functionality.
Software Failures: These are the results of software faults. A fault only becomes a failure when it is "activated," meaning a user attempts to apply the specific faulty section of the software. All software failures have a software error as their root cause.
Causes of Software Errors
Faulty Requirements Definition: This is the root cause of many software errors and is usually prepared by the client. Common issues include:
- Erroneous definition of requirements.
- Lack of essential requirements.
- Incomplete requirements definitions.
- Inclusion of unnecessary requirements.
Client-Developer Communication Failures: Misunderstandings often prevail in early development stages. Specific situations include:
- Poor understanding of client instructions.
- Written or oral changes during the development phase.
- Client lack of attention to developer questions.
- Developer lack of attention to requirements and changes.
Deliberate Deviations from Software Requirements: These occur when a developer interprets a requirement incorrectly or uses their own understanding. Situations include:
- Reusing previous work to save time.
- Omitting required functions to meet budget or time pressures.
- Ignoring minor features that may actually be major.
Logical Design Errors: Errors introduced by system architects, software engineers, or system analysts when formulating requirements into design definitions. Typical errors include:
- Erroneous algorithms.
- Sequencing errors in process definitions.
- Erroneous boundary condition definitions.
- Omission of required system states.
- Illegal operation of the software system.
Coding Errors: Programmer-related errors caused by:
- Misunderstanding design documentation.
- Linguistic errors in programming languages.
- Errors in data selection or processing.
Noncompliance with Documentation and Coding Instructions: While the software quality may initially seem acceptable, noncompliance makes it difficult for future maintenance or development teams to understand the software, leading to a higher rate of future errors.
Shortcomings of the Testing Process: These leave errors undetected or uncorrected. Causes include:
- Incomplete test plans.
- Failure to document or report detected faults and errors.
- Failure to fix errors due to time constraints.
- Incomplete testing of error corrections or incomplete corrections due to negligence.
User Interface and Procedure Errors: These direct the user in input/output, data collection, and processing sequence. Errors here can cause processing failures even if the design and code are error-free.
Documentation Errors: Issues found in design documents, software manuals, user manuals, and "help" displays. Typical errors include:
- Listing non-existent functions.
- Providing meaningless error messages.
- Errors within the documentation of the user manual.