Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2017.10.22;
Скачать: [xml.tar.bz2];

Вниз

FixInsight for Delphi   Найти похожие ветки 

 
Kerk ©   (2014-10-06 19:55) [0]

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

Встречайте FixInsight: http://sourceoddity.com/fixinsight/

FixInsight - статический анализатор, позволяющий находить потенциально проблемные места в коде на Delphi. Больше информации и скриншоты есть по ссылке.

Например, вот такой нездоровый код, когда некто оставил пустым блок except будет найден автоматически:

      try
        DoWork;
      except
      end;


Что сэкономит кому-то немного времени :)

Полный список отслеживаемых ситуаций можно посмотреть вот тут http://sourceoddity.com/fixinsight/doc.html#rules

Бета версия, не все совершенно. Но это только начало :)


 
Kerk ©   (2014-10-06 19:56) [1]

Первые отзывы есть вот тут
http://plus.google.com/107032218922460039706/posts/9CNAy6cTLR1


 
silver ©   (2014-10-06 20:04) [2]

как и говорил - давно пора :-)


 
Дмитрий С ©   (2014-10-06 20:39) [3]

Привет. Пустой finally опасен тем, что в нем забыли что-то написать ?

Object "Foo" created in TRY block
Я раньше часто так делал. Даже писал на мастерах об этом как то. По-моему ничего криминального


 
silver ©   (2014-10-06 21:13) [4]


> Привет. Пустой finally опасен тем, что в нем забыли что-
> то написать ?

опасен, создал - удали


> Object "Foo" created in TRY blockЯ раньше часто так делал.
>  Даже писал на мастерах об этом как то. По-моему ничего
> криминального

почти та же причина
в этом блоке выбросит ктонить исключение - объект останется неудаленным


 
Дмитрий Белькевич ©   (2014-10-06 23:20) [5]

Спасибо. Есть польза от статических анализаторов, нашел несколько неточностей.

Использую еще вот такое:

http://www.peganza.com/#PAL

читал про такой для плюсов:

http://www.viva64.com/ru/d/

в качестве затравок для будущих идей.

из пеганзы хотелось бы довольно легко реализуемые:

"const s string" вместо "s string" в параметрах функций
то же самое для открытых массивов

если бы в анализе format кроме числа переменных был тип - было бы супер! бывают там ошибки из-за сменившихся типов переменных.


 
RWolf ©   (2014-10-06 23:34) [6]


> silver ©   (06.10.14 21:13) [4]
> > Пустой finally опасен тем, что в нем забыли что-то написать ?
> опасен, создал - удали

Сильное утверждение. Всё равно, что сказать «if без else опасен».
Нередко попадаются операции, которые кидают бесполезные в контексте задачи исключения.


 
DVM ©   (2014-10-06 23:37) [7]


> Kerk ©   (06.10.14 19:55) 


> Но это только начало :)

надо идеи начинать собирать


> Дмитрий Белькевич ©   (06.10.14 23:20) [5]


> если бы в анализе format кроме числа переменных был тип
> - было бы супер!

Но функция Format сама же интерпретирует свою строку, это не часть языка.


 
DVM ©   (2014-10-06 23:41) [8]


> RWolf ©   (06.10.14 23:34) [6]
>


> Нередко попадаются операции, которые кидают бесполезные
> в контексте задачи исключения.

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


 
Kerk ©   (2014-10-06 23:56) [9]


> Дмитрий Белькевич ©   (06.10.14 23:20) [5]
> DVM ©   (06.10.14 23:37) [7]

Да, идеи активно ищутся :)
Не все пока можно реализовать, но многое вполне в рамках возможного.


 
Юрий Зотов ©   (2014-10-07 01:21) [10]

ИМХО.

Для начинающих - полезно. Для профи - вряд ли, потому что таких очевидных ляп они уже практически не делают.

Тем не менее, впечатление хорошее.


 
Германн ©   (2014-10-07 01:24) [11]


> Kerk ©   (06.10.14 19:55)
>
> Я наконец довел тот проект, которым занимался в последние
> месяцы, до состояния, когда его можно показать публике.
>
> Встречайте FixInsight

А почему поддерживаемые версии Дельфи начинаются с Д2010?


 
Германн ©   (2014-10-07 01:32) [12]


>  silver ©   (06.10.14 21:13) [4]
>
> > Object "Foo" created in TRY blockЯ раньше часто так делал.
>
> >  Даже писал на мастерах об этом как то. По-моему ничего
> > криминального
>
> почти та же причина
> в этом блоке выбросит ктонить исключение - объект останется
> неудаленным

