Статьи

Уроки разработки программного обеспечения, извлеченные из опыта потребителей

Поскольку мы, разработчики программного обеспечения, также неизбежно являемся потребителями программных приложений других лиц, мы, несомненно, под влиянием создания нашего собственного программного обеспечения используемое нами программное обеспечение. Например, на наше мнение о том, что делает эффективный интерфейс для пользователей, влияет наш опыт «на другой стороне» с использованием чужого программного интерфейса. Это особенно верно для веб- и мобильных разработок, поскольку веб-приложения и мобильные приложения стали широко распространенными в нашей жизни.

Мы склонны принимать идиомы и стили, которые нам нравятся, и избегать идиом и стилей, которые нам не нравятся. Степень этого влияния может широко варьироваться в зависимости от типа программного обеспечения, которое мы разрабатываем, от типа программного обеспечения, которое мы используем в качестве потребителя (чем они больше похожи, тем сильнее влияние). Есть моменты, когда влияние может быть более подсознательным, и другие моменты, когда влияние программного обеспечения других может быть очевидным. В этой статье я описываю недавний опыт работы с онлайн-сайтом, который напомнил мне о некоторых важных методах разработки программного обеспечения, которые следует учитывать при создании программного обеспечения (особенно веб-приложений).

Недавно я создавал  фотокнигу  на популярном веб-сайте, посвященном фотографии. Я начал с загрузки многочисленных фотографий для книги. Веб-приложение сообщило, что все фотографии, кроме одной, были успешно загружены. Он сообщил, что ему не удалось загрузить одну фотографию, и рекомендовал мне проверить подключение к Интернету. После проверки моего интернет-соединения я попытался загрузить одну фотографию еще несколько раз, но безуспешно. Я попытался изменить имя файла и изменить его местоположение, но все равно безуспешно. Я мог загрузить другие фотографии после этих неудач, но все еще не мог загрузить одну конкретную фотографию.

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

Когда я внимательно посмотрел на характеристики проблемной фотографии, я заметил, что ее размер равен 1 МБ (1024 КБ). Я использовал некоторое программное обеспечение для работы с изображениями, чтобы внести в него небольшие изменения, которые повлияли на его размер (сделал его немного больше), и он загрузился без происшествий. Я должен был начать все сначала, но в тот момент я смог (снова) разместить фотографии там, где я хотел, и сохранить проект по своему желанию.

Как потребитель этого программного обеспечения, я усвоил несколько уроков. Одним из уроков является необходимость частого явного сохранения при использовании этого приложения, потому что оно не имеет неявной функции сохранения и потому что сохранение проекта кажется единственным способом выяснить, что программное обеспечение находится в несогласованном состоянии, в котором нет дальнейшая работа над проектом будет сохранена. Я также научился избегать редкого случая попытки загрузить изображение размером точно 1 МБ в это приложение.

Мне напомнили о еще более важных уроках как разработчика программного обеспечения. Во-первых, мне напомнили о важности модульного тестирования, особенно граничных условий. Я предполагаю, что код, используемый этим приложением, выглядел примерно так: псевдокод:

if (imageSize < 1024000)
{
   // upload as-is
}
else if (imageSize > 1024000)
{
   // compress and then upload
}

В моем умозрительном псевдокоде, показанном выше, случай с изображением, которое точно составляет 1024000 байт, приводит к изображению, которое явно не загружено. Это простая ошибка, особенно если вы спешите, и если проверка кода не выполняется или срочно отправляется. Эффективные  модульные тесты  идеально подходят для устранения этого типа ошибок, а модульные тесты, которые в этом случае тестируют граничные условия, такие как 1024000, просты в реализации. Зачастую, просто написание модульного теста для проверки этого граничного условия заставит разработчика осознать ошибку своего пути.

Быть раздраженным и разочарованным потребителем этого программного обеспечения также напомнило мне о важности планирования « несчастных путей » в программном обеспечении, которое я разрабатываю. Использование этого программного обеспечения для создания фотокниг в этом случае было бы менее утомительным, если бы был реализован один из нескольких вариантов. Если бы приложение поддерживало функцию автосохранения, которая сообщала о невозможности сохранения, я бы знал, что то, над чем я работаю, нельзя сохранить.  Blogger , который я использовал для этого блога, имеет такую ​​функцию, и когда он сообщает мне, что не может сохранить, я знаю, что нужно прекратить добавлять новый контент в свое сообщение, пока он не сможет сохранить, и у меня есть возможность скопировать и вставить то, что у меня есть. набрал в файле на моем локальном жестком диске.

Другим вариантом, который мог бы спасти меня от большого разочарования, была бы функция «Сохранить как», которая позволила мне сохранить свой проект как другой проект. Я понимаю, что пишется программное обеспечение, которое не позволяет мне сохранять данные, когда оно думает, что оно находится в несогласованном состоянии (оно думает, что все еще пытается сохранить), но оно все равно должно сохранять его как другой проект. Я видел это разрешенным в нескольких настольных приложениях, которые считают, что загруженный в данный момент документ поврежден или несовместим, но в любом случае позволяют сохранить этот документ как отдельный документ (без перезаписи предыдущего документа).

Мое разочарование по поводу программного обеспечения для создания онлайн-фотоальбомов напомнило мне о важности учета опыта пользователей при написании программного обеспечения. Мы можем написать все чистое, читаемое и обслуживаемое программное обеспечение, которое мы хотим, но если оно обеспечивает плохой пользовательский опыт, эти усилия будут напрасными. Этот опыт также стал хорошим напоминанием о важности тщательного тестирования, особенно « несчастливых путей » и граничных условий.