Difference between revisions of "Testing"

From Freephile Wiki
Jump to navigation Jump to search
(reference usage)
(link to the Testing section of Ansible)
 
(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 />

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]