Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Вопросы с ответами(2008-2009) - файл 1.doc


Вопросы с ответами(2008-2009)
скачать (456.5 kb.)

Доступные файлы (1):

1.doc457kb.17.11.2011 10:56скачать

содержание

1.doc

1   2   3

^ 29. Блочно-иерархический подход к созданию программных систем.*

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

Будучи в значительной степени отражением природных и технических систем, программные системы обычно являются иерархическими, т.е. обладают описанными выше свойствами. На этих свойствах иерархических систем строится блочно-иерархический подход. Этот подход предполагает сначала создание частей таких объектов, а затем “сборку” из них самого объекта.

^ 30. Проблемы разработки сложных программных систем.*

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

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

Дополнительными факторами, увеличивающими сложность разработки программных систем, являются [2]:

• сложность формального определения требований к программным системам;

• отсутствие удовлетворительных средств описания поведения дискретных систем с большим числом состояний при недетерминированной последовательности входных воздействий;

• коллективная разработка;

• необходимость увеличения степени повторяемости кодов.


^ 31. Дайте определение модели жизненного цикла (ЖЦ) программного продукта (ПП). Каскадная модель ЖЦ ПП. Область применения, достоинства и недостатки.*

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

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

Традиционная модель ЖЦ ПО строится по каскадному принципу, суть которого в том, что переход на следующий этап происходит после окончания предыдущего.

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

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

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

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

Перечень недостатков каскадной модели более обширен, чем перечень ее достоинств:

  • существенная задержка получения результатов;

  • ошибки и недоработки на любом из этапов выясняются, как правило, на последующих этапах работ, что приводит к необходимости возврата на предыдущие этапы;

  • сложность распараллеливания работ по проекту;

  • сложность управления проектом;

  • высокий уровень риска и ненадежность инвестиций.



^ 32. Этапы жизненного цикла (ЖЦ) программных продуктов (ПП). Схема ЖЦ ПП.*

Анализ

Проектирование

Программирование

Тестирование и отладка

Изготовление

Эксплуатация и сопровождение





Эксплуатация и сопровождение


Тестирование и отладка


Программирование


Проектирование


Анализ


^ 33. Поэтапная модель жизненного цикла программных продуктов.*


34. Основные положения ГОСТ 19-701-90.*

В схемах проектов ПО согласно ГОСТ используются 4 вида символов: символы данных, символы процесса, символы линий и специальные символы.

^ Символы данных: основные – данные, запоминаемые данные; специфические – оперативное запоминающее устройство, запоминающее устройство с последовательной выборкой (ЗУПВ), запоминающее устройство с прямым доступом (ЗУПД), документ, карта, бумажная лента, дисплей. Символы процесса: основные – процесс; специфические – предопределённый процесс, ручная операция, подготовка, решение, параллельные действия, граница цикла. Символы линий: основные - линия; специфические – передача управления, канал связи, пунктирная линия. Специальные символы: соединитель, терминатор, комментарий, пропуск.


^ 35. Функциональное и структурное тестирование программ: цели, отличия стратегий, рекомендации по применению.*

Структурное тестирование(белого ящика) применяют на ранних стадиях кодирования и тестирования для выявления и устранения в основном алгоритмических ошибок.

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


^ 36. Этапы тестирования программ. Стадии тестирования в процессе разработки программного обеспечения. Методы, используемые на каждой стадии.*

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

Стадии:

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

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

3) системное или оценочное тестирование на соответствие основным критериям качества.


^ 37. Ручной контроль как метод тестирования.* *

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

^ 38. Методы структурного тестирования. Общий недостаток методов.* //белый ящик

1 - метод покрытия решений (переходов),

2 - метод покрытия операторов,

3 - метод покрытия условий,

4 - метод комбинаторного покрытия условий.

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


^ 39. Методы функционального тестирования. Области применения.* //черный ящик

эквивалентного разбиения

анализа граничных значений

таблиц решений

функциональных диаграмм


^ 40. Основные положения метода эквивалентного разбиения.*

а) каждый тест должен включать столько различных входных условий, сколько это возможно, с тем чтобы минимизировать общее число тестов;

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


^ 41. Основные положения метода граничных значений.*

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

Анализ граничных значений отличается от эквивалентного разбиения в двух отношениях:

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

- при разработке тестов рассматривают не только входные условия (пространство входов), но и пространство результатов, то есть выходные классы эквивалентности.


^ 42. Пошаговое тестирование модульных программ. Достоинства и недостатки подходов.*



Методика восходящего тестирования включает следующие щаги: Сначала тестируются ‘листья’ дерева структуры программы, т.е. модули Е,C,F. Поскольку это вызываемые программы, то для их тестирования программируются драйверы. В его функции входит формирование тестовых данных для отлаживаемого модуля и передача ему управления (вызов модуля). Затем аналогично тестируются модули вышележащего уровня совместно с уже оттестированными модулями нижележащего уровня. Применительно к рассматриваемому нами примеру проектируются драйверы для тестирования пар B-E и D-F. Пошаговый процесс продолжается до тех пор, пока не будет включен в процесс тестирования последний модуль. Для нашего примера это будет модуль А. Для его тестирования совместно с вызываемыми программами нижележащего уровня драйвер разрабатывать не требуется.

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


^ 43. Классификация и проявление ошибок программирования.*


44. Методы отладки программ.*

1) метод индукции;

2) метод дедукции.

Название методов напоминают о криминалистике и не напрасно, ибо есть аналогия между этими методами и расследованием преступления.

Метод индукции включает:

1) определение данных тестирования, имеющих отношение к ошибке;

2) анализ от частного к общему позволит выявить закономерности в данных пункта 1);

3) в результате анализа (п.2) выдвигается гипотеза о причине ошибки;

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

Альтернативный метод дедукции заключается в:

1) перечисление возможных причин или гипотез:

2) использование данных тестирования для исключения некоторых возможных причин;

3) уточнение выбранной наиболее вероятной гипотезы, возможно с использованием дополнительных тестов:

4) доказательство выбранной гипотезы совпадает с п.4 и п.5 метода индукции.


^ 45. Методы получения дополнительной информации об ошибках.*

Наиболее распространенными и наименее эффективными для отладки являются так называемые методы ‘грубой силы’. К ним относят:

1) отладку с использованием дампа памяти;

2) отладку с использованием операторов печати по всей программе;

3) отладку с использованием автоматических средств.

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

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


^ 46. Общая методика отладки программ.*

1й этап – изучение проявления ошибки. Результатом выполнения этапа должна быть локализация ошибки. При этом можно использовать методы индукции и дедукции и средства получения дополнительной информации об ошибке.

2й этап – выполняется, если произошло “зависание” или не удалось локализовать ошибку, используя методы 1го этапа

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

4й этап – исправление ошибки. Здесь нужно помнить 1 вещь – небрежное исправление может породить новые ошибки.

5й этап – повторное тестирование


^ 47. Структуры данных: определение, механизмы агрегирования данных, общие свойства структур данных.*

Структура данных – это совокупность элементов данных, между которыми существуют некоторые отношения, причем элементами данных могут быть простые данные и структуры данных. Структуру данных можно определить, как S = (D,R), где D- множество элементов данных, R-множество отношений (связей) между элементами данных.

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


^ 48. Статические структуры данных: вектор и массив. Функции линеаризации.*

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

^ Массивом называют такой вектор, каждый элемент которого вектор. В свою очередь элементы вектора “вектора массива” могут быть вектором (3-х и более мерные массивы). Процесс последовательного перехода к элементам вектора рано или поздно должен завершиться на скалярном элементе некоторого типа данных, причем этому типу должны соответствовать все скалярные элементы массива. Поэтому может быть более точным является скалярное определение массива:

к-мерным массивом называется конечное упорядоченное множество (к-1) мерных массивов, все элементы которых принадлежат одному и тому же типу. При к=1 получаем вектор.


49. Статические структуры данных: запись и таблица. Физическая структура, доступ к элементам. *

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

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

Например, запись:

ЗАП

личный N студента, целое 2-значное;

ФИО – символьное 15 – значное;

Аббревиатура факультета – символьное 4-значное,

может иметь следующий дескриптор:

ЗАП

Личный номер студента 0

ФИО 2 (целое занимает 2 байта)

Факультет 17 (1-символ – 1байт)

Таблица - конечное упорядоченное множество записей, имеющих одну и ту же организацию. Наиболее распространена форма таблицы, в которой элемент представляет собой одноуровневую запись, состоящую из упорядоченной последовательности полей, имеющих в общем случае различный размер и соответствующих различным типам простых данных. Логическая структура представляется в виде последовательности расположенных друг под другом строчек одинаковой длины представляющих элементы таблицы и разделенных на графы. Обычно одно из полей всех элементов таблицы отводится для хранения ключа, являющегося уникальным для каждого записи таблицы. Иногда ключом записи таблицы является некоторая совокупность полей записи. Тогда говорят, что ключ записи – сцепленный. Иногда таблицы определяют в виде совокупности (k,v), где k-поле ключа (сцепленного или простого), v- набор остальных полей записи (неключевых).


^ 50. Статическая структура данных: файл. Доступ к записям. Логическая структура магнитного диска.*

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

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

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

На каждом диске можно выделить две области - системную и данных. В системной области диска (начинается с 0 дорожки, 0 стороны, сектора 1) размещены 3 зоны, содержащие:

главную загрузочную запись (MRB – Main Boot Record), в которой описывается конфигурация диска: какой раздел (логический диск) является системным, сколько разделов на этом диске и какого они объема;

таблицу размещения файлов FAT (File Allocation Table) , в которой отмечаются кластеры, выделенные для файла. Кластеры, в которых размещены физически последовательные записи файла, имеют последовательные номера. Эта таблица является очень важной, при ее порче чтение записей файла становится невозможным, поэтому такая таблица для каждого файла в системной области внешней памяти дублируется;

корневой каталог диска - список файлов и/или подкаталогов с их параметрами: расширением, размером в байтах,, датой и временем создания и номером начального кластера. В этом начальном и следующих кластерах в таблице FAT указываются номера следующих кластеров, занимаемых файлом. Последний кластер файла имеет номер-код FFFF.


^ 51. Полустатические структуры данных.*

Полустатические структуры данных- это последовательные линейные списки с переменной длиной, ограниченной фиксированной максимальной величиной и с ограниченным доступом. К таким структурам относятся стеки и очереди.

^ 52. Динамические структуры данных: линейные списки.*

Динамическая структура имеет следующие основные признаки:

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

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

Часто динамические структуры физически представляются в форме связных списков.

^ Связный список – такая структура, элементами которой служат записи с одним и тем же форматом, связанные друг с другом с помощью указателей, хранящихся в самих элементах списка.


^ 53. Динамические структуры данных: нелинейные списки.*

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

К таким структурам приводит экономное представление разреженных матриц.


^ 54. Критерии качества программ.*

1) функциональность

2) надежность

3) легкость применения

4) эффективность

5) сопровождаемость

6) мобильность

Функциональность - это способность выполнять набор функций, определенных его внешними спецификациями.

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

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

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

Мобильность - это способность ПП быть перенесенным из одной вычислительной среды (окружения) в другую, в частности, с одной ЭВМ на другую (применяют термин "перенос с одной платформы на другую")


^ 55. Стиль оформления программ.*

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

1) правила именования объектов программы(переменных, функций, типов данных и тп)

2) правила оформления модулей

3) стиль оформления текстов программ


^ 56. Эффективность программ: способы экономии памяти.*

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

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


^ 57. Эффективность программ: способы экономии времени выполнения.* *

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

Первый способ связан с учетом времени выполнения операций в ЭВМ:

• сложение и вычитание выполняются быстрее, чем умножение и деление (в связи с чем Х+Х выполнясгся быстрее, чем ^ 2*Х)

• целочисленная арифметика быстрее арифметики вещественных чисел (поэтому (i+i+j)* 0,5 быстрее» чем i+0,5*j, так как в первом варианте одна операция с вещественными числами, а во втором – две)

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

• обращение к функции требует больших временных затрат, чем умножение и деление.

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

При их написании необходимо по возможности:

1) выносить вычисление константных, т.е. не зависящих от параметров цикла выражений из циклов.

2) избегать длинных операций умножения и деления, заменяя их по возможности сложением, вычитанием и сдвигами

3) минимизировать преобразования типов в выражениях

4) оптимизировать запись условных выражений – исключать лишние проверки.

5) исключать многократные обращения к элементам массивов по индексам

6) избегать использования различных типов в выражении и т.п.


^ 58. Программирование “с защитой от ошибок”.*

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

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

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

Детальный анализ ошибок и их возможных ранних проявлений показывает, что целесообразно проверять:

• правильность выполнения операций ввода-вывода;

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

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

• ошибки передачи - аппаратные средства, например вследствие неисправности, искажают данные;

• ошибки преобразования - программа неверно преобразует исходные данные из входного формата во внутренний формат;

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

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

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


^ 59. Стихийное программирование. Этапы совершенствования архитектуры программ.*

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

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

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

Знаменательной датой в истории программирования стал 1968 год. Тогда создавшееся в программировании положение обсуждалось на международной конференции, получившей название “Кризис программного обеспечения”. В этом году Чарльз Хоар и Николаус Вирт впервые указали на необходимость придания языку программирования свойств, которые превратили бы его в “инструмент надежного создания сложных программ”. Однако настоять на этом им не удалось.

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

1   2   3



Скачать файл (456.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации