Главная Веб-программинг
PHP |
Ошибки программиста PHP ч.3 |
|
|
| Автор Игорь Локтев | |
| 07.03.2009 г. | |
Последняя третья часть описывает самые недопустимые ошибки програмирования. Последние 7 "смертельных" ошибок концептуальны в своей природе и могут являться первопричиной ошибок, описанных в части 1 и 2. Они включают грубые промахи, такие как малое время, отведенное на разработку и не просматривание полученного кода.
7. Программирование методом "Вырезал и Вставил": Неправильный
Способ
Дорабатываемой: Код будет выглядеть, как множество отрывков, слепленных вместе.
Попросите опытного программиста изменить скрипт и он предпочтет все переписать
с нуля. Нечитаемый код это недорабатываемый код. Внимательно изучите код другого программиста перед его копированием. Проанализируйте, что было сделано. Только если код читабелен, согласуется с логикой вашей программы и в нем нет ошибок, его можно рассматривать, как кандидат на копирование. Интегрирование кода таким образом позволит легче совместить его с остатками своего кода. Библиотеки - это хорошо Используйте библиотеки PHP лишь из проверенных источников, таких как PEAR, или PHP Classes Repository. Для предварительно запакованных API, хорошо использовать дополнительную функциональность, которую эти API предоставляют вашей программе. На самом деле, если вы можете найти написанные библиотеки в источниках, вызывающих доверие, обычно лучше использовать их в своем коде.
6. Нет принципов написания кода
Эти принципы - способ определения структуры и внешнего вида вашего кода, они
описывают методы и стиль, который вы должны использовать при разработке проекта.
Какие переменные глобальные и как они обозначаются, как глобальные.
Стиль комментариев и их написание. Пример Документа по принципам написания кода Давайте создадим очень короткий документ по принципам написания кода. Мы не будем углубляться в детали, просто напишем каркас. Настоящий документ обычно достигает размера в 10-40 листов. Обратите внимание, что вам не понадобиться каждый раз писать его заново. Старый вариант всегда можно изменить по необходимости и использовать в новом проекте. Основные параметры стиля DesignMultimedia.com Вот пример такого документа. Как только он завершен, вы можете в одиночку сосредоточится на его реализации и не беспокоиться о несовместимости исходного кода, метода именования переменных или структуре сайта.
Вступление
Файловая Структура
Объяснение структуры:
Заголовки и Подвалы
<?php
И следующий подвал:
<?php
Объяснения если необходимы:
Документация по Коду
Стиль комментирования
Основные моменты разработки
Именование Переменных
5. Не Проверяется Код Одна из причин, по которой PHP, как система с открытым исходным кодом, занимает значительную долю рынка, заключается в том, что другие разработчики могут изучить исходный код, пишущийся для PHP. Тысячи людей участвуют в поиске ляпов, глюков, утечек памяти, ошибок совместимости и неоптимальности. К моменту выпуска новой версии PHP, по меньшей мере 2 или 3 программиста-эксперта просмотрели исходный код. В идеале, скрипты для средне- или крупноразмерного проекта должны проверять два разных программиста, не участвовавших в написании исходного кода. Во время написания, комментарии постороннего человека также могут оказаться полезными. Впрочем, в большинстве случаев вам должно хватить одного программиста-эксперта, проверяющего код. Квалифицированный проверяющий - это тот, кто может быстро понять работу кода и предложить конструктивные советы и по его содержанию и по исполнению. Часто, оказывается полезным сделать небольшой вопросник для проверяющего. Вот некоторые примеры, которые я счел полезными:
Каково назначение XXX кода?
4. Затыкание дыр в проекте Показатели Упущений в Проекте Обычно, когда вы первоначально планируете свой проект, вы думаете, что выполняете все в нужном порядке. Вы можете не осознать, что идете по неправильному пути, пока не получите специфику структуры приложения (или его частей). Вот показатели, что план проекта сбился с пути:
Чрезмерное Затыкание дыр: Вы "затыкаете дыры" в коде. "Затыкание
дыр" - это решение, которое заставляет код работать, но не подходит к структуре
программы. Аналогично, это может быть не оптимальным решением, но единственным,
применимой в текущей структуре.
for ($idx = 0; $idx < strlen($GeorgeBush); $idx++) Код сверху написан хорошо; он пробегает по строке и выводит цитату Джорджа Буша. Он правильно написан и внешне и по синтаксису. Тем не менее, той же цели можно было достичь, применив функцию print на всю строку целиком. Исправление Упущений Проекта Когда вы понимаете, что ваша программа была написана с ошибками или не-оптимальной структурой, шаги, необходимые для исправления этого, могут быть различными, от оставления программы такой, какая она есть, изменения частей структуры программы, или полной переработки всего приложения. В большинстве случаев, лучшим вариантом будет, если кто-нибудь не участвующий в процессе разработки программы осмотрит ее и прикинет, что нужно сделать. Давайте рассмотрим три категории ошибок:
Мелкие упущения местного масштаба: Иногда упущения в проекте программ могут
быть не критичными и могут не стоить времени и денег, которые понадобятся на
переработку структуры.
Значительное упущение местного масштаба: В других случаях выясняется, что нужно
переделать лишь часть приложения. Например, вы пишите Операционную Систему и
есть недостатки в построении окон, но весь предшествующий код вполне хорош.
ЗНАЧИТЕЛЬНОЕ, глобальное упущение в проекте: В большинстве таких случаях, вся
инфраструктура приложения нарушена.
3. Исключение Пользователя из Разработки Дизайна
"Это не то, что мы хотели" Непонимания возникают, когда вы отстраняется пользователя от разработки структуры. Когда создается приложения, всегда думайте о них. Всегда держите в голове, чего хотят они и как приложение должно достичь поставленной цели. Наиболее важно, впрочем, уделять время на общение с ними:
Постоянный опрос мнения пользователей Как написал Бенджамин Франклин в альманахе Бедного Ричарда "Стежок, сделанный вовремя, спасает девятерых." (Прим.пер.- Не силен я в американской истории) Тоже верно и для приложений. Если вы хотите поберечь свое время, постоянно спрашивайте их мнения. Чего они хотят? Чего нет? Что улучшит приложение? Создание Прототипов Создание Прототипов - это структурированный процесс тестирования и требования мнения пользователя по мере разработки приложения. Тестирование веб-приложения во время его разработки также важно. Начните с определение тестеров. Проверяйте, насколько приложение соответствует требованиям пользователей, но также требуйте и прямых личных мнений. Многие программисты совершают ошибку - тестирует приложение только, когда оно завершено. Это рецепт провала, поскольку то, чего хочет пользователь, и то, чего сделает вы, скорее всего, будет различаться. Более того, пользователи лучше поймут, чего они хотят, когда увидят ясный пример. В кратце, нельзя заставить пользователя сразу четко сформулировать свои требования, хотя каждый программист и хочет этого. Я предлагаю, чтобы вы определили путевые столбы по ходу разработки приложения. В конце каждого такого отрезка обдумайте следующие моменты:
Приносит пользу пользователю работа, которую вы проделали? Обычно грамотно размещать путевые столбы в те моменты, когда завершена очередная значительная часть пользовательского интерфейса. К примеру, я часто размещаю первый столб когда завершается работа над интерфейсом приложения. Это момент, когда дизайнеры примерно представляют, как будет выглядеть сайт. Следующую проверку нужно будет провести, когда будет готова простейшая демо-версия, демонстрирующая функциональность приложения. Таким образом, я проверю пользовательский интерфейс по завершению каждого модуля или компонента приложения. Модуль или компонент может быть, например, системы управления пользователями приложения, или, возможно, поисковой системой сайта. В эти моменты я возьму мою первоначальную группу тестеров (а также тех новых, которые имеют особое отношение к объекту тестирования) и предложу ответить на поставленные вопросы. Это позволяет увидеть "общий" эффект изменений, которые вы только что сделали. Вы можете определить дополнительные наборы вопрос на каждый "путевой столб" или использовать стандартный набор. Бета Тестирование Это обычная форма тестирования, которая похожа на создание прототипов, но обычно оставляется на время окончания работ. Выбранные клиенты получают возможность проверить приложение и сообщить свои комментарии и отчеты об ошибках. Оно не такое интерактивное, как создание прототипов, и должно быть произведено как можно раньше. Тем не менее, это необходимый шаг, который разработчики обязательно должны произвести перед выпуском приложения.
2. Отступление от Технического Задания Когда Фред Брукс описал процесс разработки приложения в Месяце Мифического Человека (The Mythical Man Month), он определил следующее оптимальное расписание:
1/3 Планирование: Здесь вы описываете, как ваше приложение будет работать,
каковы различные компоненты (и компоненты компонентов) приложения и как они
будут связаны. Что должно делать приложение? Ответив на эти фундаментальные
вопросы вы положите базис планирования приложения. Обратите внимание: Процесс планирования внешнего вида, особенностей и функциональных требований приложения известен, как информационная архитектура. Стадии Проекта О стадиях проектного плана может быть сказано много. К примеру, можно упомянуть отладку, моделирование, разработку проекта и планирование времени. Тем не менее, я только набросаю простенький план. Обычный План Проекта включает:
Стадия Анализа Требований Первая часть планирования проекта - создание анализа требований: здесь вы точно определяет, что требуется. Вы точно решает, что должна делать программа и как она будет работать. Это одна из важнейших стадий в разработке веб-приложения.
Определение Требований Пользователя
Что они делают? Методы исследования могут варьироваться от обзора рынка или вопросников до разговора с ключевыми людьми компании. Каким бы способом вы не воспользовались для сбора нужно информации, крайне важно подумать о вышеупомянутых пунктах.
Определение Технологических Требований
Стадия разработки Дизайна Программы
Смоделировать К примеру, давайте разработаем простую форму. Мы разрабатываем возможные действия, которые может произвести пользовать при обращении к простому скрпиту, рассылающему почту. При самом абстрактом подходе, возможны два варианта. Они отослали данные формы, или нет. Если они не отослали данные формы, мы должны показать первую страницу формы. В противном случае, мы должны (еще раз) сделать одну из следующих двух вещей.
Если посланные данные верны (подразумевается, что они удовлетворяют всем критериям
истинных данных), то отослать письмо пользователю и выдать сообщение с благодарностью.
Набросать Псевдо Код. Написание псевдо кода, реального кода, описывающего работу приложения, но не работающего - распространенная практика, используемая многими разработчиками. Обычно к ней прибегают, когда они упираются во что-то сложное или не могут полностью понять как впишется в систему какой-то определенный аспект приложения. Я также обнаружил, что псевдо код полезен при описании интерфейса приложения, когда его будут использовать другие программисты. Это помогает понять, что нужно сделать, и какой для этого самый простой способ. К примеру, псевдо код снизу может быть набросан при разработке нашего простого приложения, отсылающего письмо.
<?php message = name & email; send_mail(email, message);
print "Thank you for your feedback"; Псевдо код выше определяет общую структуру скрипта и показывает все требуемые специфические элементы. Код не должен быть верным работающим PHP кодом (хотя и может быть). Что должен делать псевдо код - это определять различные задачи приложения и, возможно, теорию за этими задачами. Уровень абстракции вашего псевдо кода зависит только от вам. Лично я предпочитаю писать менее абстрактный вид псевдо кода, чем большинство людей. Все зависит от того, насколько вы знакомы с программированием. Наконец, когда вы спланировали все приложение, вы можете начать кодировать ваше приложение зная все шаги, которые нужно будет предпринять, и представляя, что именно вы будете создавать. Стадия Тестирования Одна из важнейших стадии разработки приложения, про которую часто забывают это стадия (заключительного) тестирования. Часто из-за за давления по времени и/или со стороны менеджеров, эту стадию сокращают или пропускают, а приложение считают завершенным. Будем честны, программисты ненавидят тестирование. Это, пожалуй, одна из наиболее скучных и раздражающих стадий разработки приложения. Часто она состоит из погонь за диким гусем (? - wild goose chases), часов обезглючивания, и тестирования различных вариантов, чтобы понять, будет ли код работать в различных условиях. Если вы пропустите это, у вас никогда не будет обезглюченного кода! Вы всегда можете быть уверены, что что-то пропустили. Знаете, то, про что вы думаете, что оно никогда не случится, все равно произойдет. Тестирование на Возвращение к предыдущему Состоянию. Приложения бесконечно дорабатываются. Важно быть уверенным, что когда вы добавляете новые функции, вы не сломаете то, что было раньше и то, на что рассчитывают пользователи. Такми образом, вы должны проделать Тестирование на Возвращение к предыдущему Состоянию. Это набор тестов, который дает уверенность, что имеющаяся функциональность не сломается с учетом произведенных изменений. PHP сам по себе тестируется таким образом, чтобы убедиться что все функции и процессы, верно работающие в нем, когда вы проведете изменения в нем, не затронут другую часть PHP. Это помогает PHP не только поддерживать обратную совместимость (например, когда добавляются новые функции, старые скрипты продолжают работать). Но также это способ убедиться, что ни одно из совершенных изменений не испортит функции (не просто изменит их поведение). Стресс-Тесты. ОК, значит ваше приложение отлично работает с 1 пользователем - все идет прекрасно и с огромной скоростью. Но что, если ваше приложение начнут использовать 20 пользователей? 30 пользователей? Или даже 100 пользователей одновременно? Как быстро тогда оно будет работать? Не начнет ли оно внезапно выдавать непонятные ошибки? Когда вы тестируете приложение вы обязательно провести стресс-тест, чтобы убедиться, что приложение выдержит большие нагрузки и будет нормально работать в различных условиях. Это не означает, что не нужно отдать программу на тестирование пользователю. Выдайте ему ее и ждите отчетов об ошибках и мнений. Проведите бета тест (как упоминается в предыдущей ошибке). Более того, если специальные автоматические инструменты, эмулирующие тестирование толпой пользователей. Первый приходящий в голову, это Apache's ab tool. AB, или Apache Benchmark произведет определенное число запросов к вашей Web-странице и вернет число удачных, неудачных, среднее время ожидания и т.д. Я советую использовать AB на всех ваших веб-страницах (в случае, если вы примите бесконечно мудрое решение пользоваться апачем). Так вы сможете обнаружить и оптимизировать страницы, которые требуют уйму памяти или просто очень долго грузятся. (Также, подумайте о покупке мощной утилиты кэширования скриптов - The Zend's Cache).
1. Потеря Во Времени Так, мы должны пресекать свои чувства и подредактировать цифры. Как правило, каждый раз, когда я беру проект, я учитываю каждый фактор, который приходит мне в голову и рассчитываю требуемое время, а затем удваиваю его. Компании редко бывают недовольны, когда вы завершаете проект раньше времени (и совсем наоборот обстоят дела, когда вы не укладываетесь в сроки). Такой метод позволяет получить достаточно времени, чтобы сделать работу качественно и не опоздать. Но, честно говоря, он зависит от точности моего первоначального расчета. Каждый программист недооценивает (или в редких случаях, переоценивает) время, необходимое для завершения проекта на определенную величину, для меня в два раза, для кого-то в полтора, для третьего в три. Задача в том, чтобы выяснить среднюю ошибку в расчете требуемого времени и потом постоянно вносить эту поправку во все проекты. Недостаточно время на разработку проекта приводит к следующим эффектам (которые я слишком хорошо знаю):
Вы забудете о своей личной жизни до тех пор, пока не сдадите проект. Все дни
и ночи будут посвящены программированию, оставляя мало времени на отдых (не
то, чтобы было неинтересно программировать, но программировать без остановки
- это ужасно). SterlingWonderfulToyland.com: Пример Давайте рассмотрим пример сайта, SterlingWonderfulToyland.com. Этот простой электронный магазин предназначен для продажи ограниченного выбора Playstation 2 и Видео Игр по демпинговым ценам. Владелец Джон Гиусепп также хочет убедить клиентов зайти в настоящий магазин и купить товары в нем. Таким образом, в сайте есть два основных раздела:
Интернет-магазин. Обычная часть сайта Для простой, не-динамической части сайта, я прикину, сколько времени понадобиться на разработку каждой страницы в таком редакторе, как Macromedia Dreamweaver. Поскольку ничего динамического там нет, я умножу полученное время на количество страниц (с учетом того, что дизайн уже разработан). Затем я удвою результат (моя ошибка обычно 2x). Для этого раздела не нужно составлять никаких серьезных планов (как только пришла диаграмма, как должна выглядеть страница, все, что останется - слепить ее в Dreamweaver). Обратите Внимание: Учтите дополнительные 1/3 времени от разработки приложения на планирование. К примеру, если вы ожидаете, что на разработку системы проверки кредитной карты понадобиться 9 дней, добавьте дополнительные 2-3 дня. Интернет-Магазин Для Интернет-магазина расчет времени произвести сложнее. Проще всего разбить задачу на меньшие подзадачи (такие, как транзакцией кредитных карточек, заказ через один клик, информация о продуктах, управление продуктами и т.д.), и рассчитать различные компоненты не учитывая поправку на ошибку. Я затем совмещу их, умножу результат на величину ошибки. После этого я добавлю дополнительные 1/3 времени, которое мне понадобиться на завершение проекта, на тестирование и исправление глюков, чтобы быть уверенным, что клиент получит работающий продукт. Обратите Внимание: Положите дополнительные 1/3 времени на планирование, как в статической части сайта. Продажа времени сдачи проекта Даже если вы можете примерно установить время сдачи проекта, ваш босс или клиент может не быть так доволен этим, как вы. Иногда слишком оттянутое время сдачи может сорвать сделку. Конкуренты предложат сделать все быстрее за время, за которое они это сделать не смогут, и просто опоздают со сдачей проекта. Так как можно установить время сдачи такое, чтобы босс/клиент были бы довольны и в которое вы бы уложились? Вот здесь вам предстоит продать себя и время сдачи проекта. Что вы можете предложить клиенту? Почему требуемое вам время правдоподобное и такое, какое оно есть? Представьте себе, что вы - клиент, и подумайте, чего вы ожидаете от потенциального программиста? |
|
|
Вход / Регистрация
Новое
Продвижение сайта - это следующий логический шаг после завершения разработки са... |
По вашему мнению, сколько цветов в обычной радуге? Мы привыкли, что семь... |
По словам Сергея Брина, соучредителя и директора популярнейшего в мире поискови... |
Почему это важно? Гиперссылка - основа Интернета. Когда человек попадает на люб... |
Приветвтвую, вы хотите себе такие социальные кнопки? Хотите?
|
Последние комментарии
- Как заработать на Так.ру
Я сделал как описано,у меня код html авт... >>> - Как верстать на DIV-ах? Основы блочной в...
статья про блочную верстку неплоха, толь... >>> - Создание юзабилных форм с применением CS...
Каким плагином вы защитили свой сайт от ... >>> - Основные Интернет браузеры для WEB-разра...
Лучшие браузеры это Хром и FF(лучше всег... >>> - Заработок на рекламе Гугл Адсенс - все п...
У меня тоже есть сайт он о цветах но пос... >>>












Последняя третья часть описывает самые недопустимые ошибки програмирования. Последние 7 "смертельных" ошибок концептуальны в своей природе и могут являться первопричиной ошибок, описанных в части 1 и 2. Они включают грубые промахи, такие как малое время, отведенное на разработку и не просматривание полученного кода.