Как проверить все ошибки в приложении Perl-CGI (например, проверить с помощью компилятора Perl или инструмента, похожего на lint, бесплатный opensource?) - PullRequest
1 голос
/ 29 июня 2011

У меня есть критически важное серверное приложение Perl-CGI, которое мне нужно время от времени расширять или улучшать.

Существует ли инструмент, который будет проверять все пути выполнения приложения, то есть все Perl-файлы, все функции, все возможности if-else, switch-case и т. Д.

Будучи интерпретируемым языком, ошибки, вносимые во время изменения кода, не всегда становятся очевидными. Вас могут ввести в заблуждение, если кто-то думает, что все в порядке, если после внесения изменений программа Perl работает нормально после выполнения некоторых тестов для проверки.

Комплексный набор тестов может быть решением, но он всегда будет индивидуальным для программы и требует дополнительного времени для реализации, когда времени мало.

Скорее, я думаю, что эффективный инструмент будет универсальным для «комплексного» упражнения / разбора / независимо от каждого пути выполнения, например. проверяя необъявленные переменные, меняйте имена функций / подпрограмм, например, из-за рефакторинга и т. д.

У меня есть ActiveState Komodo IDE, которая хорошо справляется с обнаружением ошибок, но, будучи коммерческим инструментом, я не всегда смогу использовать его во всех средах, в которых я работаю. Поэтому я бы предпочел что-то бесплатное и с открытым исходным кодом.

Обновление

Спасибо @Nylon Smile за Perl :: Critic - ответ ниже - у меня не было стандартного в моей настройке Perl, поэтому пришлось использовать cpan, чтобы попытаться установить его, конечно:)

Я вижу много успехов в подробном процессе установки (см. Ниже), но также и несколько сбоев :(, а также «Выключение установки для Perl-Critic-1.116», которая выглядит не очень хорошо :(

Это не редкость, когда я пытаюсь установить или обновить модули Perl. У меня CentOS 5.

У меня складывается впечатление, что поддержание, конфигурирование, обновление Perl - это довольно грязное дело, ненадежное, сложное дело, вероятно, с "но вы не сделали" и "если вы" относительно того, что вы должны сделать, чтобы заставить это работать :) 1023 *

[root]# cpanm Perl::Critic
--> Working on Perl::Critic
Fetching http://search.cpan.org/CPAN/authors/id/E/EL/ELLIOTJS/Perl-Critic-1.116.tar.gz ... OK
Configuring Perl-Critic-1.116 ... OK
==> Found dependencies: PPI, B::Keywords, PPI::Document, List::MoreUtils, PPIx::Utilities::Statement, PPI::Token::Whitespace,        PPI::Node, Pod::Spell, PPI::Token::Quote::Single, Perl::Tidy, String::Format, PPI::Document::File, Task::Weaken, Module::Plugg       able, IO::String, version, PPIx::Utilities::Node, Readonly, Exporter, Exception::Class, PPIx::Regexp, Config::Tiny, Email::Add       ress, Test::Deep
--> Working on PPI
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/PPI-1.215.tar.gz ... OK
Configuring PPI-1.215 ... OK
==> Found dependencies: File::Remove, Test::Object, Storable, Test::NoWarnings, Params::Util, Test::SubCalls, Task::Weaken, Li       st::MoreUtils, IO::String, Clone, Class::Inspector
--> Working on File::Remove
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/File-Remove-1.49.tar.gz ... OK
Configuring File-Remove-1.49 ... OK
==> Found dependencies: File::Spec, Cwd
--> Working on File::Spec
Fetching http://search.cpan.org/CPAN/authors/id/S/SM/SMUELLER/PathTools-3.33.tar.gz ... OK
Configuring PathTools-3.33 ... OK
Building and testing PathTools-3.33 ... FAIL
! Installing File::Spec failed. See /root/.cpanm/build.log for details.
! Bailing out the installation for File-Remove-1.49. Retry with --prompt or --force.
--> Working on Test::Object
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Test-Object-0.07.tar.gz ... OK
Configuring Test-Object-0.07 ... OK
Building and testing Test-Object-0.07 ... OK
Successfully installed Test-Object-0.07
--> Working on Storable
Fetching http://search.cpan.org/CPAN/authors/id/A/AM/AMS/Storable-2.25.tar.gz ... OK
Configuring Storable-2.25 ... OK
Building and testing Storable-2.25 ... FAIL
! Installing Storable failed. See /root/.cpanm/build.log for details.
--> Working on Test::NoWarnings
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Test-NoWarnings-1.02.tar.gz ... OK
Configuring Test-NoWarnings-1.02 ... OK
==> Found dependencies: Test::Tester
--> Working on Test::Tester
Fetching http://search.cpan.org/CPAN/authors/id/F/FD/FDALY/Test-Tester-0.107.tar.gz ... OK
Configuring Test-Tester-0.107 ... OK
Building and testing Test-Tester-0.107 ... OK
Successfully installed Test-Tester-0.107
Building and testing Test-NoWarnings-1.02 ... OK
Successfully installed Test-NoWarnings-1.02
--> Working on Params::Util
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Params-Util-1.04.tar.gz ... OK
Configuring Params-Util-1.04 ... OK
Building and testing Params-Util-1.04 ... OK
Successfully installed Params-Util-1.04
--> Working on Test::SubCalls
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Test-SubCalls-1.09.tar.gz ... OK
Configuring Test-SubCalls-1.09 ... OK
==> Found dependencies: Hook::LexWrap
--> Working on Hook::LexWrap
Fetching http://search.cpan.org/CPAN/authors/id/C/CH/CHORNY/Hook-LexWrap-0.24.tar.gz ... OK
Configuring Hook-LexWrap-0.24 ... OK
Building and testing Hook-LexWrap-0.24 ... OK
Successfully installed Hook-LexWrap-0.24
Building and testing Test-SubCalls-1.09 ... OK
Successfully installed Test-SubCalls-1.09
--> Working on Task::Weaken
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Task-Weaken-1.04.tar.gz ... OK
Configuring Task-Weaken-1.04 ... OK
Building and testing Task-Weaken-1.04 ... OK
Successfully installed Task-Weaken-1.04
--> Working on List::MoreUtils
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/List-MoreUtils-0.32.tar.gz ... OK
Configuring List-MoreUtils-0.32 ... OK
Building and testing List-MoreUtils-0.32 ... FAIL
! Installing List::MoreUtils failed. See /root/.cpanm/build.log for details.
--> Working on IO::String
Fetching http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/IO-String-1.08.tar.gz ... OK
Configuring IO-String-1.08 ... OK
Building and testing IO-String-1.08 ... OK
Successfully installed IO-String-1.08
--> Working on Clone
Fetching http://search.cpan.org/CPAN/authors/id/R/RD/RDF/Clone-0.31.tar.gz ... OK
Configuring Clone-0.31 ... OK
Building and testing Clone-0.31 ... FAIL
! Installing Clone failed. See /root/.cpanm/build.log for details.
--> Working on Class::Inspector
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Class-Inspector-1.25.tar.gz ... OK
Configuring Class-Inspector-1.25 ... OK
Building and testing Class-Inspector-1.25 ... OK
Successfully installed Class-Inspector-1.25
! Bailing out the installation for PPI-1.215. Retry with --prompt or --force.
--> Working on B::Keywords
Fetching http://search.cpan.org/CPAN/authors/id/F/FL/FLORA/B-Keywords-1.10.tar.gz ... OK
Configuring B-Keywords-1.10 ... OK
Building and testing B-Keywords-1.10 ... OK
Successfully installed B-Keywords-1.10
--> Working on PPIx::Utilities::Statement
Fetching http://search.cpan.org/CPAN/authors/id/E/EL/ELLIOTJS/PPIx-Utilities-1.001000.tar.gz ... OK
Configuring PPIx-Utilities-1.001000 ... OK
==> Found dependencies: PPI, Readonly, Exception::Class, PPI::Document::Fragment, PPI::Dumper, PPI::Document, Test::Deep
--> Working on Readonly
Fetching http://search.cpan.org/CPAN/authors/id/R/RO/ROODE/Readonly-1.03.tar.gz ... OK
Configuring Readonly-1.03 ... OK
Building and testing Readonly-1.03 ... OK
Successfully installed Readonly-1.03
--> Working on Exception::Class
Fetching http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Exception-Class-1.32.tar.gz ... OK
Configuring Exception-Class-1.32 ... OK
==> Found dependencies: Devel::StackTrace, Class::Data::Inheritable
--> Working on Devel::StackTrace
Fetching http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Devel-StackTrace-1.27.tar.gz ... OK
Configuring Devel-StackTrace-1.27 ... OK
Building and testing Devel-StackTrace-1.27 ... OK
Successfully installed Devel-StackTrace-1.27
--> Working on Class::Data::Inheritable
Fetching http://search.cpan.org/CPAN/authors/id/T/TM/TMTM/Class-Data-Inheritable-0.08.tar.gz ... OK
Configuring Class-Data-Inheritable-0.08 ... OK
Building and testing Class-Data-Inheritable-0.08 ... OK
Successfully installed Class-Data-Inheritable-0.08
Building and testing Exception-Class-1.32 ... OK
Successfully installed Exception-Class-1.32
--> Working on Test::Deep
Fetching http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Test-Deep-0.108.tar.gz ... OK
Configuring Test-Deep-0.108 ... OK
Building and testing Test-Deep-0.108 ... OK
Successfully installed Test-Deep-0.108
Building and testing PPIx-Utilities-1.001000 ... FAIL
! Installing PPIx::Utilities::Statement failed. See /root/.cpanm/build.log for details.
--> Working on Pod::Spell
Fetching http://search.cpan.org/CPAN/authors/id/S/SB/SBURKE/Pod-Spell-1.01.tar.gz ... OK
Configuring Pod-Spell-1.01 ... OK
Building and testing Pod-Spell-1.01 ... OK
Successfully installed Pod-Spell-1.01
--> Working on Perl::Tidy
Fetching http://search.cpan.org/CPAN/authors/id/S/SH/SHANCOCK/Perl-Tidy-20101217.tar.gz ... OK
Configuring Perl-Tidy-20101217 ... OK
Building and testing Perl-Tidy-20101217 ... OK
Successfully installed Perl-Tidy-20101217
--> Working on String::Format
Fetching http://search.cpan.org/CPAN/authors/id/D/DA/DARREN/String-Format-1.16.tar.gz ... OK
Configuring String-Format-1.16 ... OK
Building and testing String-Format-1.16 ... OK
Successfully installed String-Format-1.16
--> Working on Module::Pluggable
Fetching http://search.cpan.org/CPAN/authors/id/S/SI/SIMONW/Module-Pluggable-3.9.tar.gz ... OK
Configuring Module-Pluggable-3.9 ... OK
Building and testing Module-Pluggable-3.9 ... OK
Successfully installed Module-Pluggable-3.9
--> Working on version
Fetching http://search.cpan.org/CPAN/authors/id/J/JP/JPEACOCK/version-0.91.tar.gz ... OK
Configuring version-0.91 ... OK
Building and testing version-0.91 ... OK
Successfully installed version-0.91
--> Working on Exporter
Fetching http://search.cpan.org/CPAN/authors/id/F/FE/FERREIRA/Exporter-5.63.tar.gz ... OK
Configuring Exporter-5.63 ... OK
Building and testing Exporter-5.63 ... OK
Successfully installed Exporter-5.63 (upgraded from 5.58)
--> Working on PPIx::Regexp
Fetching http://search.cpan.org/CPAN/authors/id/W/WY/WYANT/PPIx-Regexp-0.020.tar.gz ... OK
Configuring PPIx-Regexp-0.020 ... OK
==> Found dependencies: PPI::Document, List::MoreUtils
Building and testing PPIx-Regexp-0.020 ... FAIL
! Installing PPIx::Regexp failed. See /root/.cpanm/build.log for details.
--> Working on Config::Tiny
Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Config-Tiny-2.14.tar.gz ... OK
Configuring Config-Tiny-2.14 ... OK
Building and testing Config-Tiny-2.14 ... OK
Successfully installed Config-Tiny-2.14
--> Working on Email::Address
Fetching http://search.cpan.org/CPAN/authors/id/R/RJ/RJBS/Email-Address-1.892.tar.gz ... OK
Configuring Email-Address-1.892 ... OK
Building and testing Email-Address-1.892 ... OK
Successfully installed Email-Address-1.892
! Bailing out the installation for Perl-Critic-1.116. Retry with --prompt or --force.
23 distributions installed
[root]#

Обновление 2

Существует компилятор Perl to C, поэтому, вероятно, для этого потребуется изучить все пути выполнения для создания кода на C, или, по крайней мере, если нет, ошибочный код на C мог бы быть пропущен через C-компилятор, который уловил бы проблемы :

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

Perl :: Critic ( perlcritic.com ) выполнит часть работы за вас. Модуль выполняет статический анализ вашего исходного кода. Он основан на книге "Perl Best Practices" и найдет некоторые ошибки и даст вам множество советов по стилю со ссылкой на номер страницы книги.

2 голосов
/ 29 июня 2011

Думаю, вы получите максимальный эффект, если сначала улучшите дизайн.

Вы можете использовать максимально возможную защиту, например:

  • Кодируйте как можно более статически, чтобы взаимодействовать с такими инструментами, как Perl :: Critic и компилятором. Это позволяет обнаруживать ошибки во время компиляции.

  • В книгах ' Perl Best Practices ' и ' Perl Hacks ' (оба из O'Reilly) есть некоторые приемы для перемещения частей кода от проверки во время выполнения к проверке во время компиляции .

Если вы не можете избежать динамически генерируемого кода, ничто не заменит хороший набор тестов. Я предпочитаю некоторые ручные тесты в сочетании с автоматически сгенерированными тестами из Test :: LectroTest . Devel :: Cover поможет вам почувствовать ваше тестовое покрытие.

Я не знаю ни одного инструмента, подобного тому, который вы просите, но время работы такого инструмента может быть легко неприемлемым. Комбинаторика всех возможных путей кода часто слишком сложна для практического применения.

1 голос
/ 29 июня 2011
  • Если вы еще не используете его (я полагаю, что вы используете, но просто проверяете), use strict; use warnings; найдет для вас много ошибок, особенно тех, которые могут бытьнебрежное редактирование, хотя оно не выполняет никакого анализа пути кода.

  • Для части пути кода я не знаю ничего, что автоматически генерирует тесты для всех путей выполнения, но Devel :: Cover предоставит метрики покрытия кода, чтобы определить, нет ли в написанных вами тестах каких-либо путей выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...