Среди многих бизнес-пользователей и клиентов существует общее представление о том, что когда оно выглядит завершенным, оно почти завершено. Как вы, вероятно, знаете, это далеко от истины. Можно сделать так, чтобы он выглядел красиво, но без серверной части, и некоторые пользователи считают, что сделать его красиво - это 80% работы, а не 20% ( или другие 80% ).
Бесчисленные разработчики могут рассказать ужасные истории об этом - макет страниц, сделанных в Microsoft Word, используя снимки экрана какого-либо другого инструмента, и клиент, говорящий: «Итак, вы почти сделали это?»
Вы должны сделать шаг так, чтобы все части были сделаны, когда это будет сделано. Попытка сначала выполнить весь бэкэнд, а затем весь внешний интерфейс приведет к тому, что конечный пользователь подумает, что вы ничего не делаете, и спросит, почему вам платят, когда за это нечего показать. С другой стороны, сначала пользовательский интерфейс, и вы увидите, что конечный пользователь вносит изменения и тратит все свое время.
Наихудший случай с «первым и вторым» - когда вы переходите к другой части, вы обнаруживаете, что она совсем не соответствует дизайну.
Таким образом, построить оба. Покажите прогресс в передней части, сделайте так, чтобы бэкэнд работал с тем, что вы строите. Во многих случаях хорошей идеей является создание инкрементных сборок и проверка того, что вы делаете то, что хочет клиент (это входит в Agile). Если слишком долго обходиться без «видимых достижений», это может повредить отношениям с клиентом (это касается обоих случаев: «все выглядит рано» и «ничего не сделано до самого конца» - клиенту сложно увидеть, как пишется структура или модульные тесты или очистка данных как прогресс).
Джоэл написал об этом в «Секрете айсберга» :
Важное следствие два. Если вы покажете непрограммисту экран с пользовательским интерфейсом, который на 100% красив, они подумают, что программа почти готова.
Люди, которые не являются программистами, просто смотрят на экран и видят пиксели. И если пиксели выглядят так, как будто они составляют программу, которая что-то делает, они думают: «О, черт возьми, насколько сложнее было бы заставить ее работать на самом деле?»
Большой риск здесь заключается в том, что если вы сначала смоделируете пользовательский интерфейс, предположительно, чтобы вы могли пообщаться с клиентом, то все будут думать, что вы почти закончили. А потом, когда вы проведете следующий год, работая, так сказать, «под одеялом», никто на самом деле не увидит, что вы делаете, и они подумают, что это ничего.
Это снова повторяется в посте блога. Не заставляйте демо-версию выглядеть готовой, на которой есть этот полезный график:
Обратите внимание, что эти два варианта, как правило, отражают «сделать пользовательский интерфейс готовым» (и тогда ожидается, что вы скоро это сделаете) и «выполнить бэкэнд» (а затем клиент беспокоится о том, что вы пропустили крайний срок).
То, как «сделано» что-то выглядит, должно совпадать с тем, как «сделано» что-то.
Каждый разработчик программного обеспечения испытал это много раз в своей карьере. Но инструменты для настольных издательских систем приводят к той же головной боли для технических писателей - если вы покажете кому-то черновой набросок, который отлично отформатирован и отформатирован, он увидит в этом больше работы, чем вы хотели бы. Нам нужно соответствие между тем, где мы находимся и где другие нас воспринимают.
В этой статье также поднимается важный вопрос о типе обратной связи, которую вы получаете с различными уровнями восприимчивости пользовательского интерфейса. Если у вас есть что-то, что выглядит завершенным, вы с большей вероятностью получите отзыв о «могли бы вы изменить шрифт», чем «этот макет не работает - слишком много вкладок».
Для тех, кто борется с этим в мире Java Swing, есть внешний вид под названием Napkin, который делает его таким, чтобы пользовательский интерфейс не выглядел полным (даже если это так).
Ключевым моментом здесь является сделать так, чтобы он не выглядел готовым. Внешний вид пользовательского интерфейса является сигналом для многих бизнес-пользователей о том, что приложение завершено (даже если это всего лишь несколько статических страниц без какой-либо логики или что-то встроенное в конструктор интерфейса).
Дальнейшее чтение (и ссылки из статьи):
Это зависит от вас : вам нужна тесная обратная связь вокруг наиболее важной части вашей функциональности
Если ядро того, что вы делаете, рискованная и пугающая часть - это какой-то внутренний движок, то заставьте ядро работать, скажем, в консоли или через модульное тестирование. Например, синтаксическому анализатору протокола не нужен пользовательский интерфейс, чтобы знать, правильно ли он работает.
Если ваша крутая вещь предполагает какую-либо интерактивность - интерактивность, которую вы должны постоянно устранять, отбрасывать и открывать заново - тогда крайне важен подход, основанный на использовании пользовательского интерфейса. Например, я хочу создать приложение, позволяющее людям взаимодействовать с визуализацией данных. Самая важная вещь, которую мне нужно выяснить, - это если визуализация имеет смысл, поэтому я, скорее всего, отброшу полдюжины подходов, прежде чем остановиться на одном. Я сделаю все это перед тем, как написать тестовый модуль.
Между ними есть нечеткая серая область, где вы можете выбрать наилучшую комбинацию того, как лучше всего взаимодействовать и проверять ваш код (автоматизированные тесты? Пользовательский интерфейс для экспериментов?). Я лично сделал и крайности, и все, что между ними, и выбор правильного места для этого спектра - одна из самых сложных вещей, которые мне нужно решить, и она на 100% зависит от типа вещей, которые я строю.
источник
В Agile-среде вы можете услышать обсуждение «ходячих скелетов» или «тонких вертикальных срезов». Идея состоит в том, что, так как для пользователя важно то, что для него важно работать с программным обеспечением, программное обеспечение вы работаете по частям.
В упомянутом вами примере приложения вы начинаете с окна и, возможно, с одной вкладки, и заставляете все работать в некотором роде. Затем со временем вы добавите функциональность и, следовательно, вкладки в каждом конкретном случае, чтобы каждая функция работала при ее создании. Это часть того, что дают вам частые демонстрации клиентов: возможность показать что-то новое, работающее и мгновенно получить обратную связь.
Короче говоря, да, работа с пользовательским интерфейсом является неотъемлемой частью функциональной работы, если у вас есть пользовательский интерфейс.
Начните с чего-то небольшого, что работает, и итерируйте его функциональность, чтобы предоставить полный набор программного обеспечения.
источник
Я бы порекомендовал сделать сочетание функциональности и пользовательского интерфейса (и получить отзывы или опыт тестирования как можно скорее).
Кстати, разве не так разработано большинство крупных программ с графическим интерфейсом? Посмотрите, например, в браузер Firefox : от одной версии к другой развивались как функциональность, так и пользовательский интерфейс.
источник
В больших (веб-приложениях) PHP, над которыми я работаю, я сначала пытаюсь установить классы и методы, которые возвращают фиктивные значения . Это делается для создания псевдоконтракта, который другие разработчики могут использовать для реализации пользовательского интерфейса.
Вторым преимуществом этого метода является то, что мы можем оттачивать контракт / интерфейс при изменении требований пользовательского интерфейса (и они всегда меняются), даже до того, как весь код написан и доставлен.
источник
Я склоняюсь к тому, чтобы начать с дрянного пользовательского интерфейса, который просто выводит переменные данные на экран. Нет шрифтов, нет выравнивания, ничего графического на долгое время. Просто «Welcome user x» и кнопки, называемые «load pic» и т. Д. Что хорошего в этом, вы узнаете, не сломано ли что-то в бэкэнде.
По мере продолжения разработки вы можете обнаружить, что нужно больше вещей или меньше. Но на каком-то этапе вы решите, что бэкэнд близок к завершению. Теперь у вас есть пользовательский интерфейс, который содержит все необходимые вложения, и вы можете потратить много времени на все графические элементы.
Осторожно, хотя, это не надежно. Вам нужно немного предусмотрительности, чтобы увидеть некоторые возникающие проблемы. Например, вам может потребоваться исследовать компоненты пользовательского интерфейса для разумного отображения данных.
источник
Если вы используете хорошую веху и систему отслеживания проблем, вы можете избежать некоторых из этих проблем, потому что сразу руководство может увидеть, насколько вы продуктивны. Они смогут увидеть, что вы на 80% завершили бэкэнд и что интерфейс является следующей вехой; они смогут увидеть, что у вас есть набор задач пользовательского интерфейса и серверных задач, которые необходимо выполнить для определенного этапа. Но все начинается с требований проекта, и ответ Дуга Т поднимает некоторые хорошие моменты об этом аспекте проектирования системы.
источник
Подумайте с точки зрения ваших пользователей / клиентов. Программная система - это набор функций, которые придают этим пользователям / клиентам определенную ценность. Конечно, каждая из этих функций имеет и пользовательский интерфейс, серверную часть и некоторые другие вещи.
Создайте свою систему всегда по функциям и попробуйте разделить на очень мелкие функции. Таким образом, вы всегда готовы предложить своим клиентам нечто большее, помните, что разработка программного обеспечения - это не сборка версии 1.0, а переход к версии 1.0.1 или 1.0.2 и так далее ...
источник
По-разному. Насколько четко определены ваши требования? Какая часть системы стоит перед пользовательским интерфейсом?
Из моего опыта большинство клиентов не знают, чего хотят, пока не увидят что-то перед собой. Поэтому я обычно предоставляю некоторые каркасы ключевых аспектов пользовательского интерфейса или предоставляю большую часть пользовательского интерфейса (нерабочий). Это позволяет клиенту передумать о функциях / функциях без особого влияния, так как проектирование базы данных и структура кода все еще находятся на этапе проектирования - проект легко изменить. На несколько порядков проще / быстрее изменить проект раньше, чем потом.
Agile заявляет, что вы должны также сначала поработать над самыми сложными предметами и самыми важными предметами. Сбой быстро . Поэтому, как только клиент увидит пользовательский интерфейс, я сосредоточусь на создании небольших функциональных компонентов, которые будут говорить о самом важном и сложном для реализации, чтобы вы знали как можно скорее, столкнетесь ли вы с какими-либо препятствиями.
Затем у вас есть свои спринты и вы постоянно общаетесь с клиентом, разрабатывая как пользовательский интерфейс, так и функциональные аспекты.
источник