|
|
(11 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
− | Testing is software development. | + | Testing ''is'' software development. Software development is writing code. Testing makes sure the code actually works, so in a nutshell: '''Testing is software development''' :-) |
| | | |
− | Software development is writing code. Testing makes sure the code actually works, so in a nutshell: Testing is software development :-)
| + | One major aspect of testing - especially '''during''' development and the [[Continuous Integration]] process, is [[static analysis]].<blockquote>Program testing can be used to show the presence of bugs, but never to show their absence!<ref>https://en.wikiquote.org/wiki/Edsger_W._Dijkstra</ref> |
| | | |
− | Phan is a static analyzer for PHP. [https://github.com/phan/phan Phan project on GitHub] It will help you write better PHP7 code. You'll need the [https://github.com/nikic/php-ast Abstract Syntax Tree] generated by PHP. You can read a [https://github.com/phan/phan/wiki/Tutorial-for-Analyzing-a-Large-Sloppy-Code-Base tutorial for how to get Phan working in your project]
| + | - Edsger W. Dijkstra (1970)</blockquote> |
| | | |
− | The MediaWiki project uses Phan. See the article [[mw:Continuous_integration/Phan|Continuous_integration/Phan]]
| + | == See also == |
| | | |
− | ==Links==
| + | * [[Software Quality]] |
− | | + | * [[Ansible#Testing|Ansible [Testing]]] |
− | #https://github.com/wikimedia/mediawiki-tools-phan
| |
− | #https://github.com/phan/phan
| |
− | #https://www.mediawiki.org/wiki/Continuous_integration/Entry_points
| |
− | #https://www.mediawiki.org/wiki/Continuous_integration/Phan
| |
− | #https://www.mediawiki.org/wiki/Best_practices_for_extensions#File_structure
| |
− | #https://github.com/nikic/php-ast
| |
− | #https://github.com/phan/phan/blob/v5/internal/CLI-HELP.md
| |
− | | |
− | ==Static Analysis of MediaWiki==
| |
− | For some current analysis see https://doc.wikimedia.org/mediawiki-core/master/phpmetrics/complexity.html
| |
− | | |
− | The on-wiki documentation and even the upstream projects do not exactly provide a usable guide for '''MediaWiki extension''' developers to actually use Phan. If you download MediaWiki and composer update (to get dev dependencies) and also install PHP-AST, then you should be able to run composer phan or ./vendor/bin/phan -p . But, that analyzes the entire MediaWiki codebase, and does '''not''' analyze your extension (unless you specifically add a proper .phan/config.php file to your extension).
| |
− | | |
− | [[Mark Hershberger]] provides a good example of what that might look like in his CommentStreams configuration<syntaxhighlight lang="php">
| |
− | <?php
| |
− | $cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
| |
− | $extensions = [ "Echo", "SocialProfile" ];
| |
− | // Assume this extension exists in a directory with a bunch of other extensions that may, or may not be, $IP/extensions
| |
− | $extDir = realpath( __DIR__ . "/../.." );
| |
− | $dirList = array_filter(
| |
− | array_map( fn ( $dir ): string => "$extDir/$dir", $extensions ),
| |
− | fn ( $dir ): bool => is_dir( $dir )
| |
− | );
| |
− | $cfg['directory_list'] = array_merge( $cfg['directory_list'] ?? [], $dirList );
| |
− | $cfg['exclude_analysis_directory_list'] = array_merge(
| |
− | $cfg['exclude_analysis_directory_list'] ?? [], $dirList
| |
− | );
| |
− | $cfg['suppress_issue_types'][] = 'PhanUndeclaredConstant';
| |
− | return $cfg;
| |
− | </syntaxhighlight>the more traditional form of that<ref>https://codesearch.wmcloud.org/things/?q=exclude_analysis_directory_list&files=.phan%2Fconfig.php&excludeFiles=&repos=</ref> is<syntaxhighlight lang="php">
| |
− | $cfg = require __DIR__ . '/../vendor/mediawiki/mediawiki-phan-config/src/config.php';
| |
− | | |
− | $cfg['directory_list'] = array_merge(
| |
− | $cfg['directory_list'],
| |
− | [
| |
− | '../../extensions/Echo',
| |
− | '../../extensions/SocialProfile',
| |
− | ]
| |
− | );
| |
− | $cfg['exclude_analysis_directory_list'] = array_merge(
| |
− | $cfg['exclude_analysis_directory_list'],
| |
− | [
| |
− | '../../extensions/Echo',
| |
− | '../../extensions/SocialProfile',
| |
− | ]
| |
− | );
| |
− | | |
− | return $cfg;
| |
− | </syntaxhighlight>
| |
− | | |
− | ==PHPStan==
| |
− | https://phpstan.org/
| |
− | | |
− | ==Psalm==
| |
− | https://psalm.dev/
| |
| | | |
| + | <br /> |
| [[Category:Wiki]] | | [[Category:Wiki]] |
| [[Category:MediaWiki]] | | [[Category:MediaWiki]] |
Line 73: |
Line 19: |
| [[Category:Tools]] | | [[Category:Tools]] |
| [[Category:Continuous Integration]] | | [[Category:Continuous Integration]] |
| + | <references /> |