Поиск ошибок в коде

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Meyer
Писатель
Сообщения: 54
Зарегистрирован: 22 авг 2013, 07:56
Контактная информация:

Поиск ошибок в коде

Непрочитанное сообщение Meyer » 19 янв 2016, 17:55

Здравствуйте, изучаю исходный код в 150 страниц на языке Си.

Вопрос: Очень интересует грамотный поиск ошибок, или какие методы посоветуете применить?

Прошу направьте, так как с этим вопросом хочу уже давно разобраться.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Поиск ошибок в коде

Непрочитанное сообщение Olej » 19 янв 2016, 23:33

Meyer писал(а):Здравствуйте, изучаю исходный код в 150 страниц на языке Си.

Вопрос: Очень интересует грамотный поиск ошибок, или какие методы посоветуете применить?
Не очень понятен вопрос...

Поиск ошибок каких?

Синтаксических? - так это делается компилятором, хорошо ему опцию -Wall установить, поскольку любое предупреждение уже указывает на потенциальную ошибку.

Логических? Алгоритмических? Архитектурных? - так это только сам разработчик, с хорошим пониманием предметной области, может выловить.

Meyer
Писатель
Сообщения: 54
Зарегистрирован: 22 авг 2013, 07:56
Контактная информация:

Re: Поиск ошибок в коде

Непрочитанное сообщение Meyer » 20 янв 2016, 10:18

Да поиск ошибок, с синтаксическими все понятно наш вечный друг gcc который их найдет.
Я имею ввиду Алгоритмические или Логические.
Не всегда их отлавливает сам разработчик, чаше всего пишут патчи люди которые даже не писали этот код.

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

У вас большой опыт работы с исходным кодом и с разными проектами, хотел бы вашего совета на эту тему.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Поиск ошибок в коде

Непрочитанное сообщение Olej » 20 янв 2016, 12:48

Meyer писал(а): Я имею ввиду Алгоритмические или Логические.
Не всегда их отлавливает сам разработчик, чаше всего пишут патчи люди которые даже не писали этот код.
А здесь нет и не может быть общих рецептов.

1. Одно время (лет 20 назад) в науке (в прикладной, IT науке) возникло модное течение: верификация программного кода - как писать программный код, следуя определённым предикатам, чтобы он заведомо не содержал ошибок. Этому направлению уделили много времени такие гуру IT-отрасли как Хоар и Дэйкстра.
Но даже в этой самой формулировке ... вслушайтесь: как так специально писать код, чтобы он был самодоказательным. Не чужой код верифицировать ... который как-попало писали, а свой как так специально писать?
Ничего практически продуктивного из этого не вышло.

2. Есть замечательное высказывание Э. Дейкстр, которым нужно всегда руководствоваться в подобных вопросах:
Нет программ, не содержащих ошибок.
Все программы различаются только числом не выявленных в них ошибок.
Поэтому ваше намерение найти все ошибки в чужом коде (да и в своём тоже ;-) ) - иллюзия.
Работает? ... и ладно ... :lol:

3. В этом смысле есть давняя известная реальная история, которую должен помнить каждый IT-шник:
В знаменитой компании Bell Labs, занимавшейся в то время разработкой большой операционной системы MULTICS шёл внутренний семинар, посвящённый представлению маленькой операционной системы, инициативно разработанной группой работников.
После доклада из зала поднялся один из ведущих разработчиков MULTICS и задаёт вопрос: "А сколько времени у вас затрачивается на ... (здесь не важно что, скажем, на переключения контекста).
Ответ: "50 миллисекунд"
Реакция зала: "У-у-у-у ... у нас на это затрачивается всего 20 миллисекунд!?"
Ответ: "Это отличный результат! ... Но отличие нашей системы от вашей состоит в том, что она работает".
(Из операционной системы MULTICS в конце концов так ничего и не вышло, её забросили. Представляемая малая операционная система была UNIX)

4. Для выявления скрытых ошибок - только тестирование, тестирование и тестирование ... и умелое придумывание таких изощрённых тестов, выявляющих именно предположительную ошибку в предположительном месте.
И при этом твёрдо помнить, что:
- сколь угодно тщательно и долго (хоть 100 лет ;-) ) проводимое тестирование не гарантирует отсутствия ошибок в коде
- есть вещи, которые принципиально нельзя наблюдать и тестировать, из-за мизерной вероятности их проявления и не повторяемости результатов - это особенно касается всего, связанного с параллельным программированием и мультипроцессорностью.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и 5 гостей