Здравствуйте, изучаю исходный код в 150 страниц на языке Си.
Вопрос: Очень интересует грамотный поиск ошибок, или какие методы посоветуете применить?
Прошу направьте, так как с этим вопросом хочу уже давно разобраться.
Поиск ошибок в коде
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Поиск ошибок в коде
Не очень понятен вопрос...Meyer писал(а):Здравствуйте, изучаю исходный код в 150 страниц на языке Си.
Вопрос: Очень интересует грамотный поиск ошибок, или какие методы посоветуете применить?
Поиск ошибок каких?
Синтаксических? - так это делается компилятором, хорошо ему опцию -Wall установить, поскольку любое предупреждение уже указывает на потенциальную ошибку.
Логических? Алгоритмических? Архитектурных? - так это только сам разработчик, с хорошим пониманием предметной области, может выловить.
Re: Поиск ошибок в коде
Да поиск ошибок, с синтаксическими все понятно наш вечный друг gcc который их найдет.
Я имею ввиду Алгоритмические или Логические.
Не всегда их отлавливает сам разработчик, чаше всего пишут патчи люди которые даже не писали этот код.
Моя цель научится хорошо искать ошибки в чужом коде и исправлять их, так сказать начинающий баг хантер.
У вас большой опыт работы с исходным кодом и с разными проектами, хотел бы вашего совета на эту тему.
Я имею ввиду Алгоритмические или Логические.
Не всегда их отлавливает сам разработчик, чаше всего пишут патчи люди которые даже не писали этот код.
Моя цель научится хорошо искать ошибки в чужом коде и исправлять их, так сказать начинающий баг хантер.
У вас большой опыт работы с исходным кодом и с разными проектами, хотел бы вашего совета на эту тему.
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Re: Поиск ошибок в коде
А здесь нет и не может быть общих рецептов.Meyer писал(а): Я имею ввиду Алгоритмические или Логические.
Не всегда их отлавливает сам разработчик, чаше всего пишут патчи люди которые даже не писали этот код.
1. Одно время (лет 20 назад) в науке (в прикладной, IT науке) возникло модное течение: верификация программного кода - как писать программный код, следуя определённым предикатам, чтобы он заведомо не содержал ошибок. Этому направлению уделили много времени такие гуру IT-отрасли как Хоар и Дэйкстра.
Но даже в этой самой формулировке ... вслушайтесь: как так специально писать код, чтобы он был самодоказательным. Не чужой код верифицировать ... который как-попало писали, а свой как так специально писать?
Ничего практически продуктивного из этого не вышло.
2. Есть замечательное высказывание Э. Дейкстр, которым нужно всегда руководствоваться в подобных вопросах:
Поэтому ваше намерение найти все ошибки в чужом коде (да и в своём тоже ) - иллюзия.Нет программ, не содержащих ошибок.
Все программы различаются только числом не выявленных в них ошибок.
Работает? ... и ладно ...
3. В этом смысле есть давняя известная реальная история, которую должен помнить каждый IT-шник:
В знаменитой компании Bell Labs, занимавшейся в то время разработкой большой операционной системы MULTICS шёл внутренний семинар, посвящённый представлению маленькой операционной системы, инициативно разработанной группой работников.
После доклада из зала поднялся один из ведущих разработчиков MULTICS и задаёт вопрос: "А сколько времени у вас затрачивается на ... (здесь не важно что, скажем, на переключения контекста).
Ответ: "50 миллисекунд"
Реакция зала: "У-у-у-у ... у нас на это затрачивается всего 20 миллисекунд!?"
Ответ: "Это отличный результат! ... Но отличие нашей системы от вашей состоит в том, что она работает".
(Из операционной системы MULTICS в конце концов так ничего и не вышло, её забросили. Представляемая малая операционная система была UNIX)
4. Для выявления скрытых ошибок - только тестирование, тестирование и тестирование ... и умелое придумывание таких изощрённых тестов, выявляющих именно предположительную ошибку в предположительном месте.
И при этом твёрдо помнить, что:
- сколь угодно тщательно и долго (хоть 100 лет ) проводимое тестирование не гарантирует отсутствия ошибок в коде
- есть вещи, которые принципиально нельзя наблюдать и тестировать, из-за мизерной вероятности их проявления и не повторяемости результатов - это особенно касается всего, связанного с параллельным программированием и мультипроцессорностью.
Кто сейчас на конференции
Сейчас этот форум просматривают: Bing [Bot] и 5 гостей