Взагалі кажучи, чи краще зробити всі функціональні частини або спочатку скористатись інтерфейсом, або двома сумішами?


47

Взагалі кажучи, чи краще зробити всі функціональні частини або спочатку скористатись інтерфейсом, або двома сумішами?

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

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

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

Приклад програми в цьому конкретному запитанні є тут із супровідним блогом та оригінальним комерційним продуктом .

Відповіді:


85

Серед багатьох бізнес-користувачів та клієнтів існує загальна думка, що коли він виглядає повноцінним, він майже завершений. Як ви, напевно, знаєте, це далеко не правда. Можливо, це виглядає добре, але без бекенда, і деякі користувачі думають, що зробити його красивим - це 80% роботи, а не 20% ( або інші 80% ).

Незліченна кількість розробників може розповісти про це страхіття - отримати макет сторінок, зроблених в Microsoft Word, за допомогою знімків екрана якогось іншого інструменту, і клієнт сказав: "так, ви майже зробили це?"

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

Найгірший випадок із "одним першим, а другим", коли ви потрапляєте в іншу частину, виявляєте, що він зовсім не відповідає дизайну.

Таким чином, будуйте і те, і інше. Покажіть прогрес в передньому кінці, змусьте задню частину працювати з тим, що ви будуєте. У багатьох випадках є гарною ідеєю надати додаткові складання і переконатися, що ви робите те, що хоче клієнт (це потрапляє в Agile). Якщо занадто довго виходити з «видимих ​​авансів», це може зашкодити відносинам з клієнтом (це для обох випадків «все виглядає зроблено рано» і «нічого не робиться до самого кінця» - клієнту важко бачити, як написано рамки або одиничні тести або санітарія даних у міру виконання).

Джоел писав про це у "Айсберг-секрет", відкритий :

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

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

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

Це ще раз підтверджено в дописі на блозі Не робіть демонстраційний вигляд виконаним, у якому є такий корисний графік:

Як це зроблено з тим, як це виглядає

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

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

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

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


Для тих, хто бореться з цим у світі Java Swing, є зовнішній вигляд, який називається Нарізка, завдяки чому інтерфейс користувача не виглядає повноцінним (навіть якщо він є).

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


Подальше читання (та посилання зі статті):


7
Здається, що ви пропонуєте якусь спритну методологію ... :)
Олександр

7
@Alexander Agile допомагає в цьому випадку, але це не суттєво. Водоспад може мати важливі віхи, і клієнти можуть бути дуже розчаровані, побачивши, що "це виглядає зроблено, чому є ще 3 милі каміння, які займають так само довго?" FWIW, у мене були випадки, коли бізнес-користувач думав, що це зроблено через знімок екрана + мс-фарба в дизайні технологій (водоспадний магазин) виглядав добре.

3
Якщо ви не бачили відповіді експерта на це відео, ось це: youtu.be/B7MIJP90biM
ragol

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

2
+1 для серветки L&F. Це, безумовно, буде в моєму майбутньому. :)
Каті

27

Це залежить: вам потрібна щільна петля зворотного зв’язку навколо вашої найважливішої функції

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

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

Між нею нечітка сіра зона, де ви можете вирішити найкращу комбінацію про те, як найкраще взаємодіяти та перевіряти код (автоматизовані тести? Інтерфейс для експериментів?). Я особисто робив обидві крайності та все, що знаходиться між ними, і визначити правильне місце для цього спектру - одна з найважчих речей, яку я маю вирішити, і на 100% залежить від типу речі, яку я будую.


2
Тобто визначати та вирішувати найризиковіші та найважливіші компоненти на передній частині, щоб зменшити ймовірність перевищення та / або відмови. Будь ці компоненти - це інтерфейс користувача, бізнес-логіка тощо ... чи, швидше за все, комбінація всіх різних компонентів.
Олександр

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

8

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

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

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

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


+1 Завжди мати шматочок чогось, що можна відвантажувати, важливо.
JensG

@Jens: "Завжди мати шматочок щось, що можна відвантажувати, є суттєвим", - це канар. У кращому випадку ця приказка стосується лише більшості програмних програм. У реальному житті програми, які виконують лише частину необхідної роботи, не є корисними ні в якому разі.
Данк

Ось ваші переживання. У мене різні. Великі реальні проекти, включаючи безліч віх і реальних клієнтів.
JensG

1
@Dunk: Додаток, який не виконує жодної частини роботи, менш корисний, ніж програма, яка виконує частину роботи. Я, однак, не говорю про додаток, який "зроблено"; Я говорю про порядок, з якого слід створити додаток. Мій досвід узгоджується з JensG: завжди можливість скоротити бета-версію на основі того, що ви продемонстрували на цьому тижні, і відправити її клієнтам негайно робить клієнтів набагато щасливішими.
Кіт Б

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

3

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

BTW, чи не так розробляється більшість програмного забезпечення GUI? Подивіться, наприклад, у браузер Firefox : від однієї версії до наступної розвивалися і функціональність, і інтерфейс користувача.


2

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

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


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

2

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

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

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


І де клієнт грає у вашій методиці? Майте на увазі, що зазвичай ваш клієнт має лише дуже загальне уявлення про те, чого він хоче. Вам належить розібратися, як «витягнути з них» саме те, що вони хочуть, щоб ви могли його побудувати. Ваша методологія просто побудувала те, що, на вашу думку, хоче клієнт, але це рідко буде те, що клієнт насправді хоче. Отже, ви щойно витратили тону часу, кодуючи те, що клієнт не хоче.
Данк

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

0

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


0

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

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


0

Це залежить. Наскільки чітко визначені ваші вимоги? З якою частиною системи стикається інтерфейс користувача?

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

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

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

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