Продемонстрировать плохой код клиента?

Клиент попросил меня сделать редизайн их сайта, ASP.NET форм приложение, который был разработан еще один консультант. Казалось бы, относительно простая работа, но после глядя на код, это'понятно, что's не случай.

Это заявление было написано не хорошо. На всех. Крайне уязвимы для атак путем внедрения кода SQL, бизнес-логика распространяется на протяжении всего приложения, есть много дублирования, и тупиковый код, который ничего не делает. Кроме того, он продолжает бросать исключения, которые душат, так что сайт появится, чтобы работать бесперебойно.

Моя работа заключается в том, чтобы просто обновить HTML и CSS, а HTML-код генерируется в бизнес-логикой и будет кошмар, чтобы разобраться. Моя оценка по редизайну больше, чем клиент рассчитывал получить. Они спрашивают, почему так долго.

Как я могу объяснить мой клиент как раз как плох этот код? По их мнению, приложение работает отлично и редизайн должен быть быстрый разовый. Это'мое слово против предыдущего консультанта. Как я могу дать простые, конкретные примеры, что нетехнические клиент поймет?

Обновление

Спасибо за все ответы. Демонстрацию атаки с использованием SQL-инъекций имеет смысл и я демо-это в тестовой среде. Это лишь одна часть многие проблемы в этом приложении. Я искал способы, чтобы объяснить, почему других частей (таких как HTML генерируется в слое данных) необходимо будет заменить лучшей практики для того, чтобы HTML и обновить CSS, чтобы иметь место. Есть здесь много хороших предложений, которые я'МР кусочкам, когда я разговариваю с моим клиентом.

Комментарии к вопросу (6)
Решение

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

Я ожидал это изменение будет одно слово в одном файле. Скорее всего место, чтобы изменить это, казалось, было здесь, но когда я изменил его там, это работал только в одном месте, и он разбил эти 7 других местах. Когда Я фиксированный, он сломал еще два места, вызывая "эффект домино", так я думал, что надо было брать 10 минут, в итоге везли 2 часа. , что's только один пример. Есть гораздо более неожиданные 2 часа задачи.

Комментарии (2)

Структура кода, стиля, технический долг-это одно, что - по крайней мере поначалу, пока клиент вам доверяет - вы'вновь придется жить.

Уязвимостей другое дело.

Лично я бы сделала оценку, основанную на работе требуется использовать существующую структуру и стиль в то же время ясно, что существуют значительные проблемы с базой. Я'd для повышения безопасности отдельно: продемонстрировать взлом на базе доказать в ходе встречи.

У меня было большой радостью делаю это с предыдущего клиента с системой лояльности, подарочные карты, когда я положил £5000 на "Мой" в карточку и попросил проверить карту на кассе.

Комментарии (4)

Вот некоторые большие предложения о том, как передать и сообщить об этом клиенту. Надеюсь, они окупятся для вас.

Огромный красный флаг!

Если клиент просит вас не вносить никаких изменений, кроме того, что вы'вэ согласился (HTML и CSS) я'd, проходят на этот проект и отозвать мою заявку.

Даже в письменном виде и хорошо общались обзор всех ошибок и проблем безопасности, потенциальная ответственность слишком большая для меня быть самой собой. Даже если клиент никогда не принимал какие-либо юридические действия или потребовали исправления после взлома или нарушения; ваше имя и репутация по-прежнему привязаны к работе!

Вы также можете потерять гораздо больше, чем вы стоите, чтобы получить.

Комментарии (3)

Объяснить и, возможно, демонстрации изъян Когда он's ваши слова против его слов, все, что вы говорите может быть только горячий воздух насколько они'вновь обеспокоены. Как только вы показать им, что их приложение может быть использовано через SQL-инъекции, то вдруг вы'вновь человек, которому можно доверять. Вы'вновь понадобится авторитет для того, чтобы пересмотреть. И этого достаточно изменить правила игры, чтобы дать его вам.

Быть щедрым по отношению к вашему предшественнику Это вовсе'Т означает, что ошибок нет'Т есть, но если вы столкнетесь снисходительно, то вы потеряете доверие. Дон'т скажу ни слова про программиста за исключением, возможно, дать ему презумпцию невиновности. Сосредоточиться на коде, а не верстальщика. Заставляя их чувствовать себя, как вы'вновь в "хороший парень", которая даст вам гораздо больше свободы в переговорах. И "хороших парней" и никогда не говорят гадости. При объяснении существующих ошибок безопасности (например, уязвимостей SQL-инъекций) для клиента, я предпочитаю говорить что-то вроде этого:

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

