LINUX.ORG.RU

Качество кода.


0

3

Есть один разработчик, который ведёт проект на спп. При компиляции проекта давно вылазит один миллион с коробочкой ворнингов про всякие нехорошие вещи, на первый взгляд безобидные, типа сравнение знаковой и без знаковой переменных в коде.

Я конечно понимаю, это не критично, но очень плохо, я ему говорю: «постарайся пофиксить», на что он мне отвечает: «нет времени». И так уже больше двух лет.

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

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

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

Спасибо.

Перемещено hibou из talks

★★★★

Последнее исправление: nanoolinux (всего исправлений: 1)

Если ты пользователь то:

а) если всё работает — наслаждаться жизнью, шашлычок, природа, всё такое.
б) если прога глючит, падает и даже не свистит — начать поиски аналогов.

Deleted
()

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

Всегда исправляю в своём коде даже ворнинги.

Если да, что бы вы сделали с таким девелопером?

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

gentoo_root ★★★★★
()
Ответ на: комментарий от Deleted

если всё работает

работает но очень туго. что бы заработало нужен вакуум, конь и очень часто бубен.

поиски аналогов

нету. работа с железом, которое он же и девелопит. причём никаких ни даташитов ни документации на железо не пишет - боится что уволят за ненадобностью.

я в этом направлении вижу только один вариант - переписать всё самому с нуля. readonly доступ к коду у меня есть, кое-как я там уже и разбираюсь, хотя всё ещё есть весьма непонятные места. но это как-то не по-человечески, не хочется мне так поступать.

nanoolinux ★★★★
() автор топика
Ответ на: комментарий от gentoo_root

Всегда исправляю в своём коде даже ворнинги.

аналогично

надо лишать возможности писать код.

как?

nanoolinux ★★★★
() автор топика
Ответ на: комментарий от nanoolinux

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

Deleted
()
Ответ на: комментарий от Deleted

да как-то не сильно получается. кнута у меня нет, а пряник не работает. я ему все условия создал для творческой работы, сервак с svn и багтрекером сам админю, скрпиты всякие для сборки пакетов понаписывал, что бы он не сидел целый день как дурак и руками всё это не делал - не помогает.

nanoolinux ★★★★
() автор топика
Ответ на: комментарий от darkshvein

[вещества]

В ответ он напишет в ЛОРовском стиле: «смерть не нужна» и пересоберет сам себя с USE=-death :)

Deleted
()
Ответ на: комментарий от Deleted

да, я тоже склоняюсь, что другого пути нет.

nanoolinux ★★★★
() автор топика

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

fang
()
Ответ на: комментарий от fang

Ну так и не надо сразу и так глобально. Сначала понаписать тестов, а потом понемногу отрефакторить весь код. Никакого красноглазия. Худшее, что может случиться - код и дальше останется макаронами.

Deleted
()
Ответ на: комментарий от nanoolinux

как?

Любым способом, главное — чтобы оно не писало.

gentoo_root ★★★★★
()
Ответ на: комментарий от Deleted

АА! то что надо! как я сам до этого не допёр?! хороший, годный рецепт, надо будет опробовать.

nanoolinux ★★★★
() автор топика
Ответ на: комментарий от amomymous

начальник немец, лор не читает, инфа 146%

nanoolinux ★★★★
() автор топика
Ответ на: комментарий от amomymous

ID: 60688

Nick: amomymous

Город: Санкт-Петербург

Дата регистрации: 03.02.2010 22:01:57

Последнее посещение: 15.02.2012 22:03:21

Статус: * (заблокирован)

Блокирован 15.02.2011 22:30:57, модератором maxcom по причине: хвастается на ЛОРе тем, что пишет говнокод

Deleted
()

Я из-за единственного-то ворнинга на десяток тысяч строк кода страдаю (по сути signed-unsigned, но яблоко не удосужилось сделать [[NSScanner scannerWithString:@«10»] scanUnsignedInteger:&iid]), а ты тут говоришь о ляме с хреном ворнингов! Каким проектом занимается разработчик? // Я на всякий, чтобы не использовать продукты его жизнедеятельноститворчества.

byss
()
Ответ на: комментарий от byss

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

nanoolinux ★★★★
() автор топика

Меня недавно уволили за то, что тимлид не знал, как работают итераторы и LINQ, а я ему посмел рассказать. Ну, то есть, сначала он на меня обиделся а спустя какое-то время что-то накапал основательно начальству.

anonymous
()
Ответ на: комментарий от nanoolinux

Нененене, я ни в коем случае не яблочник, просто зарабатываю кодингом под иось. А сорок ворнингов действительно очень быстро исправляются с помощью вышепосоветованных -Wall -Werror :) И вообще, я считаю, что ворнингов должно быть ровно ноль, без всяких оговорок. Если ты _действительно_ уверен, что компилятор генерит предупреждения необоснованно, то сначала дважды проверь код, потом используй что-нибудь вроде __atribute__((unused)) или похожего.

byss
()
Ответ на: [вещества] от Deleted

