Логика программы

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

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

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

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

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

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

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

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

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

Метки: , ,

Записи по теме

Комментировать

Введите код