Там мы идем. Ни слова злословят о разработчике; он's просто, что "большинство программистов" и это означает, что он's в очень хорошей компании. И теперь вы'вэ показал, что вы'ре не то "большинство программистов" и которые дадут вам немного больше доверия и, возможно, повод для них, чтобы заплатить вам больше денег.

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

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

Обычно разработчик (вы) предпочли бы переделывать все с нуля. И в таких случаях, это может даже быть вариант. Но даже тогда клиент захочет что-то, что может сохранить свой бизнес работает, пока новое приложение построено. Это означает, что даже если вы'вновь начать сначала, вы'вновь, наверное, каждый день придется обновлять старое приложение немного.

Комментарии (2)

Я начал это в качестве комментария, потому что сначала я думал, что это было в сторону, но он, вероятно, действительно не'т.

Я бы полностью документировать все, что вы чувствуете, это должна быть переделана, и почему (что произойдет, если они Дон'т* внести изменения), и смету на ремонт вопрос. Я бы особо дотошные все, что вы воспринимаете как угрозу безопасности.

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

Конечно, можно указать на системы управления версиями исходного кода наследство, если он когда-нибудь произойдет, но это будет гораздо проще указать на этот документ и сказать, более профессионально, то "понимаете? Я же тебе говорил&.и"

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

Это, как говорится, после того, как клиент undestands риски, Гринь и нести его, если они говорят, делать все равно работать, или уйти.

Комментарии (7)

Помните, что клиент идет к вам за помощью в поддержании их применение. Это ваша работа как профессионала, чтобы указать на проблемы с их применением. Клиент, скорее всего, понятия не имеет, эти вопросы существуют, и они должны быть осведомлены о них. Объяснить эти вопросы таким образом, что они могут понять и пусть они сами решают как они хотят, чтобы продолжить.

Использование реальных примеров, чтобы проиллюстрировать эти проблемы, такие как поломки машины или стиральная машина нуждается в ремонте. В точку-использовать примеры они уже знакомы. Для объяснения SQL-инъекции, я хотел просто продемонстрировать, что это такое и почему это'ы проблемы.

В конце концов вы хотите донести, что вы заботитесь об успехе приложения вас просят поработать.

Комментарии (4)

Я люблю использовать аналогии клиент может касаться. Объем работы я положил в заранее в выигрышной работы будет зависеть от суммы денег, клиент, желающий провести ($100 сильно отличается от $20,000). Заметьте, что я сказал я, намереваясь &quot и;. Ваша личная оценка включили стоимость не'Т означает много, если вы не'т получить то, что вы'повторно просить.

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

Тогда я'd начертите еще одну коробку так же, как первый с входным и выходным линиям снаружи, но на этот раз я'd не скажу: "Здесь's то, что программное обеспечение действительно выглядит внутри коробки прямо сейчас." и затем, чтобы соединить две линии, на этот раз я'd начертите случайный кучу беспорядок спагетти, возможно, с перерывами и присоединяется и строчит.

Наконец-то я'д сказать: "Теперь то, что вы'вновь просит меня сделать это..." и нарисуйте простую форму, внутри первой коробки возможно небольшой полукруг, касаясь линии, а потом сказать "но чтобы сделать это, я'd имеют для этого..." и рисовать торнадо выглядишь какой-то форме спирали вокруг линии и далее ... "В того, чтобы обойти все это....." и указывают на бретельках в другой коробке.

Я думаю, что бы это в течение примерно 2 минут. Если они будут настаивать вы все равно это делаете, то документ, как другие упомянули выше.

Комментарии (0)

Как я могу объяснить мой клиент как раз как плох этот код?

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

Он'ы мое слово против предыдущего консультанта, так как я могу на самом деле дать простые, конкретные примеры, что нетехнические клиент поймет?

Вы'ре хорошо, это'ы слово против любой визуальный предыдущий консультант создал в их головах. Мое предложение состоит в том, чтобы делать только то, что вы'вновь спрашивая, дают простые, конкретные примеры. Поскольку это редизайн, показать, как фрагмент HTML, определенными в скомпилированный код отображается с остальным HTML-страницы и как меняется, что влияет или не'т, остальная часть страницы. Возможно, тот же скомпилированный код делает разметку, после применения какая-то "Бизнес" и правило. Показать разницу.

Это трудный и очень распространенная проблема. Удачи с ним.

Комментарии (0)

Быть честными и прямыми.

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

Комментарии (0)

Здесь'ы аналогию я've использовали (хотя я не ручаюсь, что это'ы эффективности): представьте, что их сайт-это физическая машина, как механический печатный станок, что-то принимает входные данные.

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

"не видеть эту штуковину здесь, что анализирует переменные Post и отправляет этот компонент вниз кроличью нору, если-то? Нет'т только один из них есть одно из этих на каждой странице (или любой другой), некоторые из их санировать ввод и некоторые Дон't (или все Дон't) и без читать все, что я могу'т знаем, что.&и"

Комментарии (1)

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

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

Если вы решили идти вперед с воздуховодом, хотя работа лента, убедитесь, что документ, документе, документа и быть максимально прозрачной. Последнее, что вы хотите обвинить в том, что что-то происходит не так в будущем, что является результатом дефекта приложения вы предупредили клиента о но, что клиент решил не'т достаточно важно иметь дело с в то время.

Насколько риск SQL-инъекций пойти, как уже говорили другие, вы должны быть в состоянии продемонстрировать опасности, что с ними в пути, который показывает риски, фактически не делают ничего деструктивного в производстве. Но опять же, если они это видят и Дон'т волнует, достаточно, чтобы заплатить вам, чтобы исправить это, вы'ве сделали свой добросовестного усердия в этом деле.

Комментарии (0)

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

Никогда не забывайте, что в корне вы просите за них придется платить вам, чтобы сделать свою жизнь легче, в их сознании просто нужно найти 'парень' кто может х услуг в г стоимость и увеличивая сложность вашего проекта, могут просто устранить возможность для вас. Это'ы тяжелый путь, когда вы'повторно через месяц после начала переписывать и у вас встреча с разработчиком только реализовать весь приложение было написано исключительно по контракту окне разработчиком, который полностью понимает все компромиссы, которые были сделаны. Если приложение внутри выглядит ужасно, но внешне хорошо, как вы говорите, это очень вероятно, так оно и будет. Часто технической задолженности в пределах кодовой базы, является продуктом ограниченности ресурсов код был разработан в и если они не'т строить команду и вместо договаривающихся вещи... они наверное до сих пор несерьезно относятся к обслуживанию.

Я'м просто говорю'

Комментарии (0)

Я'м собираюсь играть в Devil'ы выступаем здесь (несколько вдоль линии, что @khrome говорит: "Вы не платите клиентам сделать свои легче жизнь"). Я бы даже пойти так далеко, как о том, что в случае, если вы подарили слишком однобоко, потому что описанный вами случай в общем порядке. Большинство входящих консультантов в новый проект будет светить плохой свет на предыдущий...Я'м не говорю, что's то, что вы делаете здесь, но пока мы видим примеры, я не могу просто поверить вам на слово.

Что сказал, Я'м собираюсь попробовать для решения проблемы вам по пунктам:

  • SQL-инъекции. Итак, я предполагаю, что программист использовал сцепление вместо параметризованных запросов и/или хранимой процедуры. Это очень легко исправить, особенно в АДО.Нет...лично я бы отнес его клиенту, но не слишком большое дело.
  • HTML-код генерируется в бизнес-логикой и будет кошмар, чтобы разобраться. ОК, чувак, это один из тех, где вы дать мне более подробную информацию. Если вы'вновь с использованием MVC, это обычно так и получается...но это's не так уж плохо...это's один из тех вещей, где большинство программистов будет сказать: "Гото это плохо; никогда не используйте его" но вы знаете, что? Я'вэ используется Гото где это имело смысл! Итак, вы уверены, что они'повторно не используя вспомогательные классы, которые, случается, разделяя те же пространстве имен, что бизнес код DLL? Опять же, это's не то, что трудно изолировать.
  • бизнес-логики распространяется на протяжении всего приложения, есть много дублирования, и тупиковый код, который ничего не делает.. И? Клиент просто прошу вас изменить HTML и CSS. Почему вас волнуют эти вопросы вообще?
  • он продолжает бросать исключения, которые душат, так что сайт, кажется, работать бесперебойно. Опять же, очень расплывчато. Исключениями являются нормальными в любых приложениях, что's, почему мы должны попробовать/catch пункты в нашем коде. Если они всплывают в UI и испортить впечатление пользователей (например, отображение протокола HTTP 500'ы без надобности), я не'т думаю, что это то, что вы должны заботиться о, либо..

Короче говоря, я бы посоветовал вам взять большую дорогу. Если вы думаете, что это's не стоит вашего времени и вы хотите переписать его на счет своего клиента, потом уйти с работы. Серьезно, в конце концов, клиент платит за ваше время, чтобы сделать все это работать с наименьшим количеством $$$.

За мой многолетний опыт в этой области, я всегда говорю, что лучшие программисты, которые я'вэ попадаются те, кто может сделать систему стабильной по написание наименьшее количество код, а не переписывать все это дело.

Редактировать: я уже вижу, что мой ответ не самый популярный (я уже предполагал это), но я настаиваю на своем ответе. Я редактировал это, чтобы сделать его менее Знарка. ;-)

Комментарии (0)

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

Комментарии (1)