Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Вниз

Как научится писать программы без ошибок   Найти похожие ветки 

 
newbie   (2008-10-14 13:18) [0]

Собсвенно сабж и может есть литература или ссылки какие-нить есть


 
clickmaker ©   (2008-10-14 13:24) [1]

> писать программы без ошибок

а это реально?


 
newbie   (2008-10-14 13:27) [2]

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


 
korneley ©   (2008-10-14 13:28) [3]

Нереально. Срижали гласят: "Каждая выявленная ошибка - предпоследняя"


 
Anatoly Podgoretsky ©   (2008-10-14 13:36) [4]

> newbie  (14.10.2008 13:18:00)  [0]

Практика, постоянное обучение и огромная сила воли.


 
shlst   (2008-10-14 13:38) [5]

как там путин в школе написал(по тв показывали) - "научиться проверять всё"


 
newbie   (2008-10-14 13:40) [6]

>Anatoly Podgoretsky
если с первым и последним все понятно, то вот со вторым не совсем...


 
newbie   (2008-10-14 13:42) [7]

мот кто-то поделится своими методами.


 
KSergey ©   (2008-10-14 13:52) [8]

этот, аджайл программинг, если надо модных словов :)

теперь по сути.
Я на практике замечал положительное влияние след. методов:
а) планирование. Обязательно! Не сразу за клаву и набивать. Распланировать архитектуру, подумать где быть может нужно будет расширять (но только в ближайшем будущем! эта поправка если доверяться аджайлу), а где не надо. Представить как прога будет работать там и сям, чтобы потом не пришлось еще при рождении латать. Заставить себя сделать это планирование, но это сложно.
б) тестирование, в том числе юнит-тестирование.
в) обязательный анализ пойманных багов: как сделать так, чтобы в будущем на это не наступать; какие есть еще не использованные (или неизученные) мною возможности компилятора? Прямо свод правил для себя! (висит на стене бумажка "если ты собрался обновить ПО у клиента", один из пунктов: "сделать все на трезвую голову!" Видать из жизни тоже писано. Но это курьезы конечно скорее.)


 
Игорь Шевченко ©   (2008-10-14 14:13) [9]

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


 
clickmaker ©   (2008-10-14 14:22) [10]

> Промежду прочим, не надо стремиться к безошибочному коду

конечно. А то толпа безработных тестеров выйдет на улицы с транспарантами )


 
Anatoly Podgoretsky ©   (2008-10-14 14:25) [11]

> newbie  (14.10.2008 13:40:06)  [6]

Вроде два простых русских слова - Постоянно и учиться.


 
Rouse_ ©   (2008-10-14 14:28) [12]


> Срижали гласят: "Каждая выявленная ошибка - предпоследняя"

Срижали гласят: "Не бывает программ без ошибок, если в теле программы ошибок нет - значит ошибка в компиляторе" ;)


 
Rouse_ ©   (2008-10-14 14:30) [13]

зы: сКрижали :)


 
Дуб ©   (2008-10-14 14:30) [14]

А про какие ошибки речь?

И вообще, если ошибок нет - значит программа никому не нужна.


 
newbie   (2008-10-14 14:34) [15]

Ну особенно "печалят" runtime ошибки... Хотя от функциональных беды на самом то деле больше.


 
Сергей М. ©   (2008-10-14 14:43) [16]


> особенно "печалят" runtime ошибки


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

Т.е. если на лбу, скажем, имеется 20 шишек разного цветоразмера, то каждая из них "помнит" про "свои" грабли)


 
newbie   (2008-10-14 14:48) [17]

>Сергей М.
улыбнуло :)


 
Городской Шаман   (2008-10-14 15:20) [18]


> Игорь Шевченко ©   (14.10.08 14:13) [9]
>
> Промежду прочим, не надо стремиться к безошибочному коду
> - вот такое вот мнение. Собственно есть две крайности -
> японские программисты


Не надо про про японских программистов. Приходилось оутсорсить код проектов японских корпораций. Говно редкостное.


 
Городской Шаман   (2008-10-14 15:21) [19]


> newbie   (14.10.08 14:34) [15]
>
> Ну особенно "печалят" runtime ошибки... Хотя от функциональных
> беды на самом то деле больше.


try
except
log
end;


 
Petr V. Abramov ©   (2008-10-14 15:24) [20]

для начала узнать, как правильно пишется слово "научиццо"


 
newbie   (2008-10-14 15:24) [21]

>Городской Шаман
Ну не будешь же на каждый оператор try except вешать.


 
newbie   (2008-10-14 15:25) [22]

Удалено модератором


 
Кто б сомневался ©   (2008-10-14 15:33) [23]


> Как научится писать программы без ошибок


Все прсото. Нужно набирать опыт. Больше практики. Работать каждый день.
Через две - три сложные программы,  будешь писать почти без ошибок.


 
oxffff ©   (2008-10-14 15:42) [24]


> Как научится писать программы без ошибок


Не надо лишать программистов работы. Не надо.


 
KSergey ©   (2008-10-14 15:56) [25]

> newbie   (14.10.08 14:34) [15]
> Ну особенно "печалят" runtime ошибки...

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


 
korneley ©   (2008-10-14 15:59) [26]


> Rouse_ ©   (14.10.08 14:30) [13]
> зы: сКрижали :)