Угу. Почти та же причина, но с точностью до наоборот. Возникнет исключение в конструкторе - объект не будет создан. А что тогда пытаемся удалить в finally?


 
Kerk ©   (2014-10-07 01:46) [13]


> Юрий Зотов ©   (07.10.14 01:21) [10]

Отвечу своей имхой :)
Это всем полезно, потому что никто не совершенен. Тем более когда в проекте много людей. А так как работает оно автоматически и довольно быстро, то даже если хотя бы иногда будет что-то находить, то уже хорошо и полезно.

Вот возьмем простой пример:

if Abc then;
 raise Exception.Create("abc");


Это даже не ошибка. Просто опечатка - палец скользнул. Глазами тут проблему найти не так уж легко, а анализатор легко справится. Уже справляется.

Таких маленьких примеров я много могу приводить.

>  Германн ©   (07.10.14 01:24) [11]
> А почему поддерживаемые версии Дельфи начинаются с Д2010?

В D2010-XE7 пакет компилируется без изменений. В 2009 не компилируется. У меня пока времени не было разобраться, чего она от меня хочет. Но так вообще принципиальных ограничений нет.


 
Германн ©   (2014-10-07 01:54) [14]


> В 2009 не компилируется. У меня пока времени не было разобраться,
>  чего она от меня хочет. Но так вообще принципиальных ограничений
> нет.

Я вообще-то имел в виду Д2007. Последнюю неюникодную, но в то же время "первую" Rad Studio.


 
Kerk ©   (2014-10-07 01:57) [15]

Ответ тот же самый :)
У меня в планах поддержка всех версий, начиная с 2006. Но что успел, то успел :)


 
Юрий Зотов ©   (2014-10-07 02:10) [16]

> Kerk ©   (07.10.14 01:46) [13]
>
> if Abc then;
>  raise Exception.Create("abc");


Пример неудачный, поскольку:

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

2. Последующий код будет отмечен компилятором, как недостижимый, причем даже и без тестирования. И если мы придерживаемся профессионального стиля кодинга "варнингов быть не должно", то не увидеть этот единственный варнинг тоже может разве что слепой.

PS
Возможно, есть и более сложные примеры. Но в материале по ссылке я таких не нашел. Там ошибки именно уровня начинающих - чем и было обусловлено мое ИМХО.


 
Юрий Зотов ©   (2014-10-07 02:20) [17]

Кстати, а комментарии учитываются? Будет ли поймано вот такое:
// if Abc then;
raise Exception.Create("abc");


Или вот такое:
// if Abc then;
// raise Exception.Create("abc");


 
Kerk ©   (2014-10-07 02:21) [18]

Юрий Зотов ©   (07.10.14 02:10) [16]

> Последующий код будет отмечен компилятором, как недостижимый,
>  причем даже и без тестирования.

Не будет. Delphi так не умеет. А вот FixInsight умеет.
Думаю, одного только этого аргумента достаточно.

Разговоры про начинающих-заканчивающих считаю неконструктивными. Все люди ошибаются, бывают невнимательными, у всех есть коллеги разной степени оригинальности. Идеальных людей я пока только в интернете на форумах видел :)

Но имхо есть имхо. Это нормально.


 
Kerk ©   (2014-10-07 02:22) [19]


> Юрий Зотов ©   (07.10.14 02:20) [17]
>
> Кстати, а комментарии учитываются?

Конечно учитываются :)


 
Kerk ©   (2014-10-07 02:24) [20]

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


 
Юрий Зотов ©   (2014-10-07 02:32) [21]

> Kerk ©

Setup я не скачивал - просто пока что он мне ни к чему, а потом будет видно. Скажи, а реализована эта штука в виде вращиваемого в среду препроцессора (имеется в виду эксперт с методом BeforeCompile), или как-то иначе?


 
Германн ©   (2014-10-07 02:54) [22]


> Kerk ©   (07.10.14 01:57) [15]
>
> Ответ тот же самый :)
> У меня в планах поддержка всех версий, начиная с 2006. Но
> что успел, то успел

Ну тогда всё-таки с Д2007.
2005 и 2006 это всё-таки некие бэта-версии.


 
Kerk ©   (2014-10-07 10:24) [23]


> Юрий Зотов ©   (07.10.14 02:32) [21]

Эта штука добавляет в среду кнопку, которая при нажатии запускает анализ текущего проекта. Возможно, BeforeCompile я сделаю позже опционально, но пока подумал, что не нужно.

> Германн ©   (07.10.14 02:54) [22]

D2006 наряду с D7 - одна их самых популярных версий до сих пор! :)


 
DVM ©   (2014-10-07 10:25) [24]


