Software Testing

Testing is the process of evaluating a system or its individual components with the intent to find whether it satisfies the specified requirements or not. It consists of executing a system in order to identify any gaps or errors. It can be defined as analyzing a software item to detect the differences between existing and required conditions.

Software Testing Process

Phase 1: test strategy and test plan

It is about describing the scope for testing for a project. The things to be defined in this phase are:

  1. The system to be tested
  2. Main features and functions of the project
  3. Non-functional requirements
  4. Test approach
  5. Key processes to follow
  6. Tools
  7. Documentation
  8. Test environment requirements
  9. Risks and dependencies
  10. Test schedule
  11. Approval workflows
  12. Entry and exit criteria

Phase 2: test design

After having a test strategy and plan, the next step is to create a test suite, which is a collection of test cases that are necessary to validate the system being built, against its original requirements.

Phase 3: test execution

Tests can be executed in many different ways. As a single System Integration Test, as User Acceptance Test phases, as part of Agile sprints, with exploratory tests, or using a test-driven development methodology. An adequate amount of software testing has to be done to ensure the system is relatively bug-free.

Phase 4: test closure

The exit criteria needs to be considered for marking the completion of the test cycle and the project’s readiness for release. Some general exit criteria may be:

  • Requirements coverage testing by 100%
  • Minimum percentage of test cases to be passed
  • All critical defects fixed

A Test Summery and Defects Analysis can be done to provide statistics about the testing process.

Types of Testing

Manual Testing

The tester takes over the role of an end-user and tests the software to identify any unexpected behavior or bug. Some manual testing phases include unit and integration testing, system testing, and user acceptance testing. It also includes exploratory testing.

Automation Testing

The tester writes scripts and uses another software to test the product. Automation Testing is used to re-run the test scenarios that were performed manually, quickly, and repeatedly. It is also used to test the application from load, performance, and stress point of view.

Automation Testing
TutorialsPoint

Levels of Testing

There are two main levels of software testing: Functional and Non-functional Testing.

Functional Testing

The application is tested providing input, then the results are examined to confirm that they conform to the functionality it was intended for. Testing an application for functionality involves five steps:

  1. Determination of the functionality meant to be performed
  2. Creation of test data
  3. Determination of the expected output based on the test data
  4. Writing of test scenarios and execution of test cases
  5. Comparison of expected and actual results

Unit Testing

It is performed by developers on the individual pieces of source code assigned areas. The goal is to isolate each part of the program to show that individual parts are correct in terms of their functionality.

Integration Testing

It is the testing of combined parts of an application. It can be done in two ways: Bottom-up or Top-down.

System Testing

Like its name indicates, it tests the system as a whole. Once all the components are integrated, the application is tested thoroughly to verify it meets the functional specifications. It is tested in an environment that is very close to production.

Regression Testing

It is done to ensure that a change, such as a bug fix, hasn’t resulted in another fault being uncovered in the application.

Acceptance Testing

The QA team has a set of pre-written scenarios and test cases that will be used to test the application to make sure it meets the intended specifications and client’s requirements.

Alpha Testing

Unit testing, integration testing and system testing when combined together is known as alpha testing.

Beta Testing

A sample of the intended audience tests the application. It is also known as pre-release testing.

Non-functional Testing

It involves testing a software from the requirements which are nonfunctional in nature but important nevertheless.

Performance Testing

It is used to identify any bottlenecks or performance issues. It is a testing type in terms of the speed, capacity, stability and scalability aspects of the product.

Load Testing

It is about testing the behavior of a software when applying maximum load in terms of software accessing and manipulating large input data. It identifies the maximum capacity of software and its behavior at peak time.

Stress Testing

It is about testing the behavior of a software under abnormal conditions, like when taking away some resources, in order to identify breaking points.

Other kinds of testing levels are Usability Testing, Security Testing and Portability Testing.

Software Testing Roles

Test Lead/Manager

Responsible for:

  • Defining the testing activities
  • Test planning
  • Check the team has the necessary resources to perform the testing activities
  • Verify testing is going hand in hand with the development at all phases
  • Prepare the status report of testing activities
  • Interactions with customers
  • Updating the project manager about the status of testing activities

Test Engineer / QA Testers

Responsible for:

  • Understanding what needs to be tested
  • Decide how it is going to be tested
  • Inform the test lead about what resources will be required for the testing activities
  • Develop test cases and prioritize testing activities
  • Execute test cases and report defects, defining severity and priority for each defect
  • Carry out regression testing

Software Test Environment Setup

  1. Setup of test server with support of needed applications
  2. Network setup
  3. Test PC setup for running the software product
  4. Provide bug reporting tools
  5. Create test data for testing environment

Test Case Design Techniques

  • Boundary Value Analysis (BVA): based on testing at the boundaries between partitions.
  • Decision Table Based Testing: for every function, a table is created to list down all types of combinations of inputs and its respective outputs.
  • State Transition: the testing team provides both positive and negative input test values to evaluate the system behavior.
  • Error guessing: the test analysts use their experience to guess potential problematic parts of the application and write test cases to expose those errors.

Defect Management Process

A defect management cycle contains 6 stages:

  1. Discovery of defect
  2. Defect categorization
  3. Fixing of defect by developers
  4. Verification by testers
  5. Defect closure
  6. Defect reports
Guru99

References

TutorialsPoint. Software Testing Tutorial. Retrieved from: https://www.tutorialspoint.com/software_testing/index.htm

ReQtest. The A to Z Guide to the Software Testing Process. Retrieved from: https://reqtest.com/testing-blog/the-a-to-z-guide-to-the-software-testing-process/

TutorialsPoint. Software Testing – Types of Testing. Retrieved from: https://www.tutorialspoint.com/software_testing/software_testing_types.htm

TutorialsPoint. Software Testing – Levels. Retrieved from: https://www.tutorialspoint.com/software_testing/software_testing_levels.htm

International Software Test Institute. Software Testing Roles and Responsibilities. Retrieved from: https://www.test-institute.org/Software_Testing_Roles_And_Responsibilities.php

Guru99. Test Environment for Software Testing. Retrieved from: https://www.guru99.com/test-environment-software-testing.html#3

Guru99. Software Testing Techniques with Test Case Design Examples. Retrieved from: https://www.guru99.com/software-testing-techniques.html

Guru99. Defect Management Process in Software Testing (Bug Report Template). Retrieved from: https://www.guru99.com/defect-management-process.html#3

The lord is testing me

Software testing evaluates the functionality of the software product that was developed, making sure it fulfills the requirements established but also is a tool to find defetcs/bugs. the core important characteristics of testing involves security, quality, satisfaction and effectiveness.

Software Testing Process

Testing process can de divided into the following “evolution” points:

  1. Planning:
    • Scope of the test is set.
    • Assess of risks within tests.
    • Impact analysis.
    • List of test resources.
    • Determine the beginning and end of tests.
    • Dates for testing are stablished.
  2. Planning Scenarios:
    • Creeation of expected outputs.
    • Creation of scenarios tests.
    • Previous information is used to design the scenarios
    • Tests scenarios need to be simple and diverse
  3. Environment and data creation:
    • Necessary preparations are done before starting the test.
    • Project installed in environment where it will be tested.
    • Data necessary for the test is ready to be used.
    • The data goes accordance with the scope of the development
  4. Running Scenarios:
    • Test scenarios are perfomed.
    • Time pressure is important on the tests however not indispensable.
  5. Results:
    • Reporting the results of the tests.
    • Use of SS to report errors or any other way

Levels of testing

Types of testing

Testing can be divided in three main branches:

Some types of functional testing :

  • Unit testing
  • Integration testing
  • User acceptance testing
  • Localization
  • Globalization

Some Non-functional testing:

  • Performance
  • Endurance
  • Load
  • Volume
  • Scalability
  • Usability

Some Maintenance testing:

  • Regression
  • Maintenance

Testing Artifacts

Testing artifacts refers to the deliverables to the stakeholders of the project, these are:

  1. Test plan
  2. Test case
  3. Traceability matrix
  4. Test script
  5. Test suite
  6. Release Note
  7. Test data
  8. Test harness

Tools for V&V

What is a version control? Version control is a way to keep a track of the changes in the code so that if something goes wrong, we can make comparisons in different code versions and revert to any previous version that we want. It is very much required where multiple developers are continuously working on /changing the source code.

Tools for Version Control

  1. Git
    Provides strong support for non-linear development.
    Distributed repository model.
    Compatible with existing systems and protocols like HTTP, FTP, ssh.
    Capable of efficiently handling small to large sized projects.
    Cryptographic authentication of history.
    Pluggable merge strategies.
    Toolkit-based design.
    Periodic explicit object packing.
    Garbage accumulates until collected.
  2. Cvs
    Client-server repository model.
    Multiple developers might work on the same project parallel.
    Keeps a historical snapshot of the project.
    Anonymous read access.
    ‘Update’ command to keep local copies up to date.
    Can uphold different branches of a project.
    Excludes symbolic links to avoid a security risk.
    Uses delta compression technique for efficient storage.
  3. SVN
    Client-server repository model. However, SVK permits SVN to have distributed branches.
    Directories are versioned.
    Copying, deleting, moving and renaming operations are also versioned.
    Supports atomic commits.
    Versioned symbolic links.
    Free-form versioned metadata.
    Space efficient binary diff storage.
    Branching is not dependent upon the file size and this is a cheap operation.
    Other features – merge tracking, full MIME support, path-based authorization, file locking, standalone server operation.

Tools for Testing

Top Software Testing Tools that you need to know about | Edureka
  1. Selenium
  2. Watir
  3. Ranorex
  4. HP UFT
  5. Tricentis Tosca

Tools for process administration of V&V

Agile Methodology in Testing Guide: Processes, Best Practices & Tools

If you want to know about more information about tools check this page:

https://vva.msco.mil/default.htm?Ref_Docs/VVTools/default.htm

Software Testing

What is a software testing? It is a good method which uses to check if the developed program fulfil the specification of requirements that the customer wanted and also to ensure that software product is defect free. There are many levels and types of testing.

Testing en un mundo Agile - Adictos al trabajo
  1. Unit Testing
  2. Integration Testing
  3. System Testing
  4. Acceptance Testing

Each one of the test has their own definition, purposes and writing methods, so it is very important to decide which type of testing you are going to use in order to achieve your goals.

Unit testing:

How to take the most out of your Unit Tests | by Joao Sousa | Feedzai  Techblog | Medium

Unit Testing is a term that goes back to ancient times, although it is not very often heard, as the Smalltalk programming language developed under the leadership of Alan Kay in the 70s. Unit testing in computer science; It is the process of testing whether a block of code (usually method) that calls or uses another block is performing its task correctly by separating it from the other block to which it is associated. Unit tests will fail if the task is not performed correctly. What we call units is usually a method or a function.

  • It can be automated and easily operated repeatedly.
  • It should be easily written.
  • Once written, the feature should remain as it is used.
  • Anyone should be able to operate.
  • Its operation should be as easy as pressing a button.
  • It performs checks quickly

Integration testing

The integration testing is testing the operation of two or more slave modules as a group. In short, integration testing; checks the combination of codes that can be tested with unit tests. Unit tests only control the operation of the relevant unit independently of the other units.”

System Testing

System testing (or end-to-end testing [E2E]). Is a complete system testing. When unit tests and integration tests are testing parts of the system, this one is targeting the system as a whole. This testing is performed by QA testers. For example, testing an entire application from login to checkout and making sure emails are delivered. This is done from the user perspective, and shouldn’t be automated with data mocks or fake requests. This type of testing is the most involved and time-consuming. If a bug was discovered during E2E testing, that means something was missing in unit or integration testing.

Acceptance Testing

Acceptance Tests refers to the testing of end-user scenarios. It can also be considered as integration tests but refers to testing a user story.

The purpose of acceptance tests; is to control whether the operations that are necessary for the user group to accept the software as running can be performed. It is used to say, the system cannot perform the operations as expected of it rather than identifying where the system has errors.

Image for post

To learn more about Software Testing visit:

https://medium.com/swlh/software-testing-process-and-levels-of-testing-4274904ce655

Software Review

What is Software Review?

It is a complete process that results in carefully examining a software product, usually undertaken by project personnels, managers, users, customers, or user representatives who inspect the software in order to determine the positive and negative aspects of a program. It assists software engineers in validating the quality, functionality, and other vital features and components of the software, by involving the testing of the software product and ensuring that it meets the requirements stated by the client.

It’s a systematic examination done by one or more individuals who work together to find and resolve errors and defects in the software during the early stages of the Software Development Life Cycle. Software review is used to verify various documents like requirements, system designs, codes, test plans, and test cases. With the assistance of software review, the team can verify whether the software is developed as per the requested requirements or not, and make the necessary changes before its release in the market.

Types of Software Reviews

Peer Review

It is the process of assessing the technical content and quality of the product, usually conducted by the author of the work product along with some other developers. The quality is also checked by other members of the team. It has the following types:

  • Code review: the computer source code is examined in a systematic way.
  • Pair programming: it is a code review where two developers code together at the same platform.
  • Walkthrough: members of the development team are guided through the product by the author and the participants ask questions and make comments about defects.
  • Technical review: a team of qualified individuals examines the software product for its client’s use and identifies technical defects from specifications and standards.
  • Inspection: the reviewers follow a well-defined process to find defects.

Software Management Review

Management reviews identify consistency with and deviations from plans, or adequacies and inadequacies of management procedures. It evaluates the work status. In this section, decisions regarding downstream activities are taken.

Software Audit Review

It is a type of external review in which one or more critics, who are not a part of the development team, organize an independent inspection of the software product and its processes to assess their compliance with stated specifications and standards. This is done by managerial level people.

Review Stages Workflow

Tutorialspoint

Software Design Review

A systematic, comprehensive, and well-documented inspection of design to check whether it meets the specified requirements. Generally, the review process is carried out in three steps, which correspond to the steps involved in the software design process.

First, a preliminary design review is conducted with the customers and users to ensure that the conceptual design (which gives an idea to the user of what the system will look like) satisfies their requirements. Next, a critical design review is conducted with analysts and other developers to check the technical design (which is used by the developers to specify how the system will work) in order to critically evaluate technical merits of the design. Finally, a program design review is conducted with the programmers in order to get feedback before the design is implemented.

ComputerNotes

References

ProfessionalQA (2020).Software Review. Retrieved from: https://professionalqa.com/software-review

GeeksForGeeks (2019). Software Engineering | Software Review. Retrieved from: https://www.geeksforgeeks.org/software-engineering-software-review/

TutorialsPoint. Review. Retrieved from: https://www.tutorialspoint.com/software_testing_dictionary/review.htm

Thakur, D. Software Design Reviews in Software Engineering. ComputerNotes. Retrieved from: https://ecomputernotes.com/software-engineering/softwaredesignreviews#:~:text=Next%2C%20a%20program%20design%20review,before%20the%20design%20is%20implemented.&text=During%20preliminary%20design%20review%2C%20the,as%20the%20non%2Dfunctional%20requirements.

Verification and Validation

Verification

Verification concerns about the correctness of process. Its objective is to determine if the software at a given phase of the development life cycle satisfies the requirements established during previous phases. It attempts to identify faults and errors that could eventually rise to the failure of the product. The question to answer with verification is, are we implementing the software right?

Validation

Validation concerns about the correctness of product. It is the process of evaluating the software at the end of its development to ensure that it is free from failures and it complies with the requirements. Its objective is to make sure that the product actually meets the client’s needs and that the specifications are correct, by verifying that the software works properly for correct inputs and gives error messages for wrong ones. The question to answer with validation is, are we implementing the right software?

Verification ensures that the system complies with an organization’s standards and processes, relying on review and non-executable methods. On the other hand, validation physically ensures that the system operates according to plan by executing its functions through a series of tests that can be observed and evaluated.

V&V in the Software Development Life Cycle

PhasesValidationVerification
RequirementsWork directly with the customer to better understand the requirements, using analysis techniques.Verify that each requirement is unique, has a purpose and origin, and is doable, in scope and testable.
Arquitecture and DesignConsult available prototypes and process designs with the customer to ensure their expectations.Verify the software designs are meeting the non-functional requirements.
ImplementationValidate changing, unclear or incomplete requirements that arise as the software progresses.Start doing unit and integration testing for the code, as well as peer reviews and static code analysis.
TestingBuild the user acceptance test cases and validate them with the customers.Test the requirements and ensure that all test cases have been passed, all functionalities are working fine and there is enough code coverage.
DeploymentMaking sure software is working after installation and configuration.Auditing of the environment, running of smoke tests, and release of the test report.
SupportValidate there are no logical errors or something broken, as well as changes and new requirements.Verify there is no downtime, data issues, and that the logs are clear, as well as that there is nothing broken in integration.

Standard

IEEE 1012-2016 – IEEE Standard for System, Software, and Hardware Verification and Validation

The scope of V&V processes encompasses systems, software, and hardware, and it includes their interfaces. This standard applies to any of them being developed, maintained, or reused. The term software also includes firmware and microcode, and each of the terms system, software, and hardware include documentation. V&V processes include the analysis, evaluation, review, inspection, assessment, and testing of products.

Activities involved in V&V

Verification

  • Inspections
  • Reviews
  • Walkthroughs
  • Desk-checking

Validation

  • Black box testing
  • White box testing
  • Unit testing
  • Integration testing
GeeksForGees, 2019

Relevant documents for Software System V&V

  1. Software Validation Protocol (Validation Plan)
  2. Software Requirements Specification
  3. Network Diagram
  4. Risk Analysis
  5. Compliance Analysis
  6. Design Specification
  7. Verification Protocol (Test Plan)
  8. Test Specifications (Test Cases)
  9. Requirements Traceability Matrix
  10. Final Validation Report

References

Upadhyay, P. (2012). The Role of Verification and Validation in System Development Life Cycle. School of Computers and Electronics, IPS Academy, India. Retrieved from: http://iosrjournals.org/iosr-jce/papers/Vol5-issue1/D0511720.pdf

Sami, M. (2018). Validation and Verification in SDLC. Mohamed Sami Personal website – Software Engineering & Architecture Practices. Retrieved from: https://melsatar.blog/2018/08/06/validation-and-verification-in-sdlc/

IEEE SA (2020). IEEE 1012-2016 – IEEE Standard for System, Software, and Hardware Verification and Validation. Retrieved from: https://standards.ieee.org/standard/1012-2016.html

GeeksForGeeks (2019). Software Engineering | Verification and Validation. Retrieved from: https://www.geeksforgeeks.org/software-engineering-verification-and-validation/

ComplianceOnline (2020). Software Verification and Validation (V&V) Overview and must-have Documents. Retrieved from: https://www.complianceonline.com/resources/software-verification-and-validation-overview-and-must-have-documents.html

Verification and Validation of Software

Verification and Validation can be defined as the process of investigating that a software system satisfies specifications and standards and it fulfills the required purpose. Barry Boehm described verification and validation as the following:

Verification: Are we building the product right?
Validation: Are we building the right product?

Another way of saying this would be that verification involves analysis over the development process of the product and validation confirms this verification process was correct.

Verification is the process of verifying that a software achieves its objective without errors. It is the process to ensure whether the product that is developed is correct or not. Check if the developed product meets the requirements we have. Verification is a static test.

Activities involved in verification:

  1. Inspections
  2. Reviews
  3. Walkthroughs
  4. Desk-checking

Validation:
Validation is the process of checking whether the software product is up to the mark or in other words product has high level requirements. It is the process of checking the validation of product i.e. it checks what we are developing is the right product. it is validation of actual and expected product.
Validation is the Dynamic Testing.

Activities involved in validation:

  1. Black box testing
  2. White box testing
  3. Unit testing
  4. Integration testing

An easy way to wrap this up is to clarify that validation comes after verification and that both processes are of equally importance.

Software Engineering | Verification and Validation. (2019, April 17). GeeksforGeeks. https://www.geeksforgeeks.org/software-engineering-verification-and-validation/

Models and Standards

CMMI

The Capability Maturity Model Integration (CMMI) is a process improvement approach that identifies the weaknesses and strenghts of the processes in place. It is a collection set of best practices that help improve quality and efficiency of the software delivered. It was first developed at Carnegie Mellon University, initially as CMM, a model of matured practices. CMMI was built combining the best components of individual disciplines of CMM. The objectives of CMMI are to produce quality products and services, create value for stockholders, enhance customer satisfaction, increase market share and gain an industry-wide recognition for excellence.

A mature process is one that is well-defined, repeatable, measured, analyzed, improved, and effective. A maturity level is a well-defined evolutionary plateau towards achieving a mature software process. In a Staged Representation approach there are five maturity levels designated by the numbers 1 through 5. This approach uses predefined sets of process areas to define an improvement path for an organization. This improvement paths are described by the maturity levels. It provides a proven sequence of improvements and a pre-defined roadmap for organizational refinement. One can not divert from the sequence of steps.

The five maturity levels are:

1. Initial

Process unpredictable, poorly controlled, and reactive.

2. Managed

Process characterized for projects and is often reactive.

3. Defined

Process characterized for the organization and is proactive.

4. Quantitatively Managed

Process measured and controlled.

5. Optimizing

Focus on continuous process improvement.

In a Continuous Representation approach, there are six capability levels designated by the numbers 0 through 5. In this approach, an organization selects a specific process area and makes improvements based on it. It provides flexibility to choose the processes for improvement and the amount of improvement required. The capability level is a well-defined evolutionary plateau used to characterize improvement relative to an individual process area, consisting of related specific and generic practices for it. The capability levels are cumulative, and they are the following:

  • 0 – Incomplete
  • 1 – Performed
  • 2 – Managed
  • 3 – Defined
  • 4 – Quantitatively Managed
  • 5 – Optimizing

Process Areas

A Process Area is a cluster of related practices in an area that, when implemented collectively, satisfy a set of goals considered important for making significant improvement in such area. They can be grouped into four categories: process management, project management, engineering and support. There are two categories for goals and practices: generic and specific.

TSP/PSP

Personal Software Process

A personal process, designed for individual use, for developing software that includes defined steps, forms and standards. It provides a framework for characterizing and managing your personal work, and to help improve personal performance. It allows you to estimate and plan your work, meet your commitments, understand current performance and be better equipped to improve your capability.

It provides a proven basis for developing and using an industrial-strength personal process, governed by the principle that the key to quality is the individual developer’s skill, commitment, and personal process discipline. As a software professional, one is required to measure, track and analyze their work, learn from their previous performance and incorporate the lessons learned into their personal practices. It is designed to gather and analyze accurate and complete data on your work and use the results to improve personal performance.

PSP Flow

2006 by Carnegie Mellon University, Introduction to PSP and TSP

Team Software Process

Framework that seeks to create a balance between processes, products, and team work. The goal is to integrate independent, high performance teams to plan and register their work, establish goals, and be owners of their plans and processes, as well as accelerate the continous improvement of processes, and provide a guide to managers on how to monitor and motivate its team and help them acquire maximum productivity.

TSP actions

  • Establish precise metrics that permit the measurement between an initial and final state of a team’s project.
  • Define the roles and responsibilities according to the characteristics and objectives of the work to be done.
  • Provides suggestions to solve common problems.
  • Provides a framework and structure of processes to work on projects.
  • Phases that start on each release.

Main Roles in TSP

  • Project leader
  • Development manager
  • Planning manager
  • Quality manager
  • Support manager

The developers can also take one of the roles above.

ISO-15504

It is the international standard named as Software Process Improvement Capability Determination. It is a tool with the objective of proposing and developing a model for the evaluation of software processes. It establishes the requirements for an evaluation of processes and the models of evaluation, spanning the areas of process improvement, capability, and maturity.

Structure

There are 10 parts conforming this norm:

  1. Vocabulary and concepts
  2. Realization of an evaluation
  3. Conducting an evaluation
  4. Guide about the use for the improvement of the process and the determination of its capability
  5. An example of an evaluation model of processes in the life cycle of software
  6. An example of an evaluation of the life cycle of the system
  7. Evaluation of organizational maturity
  8. An example model of evaluation of processes for the management of IT services
  9. Profiles of objective process
  10. Security extension

It extends the Capability levels of the CMM. To position a process in a capability level, it uses the following rating scale, based on the percentage of completed attributes:

  • N, not implemented (0-15%)
  • P, partially implemented (15-50%)
  • L, widely implemented (50-85%)
  • F, completely implemented (> 85%)

MOPROSOFT

It is a model that provides a set of best practices, integrated processes, workflows, roles and products to serve as a framework for companies in the software industry. It is done considering three levels of organization: High Direction, Management, and Operation, containing in each the processes that conform the norm in the following way:

  • High Direction: contains the process of Business Management
  • Management: contains the processes of Process Management, Projects Management, and Resources Management. This last one contains other three sub-processes: Human Resources and Work Environment, Services, and Infrastructure and Organizational Knowledge.
  • Operation: contains the process of Administration of Specific Projects and Development and Maintenance of Software.

IDEAL method

It is an improvement model for the CMMI product suite, serving as a roadmap for initiating, planning, and implementing process improvement actions in this standard. It is named after the five phases required to perform a change initiative : Initiating, Diagnosing, Establishing, Acting, Learning.

Initiating

Lay the groundwork for a successful improvement. Current way of doing business needs to change, and the appropriate resources to do so are allocated.

Diagnosing

Where you are vs where you want to be. Analysis to determine what are the current practices and highlight potential areas of improvement opportunities.

Establishing

Plan how objectives will be reached. Recommendations of the analysis phase are prioritized, and plans are developed to conduct these activities.

Acting

Do the work that was established in the plan. Implement the designed activities.

Learning

Learn from the experience and improve. Collect lessons that can be applied to future rounds of the IDEAL life cycle.

The structure of the cycle is the following:

IDEAL Cycle — Initiating, Diagnosing, Establishing, Acting & Learning
Plays-In-Business (2014). See references.

References

Carnegie Mellon Software Engineering Institute (2006). Personal Software Process for Engineers: Part I. Introduction to PSP and TSP.

EcuRed. Team Software Process. Retrieved from: https://www.ecured.cu/Team_Software_Process

Gerardo Salgado. (2017). MoProSoft: Un modelo para mejorar la calidad del software en México. 2020, November 1, Conogasi.org Retrieved from: http://conogasi.org/articulos/moprosoft-un-modelo-para-mejorar-la-calidad-del-software-en-mexico/

MTarnowski (2014). IDEAL — Initiating, Diagnosing, Establishing, Acting & Learning. Plays-In-Business. Retrieved from: https://www.plays-in-business.com/ideal-initiating-diagnosing-establishing-acting-learning/

NormasISO. ISO/IEC 15504 SPICE. Retrieved from: https://www.normas-iso.com/iso-iec-15504-spice/

TestingWhiz (2012). Capability Maturity Model Integration CMMi In Software Testing. Retrieved from: https://www.testing-whiz.com/blog/capability-maturity-model-integration

TutorialsPoint. SEI CMMI Tutorial. Retrieved from: https://www.tutorialspoint.com/cmmi/index.htm

White, S.K. (2018). What is CMMI? A model for optimizing development processes. CIO. Retrieved from: https://www.cio.com/article/2437864/process-improvement-capability-maturity-model-integration-cmmi-definition-and-solutions.html

Software Quality & clear code

Software quality can be directly linked to how easily it is to maintain it, being able to recognize what a certain part of the code does. This leads us to the importance of writing clear code, not necessarily clever code, just easy to the eyes of any one who reads it for any purpose.

Code should be easy to read

Why would you read another person’s code?

We have to work together as engineers, and collaborate on a piece of
software. Software engineering is the collaboration of software engineers over time.
This collaboration consists of everyone being capable of reading and understanding
your code.

Guiding principles

  • Clarity:
    Readability is line length and variable names, brace position, the hand to hand combat
    of style guides and code review guidelines that regulate the use of whitespace.
    Clarity, on the other hand, is the property of the code on the page, what exactly is
    written and what the code is going to do.
    Clarity is important because all software is written by people to be read by other
    people, being able to make code that can be easily understood by a person comes
    before making sure it can be understood by a machine.
  • Simplicity:
    Complexity is the opposite of simplicity, and it can be defined as not understanding a
    part of the code and how to fix it, just the fear of changing something and breaking the
    whole thing. Complexity turns reliable software into unreliable software, and this
    should be avoided, thus resulting in simplicity.
  • Productivity:
    How much time is spent doing useful work instead of waiting for tools or lost in a
    foreign code-base.