- •Лабораторна робота № 1
- •1.2 Підстава для розробки
- •1.3 Призначення розробки
- •1.4 Вимоги до проекту
- •1.4.1 Вимоги до функціональних характеристик
- •1.4.2 Вимоги до надійності
- •1.4.3 Умови експлуатації
- •1.4.4 Вимоги до состава й параметрів технічних засобів
- •1.4.5 Вимоги до інформаційної й програмної сумісності
- •1.5 Вимоги до програмної документації
- •1.6 Техніко-економічні показники
- •1.7 Стадії й етапи розробки
- •1.8 Порядок контролю й приймання
- •Завдання
- •Хід роботи
- •Звіт повинен містити
- •Види компонентів
- •Завдання
- •Метрики стилістики й зрозумілості програм. Метрика рівня коментованості програм
- •Метрики Холстеда
- •Метрика зміни довжини програмної документації
- •Завдання
- •Завдання
- •Хід роботи
- •Звіт повинен містити
- •Документація по супроводу програмних засобів.
- •Завдання
- •Хід роботи
- •Контрольні питання
- •Завдання
- •Хід роботи
- •Звіт повинен містити
- •Контрольні питання
Метрики стилістики й зрозумілості програм. Метрика рівня коментованості програм
Найбільш простою метрикою стилістики й зрозумілості програм є оцінка рівня коментованості програми F:
F=Nком/Nстр, (5)
де Nком - кількість коментарів у програмі;
Nстр - кількість рядків або операторів вихідного тексту.
Таким чином, метрика F відбиває насиченість програми коментарями.
Виходячи із практичного досвіду прийнято вважати, що F>=0.1, тобто на кожні десять рядків програми повинен доводитися мінімум один коментар.
Більше вдалий варіант, коли вся програма розбивається на n рівних сегментів і для кожного з них визначається Fi:
Fi = sign (Nком/Nстр - 0.1),
при цьому
n
F=Сума(Fi).
i=1
Рівень коментованості програми вважається нормальним, якщо виконується умова: F=n. У противному випадку який-небудь фрагмент програми доповнюється коментарями до номінального рівня.
Метрики Холстеда
Наступні п'ять характеристик є продовженням метрики Холстеда.
1. Для виміру теоретичної довжини програми N^М. Холстед уводить апроксимуючу формулу:
N^ = n1*log2(n1) + n2*log2(n2), (6)
де n1 - словник операторів;
n2 - словник операндів програми.
М. Холстед затверджує, що для стилістично коректних програм відхилення в оцінці теоретичної довжини N^ від реальної N не перевищує 10%.
На практиці N і N^ часто істотно розрізняються.
2. Іншою характеристикою, що належить до метрик коректності програм, по М. Холстеду, є рівень якості програмування L (рівень програми):
L=V*/V, (7)
де V і V* визначається відповідно вираженнями (2) і (3).
Вихідним для введення цієї характеристики є припущення про те, що при зниженні стилістичної якості програмування зменшується змістовне навантаження на кожний компонент програми й, як наслідок, розширюється обсяг реалізації вихідного алгоритму. З огляду на це, можна оцінити якість програмування на підставі ступеня розширення тексту щодо потенційного обсягу V*. Очевидно, для ідеальної програми L=1, а для реальної - завжди L<1.
3. Нерідко доцільно визначити рівень програми, не прибігаючи до оцінки її теоретичного обсягу, оскільки список параметрів програми часто залежить від реалізації й може бути штучно розширений. Це приводить до збільшення метричної характеристики якості програмування. М. Холстед пропонує апроксимувати цю оцінку вираженням, що включає тільки фактичні параметри, тобто параметри реальної програми:
L^ = 2*n2 / (n1*N2).
4. Маючи у своєму розпорядженні характеристику L^, Холстед уводить характеристику I, що розглядає як інтелектуальний зміст конкретного алгоритму, інваріантне стосовно використовуваних мов реалізації:
I = L^ * V. (8)
На наш погляд, та й на думку самого автора, термін інтелектуальність не зовсім удала. Перетворивши вираження (8) з обліком (7), одержуємо
I = L^V = LV = V*V/V = V*.
Еквівалентність I і V* свідчить про те, що ми маємо справу з характеристикою інформативності програми.
Введення характеристики I дозволяє визначити розумові витрати на створення програми. Процес створення програми умовно можна представити як ряд операцій:
1) осмислення пропозиції відомого алгоритму;
2) запис пропозиції алгоритму в термінах використовуваної мови програмування, тобто пошук у словнику мови відповідної інструкції, її значеннєве наповнення й запис.
Використовуючи цю формалізацію в методиці Холстеда, можна сказати, що написання програми по заздалегідь відомому алгоритмі є N^-кратна вибірка операторів і операндів зі словника програми n, причому число порівнянь (за аналогією з алгоритмами сортування) складе log2(n).
Якщо врахувати, що кожна вибірка-порівняння містить, у свою чергу, ряд уявних елементарних рішень, то можна поставити у відповідність змістовному навантаженню кожної конструкції програми складність і число цих елементарних рішень. Кількісно це можна характеризувати за допомогою характеристики L, оскільки 1/L має сенс розглядати як середній коефіцієнт складності, що впливає на швидкість вибірки для даної програми. Тоді оцінка необхідних інтелектуальних зусиль за написанням програми може бути обмірювана як
E = N^ * log2(n/L). (9)
Таким чином, E характеризує число необхідних елементарних рішень при написанні програми.
Однак варто помітити, що E адекватно характеризує лише початкові зусилля за написанням програм, оскільки при побудові E не враховуються відладочні роботи, які вимагають інтелектуальних витрат іншого характеру.
Суть інтерпретації цієї характеристики складається в оцінці не витрат на розробку програми, а витрат на сприйняття готової програми. При цьому замість теоретичної довжини програми N^ використовується її реальна довжина:
E' = N * log2(n/L).
Характеристика E' уведена виходячи мз припущення, що інтелектуальні зусилля на написання й сприйняття програми дуже близькі по своїй природі. Однак якщо при написанні програми стилістичні погрішності в тексті практично не повинні відбиватися на інтелектуальній трудомісткості процесу, то при спробі зрозуміти таку програму їхня присутність може привести до серйозних ускладнень. Ця посилка досить добре погодиться з нашими виводами щодо взаємозв'язку N і N^, викладеними вище.
Перетворивши формулу (9) з урахуванням виражень (2) і (7), одержуємо
E = V * V / V*.
Таке подання E', а відповідно й E, тому що E=E', наочно ілюструє доцільність розбивки програм на окремі модулі, оскільки інтелектуальні витрати виявляються пропорційними квадрату обсягу програми, що завжди більше суми квадратів обсягів окремих модулів.