В ответ он напишет в ЛОРовском стиле: «смерть не нужна» и пересоберет сам себя с USE=-death :)

руки коротки в мозгу СПП не хватит для этава

darkshvein ☆☆
()

nanoolinux

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

как говорил мой старшина, таким надо 2 кондома: первый на голову, что-бы все видели какой он кондом, а второй на***, чтоб больше таких кондомов не было.

И да, ИМХО это не лечится (иначе как кондомами).

drBatty ★★
()

что бы вы сделали с таким девелопером?

незаметно дописал бы ему во флаги сборки -Wall

shty ★★★★★
()
Ответ на: комментарий от nanoolinux

это как-то не по-человечески

зато по человечески будет когда он уволится, а тебе скажут - иди бери лопату и разгребай

shty ★★★★★
()
Ответ на: комментарий от nanoolinux

ну а для того, что бы он хотя бы работал лучше и стабильнее?

создать ему конкуренцию

shty ★★★★★
()

Уволь его. Может быть увольнение подействует на него.

KblCb ★★★★★
()

Ад. Пригрози увольнением и уволь если не исправится. Раз сам с кодом разобрался, сумеешь внедрить нового работника.

jeuta ★★★★
()
Ответ на: комментарий от gentoo_root

Всегда исправляю в своём коде даже ворнинги.

это значит, ты признаёшь, что компилятор умнее тебя. У меня для тебя плохие новости. Я видел кучу случаев, когда ворнинги с включённым -Wall выдаются там, где ничего ошибки быть и быть не может, но если исправить так, как требует компилятор, код становится непереносимым.

например, gcc на x86_64 требует, что в форматной строке для uint64_t использовался %lu, хотя должен быть %llu.

anonymous
()

-Wall -Werror
и сказать, почему код не компиляется

dimon555 ★★★★★
()
Ответ на: комментарий от anonymous

это значит, ты признаёшь, что компилятор умнее тебя.

Если бы я признавал, что компилятор умнее меня, то я бы бездумно выполнял все его советы. Я так не делаю: я увижу мнение компилятора, проверю, прав ли он и на основе знаний о том, что я имел в виду, когда писал код, сделаю так, чтобы ворнинг больше не появлялся — это я называю исправлением. Если это, например, не инициализированная до использования переменная, то компилятор скажет об этом, и я смогу исправить свою ошибку. Если это, например, присвоение в условии в коде на C, то компилятор тоже скажет об этом, но я знаю, что я имел в виду именно присвоение, а не ==, поэтому я напишу ((a=b) != 0), чтобы смысл сохранился, но ворнинг пропал.

Я видел кучу случаев, когда ворнинги с включённым -Wall выдаются там, где ничего ошибки быть и быть не может, но если исправить так, как требует компилятор, код становится непереносимым.

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

например, gcc на x86_64 требует, что в форматной строке для uint64_t использовался %lu, хотя должен быть %llu.

Так почему бы не заслать багрепорт по этому поводу?

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

Если не совпадает, я изменю код так, чтобы ворнинг не появлялся, но смысл моего кода не изменился.

такое иногда доходит до if(scanf(...)); просто потому что компилер начинает орать о том, что возвращаемое значение никто не проверяет, а проверять каждый scanf - это что-то из серии абсурда.

Так почему бы не заслать багрепорт по этому поводу?

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

anonymous
()
Ответ на: комментарий от anonymous

такое иногда доходит до if(scanf(...)); просто потому что компилер начинает орать о том, что возвращаемое значение никто не проверяет, а проверять каждый scanf - это что-то из серии абсурда.

-Wno-unused-result

gentoo_root ★★★★★
()
Ответ на: комментарий от gentoo_root

да, я в курсе. Я просто не использую -Wall и включаю только ворнинги, которые нужны.

anonymous
()
Ответ на: комментарий от anonymous

Всегда исправляю в своём коде даже ворнинги.

это значит, ты признаёшь, что компилятор умнее тебя

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

Manhunt ★★★★★
()
Ответ на: комментарий от anonymous

например, gcc на x86_64 требует, что в форматной строке для uint64_t использовался %lu, хотя должен быть %llu.

В форматной строке для uint64_t все нормальные люди используют "...%" PRIu64 "...", либо явно приводят аргумент к типу unsigned long long и используют %llu. Твой же код с %llu наебнется на некоей абстрактной big-endian машине, если там компилятор для unsigned long long использует 128-битное целое и передает аргументы через стек (да, я почти уверен что сейчас таких платформ нет, но с точки зрения стандарта gcc абсолютно прав).

anonymous
()

очевидно что тот кто компилирует свои проекты без -Werror - ССЗБ

ymn ★★★★★
()

Да уж... Какой я «индус», и то без -Wall -Werror никуда...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

с точки зрения стандарта нифига не прав ты, потому что в стандарте нет упоминаний про %PRlu64, если уж мы о стандартах пошли. Я повторюсь, на x86-32 gcc съедает uint64_t с %llu, но выдаёт ворнинг на %lu.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.