Программирование на языке Ruby
Программирование на языке Ruby читать книгу онлайн
Внимание! Книга может содержать контент только для совершеннолетних. Для несовершеннолетних чтение данного контента СТРОГО ЗАПРЕЩЕНО! Если в книге присутствует наличие пропаганды ЛГБТ и другого, запрещенного контента - просьба написать на почту [email protected] для удаления материала
16.4. Использование irb в качестве отладчика
Библиотеку
ruby-breakpointbreakpointirbirbЭта библиотека не входит в стандартный дистрибутив. Установить ее можно, например, выполнив команду
gem install ruby-breakpointВнесем несколько изменений в программу из листинга 16.4. Поместим в начало директиву
require 'breakpoint'breakpointgetsrequire 'breakpoint'# ...w2 = gets.chompbreakpoint# ...Теперь запустим ее. В следующем протоколе сеанса показано, как мы входим в
irb$ ruby myprog.rbGive me a word: parentalGive me another word: prenatalExecuting break point at myprog.rb:23irb(main):001:0> w1=> "parental"irb(main):002:0> w2=> "prenatal"irb(main):003:0> palindrome?(w1)=> falseirb(main):004:0> palindrome?("detartrated")=> trueirb(main):005:0> signature(w1)=> "aaelnprt"irb(main):006:0> quit'parental' is not a palindrome.'prenatal' is not a palindrome.'parental' and 'prenatal' are anagrams.Особенно подкупает, что отлаживаемая программа может быть не только командной или текстовой. Существует клиент drb (распределенный Ruby), который позволяет удаленно отлаживать программу Ruby, работающую в другом процессе.
Чтобы воспользоваться этой возможностью, нужно включить вызов следующего метода в отлаживаемую программу (естественно, до первого обращения к методу
breakpointBreakpoint.activate_drb("druby://127.0.0.1:2001", "localhost")# Запустить сервер на порту 2001 машины localhost.Запустите клиент командой
breakpoint_client$ breakpoint_client druby://localhost:2001No connection to breakpoint service at druby://localhost:2001 (DRb::DRbConnError)Tries to connect will be made every 3 seconds...После установления соединения вы можете и не получить приглашение
irbДополнительную информацию об этой библиотеке поищите в документации, которая входит в комплект поставки.
16.5. Измерение покрытия кода
Очень полезно знать, какие части программы не были протестированы, а следовательно, нуждаются в автономных тестах. Иногда и сам инструмент для замера покрытия может обнаружить ошибки. Допустим, в программе есть предложение
ifКомандную утилиту
rcovВ простейшем случае для ее запуска достаточно указать имя вашей программы в качестве параметра:
rcov myfile.rbОдновременно с исполнением вашей программы
rcovcoverageindex.htmlИз-за цветового кодирования трудно привести черно-белый снимок с экрана. Но сам инструмент настолько прост, что, потратив пару минут, вы сможете увидеть все сами.
Хотя программа
rcovrcov -hМожно использовать
rcov•
Rcov::FileStatistics•
Rcov::CodeCoverageAnalyzer•
Rcov::CallSiteAnalyzerОбсуждение API далеко выходит за рамки этого раздела. Почитайте документацию и начинайте экспериментировать.
16.6. Измерение производительности
Я не люблю уделять слишком много внимания оптимизации скорости. В общем случае нужно правильно выбрать алгоритм и придерживаться здравого смысла.
Конечно, быстродействие имеет значение. Иногда даже очень большое. Однако начинать думать об этом на раннем этапе цикла разработки — ошибка. Как говорится, «преждевременная оптимизация — источник всех зол»; эту мысль впервые высказал Хоар (Hoare), а потом подтвердил Кнут (Knuth). Или, перефразируя, сначала пусть работает правильно, а уж потом быстро». На уровне отдельного приложения эта рекомендация обычно оказывается хорошим эвристическим правилом, хотя для больших систем она, быть может, и не так актуальна.
