|
|
(13 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
| |
| | |
| ==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 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 72: |
Line 19: |
| [[Category:Tools]] | | [[Category:Tools]] |
| [[Category:Continuous Integration]] | | [[Category:Continuous Integration]] |
| | <references /> |
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.
Program testing can be used to show the presence of bugs, but never to show their absence![1]
- Edsger W. Dijkstra (1970)
See also