> Юрий Зотов ©   (07.10.14 01:21) [10]


> Для начинающих - полезно. Для профи - вряд ли, потому что
> таких очевидных ляп они уже практически не делают.

Ляпы делают все разной степени очевидности. Если над кодом работает несколько человек полезно иметь инструмент отслеживающий вот такие ляпы. Тот же PVS Studio находил в свое время массу багов в известных программных продуктах, таких как например Google Chrome. Вот кстати блог PVS Studio с отчетами о проверках: http://habrahabr.ru/company/pvs-studio/


 
Дмитрий Белькевич ©   (2014-10-07 10:29) [25]

>Но функция Format сама же интерпретирует свою строку, это не часть языка.

интерпретирует то она интерпретирует, но от того не легче.

пример:


 Format("select study_name from studies where study_uid = %s", [StudyUID]);


иногда приходится менять тип StudyUID со string на integer или наоборот, приходится весь код шерстить, что бы поменять %s на %d и всё равно ошибки, бывает, проскакивают. не скажу, что часто - может раза 3-4 было, но всё равно неприятно. не уверен, правда, что автоматом можно это учесть - объявления переменных бывают разбросаны по модулям. не знаю - может ли твой анализатор глобально по проекту собирать список переменных.

>Для начинающих - полезно. Для профи - вряд ли, потому что таких очевидных ляп они уже практически не делают.

у себя в коде почти ничего не нашел. только блок with несколько раз подвел, автоматом нашлось (присвоение одинаковых переменных). в сторонних компонентах в нескольких местах нашлись проблемы. в коде других программистов - штуки три ошибки (exit не в том месте, несоответствие числа параметров format). Проект - около 800-та тысяч строк. Ошибок с десяток нашлось, польза для меня есть. Впрочем - даже если одна была бы - всё равно хорошо.

Ну а идеальным программистам, конечно, такие программы незачем.


 
Игорь Шевченко ©   (2014-10-07 10:35) [26]

D2006 фарева!

Программа крайне полезная, но вот основная масса канвы для анализа у меня именно в упомянутой версии.

Рома, у тебя же был в начале не экспертный вариант, нельзя его как-то собрать ?


 
Дмитрий Белькевич ©   (2014-10-07 10:40) [27]

Буквально недавно напоролся на опечатку. В код случайно попал лишний слэш, как раз в формате. Вместо "some text %s some text" было "some text %/s some text". Причем - именно случайно вклинившийся слэш, сам ума не приложу, как он туда попал. То было бы здорово проверять не только количиство, но и сами параметры. Делфи автоматом не делает. Понятно - не часть языка, но от того не легче.


 
Дмитрий Белькевич ©   (2014-10-07 10:44) [28]

"количиство" читать - количество. сделали на форуме обязательную регистрацию, сделайте пожалуйста еще и редактор.


 
DVM ©   (2014-10-07 12:05) [29]


> Дмитрий Белькевич ©   (07.10.14 10:29) [25]


> иногда приходится менять тип StudyUID со string на integer
> или наоборот, приходится весь код шерстить, что бы поменять
> %s на %d и всё равно ошибки

Я бы вообще предпочел, чтобы integer в string конвертировалось автоматом и т.д. Вон в c# такой проблемы нету.


 
DVM ©   (2014-10-07 12:08) [30]


> Дмитрий Белькевич ©   (07.10.14 10:29) [25]


> у себя в коде почти ничего не нашел.

это потому что база у программы пока совсем маленькая.
натрави на код что-то типа AQTime (там вроде кроме профилировщика тоже есть анализатор с 100500 критериями оценки кода) узнаешь о своем коде много нового, начиная от дублей которые можно вынести в функции и заканчивая явными ошибками, время которых еще просто не пришло.


 
Rouse_ ©   (2014-10-07 12:25) [31]


> Юрий Зотов ©   (07.10.14 01:21) [10]
> ИМХО.
>
> Для начинающих - полезно. Для профи - вряд ли, потому что
> таких очевидных ляп они уже практически не делают.

Делают-делают :)
В наших проектах нашел пару тройку ляпов, хотя команда у нас, сам знаешь, точно не новички ни разу :)
Даже удивительно что раньше не выплывало.


 
Дмитрий Белькевич ©   (2014-10-07 12:44) [32]

>Я бы вообще предпочел, чтобы integer в string конвертировалось автоматом и т.д. Вон в c# такой проблемы нету.

что имеем.

>натрави на код что-то типа AQTime

интересно, гляну.


 
Sha ©   (2014-10-07 13:09) [33]

> Kerk ©   (07.10.14 10:24) [23]
> D2006 наряду с D7 - одна их самых популярных версий до сих пор! :)

жаль, что другая из самых популярных не поддерживается )


 
Kerk ©   (2014-10-07 13:59) [34]


> Игорь Шевченко ©   (07.10.14 10:35) [26]
> Рома, у тебя же был в начале не экспертный вариант, нельзя
> его как-то собрать ?

У меня он и сейчас есть, я его для отладки использую. Но он же неудобный.


 
Kerk ©   (2014-10-07 14:02) [35]

Проверять типы переменных в Format в принципе можно, но не в ближайшем будущем. Анализатор пока не умеет такие сложные штуки делать :)


 
Дмитрий Белькевич ©   (2014-10-07 14:44) [36]

>натрави на код что-то типа AQTime

Статических анализаторов всего четыре. Первый, Static Analysis, позволяет получить общую информацию о приложении (размер функций в байтах, их адреса в памяти) и информацию о конкретных функциях (количество циклов в функции, количество условных операторов и т.д.). Следующий, Sequence Diagram Link, анализирует последовательность выполнения функций в программном коде, и по результатам анализа строит наглядную диаграмму в Microsoft Visio или Microsoft Word. Следующий статический анализатор имеет название Unused VCL Units и предназначен для поиска неиспользуемых модулей в программах, созданных с применением Delphi или C++ Builder. Такой анализ позволит несколько уменьшить размер исполняемого файла, получающегося при использовании этих сред, если из исходного текста программы убрать упоминание лишних модулей. Ну и, наконец, четвертый инструмент статического анализа, Platform Compliance, позволяет убедиться в том, что приложение может быть запущено на определённых целевых платформах - например, с его помощью можно узнать, какие дополнительные DLL"ки для этого понадобятся.

Увы, судя по описанию, нет в нем нормального анализатора.

>Проверять типы переменных в Format в принципе можно, но не в ближайшем будущем.

не то, что бы оно сильно нужно было :) хорошо даже то, что уже сделал, спасибо.

еще парочка:

http://www.campwoodsw.com/
http://www.socksoftware.com/codehealer.php
http://sourceforge.net/projects/dca/

может пригодится.


 
DVM ©   (2014-10-07 15:05) [37]


> Дмитрий Белькевич ©   (07.10.14 14:44) [36]


> Увы, судя по описанию, нет в нем нормального анализатора.

А там случайно нет отличий между редакциями? Мне кажется я как то смотрел именно AQTime и там была куча всяких критериев анализа.


 
DVM ©   (2014-10-07 15:14) [38]


> Дмитрий Белькевич ©   (07.10.14 14:44) [36]

Возможно я какой то другой ставил анализатор. В AQTime нет ничего такого.
А вот кстати в составе Delphi еще есть аудит кода:
http://docwiki.embarcadero.com/RADStudio/XE6/en/Source_Code_Audits_and_Metrics
Project = > QA Audits


 
Игорь Шевченко ©   (2014-10-07 15:21) [39]

DVM ©   (07.10.14 15:14) [38]

Вот мне интересно, кто-нибудь из этого встроенного аудита хоть какую-то пользу имеет ? Кроме тучи цифири, в которой без стакана разобраться невозможно, я там ничего полезного не обнаружил. Возможно, плохо смотрел. Сабжевый анализатор гораздо проще и интуитивнее.


 
DVM ©   (2014-10-07 15:39) [40]


> Игорь Шевченко ©   (07.10.14 15:21) [39]


> Вот мне интересно, кто-нибудь из этого встроенного аудита
> хоть какую-то пользу имеет ? Кроме тучи цифири, в которой
> без стакана разобраться невозможно, я там ничего полезного
> не обнаружил

Аналогично. Слишком там всего много и большая часть - бестолковая на практике.
Его настраивать очень долго надо под себя, тогда может и будет полезен. Но нужно завидное терпение.



Страницы: 1 2 3 4 5 6 вся ветка

Форум: "Прочее";
Текущий архив: 2017.10.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.003 c
15-1412610938
Kerk
2014-10-06 19:55
2017.10.22
FixInsight for Delphi


2-1448552760
SitiZen
2015-11-26 18:46
2017.10.22
Формула


2-1448453729
lamok
2015-11-25 15:15
2017.10.22
Подскажите как реализовать ввод текста


2-1448787318
vegarulez
2015-11-29 11:55
2017.10.22
TWebBrowser [CommandStateChange] получение перменных.


2-1446125074
NitroTek
2015-10-29 16:24
2017.10.22
Шаблоны





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский