Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Изменения в существующем коде




Если в объявление типа добавлено новое поле, то изменены ли параметры инициализации тоже?

Было:

 

struct foo

{

int i;

int j;

int m;

};

...

struct foo myfoo = { 1, 2, 3}

 

Структура изменилась:

 

struct foo

{

int i;

int k;

int j;

int m;

};

Изменилась ли строка инициализации?

Данные

Строки

Данная строка содержит завершающий null-символ?

Буферы

Всегда ли осуществляется проверка на переполнение буфера при копировании?

Битовые поля.

Существуют ли проблемы с переносимостью данной программы?

 

Инициализация

Локальные переменные

Все ли локальные переменные проинициализированы перед первым использованием?

 

Отсутствие реинициализации

Если глобальная переменная была изменена, должнали она быть инициализирована вновь?

 

Макросы

Если формальный параметр макроса вычислен дважды, то будет ли макрос развернут с фактическим параметром корректно?

Например, что произойдет при выполнении этого кода?

 

#define max(a,b) ((a)<(b)?(b):(a))

max(i++, j)

 

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

 

#define max(a,b) (a)<(b)?(b):(a) /* Должно быть ( (a)<(b)?(b):(a) ) */

result = max(i, j)+3;

 

Размеры данных

Является ли аргумент оператора sizeof неккоректным типом?

Общая ошибка заключается в использовании sizeof(p) вместо sizeof(*p).

 

Размещение данных

Не слишком ли мало (или много) выделено памяти под объекты?

Функция malloc() инициализирует неиспользованные области памяти нулями. Учитывается ли это в программе?

Когда выделяется динамическая память под структуры и массивы, существуют ли непроинициализированные поля?

Освождается ли ранее выделенная динамическая память?

 

При вызове realloc() для изменения размера блока памяти, учитывается ли, что новые области будут проинициализированы нулями?

 

Освобождение памяти

Делается ли попытка освободить ранее освобожденную память?

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

Освобождается ли память, которая не должна освобождаться?

Файлы

Может ли временный файл иметь неуникальное имя?

Открытые файлы

Не открываем ли мы второй файл, не закрыв первый при работе с одной файловой переменной?

 

fid = open(...);

fid = open(...);

 

Случается ли, что файл остается открытым тогда, когда его следует закрыть?

Вычисления

Корректна ли расстановка скобок?

 

Следующий пример очень характерен:

if (a = function() == 0)

должно быть:

if ((a = function()) == 0)

бывает такой случай:

if (function(X,Y, (expression!= test)))

вместо:

if (function(X,Y, expression)!= test)

malloc(strlen(name+1))

вместо:

strlen(strlen(name)+1)

 

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

Условия

Действительно ли условное выражение использует вещественные числовые значения?

 

Указатели

При разыменовании, может ли значение указателя быть NULL?

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

 

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

Что произойдет в следующей ситуации?

 

routine1(&some_data);

some_data.count++;

routine2(); /* Будет использоваться измененная величина some_data.count */

Присваивание

Соответсвует ли тип выражения в правой части, типу выражения в левой части?

Вызов функции

Нужная ли функция используется в данном месте программы?? (например strchr вместо strrchr?)

 

PRINTF и ее содружество

Соответствует ли количество выражений количеству полей в форматной строке?

Пропущен ли аргумент типа FILE* в fprintf?

Разное

Оставлен ли в теле программы отладочный код?


Приложение III. Тестирование Internet-приложений и Web-сайтов

 

В данном приложении приведены основные этапы тестирования приложений для Internet.

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

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

Проверка активного содержимого - идентификация и проверка HTML-форм, Java-аплетов, скриптов, подключаемых модулей, элементов управления Active-X и других активных элементов web-сайтов.

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

Тестирование пригодности и надежности - продолжительное, всестороннее тестирование и мониторинг web-сайтов, как они и используются в жизни, 24 часа в сутки, 7 дней в неделю.

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

Анализ операций над базами данных - мониторинг активности баз данных, проверка всех запросов и транзакций между Интернет-приложениями и SQL сервером; локализация мест и выявление причин неудачных транзакций.

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

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

Анализ сетевого трафика - сбор и мониторинг сетевого трафика, анализ эффективности связи.

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

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...