AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.06.2017, 10:54   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Зло живет в функциях сравнения.
Обсудим тему ?
https://habrahabr.ru/company/pvs-studio/blog/329090/

Статья заинтересовала интересной подборкой типичных багов.

Второй вопрос - что Аксапта нам предоставляет в помощь для поиска таких ошибок. В Visual Studio по идее, возможностей должно быть больше, т.е. в Ax7 все станет проще при проверке ?

Еще впечатлило, какие смешные баги бывают во всем известных продуктах (и почему они не исправляются подолгу).
За это сообщение автора поблагодарили: mazzy (2), Raven Melancholic (1).
Старый 25.06.2017, 11:34   #2  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Если посмотреть статистику моих ошибок (которая у меня в голове), то вырисовывается такая картинка:
На первом месте, конечно, идут ошибки копипаста. Это безусловный лидер. Скопировал, отвлекся, забыл поправить.
На втором месте - логические ошибки, как верно замечено в обсуждаемой статье. Все кажется настолько простым и тривиальным, что часто мысли уже скачут где-то далеко и руки чисто на автомате набирают код. В ошибках этого типа безусловный лидер - сравнение = или !=.
Ну и замыкают хитпарад - ошибки обработки объектов. Часто вместо одной переменной случайно начинаешь подсовывать для обработки другую переменную. Вместо текущего курсора на форме - пришедший курсор из параметров или наоборот. Или источник данных другой цепляю на элемент интерфейса, рука дрогнула типа...
Старый 25.06.2017, 13:50   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Как сказано в статье (а еще более подробно об этом в той, статье, на которую есть ссылка - про "ошибку последней строки"), основная проблема в том, что, как правило, сами условия простые и при просмотре кода взгляд их просто пропускает. Типа: что там смотреть и так все вроде правильно.
Если условие сложное, то его как-то анализируешь, часто разбиваешь на части (мне переменных не жалко), а вот простые условия ускользают от внимания.
Моей типичной ошибкой, почему-то, бывает не использование сравнения на неравенство, а сравнение равенством инвертированной переменной: вместо a != b, часто пишу !a == b. Ошибка совершенно идиотская, сложно сделать её, находясь в здравом уме, то делаю часто (как правило скопипастив другой вариант и изменив в новом месте).
Нередко ошибаюсь на объединении нескольких условий по && и || в одной проверке, особенно, если есть перенос условия на несколько строк.
Старый 25.06.2017, 14:14   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Я начитавшись про pvs studio сделал свою поделку (http://axcoder.blogspot.ru/2014/11/s...-xlnt.html?m=1) в нагребло порядка трех десятков ошибок по всему продукту. Часть поправили часть не появляется (просто мертвый код), в 7 проверка свитча производиться самим компилятором
За это сообщение автора поблагодарили: Logger (1), mazzy (2), macklakov (1).
Старый 25.06.2017, 14:29   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от belugin Посмотреть сообщение
Я начитавшись про pvs studio сделал свою поделку
По идее, такие проверки должны были БЫ уметь делать штатные проверки Best Practice.
Старый 25.06.2017, 15:12   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
В 7 есть car https://ax.help.dynamics.com/en/wiki/car-2/ на движке Bp.
За это сообщение автора поблагодарили: Logger (3).
Старый 25.06.2017, 15:56   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от belugin Посмотреть сообщение
в 7 проверка свитча производиться самим компилятором
А какая там проверка? Как в java отсутствие default или, если указано перечисление, то полноту проверок его значения?
Старый 25.06.2017, 15:58   #8  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Logger Посмотреть сообщение
По идее, такие проверки должны были БЫ уметь делать штатные проверки Best Practice.
Возможно, что так. Реализовать такие проверки технически не очень сложно.
Вопрос больше в том, как набрать статистику о том, какие ошибки в таких ситуациях характерны именно для Аксапты.
Старый 25.06.2017, 16:55   #9  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Вопрос больше в том, как набрать статистику о том, какие ошибки в таких ситуациях характерны именно для Аксапты.
А зачем ?
Чтобы решить какие проверки реализовать в первую очередь, а на какие забить ?
Я думаю основную группу проверок на копипаст и связанные с ним ошибки, а также на ошибки в логических выражениях можно смело было реализовывать. Такие ошибки допускают все.
Старый 25.06.2017, 18:50   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Есть, например, ошибка с использованием невыбранного поля для него даже рантайм проверку на сервере сделали.
Старый 25.06.2017, 18:53   #11  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
А какая там проверка? Как в java отсутствие default или, если указано перечисление, то полноту проверок его значения?
Я имею ввиду проверку что одного и того же значения нет дважды в case. Только они забыли сначала про intrinsic потом добавили
За это сообщение автора поблагодарили: Raven Melancholic (2).
Теги
pvs-studio, static analizer

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
О новых функциях SQL Server 2016 MikeR DAX: База знаний и проекты 19 14.06.2016 09:21
Ускорение сравнения объектов Logger DAX: Программирование 0 27.01.2013 19:05
Функция нечеткого сравнения строк Андре DAX: База знаний и проекты 24 28.05.2010 15:22
зло берет...Подскажите.что не так делаю с аморт ОС по пробегу yooshi_imported DAX: Функционал 1 15.08.2005 11:43
Как определить где исполняется код - сервер или клиент ? Logger DAX: Программирование 4 26.10.2004 13:29
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:57.