Вот, предпоследняя :)


 
keymaster ©   (2008-10-14 16:16) [27]


> а) планирование. Обязательно! Не сразу за клаву и набивать.
>  Распланировать архитектуру, подумать где быть может нужно
> будет расширять (но только в ближайшем будущем! эта поправка
> если доверяться аджайлу), а где не надо. Представить как
> прога будет работать там и сям, чтобы потом не пришлось
> еще при рождении латать. Заставить себя сделать это планирование,
>  но это сложно.

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


 
Anatoly Podgoretsky ©   (2008-10-14 16:25) [28]

> keymaster  (14.10.2008 16:16:27)  [27]

> Не говорить "сделаю за три дня",

Срочно закрыть рот, выдержать паузу и сказать сделаю за N*2.3, лучше 3.3 единицы.


 
_слоник   (2008-10-15 01:13) [29]

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


 
newbie   (2008-10-15 11:18) [30]

>_слоник
Спасибо!


 
kaif ©   (2008-10-15 17:01) [31]

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

Например, если существует какая-либо процедура тестирования (или хотя бы оперативная обратная связь с юзером), то результирующая стоимость ошибок ниже, так как их можно во-время отловить и исправить.

Ошибки, которые нельзя допускать, ИМХО, это те, что трудно отловить. Например, ошибки доступа к общим ресурсам в многопоточных приложениях. У разработчика все тип работает, у юзера все типа глючит. Иди и отлови такое.


 
kaif ©   (2008-10-15 17:38) [32]

Однажды я допустил идиотскую ошибку в Allegro. Система проработала многие годы в разных местах, пока мне не позвонил один юзер и не сказал, что у него программа зацикливается (!) при обмене данными с Excel. Сначала я не поверил. Но потом полез смотреть. И обнаружил такую наивную вещь у себя, что долго и тупо смотрел, неужели такое мог написать нормальный человек в здравом уме.

Представьте себе такой код:

while pos(DecimalSeparator, s) > 0 do
 s[pos(DecimalSeparator, s)] := "."

Очевидно, что этот код будет зацикливаться, если заведомо
DecimalSeparator = "."

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


 
Jeer ©   (2008-10-15 17:44) [33]


> Ошибки, которые нельзя допускать, ИМХО, это те, что трудно
> отловить.


Ну да, ракета ломанулась обратно к Земле вместо Марса - иди потом отыщи у нее ошибки в черепе.


 
kaif ©   (2008-10-15 17:45) [34]

А история ошибки банальна.

Сначала был написан верный код, который зациклиться не может в принципе:

while pos(",", s) > 0 do
s[pos(",", s)] := "."

А затем, через долгое время, когда я заменял строковые константы на ресурсстринги и наводил типа порядок, в этом месте чисто механически я заменил запятую на DecimalSeparator, не вникая в суть того, что там я имел в виду.

И получилось:

while pos(DecimalSeparator, s) > 0 do
s[pos(DecimalSeparator, s)] := "."

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


 
kaif ©   (2008-10-15 17:53) [35]

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

Вся система автоматизации COM у MS Office, откуда, собственно и родился ActiveX как технология, был первоначально посвящен всестороннему тестированию продукта MS Office.

А вот ошибка в каком-нибудь тетрисе вполне может даже порадовать игрока, который нашел "дыру" с тем, чтобы выиграть у программы и получить свою дозу эндорфина. :)


 
Jeer ©   (2008-10-15 18:06) [36]


> Сначала был написан верный код, который зациклиться не может
> в принципе:
>
> while pos(",", s) > 0 do
> s[pos(",", s)] := "."
>


Верный код состоял в том, чтобы поменьше изобретать "велосипедов" и почаще использовать встроенные функции: StringReplace(..) и аналогичные.

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

Либо "просто" сделать с явным указателем длины цикла.
for i:=1 to Length(s)..

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


 
Anatoly Podgoretsky ©   (2008-10-15 19:04) [37]

> kaif  (15.10.2008 17:38:32)  [32]

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


 
Anatoly Podgoretsky ©   (2008-10-15 19:08) [38]

> Jeer  (15.10.2008 18:06:36)  [36]

Ну я не знаю, какая у него версия Дельфи, ведь эта фунция есть не во всех.
С остальным согласен.


 
Anatoly Podgoretsky ©   (2008-10-15 19:14) [39]

Проблема часто не с самими ошибками, а с тестирование. Для массовых продуктов очень дорого, ведь проверять надо под большим количеством ОС, с разными сервис паками и различными версия наиболее распротраненых библиотек, особенно IE и разными его настройками, под разными локализациями, как минимум под двумя, иначе не будут проявлять ошибки типа kaif ©   (15.10.08 17:45) [34]

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

И сложность тестирования постоянно растет.


 
Омлет   (2008-10-15 23:27) [40]

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



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.043 c
2-1226519822
дед Маздай
2008-11-12 22:57
2008.12.21
Потоки.


15-1224121618
МемТест
2008-10-16 05:46
2008.12.21
Как можно использовать GPU для рассчётов?


15-1224581575
Студенты
2008-10-21 13:32
2008.12.21
Dbgrid, как повернуть 90 ?


2-1226150659
unassigned
2008-11-08 16:24
2008.12.21
Как это можно решить?


2-1226478512
Mery
2008-11-12 11:28
2008.12.21
окно сообщения при работе цикла





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский