Share
Embed
計測できるレガシーさを捉え、コード改善に対処する / phperkaigi2023
PHPerKaigi 2023の登壇資料です。
https://phperkaigi.jp/2023/
blue_goheimochi
March 25, 2023
Transcript
60 slides
-
29 • : phpcpd • Copy/Paste Detector (CPD) for PHP
code. • 2023 1 • • Don t Repeat Yourself • -
30 phpcpd 4.1.0 by Sebastian Bergmann. Found 184 clones with
9893 duplicated lines in 142 files: - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528 ~~~~~~~~~~ - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574 ~~~~~~~~~~~ - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines) /app/xxxxxx/controllers/xxxxxx.php:1247-1422 ~~~~~~~~~~ 8.41% duplicated lines out of 112932 total lines of code. Average size of duplication is 54 lines, largest clone has 358 of lines 184 142 9,893 -
31 phpcpd 4.1.0 by Sebastian Bergmann. Found 184 clones with
9893 duplicated lines in 142 files: - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528 ~~~~~~~~~~ - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574 ~~~~~~~~~~~ - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines) /app/xxxxxx/controllers/xxxxxx.php:1247-1422 ~~~~~~~~~~ 8.41% duplicated lines out of 112932 total lines of code. Average size of duplication is 54 lines, largest clone has 358 of lines View -
32 phpcpd 4.1.0 by Sebastian Bergmann. Found 184 clones with
9893 duplicated lines in 142 files: - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528 ~~~~~~~~~~ - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574 ~~~~~~~~~~~ - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines) /app/xxxxxx/controllers/xxxxxx.php:1247-1422 ~~~~~~~~~~ 8.41% duplicated lines out of 112932 total lines of code. Average size of duplication is 54 lines, largest clone has 358 of lines Fat -
33 phpcpd 4.1.0 by Sebastian Bergmann. Found 184 clones with
9893 duplicated lines in 142 files: - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:166-524 (358 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:170-528 ~~~~~~~~~~ - /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:321-561 (240 lines) /app/xxxxxx/xxxxxx/xxxxxx/xxxxxx.php:334-574 ~~~~~~~~~~~ - /app/xxxxxx/controllers/xxxxxx.php:909-1084 (175 lines) /app/xxxxxx/controllers/xxxxxx.php:1247-1422 ~~~~~~~~~~ 8.41% duplicated lines out of 112932 total lines of code. Average size of duplication is 54 lines, largest clone has 358 of lines 112,932 8.41% 54 358 -
34 • : 112,932 • : 8.41% • : 9,893
• : 184 • 規 : 142 -
36 • : terryyin/lizard • Lizard is an extensible Cyclomatic
Complexity Analyzer for many programming languages(PHP Python ) • • • if/else, for, switch • -
38 • : terryyin/lizard • Lizard is an extensible Cyclomatic
Complexity Analyzer for many programming languages(PHP Python ) • • • if/else, for, switch • ========================================================================================= !!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!! ================================================ NLOC CCN token PARAM length location ------------------------------------------------ 247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/zzzzController.php 139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/zzzzController.php 124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/zzzzController.php 81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php 152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php 143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php 150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php 63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php 81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php 110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php 75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php 97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php ========================================================================================== Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt ------------------------------------------------------------------------------------------ 33248 16.3 2.3 104.2 1743 11 0.01 0.05 63 70% -
39 • : terryyin/lizard • Lizard is an extensible Cyclomatic
Complexity Analyzer for many programming languages(PHP Python ) • • • if/else, for, switch • ========================================================================================= !!!! Warnings (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100) !!!! ================================================ NLOC CCN token PARAM length location ------------------------------------------------ 247 63 2436 0 353 aaaaAction@41-393@./xxxxx/controllers/zzzzController.php 139 41 1272 0 202 bbbbAction@625-826@./xxxxx/controllers/zzzzController.php 124 39 1018 0 161 ccccAction@77-237@./xxxxx/controllers/zzzzController.php 81 37 351 1 84 xxxx@840-923@./xxxx/xxxx/Controller/xxxx/Abstract.php 152 37 1086 0 197 xxxxAction@21-217@./xxxx/xxxx/xxxx/xxxxController.php 143 36 1110 0 197 xxxxAction@740-936@./xxxx/xxxx/xxxxController.php 150 35 1516 0 223 xxxxAction@33-255@./xxxx/controllers/xxxxController.php 63 34 741 1 72 xxxx@16-87@./xxxx/xxxx/xxxx/xxxx/xxxx/xxxx.php 81 34 917 0 106 aaaaAction@229-334@./yyyy/controllers/yyyyController.php 110 31 1071 0 143 xxxxAction@20-162@./xxxx/controllers/xxxxController.php 75 30 753 0 108 bbbb@79-186@./xxxx/controllers/yyyyController.php 97 29 926 0 127 ccccAction@609-735@./xxxx/controllers/yyyyController.php ========================================================================================== Total nloc Avg.NLOC AvgCCN Avg.token Fun Cnt Warning cnt Fun Rt nloc Rt ------------------------------------------------------------------------------------------ 33248 16.3 2.3 104.2 1743 11 0.01 0.05 3 -
40 • ( ): 69,946 • CCN: 2.8 • CCN
• :4,518 -
42 • : phpmd unusedcode • • • • •
<?php class Sample { private static $start = 1; private $end = 2; private $piyo = 3; public function addOne() { $item = 1; return $this->piyo++; } private function execute($text) { } } -
43 • : phpmd unusedcode • • • • •
<?php class Sample { private static $start = 1; private $end = 2; private $piyo = 3; public function addOne() { $item = 1; return $this->piyo++; } private function execute($text) { } } -
44 • : phpmd unusedcode • • • • •
FILE: /app/sample.php ---------------------- 5 | VIOLATION | Avoid unused private fields such as '$start'. 6 | VIOLATION | Avoid unused private fields such as '$end'. 11 | VIOLATION | Avoid unused local variables such as '$item'. 15 | VIOLATION | Avoid unused private methods such as 'execute'. 15 | VIOLATION | Avoid unused parameters such as '$text'. -
46 1) sample.php:1 ---------- begin diff ---------- @@ @@ class
Sample { - private static int $start = 1; - private $end = 2; private $piyo = 3; public function addOne() { - $item = 1; return $this->piyo++; - } - - private function execute($text) - { } } ----------- end diff ----------- Rectorの場合 -
47 <?php class Sample { private $piyo = 3; public
function addOne() { return $this->piyo++; } } <?php class Sample { private static $start = 1; private $end = 2; private $piyo = 3; public function addOne() { $item = 1; return $this->piyo++; } private function execute($text) { } } Rectorの場合