Чи можете ви написати однозначну специфікацію такою природною мовою, як англійська?


10

Мені здається, ви не можете написати специфікацію програмного забезпечення англійською мовою, яка повністю не містить двозначностей, просто через неофіційну природу природної мови - і тому справді однозначна специфікація повинна містити код, написаний на формально визначеній мові.

Це відомий результат чи я щось пропускаю?


1
"код, написаний формально вказаною мовою". Це були б математика та логіка, правда? Хіба це не математика та логіка? Це здається дивним, оскільки ці мови завжди існували з явною метою бути однозначними. Чому запитати?
S.Lott

@ S.Lott: Користувачі хочуть специфікації на своїй власній мові, а не математику чи формальну логіку. Наша робота полягає в перекладі між двома доменами.
tdammers

2
Ваш код може бути однозначним, але це не означає, що він правильний.
JeffO

1
@tdammers: Що? Питання було про природну мову порівняно з формальною мовою. Що робити з цим користувачі? Далі, що робити, якщо користувач насправді є логіком? Далі, "бізнес-аналітики" зазвичай не пишуть від імені користувачів? Річ "користувач" здається пристойною і поза цим питанням.
S.Lott

@ S.Lott: Я припускав ситуацію, коли ви повинні описати програмне забезпечення клієнтові / користувачеві / іншому нетехнічному зацікавленому колу, що було б найкращою причиною бажати використовувати природну мову в першу чергу.
tdammers

Відповіді:


9

Хіба це не те, що адвокати завжди робили, щоб уникнути неясностей?

Результат - вони пишуть самими неприродними способами, намагатися читати їх документи складніше, ніж будь-коли, і незважаючи на це, завжди є невідповідності та неоднозначності.

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

Ось чому ми також документуємо наш код, адже іноді його важко читати на думку.

Немає сенсу документувати код іншим кодом.


2
Деякі юристи люблять притуплювати і затьмарювати речі. Залежить від вашої мети.
duffymo

1
Ви плутаєте юристів з математиками.
Doc Brown

1
@Doc: Math - це ще один код, тому що читати його можуть лише математики, і немає сенсу документувати код з кодом, це криптографія.
Хосе Фаети

2
@Jose: Я б сказав, що ви сильно спрощуєте. 99% усіх математичних доказів написані природною мовою - звичайно, технічною мовою зі спеціальними термінами і більш-менш використовуючи формули, але, безумовно, немає "формально зазначеної мови".
Doc Brown

@Doc: це я говорю ... документи написані природною мовою. Безглуздо пояснювати код іншим кодом.
Хосе Фаети

4

Неможливо? Давайте запитаємо, чи спочатку бажано. Якщо ми погоджуємося, що це неможливо, а ще є багато корисного програмного забезпечення, то мета однозначної специфікації здається академічною.

Я б сказав, що неможливо довести, що що-небудь ідеально і однозначно, як для специфікації, так і для програмного забезпечення.

Я думаю, це залежить від розміру проблеми. Якщо проблема досить невелика, математична за своєю суттю і, можливо, деякі інші критерії, які мені не вистачає, я б сказав, що можна написати специфікацію, яка працює.

Чим більша проблема, тим ширша аудиторія, тим важче це зробити.

Але авіоніка та інші складні проблеми говорять про те, що для вирішення великих проблем можна написати «досить хороші» специфікації англійською мовою.


2
"досить добре, це досить добре, але досконалість - це PITA" - я працював у контролі над побудовою навколишнього середовища, і немає такого поняття, як абсолютно однозначна специфікація там, навіть коли вони працюють на 400 сторінках - іноді це не мало значення , а для тих часів у нас були RFI
HorusKol

4

ну .. абсолютно однозначна специфікація проблеми - власне сам код :)

Це відома проблема, і для систем з особливою критичною місією обов'язково потрібно написати однозначну специфікацію на формальній мові (програмування), а потім перетворити її в код, який, очевидно, робить те, що говорить специфікація. Це дуже вузьке поле, 99,999% розробників ніколи не повинні виконувати подібні завдання, але я одного разу спілкувався з хлопцем, який робив це для системи контролю руху / залізниці.


3

Я хлопець, що підписався на W3C, і я прагну писати статті, виходячи зі своїх специфікацій. Мій досвід говорить мені, що читання будь-яких специфікацій без письмових прикладних кодів - це просто головний біль.

Я повністю згоден і думаю, що головна причина полягає в тому, що розробники схильні краще читати та розуміти код. Уявіть собі, що ви отримуєте математичний папір без будь-якої формули.

To calculate the result, simply add variable x to variable y, 
and then divide that by the b factor.

або:

result = (x + y) / b

Який коротший? Який із них читає? Що приносить більше розуміння?

Те саме стосується технічних характеристик. Багато разів, потрапляючи в технічні частини, написання одного рядка коду може уточнити довгий абзац пояснення.


