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