Функції. Передача параметрів функцій. перевантаження функцій
Функція являють собою відносно самостійні фрагменти програм, відповідним чином оформлені і забезпечені ім'ям (програмні блоки). Тема блоку визначає форму виклику підпрограми. Заголовки функцій завжди складаються з ідентифікатора функції (службового слова в різних мовах різні) імені, зазначених в круглих дужках змінні які необхідно передати в функція і значення, що повертається.
Існує два способи передачі параметрів функції:
При передачі по значенню в стек оперативної пам'яті заносяться копії значення аргументу, і оператори функції працюють з цими копіями, доступів до початкових значень параметрів у функцій немає і як наслідок немає можливості їх змінити. Стек звільняється після завершення виклику функції.
Коли викликається функція, додатково виділяється пам'ять під її формальні параметри, і кожен формальний параметр ініціалізується відповідним йому фактичним параметром. Семантика передачі параметрів ідентична семантиці ініціалізації. Зокрема, тип фактичного параметра зіставляється з типом формального параметра, і виконуються всі стандартні і визначені користувачем перетворення типів. Є особливі правила для передачі векторів, засіб передавати параметр без перевірки і засіб для завдання параметрів за замовчуванням.
При визначенні функцій в своїх програмах ви повинні вказати тип повертається функцією значення, а також кількість параметрів і тип кожного з них. Щоб уникнути дублювання функцій, програма дозволяє вам визначати кілька функцій з одним і тим же ім'ям. В процесі компіляції програма бере до уваги кількість аргументів, які використовуються кожною функцією, і потім викликає саме потрібну опцію. Надання компілятору вибору серед декількох функцій називається перевантаженням.
Тестуванням називають процес виконання програми з різними вихідними даними, для яких за-раніше відомі результати. Інтуїтивно початківці програмісти зазвичай
метою тестування вважають перевірку правильності програми, що вдосконалення-шенно не вірно. У більшості випадків перебрати всі можливі комбіна-1іі даних неможливо, а вибіркове тестування не доводить правиль-ності програми, так як те, що програма працює на десяти наборах даних, не означає, що вона буде давати правильні результати на одіннадца-те наборі . Тому метою тестування є виявлення помилок.
Відповідно хорошим слід вважати тест, який виявляє ошиб-ку. Для формування таких тестів визначені дві стратегії:
стратегія «білого» ящика (або тестування маршрутів);
стратегія «чорного ящика».
При тестуванні з використанням стратегії «білого ящика» тести намагаються підібрати так, щоб хоча б один раз пройти по кожній гілці сагорітма. Стратегія має істотний недолік: по ній принципи-ально неможливо виявити пропущений маршрут.
При тестуванні з використанням стратегії «чорного ящика» струк-тура програми вважається невідомою, і тести підбирають так, щоб про-вірити виконання всіх функцій програми, а потім відстежити реакцію на введення некоректних даних.
На практиці найкращі результати отримують, використовуючи при розробці ті-стов обидві стратегії.