Difference between revisions of "Testing"

From Freephile Wiki
Jump to navigation Jump to search
(→‎Links: link to CLI help)
(link to the Testing section of Ansible)
 
(12 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 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 />

Latest revision as of 11:35, 26 February 2024

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[edit | edit source]