Процесс компиляции программы. Отладка программ. Тестирование программ

Функции. Передача параметров функциям. Перегрузка функций

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

Существует два способа передачи параметров функции:

По значению

По адресу

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

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

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

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

Компиляция – процесс создания исполняемой программы из исходной, содержащий два этапа:
1. Синтаксический контроль текста программы – процесс выявления (обнаружения) синтакси-ческих ошибок.
В случае отсутствия ошибок переход ко второму этапу.
2. Генерация машинного кода из исходного – операторы языка высокого уровня преобразуются в инструкции процессора компьютера – машинные команды.
Компиляцию выполняет специальная программа – компилятор. Результат работы компилятора – исполняемый файл (исполняемая программа) или приложение(имя.exe).
Отладка – процесс поиска ошибок в исходном тексте программы. Устраняются ошибки с помощью текстового редактора. Синтаксические ошибки исправляются наиболее просто – их характер и место возникновения указывает компилятор. Логические ошибки помогает найти специальная программа – отладчик.

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

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

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

стратегия «белого» ящика (или тестирование маршрутов);

стратегия «черного ящика».

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

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

На практике лучшие результаты получают, используя при разработке те­стов обе стратегии.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: