Ошибки адресации данных

      Жесткий диск является одним из важнейших компонентов любого ПК. Он хранит в себе всю информацию, которой вы пользуетесь на вашем ПК. Именно поэтому нужно следить за состоянием этого компонента, как и впрочем любого другого, но в случае возникновения проблем с вашим жестким диском, вы можете потерять всю информацию на нём.

      Прежде чем перейти к оценке состояния жесткого диска или SSD, необходимо запомнить важное правило:

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

Общее состояние вашего жесткого диска

      Итак, как же узнать, в каком состоянии находится ваш жесткий диск? Вскрывать его и смотреть его внутреннее состояние нельзя… да и незачем. Для оценки его текущего состояния придумали специальную технологию — «S.M.A.R.T.». Эта технология встроена в каждый жесткий диск любого производителя и формата, и позволяет судить о его состоянии, оценивая множество параметров его работы. Просмотреть эту информацию можно разными способами: запустить специальную программу в Windows или использовать специальный загрузчик, который работает напрямую с диска или флешки, и позволяет отобразить эту информацию с жесткого диска. Вторым методом можно воспользоваться, если не работает операционная система, и есть подозрения в неисправности жесткого диска. Мы же воспользуемся первым способом, как наиболее простым и легким.

      Чтобы прочитать информацию «S.M.A.R.T.» с нашего жесткого диска, воспользуемся специальной программой — «CrystalDiskInfo». Данная утилита имеет простой интерфейс, русский язык, умеет отслеживать температуру накопителя. Скачать данную программу можно тут. Запускаем программу и видим следующее:

 

      Одним из преимуществ данной программы является перевод всех показателей жесткого диска. 

      Выбираем в верхней панели один из жестких дисков: 

 

      Первое, на что нужно обратить внимание, так это общий статус диска (левый верхний угол, под надписью «Техсостояние»). Если там написано «Хорошо» или «Отлично», то с вашим диском все в порядке.

      В случае, если написано «Тревога», то нужно задуматься о смене диска, и скопировать всю важную информацию на другой диск. Ниже представлен пример скриншота программы для диска на WD 500GB 2008 г. производства. Т.е. на момент написания статьи ему уже 9 лет. Такой диск точно требует замены.

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

      Косвенно о состоянии вашего жесткого диска можно судить по времени его работы. На сайте изготовителе вашего жесткого диска можно найти время наработки на отказ, однако даже если этот порог будет превышен, то это не значит, что жесткий диск не пригоден для использования. Это лишь сигнал к тому, что нужно иногда проверять его состояние.

Дополнительная полезная информация

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

      Пункт техсостояние показывает общую усредненную оценку состояния жесткого диска; если мы хотим узнать более подробные сведения о работе диска, то нужно разобраться в основных показателях работы нашего диска. Для этого разберем все строки из таблицы программы. У каждого диска есть предельное значение и фактическое значение. Чтобы было более наглядно, выполните действия как на картинке ниже, установив другое отображение для RAW данных.

      Теперь рассмотрим основные колонки данной таблицы.

  • Левые голубые и желтые кружочки обозначают оценку программы жесткого диска,
  • Атрибут — в ней указывается название параметра,
  • Текущее — состояние параметра на данный момент
  • Наихудшее — наихудшее значение параметра Текущее за все время.
  • Порог — пороговое значение параметра, установленное заводом изготовителем данного диска.
  • Raw-значения — самый главный показатель, который нужно сравнивать с полем «Порог»

      Ниже вы увидите список, где указан каждый параметр и как он считается; жирным шрифтом в нём отмечены самые важные параметры, которые показывают состояние жесткого диска. Чтобы оценить состояние, нужно каждый параметр из графы «Raw-значения» сравнивать с  числом в графе «Порог». Если число из колонки «Raw-значения» больше числа в графе «Порог», то смотрите описание в списке ниже, чтобы оценить состояние диска.

Основные параметры S.M.A.R.T.

  • Ошибки чтения (Raw Read Error Rate) — атрибут показывает количество ошибок чтения с пластин жесткого диска. На дисках WD, Samsung до SpinPoint F1 (не включительно), Hitachi большое значение параметра указывает на аппаратные проблемы с диском. На дисках Seagate, Samsung (SpinPoint F1 и новее) и Fujitsu на этот атрибут можно не обращать внимания. Смотреть число в графе Raw-значения.
  • Время раскрутки (Spin-Up Time) — время раскрутки шпинделя с «блинами», значение не влияет на состояние диска.
  • Запуски/Остановки шпинделя (Number of Spin-Up Times (Start/Stop Count)) — количество запусков и остановок шпинделя, не влияет на состояние диска.
  • Переназначенные сектора (Reallocated Sector Count) — Очень важный параметр для оценки состояния диска. Сама суть параметра: при работе диска через какое-то время появляются битые сектора, которые неправильно записываются или читаются. Диск их помечает и заменяет на другие, которые были заранее зарезервированы производителем.  Это параметр показывает количество таких переназначений. Если число в графе «Raw-значения» больше числа в графе «Порог», то у диска закончились резервные сектора и начинаются ошибки в работе. При превышении значения «порог» более чем на 10%, желательна замена диска.
  • Ошибки позиционирования (Seek Error Rate) — частота ошибки позиционирования головок на «блинах» жесткого диска. Не влияет на состояние диска.
  • Часы работы (Power On Hours Count (Power-on Time)) — значение показывает количество часов работы диска. Ничего не говорит о его состоянии.
  • Повторные попытки раскрутки (Spin Retry Count) — количество повторных попыток раскрутить шпиндель жесткого диска с «блинами». Чаще всего ничего не говорит о здоровье диска, но значительное увеличение этого параметра указывает на плохой контакт проводов питания или нестабильную работу блока питания компьютера.
  • Повторы рекалибровки (Calibration Retry Count (Recalibration Retries)) — показывает количество попыток жесткого диска установки головки считывания на нулевую дорожку. Ненулевое, а особенно растущее значение параметра, может означать проблемы с диском.
  • Включения/Отключения (Power Cycle Count) — количество полных циклов «включение-отключение» диска. Не связан с состоянием диска.
  • End-to-End ошибки — ошибка четности при передаче данных между кэшем и хостом. При увеличении параметра вероятны проблемы с диском.
  • Отказы отключения питания (Power Off Retract Count (Emergency Retry Count)) — количество суммарных циклов включения, отключения диска. Не влияет на состояние диска.
  • Циклы загрузки/выгрузки (Load/Unload Cycle Count) — количество циклов парковки и распарковки головок. Не влияет на состояние диска.
  • Температура (Temperature (HDA Temperature, HDD Temperature)) — показывает температуру диска. На разных дисках датчик температуры находиться в разных местах. Не влияет на состояние диска, но при превышении 55-60 градусов стоит задуматься о его охлаждении.
  • События переназначения (Reallocated Event Count) — количество операций переназначения секторов. Косвенно говорит о здоровье диска. Чем больше значение — тем хуже. Однако нельзя однозначно судить о здоровье диска по этому параметру, не рассматривая другие атрибуты.
  • Нестабильные сектора (Current Pending Sector Count) —  количество нестабильных секторов, которые когда то диск посчитал испорченными, каждый раз перед записью в такой сектор, диск проверяет этот сектор на стабильность и в зависимости от его состояния, либо заменяет его на резервный либо помечает как битый. Ненулевое значение параметра говорит о неполадках (правда, не может сказать о том, в само́м ли диске проблема).
  • Неисправимые ошибки секторов (Offline Uncorrectable Sector Count (Uncorrectable Sector Count)) — обозначает тоже самое что и в предыдущем пункте, но эти данные диск получает в режиме самотестирования в простое.Ненулевое значение говорит о неполадках на диске.
  • CRC-ошибки UltraDMA (UltraDMA CRC Error Count) — количество ошибок при передаче данных между жестким диском и материнской платой. Увеличения значения свидетельствует о некачественном кабеле, на здоровье диска не влияет.
  • Ошибки записи (Write Error Rate (MultiZone Error Rate)) — частота возникновения ошибок записи. Ненулевое значение говорит о проблемах с диском, а именно о износе магнитных головок.
  • Ошибки адресации данных (Data Address Mark Error) — содержание атрибута — загадка, но проанализировав различные диски, могу констатировать, что ненулевое значение — это плохо.

Сравнение S.M.A.R.T. различных дисков и описание проблем. Примеры оценки.

  • Диск 1. SeaGate 200 Гб.  2003 г. выпуска

      На диске странные значения по Raw-данным, но их появление связано с возрастом диска. На момент написания статьи ему 14 лет. 

Диск 2. WesternDigital 500 Гб. 2008 г. выпуска

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

Диск 3. WesternDigital 250 Гб. 2007 г. выпуска

 

      Диск в полном порядке, однако присутствует странное время раскрутки шпинделя. Диск полностью исправен.

Диск 4. WesternDigital 640 Гб. 2008 г. выпуска

      Огромное количество ошибок чтения-записи и нестабильные сектора. Диск на замену.

Немного про состояние SSD

      SSD также имеют S.M.A.R.T., но их принцип работы сильно отличается, поэтому о том, как узнать состояние SSD, читайте в следующей статье.


  • Часть 2. Как узнать состояние SSD? Время работы SSD.

    < Назад

  • DriverPack Solution — Лучшая программа для установки и обновления…

    Вперёд >

Часть 1. Как узнать состояние моего жёсткого диска, или что такое S.M.A.R.T.?

Жесткий диск является одним из важнейших компонентов любого ПК. Он хранит в себе всю информацию, которой вы пользуетесь на вашем ПК. Именно поэтому нужно следить за состоянием этого компонента, как и впрочем любого другого, но в случае возникновения проблем с вашим жестким диском, вы можете потерять всю информацию на нём.

Прежде чем перейти к оценке состояния жесткого диска или SSD, необходимо запомнить важное правило:

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

Общее состояние вашего жесткого диска

Итак, как же узнать, в каком состоянии находится ваш жесткий диск? Вскрывать его и смотреть его внутреннее состояние нельзя. да и незачем. Для оценки его текущего состояния придумали специальную технологию — «S.M.A.R.T.». Эта технология встроена в каждый жесткий диск любого производителя и формата, и позволяет судить о его состоянии, оценивая множество параметров его работы. Просмотреть эту информацию можно разными способами: запустить специальную программу в Windows или использовать специальный загрузчик, который работает напрямую с диска или флешки, и позволяет отобразить эту информацию с жесткого диска. Вторым методом можно воспользоваться, если не работает операционная система, и есть подозрения в неисправности жесткого диска. Мы же воспользуемся первым способом, как наиболее простым и легким.

Чтобы прочитать информацию «S.M.A.R.T.» с нашего жесткого диска, воспользуемся специальной программой — «CrystalDiskInfo». Данная утилита имеет простой интерфейс, русский язык, умеет отслеживать температуру накопителя. Скачать данную программу можно тут. Запускаем программу и видим следующее:

Одним из преимуществ данной программы является перевод всех показателей жесткого диска.

Выбираем в верхней панели один из жестких дисков:

Первое, на что нужно обратить внимание, так это общий статус диска (левый верхний угол, под надписью «Техсостояние»). Если там написано «Хорошо» или «Отлично», то с вашим диском все в порядке.

В случае, если написано «Тревога», то нужно задуматься о смене диска, и скопировать всю важную информацию на другой диск. Ниже представлен пример скриншота программы для диска на WD 500GB 2008 г. производства. Т.е. на момент написания статьи ему уже 9 лет. Такой диск точно требует замены.

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

Косвенно о состоянии вашего жесткого диска можно судить по времени его работы. На сайте изготовителе вашего жесткого диска можно найти время наработки на отказ, однако даже если этот порог будет превышен, то это не значит, что жесткий диск не пригоден для использования. Это лишь сигнал к тому, что нужно иногда проверять его состояние.

Дополнительная полезная информация

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

Пункт техсостояние показывает общую усредненную оценку состояния жесткого диска; если мы хотим узнать более подробные сведения о работе диска, то нужно разобраться в основных показателях работы нашего диска. Для этого разберем все строки из таблицы программы. У каждого диска есть предельное значение и фактическое значение. Чтобы было более наглядно, выполните действия как на картинке ниже, установив другое отображение для RAW данных.

Теперь рассмотрим основные колонки данной таблицы.

  • Левые голубые и желтые кружочки обозначают оценку программы жесткого диска,
  • Атрибут — в ней указывается название параметра,
  • Текущее — состояние параметра на данный момент
  • Наихудшее — наихудшее значение параметра Текущее за все время.
  • Порог — пороговое значение параметра, установленное заводом изготовителем данного диска.
  • Raw-значения — самый главный показатель, который нужно сравнивать с полем «Порог»

Н иже вы увидите список, где указан каждый параметр и как он считается; жирным шрифтом в нём отмечены самые важные параметры, которые показывают состояние жесткого диска. Чтобы оценить состояние, нужно каждый параметр из графы «Raw-значения» сравнивать с числом в графе «Порог». Если число из колонки «Raw-значения» больше числа в графе «Порог», то смотрите описание в списке ниже, чтобы оценить состояние диска.

Основные параметры S.M.A.R.T.

  • Ошибки чтения (Raw Read Error Rate) — атрибут показывает количество ошибок чтения с пластин жесткого диска. На дисках WD, Samsung до SpinPoint F1 (не включительно), Hitachi большое значение параметра указывает на аппаратные проблемы с диском. На дисках Seagate, Samsung (SpinPoint F1 и новее) и Fujitsu на этот атрибут можно не обращать внимания. Смотреть число в графе Raw-значения.
  • Время раскрутки (Spin-Up Time) — время раскрутки шпинделя с «блинами», значение не влияет на состояние диска.
  • Запуски/Остановки шпинделя (Number of Spin-Up Times (Start/Stop Count)) — количество запусков и остановок шпинделя, не влияет на состояние диска.
  • Переназначенные сектора (Reallocated Sector Count) — Очень важный параметр для оценки состояния диска. Сама суть параметра: при работе диска через какое-то время появляются битые сектора, которые неправильно записываются или читаются. Диск их помечает и заменяет на другие, которые были заранее зарезервированы производителем. Это параметр показывает количество таких переназначений. Если число в графе «Raw-значения» больше числа в графе «Порог», то у диска закончились резервные сектора и начинаются ошибки в работе. При превышении значения «порог» более чем на 10%, желательна замена диска.
  • Ошибки позиционирования (Seek Error Rate) — частота ошибки позиционирования головок на «блинах» жесткого диска. Не влияет на состояние диска.
  • Часы работы (Power On Hours Count (Power-on Time)) — значение показывает количество часов работы диска. Ничего не говорит о его состоянии.
  • Повторные попытки раскрутки (Spin Retry Count) — количество повторных попыток раскрутить шпиндель жесткого диска с «блинами». Чаще всего ничего не говорит о здоровье диска, но значительное увеличение этого параметра указывает на плохой контакт проводов питания или нестабильную работу блока питания компьютера.
  • Повторы рекалибровки (Calibration Retry Count (Recalibration Retries)) — показывает количество попыток жесткого диска установки головки считывания на нулевую дорожку. Ненулевое, а особенно растущее значение параметра, может означать проблемы с диском.
  • Включения/Отключения (Power Cycle Count) — количество полных циклов «включение-отключение» диска. Не связан с состоянием диска.
  • End-to-End ошибки — ошибка четности при передаче данных между кэшем и хостом. При увеличении параметра вероятны проблемы с диском.
  • Отказы отключения питания (Power Off Retract Count (Emergency Retry Count)) — количество суммарных циклов включения, отключения диска. Не влияет на состояние диска.
  • Циклы загрузки/выгрузки (Load/Unload Cycle Count) — количество циклов парковки и распарковки головок. Не влияет на состояние диска.
  • Температура (Temperature (HDA Temperature, HDD Temperature)) — показывает температуру диска. На разных дисках датчик температуры находиться в разных местах. Не влияет на состояние диска, но при превышении 55-60 градусов стоит задуматься о его охлаждении.
  • События переназначения (Reallocated Event Count) — количество операций переназначения секторов. Косвенно говорит о здоровье диска. Чем больше значение — тем хуже. Однако нельзя однозначно судить о здоровье диска по этому параметру, не рассматривая другие атрибуты.
  • Нестабильные сектора ( Current Pending Sector Count ) — количество нестабильных секторов, которые когда то диск посчитал испорченными, каждый раз перед записью в такой сектор, диск проверяет этот сектор на стабильность и в зависимости от его состояния, либо заменяет его на резервный либо помечает как битый. Ненулевое значение параметра говорит о неполадках (правда, не может сказать о том, в само́м ли диске проблема).
  • Неисправимые ошибки секторов (Offline Uncorrectable Sector Count (Uncorrectable Sector Count)) — обозначает тоже самое что и в предыдущем пункте, но эти данные диск получает в режиме самотестирования в простое.Ненулевое значение говорит о неполадках на диске.
  • CRC-ошибки UltraDMA (UltraDMA CRC Error Count) — количество ошибок при передаче данных между жестким диском и материнской платой. Увеличения значения свидетельствует о некачественном кабеле, на здоровье диска не влияет.
  • Ошибки записи (Write Error Rate (MultiZone Error Rate)) — частота возникновения ошибок записи. Ненулевое значение говорит о проблемах с диском, а именно о износе магнитных головок.
  • Ошибки адресации данных (Data Address Mark Error) — содержание атрибута — загадка, но проанализировав различные диски, могу констатировать, что ненулевое значение — это плохо.

Сравнение S.M.A.R.T. различных дисков и описание проблем. Примеры оценки.

Диск 1. SeaGate 200 Гб. 2003 г. выпуска

На диске странные значения по Raw-данным, но их появление связано с возрастом диска. На момент написания статьи ему 14 лет.

Диск 2. WesternDigital 500 Гб. 2008 г. выпуска

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

Диск 3. WesternDigital 250 Гб. 2007 г. выпуска

Диск в полном порядке, однако присутствует странное время раскрутки шпинделя. Диск полностью исправен.

Диск 4. WesternDigital 640 Гб. 2008 г. выпуска

Огромное количество ошибок чтения-записи и нестабильные сектора. Диск на замену.

Подробное описание атрибутов S.M.A.R.T. для диагностики жестких дисков

Подробное описание атрибутов SMART для жестких дисков и SSD

gotoADM.ru — обслуживание компьютеров и серверов

Современные жесткие диски и SSD снабжены технологией S.M.A.R.T. (self monitoring analysis and reporting technology), которая используется для их диагностики.

Ребята, делайте бекапы и ваша жизнь будет прекрасной! Технология RAID, горячий или холодный резерв дисков не дадут Вам полной защиты от потери данных. Следите за состоянием дисков и меняйте их ДО выхода из строя или существенной деградации сервиса.

�� Заказать диагностику сервера прямо сейчас: �� 8-800-511-24-07 �� support@gotoADM.ru �� Telegram

С момента производства дисковый накопитель начинает считывать свое текущее состояние, определяя его с помощью специальных параметров или атрибутов. Они располагаются в служебной зоне накопителя, доступ к которой имеет лишь встроенная программа. Просмотреть параметры позволяет отдельное ПО (например, Victoria, MHDD), а также утилиты от разработчиков конкретного жесткого диска. Через них в накопитель подаются вводные, после чего в журнале статистики появится информация о текущем состоянии диска.

Восстановление работоспособности жесткого диска

&nbsp &nbsp Все современные накопители на жестких магнитных дисках поддерживают технологию самотестирования, анализа состояния, и накопления статистических данных об ухудшении собственных характеристик S.M.A.R.T. (Self-Monitoring Analysis and Reporting Technology). Основы S.M.A.R.T. были разработаны в 1995 г. совместными усилиями ведущих производителями жестких дисков.
В процессе совершенствования оборудования накопителей, возможности технологии также дорабатывались, и после стандарта SMART появился SMART II, затем — SMART III, который, очевидно, тоже не станет последним.

&nbsp &nbsp Жесткий диск в процессе своего функционирования постоянно отслеживает определенные параметры своего состояния и отражает их в специальных характеристиках — атрибутах (Attribute), сохраняющихся, как правило, в специально выделенной части дисковой поверхности, доступной только внутренней микропрограмме накопителя — служебной зоне . Данные атрибутов могут быть считаны специальным программным обеспечением.
&nbsp &nbsp Атрибуты идентифицируются своим цифровым номером, большинство из которых одинаково интерпретируется накопителями разных моделей. Некоторые атрибуты могут быть определены конкретным производителем оборудования, и поддерживаться только отдельными моделями накопителей.

&nbsp &nbsp Атрибуты состоят из нескольких полей, каждое из которых имеет определенный смысл. Обычно, программы считывания S.M.A.R.T. выдают расшифровку атрибутов в виде:

&nbsp &nbsp Для анализа состояния накопителя, пожалуй, самым важным значением атрибута является Value — условное число (обычно от 0 до 100 или до 253), заданное производителем. Значение Value изначально установлено на максимум при производстве накопителя и уменьшается в случае ухудшения его параметров. Для каждого атрибута существует пороговое значение, до достижения которого, производитель гарантирует его работоспособность — поле Threshold . Если значение Value приближается или становится меньше значения Threshold, — накопитель пора менять. Перечень атрибутов и их значения жестко не стандартизированы и определяются изготовителем накопителя, но наиболее важные из них интерпретируются одинаково. Например, атрибут с идентификатором 5 ( Reallocated sector count ) будет характеризовать число забракованных и переназначенных из резервной области секторов диска, и для устройств производства компании Seagate, и для Western Digital, Samsung, Maxtor.

Жесткий диск не имеет возможности, по собственной инициативе, передать данные SMART потребителю. Их считывание выполняется специальным программным обеспечением.

В настройках большинства современных BIOS материнских плат имеется пункт позволяющий запретить или разрешить считывание и анализ атрибутов SMART в процессе выполнения тестов оборудования перед выполнением начальной загрузки системы. Включение опции позволяет подпрограмме тестирования оборудования BIOS считать значения критических атрибутов и, при превышении порога, предупредить об этом пользователя. Как правило, без особой детализации:
Primary Master Hard Disk: S.M.A.R.T status BAD!, Backup and Replace.
Выполнение подпрограммы BIOS приостанавливается, чтобы привлечь внимание:
Press F1 to Resume
Таким образом, без установки или запуска дополнительного программного обеспечения, имеется возможность вовремя определить критическое состояние накопителя (при включении данной опции) средствами Базовой Системы Ввода-Вывода (BIOS).

Анализ данных S.M.A.R.T. жесткого диска

&nbsp &nbsp Для получения данных SMART в среде операционной системы могут использоваться специальные программы, в частности, практически все утилиты для тестирования оборудования жестких дисков.

Одной из самых популярных программ для тестирования жестких дисков является Victoria Сергея Казанского.

На сайте автора найдете последнюю версию программы, а также массу полезной информации, в том числе и подробное описание работы с Victoria.

Программа Victoria имеет две разновидности — для работы в среде DOS и, для работы в среде Windows. DOS-версия может напрямую работать с контроллером жесткого диска и обладает значительно большими возможностями по сравнению с версией для Windows.
Назначение, основные возможности и порядок использования программы найдете на сайте автора
Программа проста в использовании и позволяет оценить техническое состояние накопителя, выполнить его тестирование и некоторые настройки — уровня шума, производительности, физического объема. Режимы тестирования поверхности накопителя позволяют принудительно избавиться от сбойных секторов с помощью режима Remap нескольких видов. Вызов меню тестирования выполняется по нажатию клавиши F4 ( SCAN ). Пользователь имеет возможность задать

область тестирования
Start LBA :0 — начало области (по умолчанию — 0)
End LBA :14680064 — конец области (по умолчанию — номер последнего блока диска)

Режим тестирования
Линейное чтение — последовательное чтение от начального блока до конечного
Случайное чтение — номер считываемого блока формируется случайным образом.
BUTTERFLY чтение — выполняется чтение блоков, начиная от граничных номеров (начала и конца), к центру области тестирования.
Изменение режима выполняется по нажатию клавиши «пробел»

Режим обработки ошибок
Этот пункт позволяет выполнить скрытие дефектных блоков, с использованием переназначения (ремап) из резервной области. Выбор режима выполняется клавишей «пробел». Выбранный метод работы с дефектами отображается в правом верхнем углу экрана, под часами, а также в нижней строке в момент запуска теста. Изменить режим можно в и в процессе выполнения сканирования.
Ignore Bad Blocks — программа не будет выполнять никаких действий при обнаружении ошибки.
BB = RESTORE DATA — программа попытается восстановить данные из поврежденных секторов.
BB = Classic REMAP — выполняется запись в поврежденный сектор для вызова процедуры переназначения.
BB = Advanced REMAP — улучшенный алгоритм скрытия сбойных блоков. Используется, когда не помогает классический ремап. Программа выполняет специальную последовательность операций с целью формирования признака кандидата на ремап (атрибут 197) у сбойного блока. Затем выполняется 10-кратная запись, обрабатываемая микропрограммой накопителя как обычная обработка кандидата на ремап — если есть ошибка, выполняется переназначение, если нет ошибки — блок считается нормальным и удаляется из кандидатов на ремап. Данный режим позволяет выполнить скрытие сбойных блоков без потери пользовательских данных. Конечно, только в случаях, когда накопитель технически исправен и есть свободное место в резервной области для переназначения.
BB = Fujitsu Remap — выполнение специфических алгоритмов, основанных на недокументированных возможностях некоторых моделей накопителей Fujitsu
BB = Erase 256 sect — при обнаружении сбойного сектора выполняется перезаписывание блока из 256 секторов. Пользовательские данные не сохраняются.

Victoria 3.52 Freeware

В процессе работы с программой можно вызвать контекстную справку клавишей F1

Расшифровка кодов ошибок в Victoria:

BBK (Bad Block Detected) — Найден бэд-блок.

UNCR (Uncorrectable Error) — Неисправимая ошибка. Не удалось скорректировать данные избыточным кодом, блок признан нечитаемым. Может быть как следствием нарушения контрольной суммы данных (софтовый Bad Block), так и неисправностью HDD;

IDNF (ID Not Found) — Не найде идентификатор сектора. Обычно говорит о разрушении микрокода или формата низкого (физического уровня) HDD . У исправных HDD такая ошибка выдается при попытке обратиться к несуществующему адресу физического сектора;

ABRT (Aborted Command) — HDD отверг команду в результате неисправности, или команда не поддерживается данным HDD (пароль, устаревшая или слишком новая модель и т.д.)

T0NF (Track 0 Not Found) — не найдена нулевая дорожку, невозможно выполнить рекалибровку на стартовый цилиндр рабочей области. На современных HDD говорит о неисправности микрокода или магнитных головок;

AMNF (Address Mark Not Found) — адресный маркер не найден, невозможно прочитать сектор, обычно в результате неисправности тракта чтения или дефекта поверхности.

&nbsp &nbsp Версия Victoria For Windows обладает более скромными возможностями по настройке накопителя и выбору режимов тестирования, и на данный момент не имеет поддержки русского языка , однако ей проще пользоваться и имеющихся возможностей вполне достаточно для считывания таблицы SMART и оценки технического состояния накопителя.

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

Программа должна выполняться под учетной записью с павами администратора. В среде Windows 7 / 8 необходимо использовать контекстное меню «Запуск от имени администратора».

Для анализа состояния SMART-атрибутов выбираем режим работы через программный интерфейс Windows — включаем кнопку API в правой верхней части основного окна. Затем выбираем накопитель для проверки — нажимаем на кнопку Standard в основном меню программы и подсвечиваем мышкой нужный диск в окне со списком. В информационном окне будет отображен паспорт накопителя — модель, версию аппаратной прошивки, серийный номер, размер и т.п. Для получения данных SMART выбираем пункт меню SMART и жмем кнопку «Get SMART». Результат будет отображен в информационном окне программы.

Victoria for Windows

Краткое описание атрибутов (в скобках дано шестнадцатеричное значение номера):

Современные накопители поддерживают не только формирование атрибутов S.M.A.R.T, но и ведут дополнительные журналы статистики, а также поддерживают протокол SCT (SMART Command Transport), обеспечивающий считывание данных журналов. Журнал статистики устройства — это доступный только для чтения журнал SMART, передаваемый накопителем при получении команд READ LOG EXT, READ LOG DMA EXT или SMART READ LOG. В журналах отображается информация о выполнении встроенных тестов S.M.A.R.T ( self-test ), статистика ошибок, номера сбойных блоков LBA и т.п.

Анализ данных SMART и выполнение внутренних тестов в среде Linux — Обновленная статья об использовании утилиты smartctl в Linux для анализа технического состояния HDD, просмотра внутренних журналов SMART и выполнения встроенных тестов. В статье также имеется более подробное описание атрибутов S.M.A.R.T, в том числе, и для SSD-дисков.

Ремап (Remap) и проверка поверхности жесткого диска

&nbsp &nbsp Удивительно, как долго могут существовать ошибочные представления о жестких дисках и их правильной эксплуатации. В частности, даже неплохие специалисты в области компьютерной техники, бывает, рекомендуют выполнять в среде ОС Windows полное форматирование поверхности вместо быстрого, или даже низкоуровневое форматирование. Что касается последнего, свою лепту в путаницу с форматированием вносят и некоторые производители программного обеспечения, выпускающие программы для «низкоуровневого форматирования», которые ничего не форматируют. Низкоуровневое форматирование (Low Level Format) — это разметка поверхности диска специальной служебной информацией, в соответствии с геометрией накопителя, выполняемой специальной командой посылаемой накопителю. В стандарте ST506/412, который предшествовал современному стандарту ATA (AT attachment) имелась команда 50h (Format Track), при выполнении которой производилась разметка дорожки адресными маркерами, в соответствии с геометрией диска, т.е. в соответствии с номером цилиндра, номером головки и количеством секторов на дорожке. В дальнейшем, при записи данных, эта часть информации никогда не изменялась. При выполнении команды записи данных в сектор, накопитель никогда и ничего не записывает в ту область дорожки, которая является служебной и была создана при низкоуровневом форматировании дорожек поверхности специально для этого предназначенной командой 50h.

В современных накопителях стандарта ATA команды низкоуровневого форматирования вообще отсутствуют, а рекламируемые некоторыми производителями программы для выполнения данной операции являются простыми «стиралками» данных, выполняющими запись в область данных секторов. Нет, и не может быть, никаких программ для выполнения настоящего низкоуровневого форматирования в среде любой операционной системы. Любое подобное «низкоуровневое» форматирование — это высокоуровневое форматирование логической структуры пользовательских данных.

Что же касается полного форматирования в среде Windows, то по сравнению с быстрым, сразу создающим пустое оглавление, оно просто добавляет проверку поверхности диска перед тем, как выполнить то же самое, что делает быстрое форматирование. Что также не имеет смысла, поскольку проверка и отбраковка нестабильных секторов выполняется средствами аппаратной реализации технологии S.M.A.R.T накопителя, которая с данной задачей справляется гораздо эффективнее автоматически и в непрерывном режиме. Полное форматирование имело смысл на старых дисках, которые не могли выполнять замену нестабильных секторов на сектора из резервной зоны, и такие сектора сразу становились дефектными блоками ( Bad Block ), которые исключались из файловой структуры при форматировании с проверкой поверхности. Существует также утверждение, что при полном форматировании выполняется стирание всей поверхности диска. Это тоже не соответствует действительности, что легко проверяется любыми программами мониторинга обращений к диску , например, утилитой Disk Monitor из пакета Sysinternals Suite. Программа показывает, что при полном форматировании выполняется чтение поверхности, и небольшое количество операций записи, выполняемой после проверки поверхности при формировании пустого оглавления, в самом конце работы. И даже из того факта, что существую программы для восстановления данных после форматирования ( любого, в том числе и полного ) вполне логично следует вывод – никакого стирания данных не происходит.

При записи жесткий диск не проверяет, что и как было записано в область данных сектора, кроме случаев, когда предварительная диагностика, которой накопитель занимается все «свободное время», не пометила в соответствующих журналах эти сектора, как проблемные, или кандидаты на переназначение, что отражается в атрибуте 197 SMART (Current Pending Sectors).

Кандидат — это сектор (или группа секторов), который не был считан за стандартное время и с установленным числом повторов. В режиме простоя, запустится программа самотестирования, которая попытается считать данные с применением дополнительных режимов. Если сектор будет успешно считан — программа самодиагностики попытается записать данные обратно, и если запись выполнится успешно, то из кандидатов такой сектор удалится. Если же записанная на то же место информация не будет нормально считываться, то выполнится переназначение сектора (Remap), данные запишутся в сектор из специально для этого предназначенной резервной области (spare area). В дальнейшем, всегда вместо этого сбойного сектора будут считываться данные из резервной области. А сектор-кандидат на переназначение, не исправленный программой самотестирования, увеличит значение атрибута 198 (Offline Scan UNC Sectors). Убрать такой «бед» можно только перезаписью. Но если резервная область закончилась, то все последующие кандидаты на переназначение превратятся в реальные «плохие секторы» (Bad Blocks). В этом случае программы полного форматирования и проверки поверхности могут исключить сбойный сектор из логической структуры диска, однако, использовать накопитель с закончившейся резервной областью — это очень рискованная идея, которая обязательно закончится потерей данных. Использовать такой диск можно разве что для опасных экспериментов, хранения некритичных данных, или выбросить его на помойку.

При возникновении плохих блоков (Bad Block) нередко возникает необходимость проверки принадлежности сбойного участка конкретному файлу. Для этих целей можно воспользоваться консольной утилитой NFI.EXE (NTFS File Sector Information Utility) из состава пакета Support Tools от Microsoft. Скачать 10кб
Формат командной строки
nfi.exe Диск Номер логического сектора
Подсказку по использованию NFI.EXE можно получить по команде nfi.exe /?

Букву логического диска можно задавать без двоеточия. Номер логического сектора — это номер сектора относительно начала логического диска. Обратите внимание на тот факт, что программы сканирования работают со всей поверхностью физического диска и используют нумерацию секторов, не привязанную к его логической структуре. А номер сектора, задаваемый в качестве параметра утилиты NFI.EXE — это номер сектора логического диска (раздела), и он отличается величиной смещения начального сектора раздела от начала диска. Значение номеров начальных секторов логических дисков можно получить нажав кнопку View part data вкладки «Advanced» программы Victoria For Windows.

nfi.exe C: 655234 — выдать имя файла, которому принадлежит сектор 655234
nfi.exe C: 0xBF5E34 — то же самое, но номер сектора задан в шестнадцатеричной системе счисления
В результате выполнения команды будет выдано сообщение

***Logical sector 12541492 (0xbf5e34) on drive C is in file number 49502.
\WINDOWS\ system32\ D3DCompiler_38.dll

Т.е. интересующий нас сбойный сектор принадлежит файлу D3DCompiler_38.dll в каталоге Windows\system32. В случае, когда сбойные блоки принадлежат системным файлам Windows, возможно появление синих экранов смерти или зависаний системы с перезагрузкой. В большинстве случаев, информация о наличии сбоев дисковой подсистемы, будет отображаться в системном журнале Windows.