І навіть тоді я запитаю, що таке домени (x + y) та (x + y) / b. Вони подвійні? Чи цілі числа? Чи цілі числа нескінченної довжини? Я сподіваюся, якщо вони цілими числами, ви написали правила щодо округлення :-)
xanatos

1

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

Але будь-яка формальна мова, достатньо виразна, щоб зробити щось цікаве, не буде позбавлена ​​суперечностей (незавершеність Геделя).


Я впевнений, що міркування неоднозначні, оскільки це є простою англійською мовою. Не могли б ви написати це формальною мовою?
блякає

1
Я вважаю, що це ваше припущення: citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.88.1151
Thomas Owens

І тоді виникає проблема зупинки, що перекладається на неоднозначність: N більший за N на 1 , не визначає N
mojuba

1
-1 за те, що Теорема Ґодельса невірна.
Інго

1

Технічні характеристики неоднозначні та неточні, оскільки люди неоднозначні та неточні. Знайдіть ідеальну людину і, можливо, тоді ви зможете отримати ідеальну специфікацію.

Англійська, суахілі, санскритська чи вавілонська мови не мають значення.


1

Неоднозначність насправді є силою в цьому контексті.

Для того, щоб пояснити , чому, давайте припустимо на хвилину , що це він доступний англійською в абсолютно недвозначним чином, щоб будь-яка проблема , яка може бути вирішена програмно можна виразити повністю і однозначно. Якщо ми використовуємо цей варіант англійської мови, а наш опис дійсно описує програму, яку потрібно написати повністю і однозначно, то логічно випливає, що необхідно зробити можливість автоматичного перекладу на цільову мову програмування - іншими словами, варіант Англійська, яку ми задумали, - це власне мова програмування.

Люди, які читають конструктивні документи (особливо функціональні конструкції), насправді не хочуть такого рівня деталізації - читання джерела програми, чи то на C ++, Java чи на Однозначній англійській мові, є над рівнем середнього голову непрограміста. Ось тут і входять природні мови: вони дозволяють автору специфікації ковзати будь-яким способом за шкалою деталей, переміщуючи невідповідні деталі реалізації в підтекст або залишаючи їх не вказаними повністю. Натуральні мови переповнені пристроями, які передають значення відносно чітко, навіть якщо ви не даєте точного визначення (що є частиною того, що робить автоматизовані переклади настільки важкими).

Тому мета, як правило, не є повною, правильною та однозначною специфікацією; мета - написати специфікацію, яка наочно ілюструє людям, що ви збираєтеся будувати.

Кожного разу, коли вам потрібні правильні та однозначні, і речі все одно набувають технічного характеру, псевдокод часто є більш цінним, ніж природні мови чи жорсткі формальні - він все одно може залишати невідповідні деталі (називаючи не визначені функції / процеси), але структура є однозначною. .


0

Ви нічого не пропускаєте, крім того, що документація написана для того, щоб люди читали. Очікується деяка двозначність і навіть вітається, тому що лаконічний текст важко читати (= не для людей).

Визначення документації для офіційної мови ще однією формальною мовою було б своєрідною проблемою з куркою та яйцями.

Якщо вам дійсно потрібна формальна специфікація, то існують офіційні способи перевірки моделей . Це активна і дуже цікава область досліджень, але кінцевими "користувачами" тут є машини, а не люди.


0

(Деякі мої моменти вже наголошувались на інших відповідях, але я відчуваю, що надаю досить різну перспективу, щоб зробити це вартістю відповіді, а не коментаря.)

Перш ніж ми вирішимо питання про те, чи може специфікація бути справді і абсолютно однозначною, ми повинні вирішити питання про те, чи повинна вона бути однозначною, принаймні на рівні, про який ви питаєте.

Дозвольте мені підійти до цього з точки зору керівника програми, який працює над проектом малого та середнього розміру, або до функції, що є частиною більшого проекту. Зазвичай для такого проекту будуть записані два різних специфікації: функціональна специфікація (або PM) та специфікація Design (або Dev):

  • Функціональна специфікація має завдання описувати, що повинен робити проект чи функція, часто з погляду замовника. Загалом не слід описувати, як це слід робити. Залежно від типу проекту, замовник може піклуватися про те, як виглядає зовнішній інтерфейс API, але чи переймається клієнт, клас A успадковується від класу B чи реалізує інтерфейс C? Він не повинен. І також не повинно функціонувати специфікація. Це вже вводить один рівень неоднозначності: технічний дизайн.
  • У специфікації дизайну є завдання описати, як повинні відповідати функціональні вимоги, з точки зору архітектора чи технічного дизайнера функції чи проекту. Він призначений для вирішення двозначних неясностей технічного проектування. Це буде містити ті деталі, які ви не хотіли в специфікаціях, таких як архітектура рішення, включаючи структуру класів, успадкування, можливо, навіть окремі функції та методи, залежно від обсягу та масштабу проекту. Чи цікавить архітектор те, як ви називаєте ваші тимчасові змінні, чи використовуєте ви список або масив для внутрішнього типу даних? Якщо припустити, що вона довіряє своїм розробникам, вона не повинна, а також не повинна бути вказана специфікація дизайну. Це вносить другий рівень неоднозначності: рівень реалізації.

В цілому, ці реалізації на рівні деталі не враховуються в якості офіційного документа, а задокументовані, сам по собі , в коді себе, в тому числі коментарі. Цей рівень неоднозначності дозволяє хорошому розробнику використовувати власні навички та приймати детально орієнтовані технічні рішення, які є ознакою хорошого індивідуального розробника. Через це я не соромлюсь сказати, що неоднозначність у специфікації насправді є хорошою справою: вона дозволяє розробникам виконувати свою роботу і піднімає їх над просто "кодовими мавпами".

Однак це не означає, що у всьому документі має бути неоднозначність. На високому рівні не повинно бути двозначностей щодо інтерфейсу із замовником. Якщо функція має відкритий для API інтерфейс, її слід чітко визначити. Якщо системі потрібна дата для введення дати, щоб виконати її роботу, чи повинна ця дата знаходитися в локальному часовому поясі чи UTC? Який формат потрібен? Чи потрібно бути точним до мілісекунди, або хвилина просто чудова?

Повертаючись до питання про те, чи можна використовувати природну мову для створення однозначних специфікацій, це правда, що не дуже добре вловлювати цей рівень ясності. Я бачив це в деяких обмежених обставинах, але це, мабуть, унікальні винятки, які ми не можемо застосовувати універсально. Найчастіше двозначність вирішується за допомогою технічного жаргону, діаграм чи навіть псевдокоду. Як тільки ви почнете звертатися за допомогою до таких інструментів, природна мова перестає бути єдиним дескриптором. Оскільки ці інструменти можуть зробити більш зрозумілою навіть функціонально однозначну специфікацію, я б ризикну сказати, що такого зобов'язання навіть не слід робити.

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


0

Можна зробити природну мову відносно однозначною, але лише з великими труднощами.

Юридична професія досить відчайдушно потребує мови, щоб бути максимально однозначною. Хоча багато про те, як застосовується закон, може бути зрозумілим для тлумачення, те, що означає слова, не повинно.

Це потрібно призвести до винаходу легалезу. Як далеко ви готові зайти?


0

Відкрита група ISO, IETF та ITU має ряд специфікацій, які є досить однозначними для того, щоб високо конкурентні компанії могли успішно працювати. Існує цілий ряд специфікацій, які є основою договорів чи законів, в яких загрожує мільйони доларів.

Тому технічні характеристики можуть бути не "ідеальними". Однак це тому, що люди не є ідеальними. Наприклад, однозначно, що HTTP повинен використовувати заголовок "Referer" - правильний написання насправді є "Referrer".

Англійська мова здатна бути однозначною, але люди здатні робити помилки - включаючи неоднозначність.

Крім того, може бути корисним бути навмисно неоднозначним щодо деталей, які не були остаточно доопрацьовані або можуть потребувати оновлення в майбутньому. Наприклад, специфікація може вказувати "хеш", а не конкретизувати md5, sha1, crc32 і т.д.


0

Я вважаю, що правильна відповідь є негативною. Потрібно розрізнити наступні питання:

  1. Чи можна написати специфікацію програмного забезпечення на природній мові, яка не містить неоднозначностей?
  2. Чи можна писати програмне забезпечення на природній мові, яке не містить неоднозначностей?

Різниця між першим та другим питанням стосується рівня деталізації, що вимагається, обсягу необхідного тлумачення та правил, що накладаються на побудову речень на природній мові для написання специфікації програмного забезпечення або програмного забезпечення.

Відповідь на друге питання є ствердною. Враховуючи відповідний обмежений підмножина природної мови з узгодженими правилами побудови речення та значення, код можна записати в граматичних англійських реченнях. Наприклад, наступна мова однозначно дозволяє писати заяви про призначення:

Variables: x,y,z,...
Constants: 1,2,3,...
Rules: (1) if x is a variable and n a constant, then
           "The variable x contains the number n" is a sentence.
       (2) if x is a variable and n a constant, then
           "Assign the number n to the variable x" is a sentence.

Тобто ми можемо систематично переводити код, написаний на формальних мовах програмування, на природні мови, описуючи кожну процедуру. З іншого боку, специфікація програмного забезпечення часто вимагає тлумачення. Таким чином, чи можна давати специфікацію програмного забезпечення однозначно, залежить від рівня деталізації, що бере участь у специфікації. Однак, з огляду на вибраний домен, над яким знаходиться специфікація, при цьому вибрані конкретні операції над цим доменом, може бути здійснено аналогічний процес перекладу. Наприклад:

Over the domain D supporting operations f,g,h over elements a,b,c in relations
P,R,Q with properties φ,ψ,θ, design a program that does X,Y,Z.

де оператори X, Y, Zмістять тільки ті елементи , згадані в передмові специфікації і написані відповідним чином формального і узгодженого підмножина природної мови. Потім неоднозначності стосуватимуться того, як реалізувати специфікацію - але цього можна очікувати.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.