Анализ чужого кода - кто как делает?
6512
14
GPRS_User
v.i.p.
Достался мне тут по наследству небольшой проектик (~4500 строк). На С, если кому интересно.
О проектике известно, что он работает, но в ряде случаев начинает глючить. Моя задача - поймать этот глюк.
Документирована программа отвратительно - описания нет, комментариев очччень мало и они, в большинстве случаев, бесполезны.
Прогнать тоже пока не на чем - платформа несколько отличается от PC
Поэтому на данный момент сижу, пытаюсь понять, что делает тот или иной кусок кода и откомментировать. И попутно у меня возникает вопрос - а нельзя ли этот процесс несколько облегчить? Нет ли инструментов, которые, проанализировав проект, вывели бы список вызовов, объявлений, определений и позволили бы быстро перемещаться по тексту от одного к другому? Нет ли каких-то общепринятых методик анализа?
Посоветуйте чего-нибудь :).
О проектике известно, что он работает, но в ряде случаев начинает глючить. Моя задача - поймать этот глюк.
Документирована программа отвратительно - описания нет, комментариев очччень мало и они, в большинстве случаев, бесполезны.
Прогнать тоже пока не на чем - платформа несколько отличается от PC
Поэтому на данный момент сижу, пытаюсь понять, что делает тот или иной кусок кода и откомментировать. И попутно у меня возникает вопрос - а нельзя ли этот процесс несколько облегчить? Нет ли инструментов, которые, проанализировав проект, вывели бы список вызовов, объявлений, определений и позволили бы быстро перемещаться по тексту от одного к другому? Нет ли каких-то общепринятых методик анализа?
Посоветуйте чего-нибудь :).
Ну а вот у вас хотя бы система контроля версий есть? А насчет поймать глюк - берешь и ловишь, в чем проблема?:)
Ну а вот у вас хотя бы система контроля версий есть?Откуда такое щастье?
А насчет поймать глюк - берешь и ловишь, в чем проблема?:)Ну я ж говорю, метод "запустил-посмотрел где глючит-подумал-поправил" мне не доступен по причине отсутсвия железяки, на которой ЭТО должно работать.
Не запуская код, сложно что-то отладить.
Можно прогнать разные инструменты, которые проверят, насколько "правильно" написан код, и даже что-то исправить. Но как вы поймете, что вы исправили именно то, что нужно?
В таких случаях я ставлю в код "затычки" - эмуляторы, которые позволяют программе исполняться на моем компьютере.
Можно прогнать разные инструменты, которые проверят, насколько "правильно" написан код, и даже что-то исправить. Но как вы поймете, что вы исправили именно то, что нужно?
В таких случаях я ставлю в код "затычки" - эмуляторы, которые позволяют программе исполняться на моем компьютере.
Бывает под камень фирма - производитель делает эмуляторы под ПС. Во всяком случае раньше видел подобное для какого-то микропроцессора...
Не запуская код, сложно что-то отладить.+1. Темболее 4500 строчек все-таки.
Было верно подмечено про эмуляторы. Надо поискать эмулятор платформы, под которую написан проект и попробовать запустить на нем.
Блин. Всего-то 4500строк, да еще и на языке... Нифига не понимаю куды мы котимся... делов-то. Каких-то 50 страниц текста. Помнится в году так 94-м разобрал 400кбайт кода с ассемблера на язык "С"... вручную и "между делом" под отладчиком. Ну уж больно игрушка понравилась...
И что стоит прогруммер, который телефонным тестом баг найти не могёт в таком малюсеньком куске... Фи.
И что стоит прогруммер, который телефонным тестом баг найти не могёт в таком малюсеньком куске... Фи.
О, какую тему вспомнили.
Значит, рассказываю.
Во-первых, проблема снялась сама по себе (не решилась, а снялась, да) - заказчик исчез в тумане.
Во-вторых, прошу учесть, что проектик был - самопальная GSM-сигналка на Atmel'ке, и ловить плавающий глюк в симуляторе и без периферии - задача та еще.
В-третьих, в заглавном посте темы вопрос, в основном, об инструментах, облегчающих навигацию в коде для более удобного его исследования.
PS: а кто такой телефонный тест? Гугл не знает.
Значит, рассказываю.
Во-первых, проблема снялась сама по себе (не решилась, а снялась, да) - заказчик исчез в тумане.
Во-вторых, прошу учесть, что проектик был - самопальная GSM-сигналка на Atmel'ке, и ловить плавающий глюк в симуляторе и без периферии - задача та еще.
В-третьих, в заглавном посте темы вопрос, в основном, об инструментах, облегчающих навигацию в коде для более удобного его исследования.
PS: а кто такой телефонный тест? Гугл не знает.
Эээ, я бы не был столь категоричен. 4500 строк это конечно не много, но все зависит от конкретной решаемой задачи (может там какая-нибудь математика, тогда вообще ж. еще и понять нужно а правильно ли формулы составили и насколько их адекватно запрограммировали), насколько грамотно и читабельно запрограммировано и т.п.
По теме: если ошибку не видно невооруженным взглядом, то можно сделать так: разобраться в коде и откомментировать его, при необходимости зарефакторить: сделать легко читаемым, модульным и т.п. Выделить железозависимый код в отдельные модули, для тестирования подменяя их заглушками (mocks). Написать тесты (смотри unit testing). Прогнать и посмотреть что получиться.
Не такая уж простая задача если что. Если железо так и не дадут, то наверное ошибку лучше править в исходном коде, а искать в отрефакторенном, во избежании привнесения своих багов, ну и пусть тестируют сами, добавить логирование, чтобы была возможность хотя бы проанализировать логи.
Кстати может добавить для начала логирование в программу, попросить их запустить ее, возможно анализ логов выявит проблему безо всяких остальных головняков.
По теме: если ошибку не видно невооруженным взглядом, то можно сделать так: разобраться в коде и откомментировать его, при необходимости зарефакторить: сделать легко читаемым, модульным и т.п. Выделить железозависимый код в отдельные модули, для тестирования подменяя их заглушками (mocks). Написать тесты (смотри unit testing). Прогнать и посмотреть что получиться.
Не такая уж простая задача если что. Если железо так и не дадут, то наверное ошибку лучше править в исходном коде, а искать в отрефакторенном, во избежании привнесения своих багов, ну и пусть тестируют сами, добавить логирование, чтобы была возможность хотя бы проанализировать логи.
Кстати может добавить для начала логирование в программу, попросить их запустить ее, возможно анализ логов выявит проблему безо всяких остальных головняков.
> опрос, в основном, об инструментах, облегчающих навигацию в коде для более удобного его исследования
IDE ?
IDE ?
Спасибо, конечно, но уже не актуально. Теме уже больше года ) Железки я так и не дождался, даже схему не дали, а потом и вообще скрылись в тумане. И черт с ними, честно говоря.
Гм, я что-то не обратил внимания, сорри
О, не посмотрел дату начала. А по-поводу каких-либо IDE на эту тему - помнится для "поскакаля" делали что-то в районе Севастопольского универа... году так 92... может чего и родилось за это время... типа автоматизированное преобразование (оптимизация кода) и тестирование (автопостроение тестов) на уровне языка... Тогда же было модное направление автопреобразователи С-Паскаль и наиборот...
ИМХО, "ручками" оно как-то привычнее и быстрее получается. 2 окошка: в одно смотришь, в другом правишь...
ИМХО, "ручками" оно как-то привычнее и быстрее получается. 2 окошка: в одно смотришь, в другом правишь...