Development quality tools and requirements

To ensure the quality of your solutions, follow the OXID eSales code requirements.

Goals

  • Ensure security to avoid

    • our customers’ data integrity being compromised, and sensitive information being exposed
    • lawsuits
    • harm to our credibility and brand
  • Minimize downtimes, bugs and issues to avoid that customers

    • develop mistrust in our product
    • search for more reliable solutions from competitors
  • Improve productivity by writing clean code that

    • avoids the accumulation of technical obstacles
    • does not rely on unstable features of our dependencies

Main requirements

Ensure your solution meets the following requirements: * Your code supports all PHP versions listed for the used OXID eShop version. * You have properly structured your code:

  • Where possible, use dependency injection through constructors instead of direct/static calls to classes.
  • Implement all main functionality as services to be accessed via Dependency Injection (DI).
  • Split services into easy to understand, small testable units.
  • You have thoroughly tested your code.

  • All files use strict_types flag.

  • A Readme file in the root directory of your solution describes:

    • which requirements and compatibilities are to be met
    • how to install your solution for development purposes
    • how to install your solution for production
    • how to run the solution tests and other tools

Reuse requirements

When reusing shop extended classes and shop methods, follow the rules below:

  • Hook to shop events in place of direct extension if possible.
  • To not destroy a module chain, ensure that extended shop/module classes call parent methods.
  • Do not use deprecated methods.
  • When adding new methods, consider prefixing them with your company abbreviation to not conflict with other modules in chain.

For more information about reusing and creating shop modules and themes, see the Developer Documentation.

Code quality requirements

Quality is everyone’s responsibility. High quality is one of the main goals throughout the development process.

Observe the following quality criteria:

  • Your tests cover at least 80% of the functionality.

  • You use the correct test type:

    • Test service units by performing unit tests with PHPUnit.
    • Test the component integration by performing integration tests with PHPUnit in a separate directory.
    • Test the frontend workflow chains by performing acceptance tests using a User Acceptance Test Framework.
  • Your code’s C.R.A.P index is below 30.

  • Your code’s methods cyclomatic complexity is below 10.

  • Your code style meets the PSR-12 standard (for more information, see php-fig.org/psr/psr-12).

Tools requirements

To meet our standards, ensure your solution has easy to run, preconfigured, quality tools as development dependencies.

We strongly recommend using the following ones (or alternatives):

  • PHP_CodeSniffer using PSR-12, to ensure your code is PSR-12-compliant (github.com/squizlabs/PHP_CodeSniffer)

  • PHP Mess Detector (phpmd.org)

  • A static analysis tool, for example one of the following:

    • PHPStan: To ensure your code achieves level 5 or higher
    • Psalm: To ensure your code achieves level 4 or lower

Using nice-to-have tools

OXID eSales recommends the following productivity tools and best practices:

  • Use Sonarcloud as a final report point for psalm issues, code coverage reports, code duplications analysis.
  • Use Github Actions with all required tools integrated and running constantly during development.

Following best practices

  • Ensure that all new code goes through the review process of at least one other team member.
  • Follow Test Driven Development (TDD) principles.
  • Compose meaningful commit messages.
    Good commit messages describe the changes applied in the commit, “ESDEV-1111 Fix the tracking system issue“, for example.