Як часто ви запускаєте і тестуєте код під час програмування? [зачинено]


16

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

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

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

На ваш погляд, правильний баланс між двома підходами? Звичайно, перший вимагає більше досвіду, але чи впливає це на продуктивність позитивно чи негативно? Чи допомагає другий виявити помилки на більш тонкому рівні?


3
На те, щоб написати цілу підпрограму, потрібні години чи дні?

1
@Thorbjorn Підпрограма триває близько 999 рядків, і це затуманено: #define h for(int c=y-3; y; c++/(randomTypeIDefinedEarlier)s*(float)4*(lol)sin((helloWorld)mysub(2,1,++a,*(r+z))); goto xkcd)І це лише один рядок.
Матін Ульхак

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

Відповіді:


6

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

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

  • Для більшого масштабу розвитку "під капотом" я намагаюся заздалегідь отримати якомога більше тестів. Оскільки тести можуть простіше сказати мені, що зламалося, я можу пройти деякий час, не чекаючи, як правило, тривалий компілятор.

  • Для UX-дизайну я використовую якийсь візуальний дизайнер, який завжди виглядає так, як він буде працювати (або близько до нього). Він по суті завжди складається з дизайнерського коду.


63

Особисто я повинен працювати невеликими шматками, тому що я недостатньо розумний, щоб тримати години кодування у своєму біологічному кеші L1. Через свої обмежені можливості я пишу невеликі, згуртовані методи та об’єкти проектування, щоб мати дуже нещільне з'єднання. Більш потужні інструменти та мови полегшують кодування довше, не будуючи, але для мене все ще існує обмеження.

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


12
Оновлення для "... недостатньо розумного .." Я відчував це таким чином вже досить давно.
leed25d

4
Що з вашим кешем L2?
Матін Ульхак

Я збирався підкреслити це, але оцінка становить 42 ...
Уейн Вернер

Новіші моделі мають значно більші кеші L1. Коли ви купили своє? Ви можете скористатися оновленням обладнання.
Пітер Айтай

Ну, це не вік моделі настільки, як той факт, що це була "бюджетна" лінія. :(
dss539

17

Мені подобається писати тест, перш ніж написати свій код реалізації. Мені це подобається з трьох причин:

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

2
"Я знаю, що закінчую писати код реалізації, коли всі мої тестові справи пройдуть." - Як визначити, чи написали ви всі необхідні тестові справи?
dss539

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

4
@David - як ти формально підтверджуєш, що формальне підтвердження не має помилок? Як ви формально доведіть, що вимоги, як ви сприймаєте, відповідають вимогам реальності. Ви можете офіційно довести, що один опис відповідає іншому, але цілком можливо, що обидва описи є невірними однаково - особливо, якщо обидва описи були написані однією людиною. Якщо писати речі з математичної нотації, це не робить людей непогрішними. Величезна кількість математичних "доказів" виявила (після довгих періодів дуже детальної перевірки) помилкою.
Steve314

1
@ Steve314: AFAIK, формально доводячи правильність алгоритму, ви точно та стисло вказуєте, що таке очікувана правильність. Хоча ви наголошуєте на тому, що визначення поняття "правильність" насправді може бути невірним.
Девід Вейзер

1
@ dss539, що походить від випадків використання, які програма має намір реалізувати.

4

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

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

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

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

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


3

Я складаю і тестую, чи виконується одна з наступних умов:

  • Останнє складання було 15 хвилин тому
  • Остання компіляція була 25 рядків тому
  • Нова функція / підпрограма реалізована
  • Основні зміни
  • Нова функція (або помилка, замаскована під функцію)
  • Виправлення помилки (видалено "функцію")
  • Мені нудно

1

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

З іншого боку, якщо я кодую в Lisp, я спробую кожну функцію після введення її.

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


1

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


1

Тричі на годину, потрібна вона чи ні.

Ми робимо тестування першого програмування і робимо тільки робочий код на VCS. Колірник відправляється і перевіряє репо кожних 20 хвилин і запускає тестовий набір. Будь-які збої негайно надсилаються всій команді програмування для негайного виправлення.


1

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

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


0

Для мене; -
Коротка хронологія (не так багато часу на роздуми) - написати код, скласти, перевірити. налагодження
Достатній час - поки (зроблено) {написати невеликий код, компілювати}, тест, налагодження


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

Можливо. Але коротка часова шкала означає, що дупа загорілася, і менеджер потребує звіту, який говорить, що деяка задача виконана на 100%.
Маной Р

0

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


0

Я намагаюся писати тести перед кодом. Я запускаю свої тести щонайменше двічі перед фіксацією. Потім він знову запускається з сервером Continous Integration.

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