Слайд 1Работа с legacy-xsl-кодом
Евгения Фирсова
saigo@yamoney.ru
Слайд 3Написание документации
Не скатываемся в простое перечисление вызовов, шаблонов, переменных.
Описываем логику, а
не алгоритм (отвечаем на вопрос «зачем», а не «как»).
Пишем не для себя, а для «того парня», который ничего о внутреннем устройстве проекта не знает.
Слайд 4Написание документации
Комментировать код – рано:
собираем документацию воедино
не создаём лишние ревизии
Слайд 5XSL
XSL
Document-oriented text
XML
Schema
Document-oriented text
DocBook
Пусть код описывает себя сам.
Написание документации
Слайд 6Написание документации
XSLDoc от Jeni Tennison (http://www.jenitennison.com/xslt/utilities)
Слайд 7Статистическое исследование кода
Коммерческие продукты с функциональностью рефакторинга:
Microsoft Visual Studio
IntelliJ IDEA
Eclipse
oXigen
рефакторинг с
использованием шаблонов
автоматическое создание шаблонов
переименование шаблонов и переменных
Слайд 8Статистическое исследование кода
Скриптовые языки, поддерживающие regexp:
open(InFile, "get_regexp.xsl") || die;
while ($line =
)
{
if ($line =~ //)
{
$match = $1;
$mode = $3 ne "" ? "with mode $3" : "";
print "we apply template $match $mode\n";
}
}
close (InFile);
Слайд 9Статистическое исследование кода
Скриптовые языки, поддерживающие DOM:
xfile.setProperty "SelectionNamespaces", "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'"
set templates = xfile.selectNodes("//xsl:template")
for
each template in templates
line = ""
if template.getAttribute("match") > "" then
line = "we apply template " & template.getAttribute("match")
end if
if template.getAttribute("mode") > "" then
line = line & " with mode " & template.getAttribute("mode")
end if
WScript.Echo line
next
Слайд 10Статистическое исследование кода
XSL.
XML/XSL
XSL
Statistic text
Слайд 11Взлом «чёрных ящиков»
Коммерческие отладчики.
XMLSpy Debugger
слежение за контекстом
вычисление XPATH-выражений
пошаговое
выполнение
XPATH-точки слежения и останова
список вызванных шаблонов, включая встроенные
Слайд 12Взлом «чёрных ящиков»
xsltproc --verbose
xsltCompilePattern : parsing 'page'
xsltCompilePattern : parsed page, default
priority 0.000000
added pattern : 'page' priority 0.000000
Found AVT href: {url}
xsltCompilePattern : parsing 'test'
xsltCompilePattern : parsed test, default priority 0.000000
added pattern : 'test' priority 0.000000
parsed 3 templates
Resolving attribute sets references
Registered 0 modules
Creating sub-dictionary from stylesheet for transformation
reusing transformation dict for output
Registering global variables
Registering global variables from xsltproc_test.xsl
xsltProcessOneNode: applying template '/' for /
xsltApplyOneTemplate: copy node html
xsltApplyTemplates: select page
xsltApplyTemplates: list of 1 nodes
xsltProcessOneNode: applying template 'page' for page
xsltApplyOneTemplate: copy node head
xsltApplyOneTemplate: copy node title
Слайд 13Взлом «чёрных ящиков»
Текстовые маркеры.
…
***
-->
…
…
…
Слайд 14Взлом «чёрных ящиков»
Восстановление исходного XML-документа по вызываемым шаблонам.
Слайд 15Восстановление исходного XML-документа по вызываемым шаблонам.
target="_blank">
Взлом «чёрных ящиков»
Слайд 16Взлом «чёрных ящиков»
Плагины к FireFox:
Web
Developer
Live
HTTP headers
FireBug
Слайд 17ВТОРОЙ ЭТАП – ИЗМЕНЕНИЕ/REFACTORING
Слайд 18Не жадничать…
С каких частей проекта стоит начинать refactoring?
с наиболее значимых в
бизнес-плане частей;
с наиболее сложных по реализации частей;
с наиболее уязвимых частей.
Слайд 20Не жадничать…
XMLSpy Profiler.
количество вызовов
время работы с и без учёта
времени выполнения вложенных инструкций
время выполнения XPATH-выражений
Слайд 21Не играть с тенью…
Пусть лучше работает плохо, чем не работает никак.
Пусть
медленно, но с меньшим количеством ошибок.
Не называть точных сроков.
Слайд 22Разделять и властвовать…
XForms – изменение функциональности.
Слайд 23Разделять и властвовать…
DocBook – расширение функциональности.
Слайд 24Отделять ресурсы от кода…
css;
javascript, в той части, которая не зависит от
xsl-кода;
тексты, относящиеся к интерфейсу:
многоязычность;
удалённое редактирование;
«быстрые» изменения.
Слайд 25Оптимизировать xsl-код…
Зачем?
удобно
быстро
продолжение в следующей серии…
Слайд 26Евгения Фирсова
http://money.yandex.ru
e-mail: saigo@yamoney.ru
icq: 169866344