Для выполнения тестирования поверхности накопителя с принудительным переназначением (ремапом) сбойных секторов можно воспользоваться программами тестирования HDD, алгоритм работы которых специально разработан таким образом, чтобы «заставить» внутреннюю микропрограмму накопителя выполнить переназначение нестабильного участка.
Так, например, подобные алгоритмы будут использоваться, в упоминаемой выше программе Victoria, если выбран режим тестирования поверхности с выполнением операций восстановления или переназначения (Classic Remap, Advanced Remap :). Изначально режим выполнения теста установлен в Ignore Bad Blocks

Victoria - режимы тестирования поверхности

Нажатие пробела изменяет режим обработки сбоев. При выполнении такого вида тестирования накопителя, пользовательские данные остаются в сохранности.
Добавлю, что режим Advanced Remap, хотя и является наиболее эффективным, на практике может приводить к «зависанию» микропрограммы на некоторых моделях HDD, выйти из которого можно только с использованием принудительного сброса (режим Reset , клавиша F3). После чего можно продолжить тестирование. Если в режиме Advanced Remap таймауты происходят слишком часто, имеет смысл перейти к использованию классического ремапа.

Для программы Victoria For Windows переназначение сбойных секторов включается установками режима выполнения теста в правой части основного окна. По умолчанию установлен режим Ignore — ничего не делать при обнаружении сбоя, а нужно установить режим Remap

Victoria for Windows - режим Remap

Для тестирования с переназначением сбойных секторов в программе MHDD , используется команда SCAN ( клавиша F4) и выбор режима Remap: ON . Изменение режима (OFF / ON )выполняется нажатием клавиши ENTER или пробел.

Сканирование поверхности MHDD

Добавлю, что особого выбора алгоритмов тестирования с переназначением сбойных секторов у программы MHDD, в отличие от Victoria, нет, однако MHDD обладает несколько большими возможностями, в т.ч. позволяет работать с SCSI-дисками и съемными USB HDD, при использовании драйверов, позволяющих получить доступ к съемному диску как SCSI-устройству (драйверы ASPIEHCI.SYS, USBASPI.SYS).

&nbsp &nbsp Для компьютеров, не имеющих накопителей на гибких магнитных дисках, возможность загрузки DOS-версий MHDD и Victoria можно реализовать c использованием USB флешки. Один из вариантов — мультизагрузочная флешка на основе загрузчика GRUB и набора образов загружаемых CD и Floppy дисков. Практический пример создания мультизагрузочной флешки приведен в статье Создание загрузочной флешки ERD Commander . Часть статьи посвящена использованию, в качестве полезного дополнения к ERDC, некоторых других программных продуктов, в том числе и загрузке образов дискет с DOS и программами MHDD 4.60 и Victoria For DOS v 3.52 .

Вернуть переназначенные сектора на место, обычными программными средствами, невозможно. Однако, с использованием специального оборудования и методик можно выполнить внутренние технологические утилиты (selfscan, или селфскан), которые заново произведут те операции, которые выполняются для анализа поверхности при изготовлении накопителя, аналогично настоящему низкоуровневому форматированию, предназначенному для проверки поверхности и физической разметки дорожек.

Заводские тесты заново сформируют таблицы дефектов P-List (Primary List) и G-List (Grown List) — заводской и полученный в процессе эксплуатации списки дефектных блоков. При изготовлении накопителя выполняется анализ состояния поверхности и ее разметка. При этом создается таблица дефектов P-List, а G-List остается пустым. В процессе эксплуатации накопитель сам помещает в G-List найденные дефекты. Это может происходить как во время работы (автоматическое переназначение — auto reassign), так и в процессе выполнения встроенных тестов, которые накопитель выполняет при отсутствии обращений от управляющего компьютера.

HDAT2 – альтернатива программам MHDD и Victoria.

Упоминаемые выше программы Victoria for DOS и MHDD являются наиболее известными средствами диагностики жестких дисков. Однако, они имеют существенный недостаток — работа возможна только с дисками ATA/SATA, или с некоторыми типами SCSI-устройств ( MHDD). Программы не поддерживаются авторами, и не обновляются уже несколько лет. В качестве альтернативы, на сегодняшний день, можно рассматривать либо специализированные программы производителей оборудования, как правило, не являющиеся универсальными, либо программу HDAT2, поддерживающую работу с более обширным списком накопителей, в том числе с интерфейсами SCSI и USB. Кроме того, HDAT2 поддерживает различные режимы тестирования и восстановления поверхности, а также позволяет выполнять встроенные тесты SMART и просматривать внутренние журналы накопителей. При меньшей наглядности выполняемых тестов, программа HDAT2 значительно превосходит MHDD и Victoria по своим функциональным возможностям.

Для работы HDAT2 используется загрузка в среде Windows98 с возможностью выбора конфигурации драйверов, которые будут использоваться для доступа к накопителям:

HDAT2 – выбор загружаемых драйверов

Программа HDAT2 обеспечивает 3 вида доступа к дисковым устройствам:

через прерывание INT13h BIOS;

через порты ввода вывода;

через драйверы ASPI;

Благодаря хорошо реализованному алгоритму распознавания подключенных дисковых устройств, программа, как правило, верно определяет их характеристики и задает необходимые режимы работы с ними. Хотя бывают и исключения, как например, приходилось сталкиваться с тем, что неверно определяется объем жестких дисков некоторых моделей емкостью 4 Тб. Тем не менее, программа позволяет, например, выполнить тестирование SD-карты, установленной в телефон Alcatel, подключенный к компьютеру через USB-порт, что невозможно с использованием MHDD и Victoria:

HDAT2 – тестирование SD карты в телефоне, подключенном через USB

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

Лучшая, в свое время, программа для тестирования жестких дисков Victoria возвращается!

В июле 2018 года, после 8-летнего перерыва, автором, Сергеем Казанским, возобновлен проект «Victoria». Вышла очередная версия программы Victoria for Windows со значительными переделками — в программу встроен мощный сканер поверхности HDD, который позволяет продиагностировать накопитель на наличие сбойных участков, плавающих дефектов и ошибок интерфейса. Victoria способна протестировать большинство дисков на предельной скорости, независимо от их типа. Особенность сканера — применение специальных алгоритмов, что позволяет эффективно проверять как медленные, так и быстрые диски. Сделано получение S.M.A.R.T.-параметров HDD и SSD, подключенных через USB. В версии 4.66b поддерживаются 80% моделей USB-SATA мостов, и этот показатель будет увеличиваться. Добавлено управление кэшем через USB, SMART-тесты через USB. Работает также и Automatic Acoustic Management (AAM) на USB-накопителях: программное управление уровнем акустического шума за счёт изменения скорости перемещения головок. Victoria способна показать паспорт USB-накопителя, и таким образом определить тип установленного внутри накопителя без вскрытия бокса. Сопровождение программы включает в себя статьи, документацию, обзор наиболее частых вопросов и ответы на них. Эти материалы будут постепенно создаваться и добавляться в раздел «Статьи», доступный в главном меню официального сайта.

Обновленная Victoria работает в среде операционных систем Windows 2000/XP/8/10 x32. В среде Windows 9х программа работает только в режиме PIO.

Технические требования к оборудованию:

— Память 2 Gb или более.

— Видеокарта SVGA. Рекомендуется видеорежим от 1280*1024.

— Желательно наличие доступа в Интернет.

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

В среде 64-разрядных ОС Windows работоспособность Victoria сохраняется, за исключением режима PIO.

Мониторинг состояния HDD.

&nbsp &nbsp Для отслеживания технического состояния диска в непрерывном режиме используется специальное программное обеспечение (нередко, платное), главной задачей которого является периодическое считывание и анализ значений атрибутов таблицы SMART с целью предупредить пользователя о достижении порога критического состояния, когда работоспособность устройства и сохранность пользовательских данных не гарантируются. Одним из бесплатных, и тем не менее, популярных в среде пользователей ПК, представителей программ для мониторинга состояния HDD является CrystalDiskInfo

Основные достоинства — простота и удобство использования, компактность и нетребовательность к ресурсам, поддержка большого количества жестких дисков различных моделей. Несложные настройки пороговых значений температуры и некоторых атрибутов S.M.A.R.T позволяют организовать оповещение пользователя при их достижении. Программа постоянно совершенствуется разработчиками и приобретает все большую функциональность, удобный и приятный интерфейс.

CrystalDiskInfo

Кроме CrystalDiskInfo, на сайте разработчика вы можете также скачать другие программы для тестирования, настройки и оценки производительности — CrystalDiskMark, CrystalCPUID, CrystalDMI, CrystalMark .

Список команд жестких дисков стандарта ATA для работы с данными S.M.A.R.T

Наименование &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp Код операции

SMART_READ_VALUES&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp 0xd0
SMART_READ_THRESHOLDS &nbsp &nbsp &nbsp &nbsp &nbsp&nbsp 0xd1
SMART_AUTOSAVE&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp&nbsp 0xd2
SMART_SAVE&nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp 0xd3
SMART_IMMEDIATE_OFFLINE &nbsp &nbsp &nbsp &nbsp 0xd4
SMART_READ_LOG_SECTOR &nbsp &nbsp &nbsp &nbsp &nbsp&nbsp 0xd5
SMART_WRITE_LOG_SECTOR &nbsp &nbsp &nbsp &nbsp&nbsp 0xd6
SMART_ENABLE &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp&nbsp 0xd8
SMART_DISABLE &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp&nbsp&nbsp 0xd9
SMART_STATUS &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp0xda
SMART_AUTO_OFFLINE &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp 0xdb

В качестве дополнительного материала по технологии S.M.A.R.T и использованию программного обеспечения smartmontools в операционных системах семейства Linux, может пригодиться статья S.M.A.R.T и оценка технического состояния жесткого диска в Linux

Использование терминального режима для ремонта HDD.

&nbsp &nbsp Данный материал предоставляется чисто в ознакомительных целях. Работа с диском в терминальном режиме требует осторожности, определенных знаний, и понимания того, что вы делаете. Даже одна единственная ошибка в команде может привести к полной неработоспособности накопителя. Если на проблемном устройстве у вас хранились бесценные данные, и у вас нет достаточного опыта — лучше обратитесь к специалистам по восстановлению информации. Начинать учиться, лучше всего, на частично неисправном накопителе, который вам не жалко выбросить.

&nbsp &nbsp За основу я взял методику, описанную здесь и здесь
Применяется для реанимации накопителей Seagate Barracuda 7200.11 с прошивкой SD15 производства Таиланд. Проблема заключается в ошибке прошивки SD15, приводящей к разрушению информации в служебной области накопителя и, как следствие, недоступности накопителя в BIOS или неправильного определения его объема (LBA 0). Причем сам накопитель исправен, но недоступен по интерфейсу из-за установленного сигнала занятости выполнением операции (BSY),. Пока этот сигнал активен, никакие другие сигналы интерфейса недействительны, и, следовательно, заменить прошивку с использованием фирменных утилит с сайта производителя невозможно. Для возвращения накопителя в рабочее состояние, позволяющее заменить прошивку, используется выполнение нескольких команд в терминальном режиме подключения накопителя.
&nbsp &nbsp Для подключения используется стандартный последовательный порт компьютера (COM) и адаптер RS-232 — TTL, необходимый для преобразования уровней сигналов интерфейса RS-232 в уровни TTL. Схему адаптера можно легко собрать самостоятельно, но проще использовать готовый кабель — переходник, применяемый для подключения мобильного телефона к последовательному порту. За неимением «настоящего» COM-кабеля для подобного подключения, я использовал кабель USB-to-Serial, эмулирующий последовательный порт при подключении через USB с помощью драйвера Proliffic-USB-To-Serial-Com-Port (ser2pl.sys).

&nbsp &nbsp Методика несложная и вполне работоспособная, но, в основном, рассчитана на применение опытными специалистами по ремонту HDD. Я постараюсь дать некоторые пояснения, которых в оригинале нет.

&nbsp &nbsp Итак, кроме обычного интерфейса ATA или SATA, современные накопители имеют служебный интерфейс для подключения в терминальном режиме. На плате электроники накопителя любого производителя вы найдете кроме стандартных разъемов питания и интерфейса, еще и дополнительный разъем, никак не обозначенный, и имеющий не менее 3-х контактов. Это и есть разъем для подключения терминала через последовательный порт накопителя.

Разъем подключения терминала к диску

Для разных моделей и для разных производителей оборудования, разъемы будут отличаться. Общее у них то, что для обмена данными используется упрощенный последовательный порт с уровнями сигнала стандарта TTL. Поэтому и необходим, при подключению к последовательному порту (COM) компьютера, адаптер, согласующий уровни сигналов RS-232 (от -12V до +12V) и TTL (от 0V до +5V). Из набора линий стандарта RS-232 используются только общий (Ground) , TX для передаваемых данных и RX — для принимаемых. При подключении жесткого диска к терминалу, нужно линию передачи данных (контакт TX технологического разъема HDD) соединить с линией принимаемых данных терминала (контакт RX разъема адаптера) и наоборот, линию TX адаптера — с линией RX накопителя. В качестве терминала можно использовать любой компьютер с последовательным портом и программой эмуляции терминала, обычно Hyperterminal или putty. Параметры порта (скорость, число битов, четность, количество стоп-битов) могут отличаться для разных моделей накопителей. Обычно, отличается только скорость передачи данных. А остальные — 8 бит, нет бита четности, 1 стоповый бит. Иногда параметры записывается в виде «9600, 8 ,N ,1» — скорость 9600 бит/сек, 8-битовые посылки, без бита четности с 1 стоповым битом.

В разных моделях накопителей используются свои контакты для подключения к терминалу

3,5″ накопители Seagate PATA :

Интерфейсный разъём. : : | : RX / TX Разъём питания

3,5″ и 2.5″ накопители Seagate SATA, а также 2.5″ Samsung SATA :

Разъём питания. Разъём SATA . . . . RX TX

3,5″ накопители Samsung PATA :

Интерфейсный разъём. : : : | RX / TX Разъём питания

3,5″ накопители Samsung SATA :

Разъём питания. Разъём SATA : : : | RX / TX

Особенность накопителей производства Western Digital — отсутствие штатного разъема для терминального подключения, которое практически не используется для ремонта накопителей WD из-за примитивных возможностей и сложности подключения. Для диагностики и ремонта используется дополнительное оборудование и специализированное программное обеспечение.

Использование Hiperterminal для подключения накопителей Seagate.

Выполняете «Пуск — Программы — Стандартные — Связь — Hiper Terminal» После старта выбираете существующее или создаете новое подключение. Выбираете порт, к которому подключен накопитель

Выбор COM порта

и задаете параметры обмена для него — 9600,8,N,1 , управление потоком — Нет.
Во многих методиках скорость обмена данными указывается 38400. Однако, это зависит от конкретной модели накопителя, и у Seagate часто встречается скорость 9600 бит/сек. Если у вас возникнут проблемы с обменом данными накопителя и терминала, попробуйте подобрать скорость последовательного порта.

Параметры COM порта

После определения параметров последовательного порта нужно установить параметры эмуляции терминала в свойствах созданного подключения ( «Файл» — «Свойства» — «Настройка» — «Параметры ASCII»)

Параметры эмуляции терминала

Дистрибутив операционной системы Windows 7 не содержит привычного Гипертерминала , однако можно воспользоваться этим средством из комплекта стандартных программ Windows XP, скачать, около 600кб . Для работы с терминалом нужно использовать «Запуск от имени Администратора». В архиве также имеется исполняемый файл PuTTY версии 6.0, работающий во всех версиях Windows.

Режим «Отображать введенные символы на экране» в дальнейшем можно будет выключить, чтобы не было удвоения вводимых с клавиатуры символов, однако на начальном этапе настройки и проверки подключения, он может оказаться полезным — вы будете видеть в окне терминала вводимые вами символы.

&nbsp &nbsp Убедитесь, что ваш терминал работает. Для этого соедините RX и TX между собой. При наборе с клавиатуры вы должны видеть удвоение набираемых символов, поскольку на экран терминала сначала выводится введенный символ, передаваемый по линии TX, а затем, этот же символ, принятый по линии RX. Если режим «Отображать введенные символы на экране» выключить, то удвоения символов не будет, поскольку будут отображаться только символы, принятые по линии RX.

&nbsp &nbsp Убедившись в правильности работы терминала, подключите к нему жесткий диск, соединив линию передаваемых данных (выход TX накопителя) с линией принимаемых (входом RX адаптера) и наоборот — RX адаптера с TX накопителя. Если ошибетесь, — ничего страшного не случится, поменяйте контакты местами. Интерфейсный кабель (SATA или ATA) должен быть отключен.

&nbsp &nbsp Если параметры порта выбраны правильно и накопитель поддерживает терминал, то, при нажатии CTRL-Z вы должны увидеть приглашение:

F3 в строке приглашения к вводу команд служит индикатором поколения архитектуры накопителей Seagate . Символ «T» — указывает, что команды относятся к уровню диагностического монитора (Diagnostic Monitor Level), на котором возможно выполнение внутренних тестов и процедур отладки. На каждом уровне используется свой набор команд, например, для уровня 1 — это команды для работы с памятью, системными переменными и т.п, для уровня 2 — команды для работы с накопителем — остановка и запуск двигателя, выполнение встроенных тестов и т.п. Уровни обозначаются цифрами или буквами. Набор уровней, и команд внутри уровня, зависят от модели накопителя. Некоторые из команд доступны на любом уровне, например, команда перехода на новый уровень, команды для отображения содержимого памяти и т.п. В зависимости от версии микропрограммного обеспечения, в качестве общих команд могут использоваться точка ( . ), восклицательный знак ( ! ), знак вопроса ( ? ) тильда (

), в ответ на которые накопитель выводит диагностические данные о своем текущем состоянии.

Переход на нужный уровень выполняется с помощью команды:

/номер уровня
Например: /2 — перейти на уровень 2

&nbsp &nbsp Будьте внимательны, соблюдайте синтаксис команд. Строчные и заглавные символы при работе в терминале отличаются . Многие команды выполняют запись в служебную область дискового пространства накопителя и, уже поэтому, потенциально опасны.
В моделях накопителей Seagate 7200.11 появилась возможность получить краткую подсказку по уровням и командам. Для этого нужно перейти на уровень «C»
/C
И ввести команду «Q»
C> Q
В ответ вы получите список уровней и команд, доступных для данной модели накопителя. Подсказку по конкретной команде можно получить с помощью конструкции:

&nbsp &nbsp При некоторых неисправностях, при нажатии CTRL-Z , вместо приглашения уровня T> вы можете увидеть подобное сообщение:

LED: 000000CC FAddr: 0024A051

В среде специалистов по ремонту накопителей эта ошибка получила название «муха це-це», что созвучно коду ошибки 000000CC на латыни. Обычно сообщение появляется с определенным интервалом и означает, что терминал заблокирован, и ввод с клавиатуры не воспринимается накопителем. Никакие команды, вводимые с клавиатуры, не выполняются. Как правило, код ошибки 000000CC вызван тем, что внутренняя микропрограмма накопителя не может считать необходимые данные из служебной области дисковой поверхности. Ошибка может быть вызвана многими причинами, например, неисправной головкой, дефектом поверхности, ошибкой при записи журналов в момент выключения питания и т.п. Вполне понятно, что при механических неисправностях или дефектах , использование диагностического режима не имеет смысла. Тем не менее, в некоторых случаях, использование внутренних диагностических команд, вводимых с использованием терминального подключения, позволяет решить проблему восстановления данных, или даже полной работоспособности ( на какое-то время) устройства.

и вводится команда остановки двигателя — «Z».

О выполнении операции остановки и так остановленного двигателя вы увидите сообщение в окне терминала:
Spin Down Complete
Elapsed Time 0.138 msecs
F3 2>
После этого, осторожно, не отключая питания, плата электроники подключается к контейнеру и выполняется команда включения двигателя — «U»:

После раскручивания двигателя, увидите сообщение:

Spin Up Complete
Elapsed Time 7.146 secs

Теперь накопитель готов к работе в терминальном режиме.

Если при выполнении команды U получено сообщение содержащее код ошибки 84150180 , то возможно, отсутствует контакт между платой электроники и контейнером :

Spin Error
Elapsed Time 12.917 secs
R/W Status 2 R/W Error 84150180

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

&nbsp &nbsp В сети встречается несколько методик восстановления работоспособности накопителей семейства 7200.11, которые позволили добиться положительного результата. Логика подсказывает, что как минимум, нужно:
— обнулить содержимое SMART Причиной разрушения транслятора, судя по всему, является ошибка в микропрограмме, связанная с обработкой этого содержимого. Иначе причина разрушения транслятора не будет устранена.
— пересчитать содержимое транслятора заново, что вернет работоспособность внутренней микропрограмме накопителя.

В большинстве методик используется команда обнуления списка переназначенных в процессе эксплуатации секторов G-List (Grown List). Мне кажется, в случае восстановления не только работоспособности, но и целостности данных, это будет лишним, хотя, вероятность порчи транслятора в зависимости от содержимого G-List, очевидно, исключить нельзя. На практике, очистку G-List я никогда не использовал, а восстановление нескольких Barracuda 7200.11 выполнилось вполне успешно.

&nbsp &nbsp Для очистки данных SMART нужно перейти на уровень 1

/1
и выполнить команду управления S.M.A.R.T (SMART Control) N . Данная команда имеет несколько подкоманд, идентифицируемых цифрой или буквой после «N» — N1 — создать SMART-сектор (очистка SMART), N2 — обновить SMART-атрибуты, N3- выполнить обновление прошивки, N5 — выдать данные атрибутов, N6 — выдать данные о пороговых значениях атрибутов, N7 — выполнить дамп G-List, N8 — дамп журнала критических событий, N9 — дамп содержимого P-List, NA — выдать журнал состояния накопителя за последние 2 часа. Для обнуления данных SMART используется команда N1:
F3 1> N1
После успешного выполнения команды обязательно нужно выключить и снова включить питание накопителя.
Для перегенерации транслятора используется команда форматирования (FormatPartition ) «m» уровня T. В команде используется индекс раздела, для которого будет пересчитываться транслятор, m0 — пользовательский (user partition index), m1 — системный (system partition index).

F3 T> m0,2,2,0,0,0,0,22

Обратите внимание, в набираемой команде никаких пробелов нет. В некоторых методиках команда представлена с пробелом после первой запятой (m0, 2,2,0,0,0,0,22) — это ошибка. Значения параметров команды:

2 — опция форматирования [FormatOpts] — 2 — информация не затирается.
2 — опция обработки таблиц дефектов [DefectListOpts] 2 — не изменять.
0,0,0,0 — опции обработки ошибок при выполнении команды.
22 — ключ достоверности [ValidKey] — дополнительная защита от неправильного набора команды. Должен быть равен 22.

Команда будет выполняться от нескольких секунд до минут. Нужно обязательно дождаться ее завершения, о чем будет выдано сообщение на терминал:
Max Wr Retries = 00, Max Rd Retries = 00, Max ECC T-Level = 14, Max Certify Rewrite Retries = 00C8
User Partition Format 10% complete, Zone 00, Pass 00, LBA 00004339, ErrCode 00000080, Elapsed Time 0 mins 07 secs
User Partition Format Successful — Elapsed Time 0 mins 07 secs

После выполнения этой команды рекомендуется остановить двигатель командой Z уровня 2 и выключить питание компьютера. Отключите терминал и подключите интерфейсный кабель к накопителю. После включения питания, если восстановление прошло успешно, накопитель должен правильно определиться в BIOS. Для исключения повторения ситуации остается только взять свежую прошивку для вашей модели с сайта Seagate и записать ее в накопитель. Обычно, для этого используется образ загрузочного CD (файл .iso), который можно взять на сайте производителя под конкретную модель и редакцию жесткого диска. Образ записывается на болванку и выполняется загрузка в DOS с автоматическим запуском программы для обновления прошивки.

Восстановление работоспособности накопителя ST3640323AS с прошивкой SD35.

&nbsp &nbsp Представитель того же проблемного семейства Barracuda 7200.11 с прошивкой не SD15, или, вроде бы, исправленной SD1A, а — SD35 !. Да, похоже, что в самом деле, 7200.11 — не очень удачное семейство «рыбок».

Внешнее проявление — диск не определяется в BIOS. После включения электропитания, двигатель запускается, слышен характерный щелчок, затем двигатель останавливается, и все повторяется с интервалом 10-15 секунд. При подключении терминала выяснилось, что скорость обмена для последовательного порта данной модели накопителя равна 38400 кбит/сек. На экран терминала выводится сообщения:

Rst 0x20M
(P) SATA Reset

LED:000000CC FAddr:0024CDC9
Rst 0x20M
(P) SATA Reset
LED:000000CC FAddr:0024CDC9
Rst 0x20M

Реакция на CTRL-Z присутствует, накопитель переходит на уровень /T, однако, тут же возвращается на «SATA Reset» :

Практика эксплуатации Seagate семейства 7200.11 показала, что обновление прошивок не является кардинальным решением проблемы самоблокировки накопителей внутренней микропрограммой. Очевидно, проблема не только в ошибках, допущенных разработчиками , но и в сложности алгоритмов обработки журналов, сбоев, трудности имитации реальных условий возникновения проблемной ситуации. На данный момент, известно несколько моделей, которые с большой вероятностью, через определенное время эксплуатации, отказываются работать. На сайте производителя периодически выкладываются обновления прошивок для различных типов накопителей, и тем не менее, проблема пока остается.

В описываемом случае, была применена методика, описанная выше, хотя версия прошивки (SD35) по данным сайта Seagate на тот момент времени, не являлась проблемной. Практика эксплуатации накопителей серии 7200.11 показала, что замена прошивки SD15 на рекомендуемую производителем версию SD1A , проблемы не решает. Через некоторое время ошибка может повториться. Затем на сайте была выложена версия SD1B, которая также не решила проблему саморазрушения транслятора. Теперь вот появилась и проблемная прошивка SD35. Кроме того, на тематических форумах встречается упоминание подобной ошибки на накопителях с прошивками AD14, SD15, SD16, SD17, SD18, SD19, SD81. Для проверки наличия обновленных прошивок для конкретной модели накопителя можно воспользоваться страницей поиска загрузок Seagate

Если вы желаете поделиться ссылкой на эту страницу в своей социальной сети, пользуйтесь кнопкой «Поделиться»

Бытует
мнение, что первая программная ошибка
была обнаружена на заре развития ЭВМ,
когда в Массачусетском технологическом
институте окончилась неудачей попытка
запуска машины Whirlwind I («Вихрь I»). Неистовая
проверка монтажа, соединений и оборудования
не выявила никаких неисправностей.
Наконец, уже отчаявшись, решили проверить
программу, представляющую собой маленькую
полоску бумажной ленты. И ошибка была
обнаружена именно в ней – в этом
программистском ящике Пандоры, из
которого на будущие поколения программистов
обрушились беды, связанные с ошибками
программ.

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

Далее
будет дана классификация ошибок, что
поможет сосредото-

чить
наши усилия в правильном направлении.

5.3.1
Классификация дефектов

Для
классификации ошибок мы должны определить
термин «ошибка».

Ошибка
– это расхождение между вычисленным,
наблюдаемым и ис-

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

Такое
определение понятия «ошибка» не является
универсальным,

так
как оно больше подходит для понятия
«программная ошибка». В технологии
программирования существуют не только
программные ошибки, но и ошибки, связанные
с созданием программного продукта,
например, ошибки в документации программы.
Но нас пока будут интересовать программные
ошибки.

Итак,
по
времени появления

ошибки можно разделить на три вида:

• структурные
ошибки набора;

• ошибки
компиляции;

• ошибки
периода выполнения.

Структурные
ошибки возникают непосредственно при
наборе про-

граммы.
Что это за ошибки? Если кто-то работал
в среде разработки Microsoft Visual Basic, то он
знает, что если набрать оператор If, затем
сравнение и нажать на клавишу Enter, не
набрав слова Then, то Visual Basic укажет, что
возникла ошибка компиляции. Это не
совсем верно, так как компиляция в Visual
Basic происходит только непосредственно
при выполнении команды программы. В
данном случае мы имеем дело именно со
структурной ошибкой набора.

Данный
тип ошибок определяется либо при наборе
программы (са-

мой
IDE
(Integrated
Development
Environment)
– интегрированной средой разработки)
или при ее компиляции, если среда не
разделяет первые два типа ошибок.

К
данному типу ошибок относятся такие
как: несоответствие числа

открывающих
скобок числу закрывающих, отсутствие
парного оператора

(например,
try без catch), неправильное употребление
синтаксических

знаков
и т. п.

Во
многих средах разработки программного
обеспечения данный

тип
ошибок объединяется со следующим типом,
так как раннее определение ошибок
вызывает некоторое неудобство при
наборе программ (скажем, я задумал что-то
написать, а потом вспомнил, что в начале
пропустил оператор, тогда среда разработки
может выдать мне ошибку при попытке
перейти в другую строку).

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

Ошибки
компиляции возникают из-за ошибок в
тексте кода. Они

включают
ошибки в синтаксисе, неверное использование
конструкций

языка
(оператор else в операторе for и т. п.),
использование несущест-

вующих
объектов или свойств, методов у объектов.

Среда
разработки (компилятор) обнаружит эти
ошибки при общей

компиляции
приложения и сообщит о последствиях
этих ошибок. Необходимо подчеркнуть
слово «последствия» – это очень важно.
Дело в том, что часто, говоря об ошибках,
мы не разделяем проявление ошибки и
саму ошибку, хотя это и не одно и то же.
Например, ошибка «неопределенный класс»
не означает, что класс не определен. Он
может быть неподключенным, так как не
подключен пакет классов.

Ошибки
периода выполнения возникают, когда
программа выпол-

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

ratio
= firstValue / sum.

Если
переменная sum содержит ноль, то деление
– недопустимая

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

Хотя
данный тип ошибок называется «ошибками
периода выполне-

ния»,
это не означает, что ошибки находятся
только после запуска программы. Вы
можете выполнять программу в уме и
обнаружить ошибки данного типа, однако,
понятно, что это крайне неэффективно.

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

В
теоретической информатике программные
ошибки классифицируют по
степени нарушения логики

на:


синтаксические;


семантические;


прагматические.

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


пропуск необходимого знака пунктуации;


несогласованность скобок;


пропуск нужных скобок;


неверное написание зарезервированных
слов;


отсутствие описания массива.

Все
ошибки данного типа обнаруживаются
компилятором.

Семантические
ошибки заключаются в нарушении порядка
операторов, параметров функций и
употреблении выражений. Например,
параметры у функции add (на языке Java) в
следующем выражении указаны в неправильном
порядке:

GregorianCalendar.add(1,
Calendar.MONTH).

Параметр,
указывающий изменяемое поле (в примере
– месяц), должен идти первым. Семантические
ошибки также обнаруживаются компилятором.

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

Прагматические
ошибки (или логические) заключаются в
неправильной логике алгоритма, нарушении
смысла вычислений и т. п. Они являются
самыми сложными и крайне трудно
обнаруживаются. Компилятор может выявить
только следствие прагматической ошибки
(см. выше пример с делением на ноль,
компилятор обнаружит деление на ноль,
но когда и почему переменная sum стала
равна нулю – должен найти программист).

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

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

Ошибка
адресации

– ошибка, состоящая в неправильной
адресации данных (например, выход за
пределы участка памяти).

Ошибка
ввода-вывода

– ошибка, возникающая в процессе обмена

данными
между устройствами памяти, внешними
устройствами.

Ошибка
вычисления

– ошибка, возникающая при выполнении

арифметических
операций (например, разнотипные данные,
деление на нуль и др.).

Ошибка
интерфейса

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

Ошибка
обращения к данным

– ошибка, возникающая при обра-

щении
программы к данным (например, выход
индекса за пределы массива, не
инициализированные значения переменных
и др.).

Ошибка
описания данных

– ошибка, допущенная в ходе описания

данных.

Первичное
выявление ошибок

В
течение многих лет большинство
программистов убеждено в том, что
программы пишутся исключительно для
выполнения их на машине и не предназначены
для чтения человеком, а единственным
способом тес-тирования программы
является ее исполнение на ЭВМ. Это мнение
стало изменяться в начале 70-х годов в
значительной степени благодаря книге
Вейнберга «Психология программирования
для ЭВМ». Вейнберг показал, что программы
должны быть удобочитаемыми и что их
просмотр должен быть эффективным
процессом обнаружения ошибок.

По
этой причине, прежде чем перейти к
обсуждению традиционных методов
тестирования, основанных на применении
ЭВМ, рассмотрим процесс тестирования
без применения ЭВМ («ручное тестирование»),
являющийся по сути первичным обнаружением
ошибок. Эксперименты показали, что
методы ручного тестирования достаточно
эффективны с точки зрения нахождения
ошибок, так что один или несколько из
них должны использоваться в каждом
программном проекте.

Описанные
здесь методы предназначены для периода
разработки, когда программа закодирована,
но тестирование на ЭВМ еще не началось.
Аналогичные методы могут быть получены
и применены на более ранних этапах
процесса создания программ (т. е. в конце
каждого этапа проектирования).

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

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

Во-вторых,
психология программистов, по-видимому,
изменяется, когда начинается тестирование
на ЭВМ. Возрастает внутреннее напряжение
и появляется тенденция «исправлять
ошибки так быстро, как только это
возможно». В результате программисты
допускают больше промахов при корректировке
ошибок, уже найденных во время тестирования
на ЭВМ, чем при корректировке ошибок,
найденных на более ранних этапах.

Кроме
того, скептицизм связан с тем, что это
«первобытный метод». Да, сейчас стоимость
машинного времени очень низка, а стоимость
труда программиста, тестировщика высока
и ряд руководителей пойдут на все, чтобы
сократить расходы. Однако, есть другая
сторона ручного тестирования – при
тестировании за компьютером причины
ошибок выявляются только в программе,
а самая глубокая их причина – мышление
программиста, как правило, не претерпевает
изменений, при ручном же тестировании,
программист глубоко анализирует свой
код, попутно выявляя возможные пути его
оптимизации, и изменяет собственный
стиль мышления, повышая квалификацию.
Таким образом, можно прийти к выводу,
что ручное тестирование можно и нужно
проводить на первичном этапе, особенно,
если нет прессинга времени и бюджета.

5.3.2
Инспекции и сквозные просмотры

Инспекции
исходного текста и сквозные просмотры
являются основными методами ручного
тестирования. Так как эти два метода
имеют много общего, они рассматриваются
здесь совместно.

Инспекции
и сквозные просмотры включают в себя
чтение или визуальную проверку программы
группой лиц. Эти методы развиты из идей
Вейнберга. Оба метода предполагают
некоторую подготовительную работу.
Завершающим этапом является «обмен
мнениями» – собрание, проводимое
участниками проверки. Цель такого
собрания – нахождение ошибок, но не их
устранение (т. е. тестирование, а не
отладка).

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

Фактически
«инспекция» и «сквозной просмотр» –
просто новые названия старого метода
«проверки за столом» (состоящего в том,
что программист просматривает свою
программу перед ее тестированием),
однако они гораздо более эффективны
опять-таки по той же причине: в процессе
участвует не только автор программы,
но и другие лица. Результатом использования
этих методов является, обычно, точное
определение природы ошибок. Кроме того,
с помощью данных методов обнаруживают
группы ошибок, что позволяет в дальнейшем
корректировать сразу несколько ошибок.
С другой стороны, при тестировании на
ЭВМ обычно выявляют только симптомы
ошибок (например, программа не закончилась
или напечатала бессмысленный результат),
а сами они

определяются
поодиночке.

Ранее,
более двух десятков лет, проводились
широкие эксперименты по применению
этих методов, которые показали, что с
их помощью для типичных программ можно
находить от 30 до 70 % ошибок логического
проектирования и кодирования. (Однако
эти методы не эффективны при определении
ошибок проектирования «высокого уровня»,
например, сделанных в процессе анализа
требований.) Так, было экспериментально
установлено, что при проведении инспекций
и сквозных просмотров определяются в
среднем 38 % общего числа ошибок в учебных
программах.

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

Конечно,
можно критиковать эту статистику в
предположении, что ручные методы
тестирования позволяют находить только
«легкие» ошибки (те, которые можно просто
найти при тестировании на ЭВМ), а трудные,
незаметные или необычные ошибки можно
обнаружить только при тестировании на
машине. Однако проведенное исследование
показало, что подобная критика является
необоснованной.

Кроме
того, можно было бы утверждать, что
ручное тестирование «морально устарело»,
но если обратить внимание на список
типовых ошибок, то они до сих пор остались
прежними и увеличит ли скорость
тестирования ЭВМ не всегда очевидно.
Но то, что эти методы стали совсем
непопулярными это факт. Бесспорно, что
каждый метод хорош для своих типов
ошибок и сочетание методов ручного
тестирования и тестирования с применением
ЭВМ для конкретной команды разработчиков
представляется наиболее эффективным
подходом; эффективность обнаружения
ошибок уменьшится, если тот или иной из
этих подходов не будет использован.

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

Инспекции
исходного текста

Инспекции
исходного текста представляют собой
набор процедур и

приемов
обнаружения ошибок при изучении (чтении)
текста группой

специалистов
. При рассмотрении инспекций исходного
текста вни-

мание
будет сосредоточено в основном на
методах, процедурах, формах выполнения
и т. д.

Инспектирующая
группа включает обычно четыре человека,
один из которых выполняет функции
председателя. Председатель должен быть
компетентным программистом, но не
автором программы; он не должен быть
знаком с ее деталями. В обязанности
председателя входят подготовка материалов
для заседаний инспектирующей группы и
составление графика их проведения,
ведение заседаний, регистрация всех
найденных ошибок и принятие мер по их
последующему исправлению. Председателя
можно сравнить с инженером отдела
технического контроля. Членами группы
являются автор программы, проектировщик
(если он не программист) и специалист
по тестированию.

Общая
процедура заключается в следующем.
Председатель заранее

(например,
за несколько дней) раздает листинг
программы и проектную спецификацию
остальным членам группы. Они знакомятся
с материалами до заседания. Инспекционное
заседание разбивается на две части:

1.
Программиста просят рассказать о логике
работы программы. Во время беседы
возникают вопросы, преследующие цель
обнаружения ошибки. Практика показала,
что даже только чтение своей программы
слушателям представляется эффективным
методом обнаружения ошибок и многие
ошибки находит сам программист, а не
другие члены группы. Этот феномен
известен давно и часто его применяют
для решения проблем. Когда решение
неочевидно, то объяснение проблемы
другому человеку заставляет разработчика
«разложить все по полочкам» и решение
«само приходит» к разработчику.

2.
Программа анализируется по списку
вопросов для выявления исторически
сложившихся общих ошибок программирования.
Председатель является ответственным
за обеспечение результативности
дискуссии. Ее участники должны
сосредоточить свое внимание на нахождении
ошибок, а не на их корректировке.
(Корректировка ошибок выполняется
программистом после инспекционного
заседания.)

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

В
большинстве примеров описания процесса
инспектирования утверждается, что во
время инспекционного заседания ошибки
не должны корректироваться. Однако
существует и другая точка зрения: «Вместо
того, чтобы сначала сосредоточиться на
основных проблемах проектирования,
необходимо решить второстепенные
вопросы. Два или три человека, включая
разработчика программы, должны внести
очевидные исправления в проект с тем,
чтобы впоследствии решить главные
задачи.

Однако
обсуждение второстепенных вопросов
сконцентрирует внимание группы на
частной области проектирования. Во
время обсуждения наилучшего способа
внесения изменений в проект кто-либо
из членов группы может заметить еще
одну проблему. Теперь группе придется
рассматривать две проблемы по отношению
к одним и тем же аспектам проектирования,
объяснения будут полными и быстрыми. В
течение нескольких минут целая область
проекта может быть полностью исследована
и любые проблемы станут очевидными…
Как упоминалось выше, многие важные
проблемы, возникавшие во время обзоров
блок-схем, были решены в результате
многократных безуспешных попыток решить
вопросы, которые на первый взгляд
казались тривиальными».

Время
и место проведения инспекции должны
быть спланированы так, чтобы избежать
любых прерываний инспекционного
заседания. Его оптимальная продолжительность,
по-видимому, лежит в пределах от 90 до
120 мин. Так как это заседание является
экспериментом, требующим умственного
напряжения, увеличение его продолжительности
ведет к снижению продуктивности.
Большинство инспекций происходит при
скорости, равной приблизительно 150 строк
в час. При этом подразумевается, что
большие программы должны рассматриваться
за несколько инспекций, каждая из которых
может быть связана с одним или несколькими
модулями или подпрограммами.

Для
того чтобы инспекция была эффективной,
должны быть установлены соответствующие
отношения. Если программист воспринимает
инспекцию как акт, направленный лично
против него, и, следовательно, занимает
оборонительную позицию, процесс
инспектирования не будет эффективным.
Программист должен подходить к нему с
менее эгоистических позиций; он должен
рассматривать инспекцию в позитивном
и конструктивном свете: объективно
инспекция является процессом нахождения
ошибок в программе и таким образом
улучшает качество его работы. По этой
причине, как правило, рекомендуется
результаты инспекции считать
конфиденциальными материалами, доступными
только участникам заседания. В частности,
использование результатов инспекции
руководством может нанести ущерб целям
этого процесса.

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

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

Наконец,
инспекция является способом раннего
выявления наиболее склонных к ошибкам
частей программы, позволяющим
сконцентрировать внимание на этих
частях в процессе выполнения тестирования
на ЭВМ (один из принципов тестирования).

Сквозные
просмотры

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

Подобно
инспекции, сквозной просмотр проводится
как непрерывное заседание, продолжающееся
один или два часа. Группа по выполнению
сквозного просмотра состоит из 3–5
человек. В нее входят председатель,
функции которого подобны функциям
председателя в группе инспектирования,
секретарь, который записывает все
найденные ошибки, и специалист по
тестированию. Мнения о том, кто должен
быть четвертым и пятым членами группы,
расходятся. Конечно, одним из них должен
быть программист.

Относительно
пятого участника имеются следующие

предположения:

1)
высококвалифицированный программист;

2)
эксперт по языку программирования;

3)
начинающий (на точку зрения которого

не
влияет предыдущий опыт);

4)
человек, который будет, в конечном счете,
эксплуатировать программу;

5)
участник какого-нибудь другого проекта;

6)
кто-либо из той же группы программистов,
что и автор программы.

Начальная
процедура при сквозном просмотре такая
же, как и при инспекции: участникам
заранее, за несколько дней до заседания,
раздаются материалы, позволяющие им
ознакомиться с программой. Однако эта
процедура отличается от процедуры
инспекционного заседания. Вместо того,
чтобы просто читать текст программы
или использовать список ошибок, участники
заседания «выполняют роль вычислительной
машины». Лицо, назначенное тестирующим,
предлагает собравшимся небольшое число
написанных на бумаге тестов, представляющих
собой наборы входных данных (и ожидаемых
выходных данных) для программы или
модуля. Во время заседания каждый тест
мысленно выполняется. Это означает, что
тестовые данные подвергаются обработке
в соответствии с логикой программы.
Состояние программы (т. е. значения
переменных) отслеживается на бумаге
или доске.

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

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

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

5.3.3
Проверка за столом

Третьим
методом ручного обнаружения ошибок
является применявшаяся ранее других
методов «проверка за столом». Проверка
за столом может рассматриваться как
проверка исходного текста или сквозные
просмотры, осуществляемые одним
человеком, который читает текст программы,
проверяет его по списку ошибок и (или)
пропускает через программу тестовые
данные.

Большей
частью проверка за столом является
относительно непродуктивной. Это
объясняется прежде всего тем, что такая
проверка представляет собой полностью
неупорядоченный процесс. Вторая, более
важная причина заключается в том, что
проверка за столом противопоставляется
одному из принципов тестирования,
согласно которому программист обычно
неэффективно тестирует собственные
программы. Следовательно, проверка за
столом наилучшим образом может быть
выполнена человеком, не являющимся
автором программы (например, два
программиста могут обмениваться
программами вместо того, чтобы проверять
за столом свои собственные программы),
но даже в этом случае такая проверка
менее эффективна, чем сквозные просмотры
или инспекции.

Данная
причина является главной для образования
группы при сквозных просмотрах или
инспекциях исходного текста. Заседание
группы благоприятствует созданию
атмосферы здоровой конкуренции: участники
хотят показать себя с лучшей стороны
при нахождении ошибок. При проверке за
столом этот, безусловно, ценный эффект
отсутствует. Короче говоря, проверка
за столом, конечно, полезна, но она
гораздо менее эффективна, чем инспекция
исходного текста или сквозной просмотр.

Список
вопросов для выявления ошибок при
инспекции:

Важной
частью процесса инспектирования является
проверка программы на наличие общих
ошибок с помощью списка вопросов для
выявления ошибок. Концентрация внимания
в предлагаемом списке на рассмотрении
стиля, а не ошибок (вопросы типа «Являются
ли комментарии точными и информативными?»
и «Располагаются ли символы THEN/ELSE и
DO/END по одной вертикали друг под другом?»)
представляется неудачной, так же как и
наличие неопре-

деленности
в списке, уменьшающее его полезность
(вопросы типа «Соответствует ли текст
программы требованиям, выдвигаемым при
проектировании?»). Список, приведенный
в данном разделе, был составлен различными
авторами. За основу взят список Майерса
и дополнен автором после многолетнего
изучения ошибок программного обеспечения,
разработанного как лично, так и другими
специалистами, а также учебных программ.
В значительной мере он является
независимым от языка; это означает, что
большинство ошибок встречается в любом
языке программирования. Любой специалист
может дополнить этот список вопросами,
позволяющими выявить ошибки, специфичные
для того языка программирования, который
он использует, и обнаруженные им в
результате выполнения процесса
инспектирования.

Ошибки
обращения к данным

Сводный
список вопросов таков:

1.
Используются ли переменные с
неустановленными значениями?

Наличие
переменных с неустановленными значениями
– наиболее часто встречающаяся
программная ошибка, она возникает при
различных обстоятельствах. Для каждого
обращения к единице данных (например,
к переменной, элементу массива, полю в
структуре, атрибуту в классе) попытайтесь
неформально «доказать», что ей присвоено
значение в проверяемой точке.

2.
Лежат ли индексы вне заданных границ?

Не
выходит ли значение каждого из индексов
за границы, определенные для соответствующего
измерения при всех обращениях к массиву,
вектору, списку и т. п.?

3.
Есть ли нецелые индексы?

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

4.
Есть ли «подвешенные» обращения?

Создан
ли объект (выделена ли память) для всех
обращений с помощью указателей или
переменных-ссылок на объект (или память)?
Наличие, переменных-ссылок представляет
собой ошибку типа «подвешенного
обращения». Она возникает в ситуациях,
когда время жизни указателя больше, чем
время жизни объекта/памяти, к которому/ой
производится обращение. Например, к
такому результату приводит ситуация,
когда указатель задает локальную
переменную в теле метода, значение
указателя присваивается выходному
параметру или глобальной переменной,
метод завершается (освобождая адресуемую
память), а программа затем пытается
использовать значение указателя. Как
и при поиске ошибок первых трех типов,
попытайтесь неформально доказать, что
для каждого обращения, использующего
переменную-указатель, адресуемая
память/объект существует.

Этот
тип ошибок характерен для языка Си или
С++, где широко используются ссылки и
указатели. Язык Java в этом отношении
более развит, например, при потере всех
ссылок на объект, объект переходит в
«кучу мусора», где автоматически
освобождается память из-под объекта
(объект удаляется) специальным сборщиком
мусора. Последние изменения в языке
С++, выполненные командой разработчиков
Microsoft, которые преобразовали этот язык
в С#, реализуют похожий механизм.

5.
Соответствуют ли друг другу определения
структуры и ее использование в различных
методах?

Если
к структуре данных обращаются из
нескольких методов или процедур, то
определена ли эта структура одинаково
в каждой процедуре и используется ли
она корректным способом?

6.
Превышены ли границы строки?

Не
превышены ли границы строки при индексации
в ней? Существуют ли какие-нибудь другие
ошибки в операциях с индексацией или
при обращении к массивам по индексу?

Ошибки
описания данных

Сводный
список вопросов таков:

1.
Все ли переменные описаны?

Все
ли переменные описаны явно?

Отсутствие
явного описания не обязательно является
ошибкой (например, Visual Basic допускает
отсутствие описания), но служит
потенциальным источником беспокойства.
Так, если в подпрограмме на Visual Basic
используется элемент массива и отсутствует
его описание (например, в операторе
DIM), то обращение к массиву может вызвать
ошибку (например, Х = А(12)), так как по
умолчанию, массив определен только на
10 элементов.

Если
отсутствует явное описание переменной
во внутренней процедуре или блоке,
следует ли понимать это так, что описание
данной переменной совпадает с описанием
во внешнем блоке?

При
разработке больших программных изделий
неявное описание дан ных (описание
данных по умолчанию) зачастую запрещают
методически (если это не запрещено
языком), чтобы упростить поиск ошибок
при комплексной отладке.

2.
Правильно ли инициализированы объекты,
массивы и строки? Если начальные значения
присваиваются переменным в операторах
описания, то правильно ли инициализируются
эти значения? Правильно ли создаются
объекты, используется ли соответствующий
конструктор?

  1. Понятны
    ли имена переменных?

Наличие
переменных с бессмысленными именами
(например, i и j) не является ошибкой, но
является объектом пристального внимания.
Классически i и j являются циклическими
переменными, а вот названий типа t125
следует избегать, так как возможна
путаница имен.

  1. Нельзя
    ли обойтись без переменных со сходными
    именами?

Есть
ли переменные со сходными именами
(например, user и users)?

Наличие
сходных имен не обязательно является
ошибкой, но служит признаком того, что
имена могут быть перепутаны где-

нибудь
внутри программы.

5.
Корректно ли произведено описание
класса? Правильно ли происходит описание
атрибутов и методов класса? Имеются ли
методы или атрибуты, которые по смыслу
не подходят к данному классу? Не является
ли класс громоздким? Наличие
положительных ответов на эти вопросы
указывает на возможные ошибки в
анализе и проектировании системы.

Ошибки
вычислений

Сводный
список вопросов таков:

1.
Производятся ли вычисления с использованием
данных разного типа? Существуют ли
вычисления, использующие данные разного
типа?

Например,
сложение переменной с плавающей точкой
и целой

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

того,
что правила преобразования, принятые
в языке, понятны. Это

важно
как для языков с сильной типизацией
(например, Ada, Java),

так
и для языков со слабой типизацией
(например, С++, хотя он тяготеет к сильной
типизации).

Например,
для языка Java код

byte
a,
b,
c;

c
= a
+ b;

может
вызвать ошибку, так как операция
«сложение» преобразует

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

2.
Производятся ли вычисления неарифметических
переменных?

3.
Возможно ли переполнение или потеря
промежуточного результата при вычислении?

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

4.
Есть ли деление на ноль?

Классическая
ошибка. Требует проверки всех делителей
на неравенство нулю. Следствием данной
ошибки является либо сообщение «деление
на ноль», либо «переполнение», если
делитель очень близок к нулю, а результат
не может быть сохранен в типе частного
(превышает его).

5.
Существуют ли неточности при работе с
двоичными числами?

6.
Не выходит ли значение переменной за
пределы установленного диапазона? Может
ли значение переменной выходить за
пределы установленного для нее логического
диапазона?

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

7.
Правильно ли осуществляется деление
целых чисел? Встречается ли неверное
использование целой арифметики, особенно
деления? Например, если i – целая величина,
то выражение 2*i/2 = i зависит от того,
является значение i четным или нечетным,
и от того, какое действие – умножение
или деление выполняется первым.

Ошибки
при сравнениях

Сводный
список вопросов таков:

1.
Сравниваются ли величины несовместимых
типов? Например, число со строкой?

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

3.
Корректны ли отношения сравнения?
Иногда возникает путаница понятий
«наибольший», «наименьший», «больше
чем», «меньше чем».

4.
Корректны ли булевские выражения? Если
выражения очень сложные, имеет смысл
преобразовать их или проверять обратное
утверждение.

5.
Понятен ли порядок следования операторов?
Верны ли предположения о порядке оценки
и следовании операторов для выражений,
содержащих более одного булевского
оператора? Иными словами, если задано
выражение (А == 2) && (В == 2) || (С == 3),
понятно ли, какая из операций выполняется
первой: И или ИЛИ?

6.
Понятна ли процедура разбора компилятором
булевских выражений? Влияет ли на
результат выполнения программы способ,
которым конкретный компилятор выполняет
булевские выражения? Например, оператор

if
((x != 0) && ((y/x) > z))

является
приемлемым для Java (т. е. компилятор
заканчивает проверку, как только одно
из выражений в операции «И» окажется
ложным), но это выражение может привести
к делению на ноль при использовании
компиляторов других языков.

Ошибки
в передачах управления

Сводный
список вопросов таков:

1.
Может ли значение индекса в переключателе
превысить число переходов? Например,
значение переключателя для оператора
select case.

2.
Будет ли завершен каждый цикл? Будет
ли каждый цикл, в конце концов, завершен?
Придумайте неформальное доказательство
или аргументы, подтверждающие их
завершение. Хотя иногда бесконечные
циклы не являются ошибкой, но лучше их
избегать.

3.
Будет ли завершена программа? Будет ли
программа, метод, модуль или подпрограмма
в конечном счете завершена?

4.
Существует ли какой-нибудь цикл, который
не выполняется из-за

входных
условий? Возможно ли, что из-за входных
условий цикл никогда не сможет выполняться?
Если это так, то является ли это
оплошностью?

5.
Есть ли ошибки отклонения числа итераций
от нормы? Существуют ли какие-нибудь
ошибки «отклонения от нормы»

(например,
слишком большое или слишком малое число
итераций)?

Ошибки
интерфейса

Сводный
список вопросов таков:

1.
Равно ли число входных параметров
числу аргументов?

Равно
ли число параметров, получаемых
рассматриваемым методом, числу аргументов,
ему передаваемых каждым вызывающим

методом?
Правилен ли порядок их следования?

Первый
тип ошибок может обнаруживаться
компилятором (но не для каждого языка),
а вот правильность следования (особенно,
если параметры одинакового типа) является
важным моментом.

2.
Соответствуют ли единицы измерения
параметров и аргументов?

Например,
нет ли случаев, когда значение параметра
выражено в градусах, а аргумента – в
радианах? Или ошибки связанные с
размерностью параметра/аргумента
(например, вместо тонн передаются
килограммы).

3.
Не изменяет ли метод аргументы,
являющиеся только входными?

4.
Согласуются ли определения глобальных
переменных во всех использующих их
методах?

Ошибки
ввода-вывода

Сводный
список вопросов таков:

1.
Правильны ли атрибуты файлов? Не
происходит ли запись в файлы read-only?

2.
Соответствует ли формат спецификации
операторам ввода-вывода? Не читаются
ли строки вместо байт?

3.
Соответствует ли размер буфера размеру
записи?

4.
Открыты ли файлы перед их использованием?

5.
Обнаруживаются ли признаки конца
файла?

6.
Обнаруживаются ли ошибки ввода-вывода?
Правильно ли трактуются ошибочные
состояния ввода-вывода?

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
using namespace std;
 
 
#define LEAVES_NUMBER 100
#define CHARACTERISTIC_NUMBERS 35
#define MAX_LEN 10
 
enum Espanol {
    bueno, malo,
    guapo, feo, bonito,
    largo, corto,
    joven, viejo,
    regular, raro,
    nuevo, antiguo,
    caro, barato,
    grande, pequeno,
    caliente, frio,
    casado, soltero,
    alegro, triste,
    alto, bajo,
    dificil, facil,
    rico, pobre,
    enfermo,
    contento,
    grave
};
 
const char characteristic[CHARACTERISTIC_NUMBERS + 1][MAX_LEN] = {
    "bueno", "malo",
    "guapo", "feo", "bonito",
    "largo", "corto",
    "joven", "viejo",
    "regular", "raro",
    "nuevo", "antiguo",
    "caro", "barato",
    "grande", "pequeno",
    "caliente", "frio",
    "casado", "soltero",
    "alegro", "triste",
    "alto", "bajo",
    "dificil", "facil",
    "rico", "pobre",
    "enfermo",
    "contento",
    "grave"
};
 
 
typedef class Tree {
    int current_size;
    Espanol *charac_tree;
    Espanol *charac_leaves = new Espanol[LEAVES_NUMBER];
public:
    Tree(Espanol);
    ~Tree();
 
    void SetChar(Espanol);
    friend Espanol GetChar(Tree*);
    bool AddCharToLeaves(Espanol);
    Espanol GetLastCharLeaves();
} tree;
 
 
tree::Tree(Espanol c = Espanol::grande) {
    charac_tree = &c;
    current_size = 0;
} 
 
tree::~Tree() {
    delete charac_tree;
    delete[] charac_leaves;
}
 
inline void tree::SetChar(Espanol c) {
    charac_tree = &c;
}
 
inline Espanol GetChar(tree *tr) { return *tr->charac_tree; }
 
inline bool tree::AddCharToLeaves(Espanol c) {
    if (current_size == 100) return false;
    charac_leaves[current_size - 1] = c;
    ++current_size;
    return true;
}
 
inline Espanol tree::GetLastCharLeaves() {
    return charac_leaves[current_size];
}
 
 
 
int main() {
 
    tree *tr1 = new tree; 
    for (int i = 0; i < 98; ++i) {
        tr1->AddCharToLeaves(static_cast<Espanol>(rand() % rand() % CHARACTERISTIC_NUMBERS));
    }
    // Ошибка адресации - почему?
    cout << "Characteristic: "
        << characteristic[static_cast<int>(GetChar(tr1))] << endl;
    cout << "Last_Leave: " <<
        characteristic[static_cast<int>(tr1->GetLastCharLeaves())] << endl;
    system("pause");
    return 0;
}

OpenStreetMap Community Forum

Loading

Понравилась статья? Поделить с друзьями:
  • Ошибки акку чек актив на дисплее
  • Ошибки адмирала макарова
  • Ошибки автономки самара 3 киловатта
  • Ошибки айфона после обновления
  • Ошибки автономки планар 24в 3квт планар