<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andrew</id>
		<title>CustisWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Andrew"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Andrew"/>
		<updated>2026-07-30T22:54:20Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=11150</id>
		<title>Continuous Integration</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=11150"/>
				<updated>2009-08-20T11:59:28Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Юмор */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=  Введение =&lt;br /&gt;
 «Continuous Integration» — это лекарство от страха. Помогает при программировании.&lt;br /&gt;
                                          Dr. Zoidberg ©&lt;br /&gt;
&lt;br /&gt;
Согласно [http://en.wikipedia.org/wiki/Continuous_Integration Wikipedia] термин Continuous Integration введен Мартином Фаулером (Martin Fowler) и Кентом Беком (Kent Beck). Данный термин был придуман ими для обозначения практики частой сборки (интеграции) проекта. Максимально частая сборка является логичным продолжением цепочки&lt;br /&gt;
 итерационные сборки -&amp;gt; ночные сборки -&amp;gt; непрерывная сборка&lt;br /&gt;
&lt;br /&gt;
В настоящее время Continuous Integration (непрерывная интеграция) одна из практик применяемых в семействе гибких (Agile) методологий. В подобных методологиях она удачно сочитается с другими практиками, такими как модульное(unit) тестирование, рефакторинг, стандарт кодирования. Но даже без них можно получить пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
= Основные принципы =&lt;br /&gt;
&lt;br /&gt;
== Каждое изменение должно интегрироваться ==&lt;br /&gt;
&lt;br /&gt;
Слово continuous в термине [[Continuous Integration]] означает «непрерывный/непрекращающийся». Это означает, что в идеале сборка вашего проекта должна идти буквально все время. Каждое изменение в системе контроля версий (например [[CVS]]) должно интегрироваться без пропусков или задержек. Организация ночных сборок — это хорошая практика, но это не continuous integration. Ведь результаты такой ночной сборки будут доступны лишь на следующий день, когда их актуальность для разработчиков уже значительно снижена. На практике довольно часто реализуют оба процесса и непрерывную интеграция и ночные сборки — более редкую интеграцию.&lt;br /&gt;
В очень крупных проектах это требование иногда невозможно соблюсти, но интеграция каждые сутки это предел за который не стоит уходить.&lt;br /&gt;
Принцип непрерывной интеграции не выполним без другого условия — «Сборка должна идти быстро».&lt;br /&gt;
&lt;br /&gt;
== Быстрая сборка ==&lt;br /&gt;
&lt;br /&gt;
«Сборка должна идти быстро» — точнее не более 10 минут. Если после одного небольшого коммита ваш интеграционный сервер будет уходить в 2-х часовое пыхтение на сборку, тестирование и разворачивание от этого будет мало пользы. Разработчики будут уже далеко, над решение других проблем, им будет сложно вернуться и понять причины сбоя, если таковой был. Ведь суть непрерывной интеграции в получении быстрого feedback. Вдобавок, поздний ответ с сервера может отвлечь их от другого дела.&lt;br /&gt;
&lt;br /&gt;
В случае если все этапы процесса никак не удается втиснуть в приемлемые временные рамки можно разделить его на несколько частей. При каждом коммите производить лишь саму сборку и минимальный набор тестов (smoke tests), чтобы уменьшить время. А по ночам проводить полный цикл интеграции, результаты которого команда будет анализировать с утра. Но это скорее вынужденная мера, а не пример для подражания.&lt;br /&gt;
&lt;br /&gt;
== Сделайте тесты ==&lt;br /&gt;
&lt;br /&gt;
Тесты просто необходимо включать в continuous integration процесс, в противном случае вы не можете быть уверены в качестве и работоспособности своего проекта. Чем тестов больше, тем лучше, в разумных пределах конечно. Основными двумя ограничителями на количество тестов будет:&lt;br /&gt;
* время интеграции — сборка по-прежнему должна оставаться быстрой, основное тестирование можно перенести «на ночь»,&lt;br /&gt;
* наличие автоматизированных тестов — не все тесты требуют автоматизации, нет смысла делать автоматизированные тесты только для самих тестов, они должны быть целесообразны.&lt;br /&gt;
&lt;br /&gt;
Чем лучше ваши тесты, тем раньше находяться ошибки и раньше исправляются. Как известно, чем раньше ошибка исправлена, тем дешевле ее исправление. Это одно из основных преимуществ практики непрерывной интеграции — снижение стоимости исправления ошибок (не всех конечно). Попутно наличие хорошего набора тестов в процессе интеграции дает больше уверенности в том, что проект работает правильно.&lt;br /&gt;
&lt;br /&gt;
Именнно присутствие тестов одно из отличий интеграции от нажатия кнопки Build в вашей любимой IDE.&lt;br /&gt;
&lt;br /&gt;
== Интеграция на специальной машине ==&lt;br /&gt;
&lt;br /&gt;
Организовывать процесс необходимо на специально выделенной машине.&lt;br /&gt;
Такая машина по своей конфигурации и набору прикладных программ должна максимально соответствовать окружению в котором проект будет развернут (production enviroment). Очевидно, что полного совпадения достичь практически невозможно — маловероятно, что эксплуатироватся программа будет на машине с установленными средствами сборки, тестирования и проч. Но точное совпадение версий операционных систем (и сервис паков) необходимо.&lt;br /&gt;
&lt;br /&gt;
При этом это не должна быть машина разработчика или кого-то еще, это должна быть '''выделенная''' машина (можно виртуальная). Ведь зачастую проект, собранный на машине одного разработчика, не собирается на машине другого. Выделение машины для целей интеграции позволяет уменьшить риск связанный с конфигурацией программного и аппаратного обеспечения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Методы =&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration сервер ==&lt;br /&gt;
&lt;br /&gt;
Хотя в принципе практика continuous integration не требует никакого технического и программного обеспечения, гораздо удобнее, проще и дешевле наладить процесс с использованием таких средств. Такие средства называются сервера интеграции (continuous integration server)- специализированные приложения для автоматизации данного процесса.&lt;br /&gt;
&lt;br /&gt;
Наиболее известный из серверов интеграции пожалуй [[CruiseControl]]. [[CruiseControl]] это сервер для интеграции приложений на java, написанный на java. Так же широко распространен его собрат (точнее портированная версия) под .NET — [[CruiseControl.NET]].&lt;br /&gt;
&lt;br /&gt;
Ниже приведена схема организации такого сервера интеграции:&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 rankdir=LR&lt;br /&gt;
&lt;br /&gt;
 Trigger [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Trigger&amp;quot;, URL=&amp;quot;#Trigger&amp;quot;]&lt;br /&gt;
 BuildLoop [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Build Loop&amp;quot;, URL=&amp;quot;#Build_Loop&amp;quot;]&lt;br /&gt;
 Report [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Reporting App&amp;quot;, URL=&amp;quot;#Report&amp;quot;]&lt;br /&gt;
 ExtApps [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;External Applications&amp;quot;, URL=&amp;quot;#Инструменты&amp;quot;] &lt;br /&gt;
 Logs [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Logs&amp;quot;, URL=&amp;quot;#Logs&amp;quot;]&lt;br /&gt;
 Team [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Team&amp;quot;, URL=&amp;quot;#Team&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
 subgraph cluster_machine{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  label = &amp;quot;Build Machine&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Build_Machine&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 subgraph cluster_server{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  BuildLoop -&amp;gt; Report;&lt;br /&gt;
  &lt;br /&gt;
  label = &amp;quot;CI Server&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Continuous_Integration_сервер&amp;quot;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  ExtApps-&amp;gt;BuildLoop; /*-&amp;gt;Logs;*/&lt;br /&gt;
  ExtApps-&amp;gt;Logs-&amp;gt;Report;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Trigger-&amp;gt;BuildLoop;&lt;br /&gt;
 BuildLoop-&amp;gt;ExtApps;&lt;br /&gt;
 Report-&amp;gt;Team;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ручной процесс ==&lt;br /&gt;
&lt;br /&gt;
Хотя решение с выделенным сервером для continuous integration кажется простым и дешевым, у него есть противники. Точнее, сторонники ручного процесса. Один из таких Джеймс Шор (James Shore) в своей статье [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] пишет, как правильно организовать continuous integration процесс без специализированных приложений, вроде [[CruiseControl]]. В этой статье мы не касаемся данного вопроса.&lt;br /&gt;
&lt;br /&gt;
= Процесс интеграции =&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс состоит из нескольких этапов, некоторые из которых обязательны, другие нет:&lt;br /&gt;
* [[#Trigger|Trigger]] — обязателен&lt;br /&gt;
* [[#Update|Update]] — обязателен&lt;br /&gt;
* [[#Analyse|Analyse]] — не обязателен&lt;br /&gt;
* [[#Build|Build]] — а как без него?&lt;br /&gt;
* [[#UnitTest|UnitTest]] — крайне желателен&lt;br /&gt;
* [[#Deploy|Deploy]] — нужен по обстоятельствам&lt;br /&gt;
* [[#Test|Test]] — не обязателен, но крайне желателен&lt;br /&gt;
* [[#Archive|Archive]] — желателен&lt;br /&gt;
* [[#Report|Report]] — обязателен&lt;br /&gt;
&lt;br /&gt;
== Trigger ==&lt;br /&gt;
&lt;br /&gt;
Цикл интеграции начинается со срабатывания триггера. Это может быть одно из следующих событий:&lt;br /&gt;
* изменение в системе контроля версий&lt;br /&gt;
* изменение в файловой системе&lt;br /&gt;
* определенный момент времени&lt;br /&gt;
* сборка другого проекта&lt;br /&gt;
* нажата «красная» кнопка&lt;br /&gt;
* изменение на веб сервере&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что не все CI сервера поддерживают все возможные варианты триггеров, но основные (система контроля версий и файловая система) поддерживаются большинством.&lt;br /&gt;
&lt;br /&gt;
Характерным примером будет случай, когда один из разработчиков делает коммит в систему контроля версий. Для интеграционного сервера это означает, что в исходном коде проекта произошли изменения и необходимо провести сборку для проверки того, что эти изменения ничего не испортили и согласуются с ранее сделанными. После этого наступает следующий этап.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
На данном этапе CI сервер делает update своей локальной копии исходного кода проекта. В процессе update выясняются изменения в коде (и не только) произошедшие с последненй интеграции. Выяснение изменений необходимо для того, чтобы в случае сбоя можно было легко выяснить причину и найти ответственного.&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
&lt;br /&gt;
После того, как свежая версия проекта вытащена из системы контроля версий, но сборка еще не начата, можно провести статический анализ кода.&lt;br /&gt;
Существует множество автоматических средств, для различных языков программирования, позволяющих провести такой анализ. Обычно измеряются следующие характеристики кода:&lt;br /&gt;
* наличие типичных ошибок&lt;br /&gt;
* статические характеристики кода: сложность, размер, прочее&lt;br /&gt;
* соответствие принятым стандартам кодирования&lt;br /&gt;
* другое&lt;br /&gt;
&lt;br /&gt;
Данный этап является необязательным для процесса continuous integration, но в случае его наличия можно получить дополнительный преимущества от введения практики в виде метрик по коду. Данный этап подразумевает не только получение статических характеристик кода, но и их включение в отчеты создаваемые сервером интеграции (о отчетах смотрите [[#Report|здесь]]).&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
Один из основных этапов процесса это сборка проекта. Здесь происходит компиляция (трансляция) исходных кодов в исполнимые файлы или какой-то другой результат. Поскольку сервер интеграции представляет собой специально выделенную машину (смотрите [[#Интеграция_на_специальной_машине|здесь]]) со строго определенной конфигурацией, результат только этой сборки можно считать конечным. Больше никаких «Проект собирается на моей машине!». Есть только одно место, где проект может собираться — это интеграционный сервер.&lt;br /&gt;
&lt;br /&gt;
Естественно сборка является обязательным этапом интеграции.&lt;br /&gt;
&lt;br /&gt;
== UnitTest ==&lt;br /&gt;
&lt;br /&gt;
В методологии Extreme Programming модульное (unit) тестирование является неотъемлемой частью разработки приложения. Модульные тесты изначально автоматизированы, их включение в процесс интеграции крайне желательно. Поскольку часто у разработчиков нет времени или желания запускать такие тесты до того как изменения отправлены в систему контроля версий, дополнительное их исполнение никогда не будет лишним.&lt;br /&gt;
Дополнительную информацию можно извлечь, измеряя покрытие модульных тестов. Эта метрика поможет лучше контролировать качество выпускаемого продукта.&lt;br /&gt;
&lt;br /&gt;
Естественно, при отсутствии самих тестов в проекте этот этап не выполним. Хотя наличие поставленного процесса непрерывной интеграции без модульных тестов заставляет задуматься об их необходимости.&lt;br /&gt;
&lt;br /&gt;
== Deploy ==&lt;br /&gt;
&lt;br /&gt;
После того как мы убедились в некоторой работоспособности проекта — он собирается (этап [[#Build|Build]]) и все модульные тесты проходят ([[#UnitTest|UnitTest]]) проект необходимо «развернуть». В случае веб-приложения это выкладывание на веб-сервер (сервер приложений) и запуск. Для GUI приложений это (пере)установка в системе.&lt;br /&gt;
&lt;br /&gt;
Этап развертывание должен проходить как можно более «чисто», подробнее смотрите [[#Интеграция_на_специальной_машине|здесь]]. При этом для последующего тестирования часто необходимо привести приложение в некое «стандартное» состояние:&lt;br /&gt;
* «залить» дамп базы&lt;br /&gt;
* настроить в стандартном режиме&lt;br /&gt;
* убрать следы предыдущей деятельности приложения&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
После того ка приложение «развернуто» необходимо его протестировать. Здесь имеются ввиду автоматические функциональные тесты, иначе говоря на данном этапе проводиться регрессионное тестирование.&lt;br /&gt;
&lt;br /&gt;
После прохождения регрессионных тестов можно считать, что интеграция прошла успешно и в проект не внесено правок, которые могут привести к его неработоспособности (здесь все зависит от вашего набора тестов модульных и функциональных). В противном случае интеграция не успешна — код содержит ошибки и требуется его исправление/доработка.&lt;br /&gt;
&lt;br /&gt;
Тестирование это один из «фатальных» этапов процесса, ошибка на котором означает сбой сборки. Всего есть несколько таких «фатальных» этапов:&lt;br /&gt;
* [[#Build|Build]] — проект не собирается&lt;br /&gt;
* [[#UnitTest|UnitTest]] — модульные тест не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
* [[#Test|Test]] — регрессионные тесты не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
&lt;br /&gt;
Иногда к ним присоединяют этап [[#Analyse|Analyse]] — если в коде обнаружено несоответствие стандартам кодирования, то это является ошибкой.&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
После того как достигнута максимальная уверенность в качестве исходного кода необходимо сохранить его. Это можно сделать, например, посредством меток в системе контроля версий. Так же необходимо сохранить бинарные файлы проекта. Они могут понадобиться, если нужно будет воспроизвести ошибку в конкретной версии и для ручного тестирования.&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс можно использовать как формализацию процесса передачи версии проекта на тестирование. К примеру можно настроить сервер публиковать свежую версию каждые две недели и сообщать об этом тестировщикам по электронной почте. Тестировщики всегда будут знать откуда брать свежую и «правильную» версию. А наличие регрессионных и модульных тестов является своего рода первичным (smoke) тестированием и гарантирует (в некоторой степени конечно) работоспособность данной версии. Таким образом на тестирование не попадет версия, которая имеет существенные недостатки препятствующие тестированию.&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
В конце идет важный этап генерации и публикации отчетов. Отчеты включают в себя следующее:&lt;br /&gt;
* причина сборки — например изменения в репозитории&lt;br /&gt;
* изменения в исходных кодах — здесь возможны два варианта изменения от последней сборки или от последней успешной сборки&lt;br /&gt;
* отчеты по статическому анализу кода — все результаты какие есть&lt;br /&gt;
* лог сборки&lt;br /&gt;
* лог модульных тестов — какие тесты прошли и, что важнее, какие не прошли&lt;br /&gt;
* лог регрессионных тестов — аналогично модульным тестам&lt;br /&gt;
* статистика сборок проекта:&lt;br /&gt;
** общее число удачных/провальных сборок&lt;br /&gt;
** распределение удачных/провальных сборок во времени&lt;br /&gt;
** статистика результатов статического анализа кода&lt;br /&gt;
* все другие метрики используемые и собираемые в проекте — это поможет менеджеру проекта видеть все и сразу&lt;br /&gt;
&lt;br /&gt;
Механизм публикации отчета может быть разный и даже не один. Это может быть IRC или jabber бот, рассылка по электронной почте, публикация на web или ftp сервере, специализированные клиенты позволяющие узнать статус сборки.&lt;br /&gt;
&lt;br /&gt;
Наиболее эффективна публикация результатов несколькими различными методами сразу. Например рассылка короткого письма команде, только в случае провала сборки, и публикация полного отчета на веб сервере.&lt;br /&gt;
&lt;br /&gt;
Для правильной организации данного этапа важно понимать кого и как необходимо оповещать о результатах интеграции. Здесь надо выбрать между двумя крайностями — оповещать всегда или никогда. Примерное решение этой задачи будет таким:&lt;br /&gt;
* разработчики — минимум при сбое интеграции, в противном случае, как разработчик узнает, что внесенные им изменения сломали код? Конечно, можно оповещать и всегда, это зависит от частоты сборок.&lt;br /&gt;
* тестировщики — если они входят в команду, то оповещать тогда же, когда и разработчиков, ведь иногда ошибки могут быть и в тестах. Если практикуется независимое тестирование вообще не оповещать их или оповещать при окончании интеграции.&lt;br /&gt;
* менеджер проекта — сугубо по желанию&lt;br /&gt;
&lt;br /&gt;
= Профиты =&lt;br /&gt;
&lt;br /&gt;
Так какую пользу можно получить о внедрения непрерывной интеграции в своем проекте?&lt;br /&gt;
&lt;br /&gt;
В первую очередь это безболезненная интеграция всего проекта. Интеграция различных модулей и правок разных программистов перестает быть делом в принципе, она происходит «сама» без участия людей и если что-то не так, вы об этом узнаете. Конечно, сейчас редкость, что проект имеет особую стадию интеграции, когда из кучи разных модулей пытаются сделать приложение, но все же не надо недооценивать пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
Больше никаких «Это работает на моей машине!». Если что-то не работает на сборочном сервере — значит оно не работает вообще. Аргументы программиста, что у него все работает в данном случае не помогут. Сервер интеграции становиться судьей в таких вопросах и этот судья беспристрастен.&lt;br /&gt;
&lt;br /&gt;
Все анализаторы кода и тесты, которые вы используете и написали, обязательно запускаются над каждой сборкой. Если в систему контроля версий попал «плохой» код — вы об этом узнаете. И не важно, нарушен ли один из стандартов кодирования, или статический анализатор кода показывает, что в код попала потенциальная ошибка или тесты не прошли, а может просто покрытие кода модульными тестами упало ниже необходимого минимума. Вы об этом узнаете и сможете принять меры.&lt;br /&gt;
&lt;br /&gt;
Более того, запуск всех этих анализаторов полезен не только для определения состояния в текущий момент времени, но и для анализа тенденций. Можно увидеть, когда ваш код стал сильно больше, сложнее, в каких модулях эта сложность сконцентрирована. Да, это требует наличия и использования соответствующего инструментария.&lt;br /&gt;
&lt;br /&gt;
Чем больше и серьезней проведена работа по настройке сервера интеграции, тем больше пользы можно получить. Если ваш сервер просто собирает проект после каждого изменения в коде, то польза от него не так велика, но и усилий на него почти не потрачено.&lt;br /&gt;
&lt;br /&gt;
= Continuous Improvement =&lt;br /&gt;
&lt;br /&gt;
После того как вы наладили процесс непрерывной интеграции вам может показаться, что дело сделано: сервер работает, билды собираются, почта идет и все хорошо, пока нет никаких ЧП (вроде поломки сервера). Но это не так. Сам процесс требует постоянной наладки, подстройки. Если сначала у вас не было никаких тестов, то их нужно сделать. После вы захотите собирать информацию о покрытии вашего приложения тестами, затем изменение такого покрытия во времени, возможно какие-то еще специфичные метрики. Ну, а если оказалось, что больше улучшать нечего, подождите какое-то время и такая необходимость появится.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
== Публикации ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.martinfowler.com/articles/continuousIntegration.html Continuous Integration] — статья Мартина Фаулера (Martin Fowler) по Continuous Integration&lt;br /&gt;
* [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] — статья Джеймса Шора (James Shore) о ручном методе интеграции&lt;br /&gt;
* [http://blogs.msdn.com/mswanson/articles/169058.aspx Automated Continuous Integration and the Ambient Orb] — статья Майка Свонсона (Mike Swanson)&lt;br /&gt;
* [http://www.custis.ru/docs/publishing/secr-2008/article-ci.pdf «Введение в непрерывную интеграцию или каша из топора»] — статья  Андрея Сатарина, представленная на конференции [http://secr.ru/ SEC(R) 2008]. Так же доступна [http://www.custis.ru/docs/publishing/secr-2008/talk-ci.pdf презентация] и [http://www.custis.ru/docs/publishing/secr-2008/talk-ci-handout.pdf презентация-handout].&lt;br /&gt;
* [http://c2.com/cgi/wiki?ContinuousIntegration c2.com] — статья по Continuous Integration в wiki на c2.com&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Continuous_Integration en.wikipedia.org] — статья по Continuous Integration в Wikipedia&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Непрерывная_интеграция ru.wikipedia.org] — статья по непрерывной интеграции в Википедии&lt;br /&gt;
&lt;br /&gt;
* [http://www.pragprog.com/titles/auto/pragmatic-project-automation www.pragprog.com] — книга «Pragmatic Project Automation». [http://media.pragprog.com/titles/auto/scheduled.pdf Глава], которая посвящена непрерывной интеграции доступна бесплатно.&lt;br /&gt;
* [http://www.amazon.com/Continuous-Integration-Improving-Addison-Wesley-Signature/dp/0321336380/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1206124954&amp;amp;sr=8-1 www.amazon.com] — книга Пола Дюваля (Paul Duvall) о непрерывной интеграции, получившая Jolt Award в 2008 году&lt;br /&gt;
* [http://www.ozon.ru/context/detail/id/3851770/ www.ozon.ru] — эта же книга изданная на русском языке&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Сервера интеграции ===&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net CruiseControl] — сервер интеграции для Java (см. так же [[CruiseControl]]).&lt;br /&gt;
* [http://studio.thoughtworks.com/cruise-continuous-integration ThoughtWorks Cruise] — коммерческий сервер интеграции от компании ThoughtWorks (есть бесплатная версия).&lt;br /&gt;
* [http://ccnet.sourceforge.net CruiseControl.NET] — сервер интеграции для .NET (см. так же [[CruiseControl.NET]])&lt;br /&gt;
* [http://cruisecontrolrb.thoughtworks.com CruiseControl.rb] — сервер интеграции для Ruby.&lt;br /&gt;
* [http://hudson.dev.java.net Hudson] — open-source сервер интеграции, создан как альтернатива [[CruiseControl]]. Функциональность расширяется плагинами.&lt;br /&gt;
* [http://bitten.edgewall.org Bitten] — open-source сервер интеграции написанный на [[Python]], интегрируется с [[Trac]].&lt;br /&gt;
* [http://www.jetbrains.com/teamcity/index.html TeamCity] — коммерческий сервер интеграции от компаниии JetBrains для java и .NET (есть бесплатная версия).&lt;br /&gt;
&lt;br /&gt;
=== Инструменты сборки ===&lt;br /&gt;
* [http://ant.apache.org Ant] — средство сборки для Java&lt;br /&gt;
* [http://maven.apache.org Maven] — средство сборки для Java&lt;br /&gt;
* [http://nant.sourceforge.net/ NAnt] — аналог Ant под .NET&lt;br /&gt;
&lt;br /&gt;
=== Статический анализ ===&lt;br /&gt;
* [http://pmd.sourceforge.net PMD] — анализ кода Java&lt;br /&gt;
* [http://findbugs.sourceforge.net Findbugs] — анализ кода на типичные ошибки&lt;br /&gt;
* [http://www.redhillconsulting.com.au/products/simian/ Simian] — поиск повторов (copу+paste) в коде Java&lt;br /&gt;
* [http://www.gotdotnet.com/team/fxcop/ FXCop] — анализ кода .NET&lt;br /&gt;
* [http://qalab.sourceforge.net/index.html QALab] — объединение логов нескольких инструментов анализа кода, сбор статистики&lt;br /&gt;
* [http://www.panopticode.org/ Panopticode] — объединение логов нескольких инструментов анализа кода для Java, графическое представление результатов&lt;br /&gt;
&lt;br /&gt;
=== Модульное тестирование и покрытие ===&lt;br /&gt;
* [http://junit.org JUnit] — де-факто стандарт модульного тестирования Java&lt;br /&gt;
* [http://testng.org TestNG] — инструмент нового поколения для модульного тестирования Java&lt;br /&gt;
* [http://www.nunit.org/ NUnit] — модульные тесты для приложений .NET&lt;br /&gt;
* [http://cobertura.sourceforge.net Cobertura] — измерение покрытия кода модульными тестами для Java&lt;br /&gt;
* [http://www.atlassian.com/software/clover/ Clover] — анализ покрытия кода тестами для Java&lt;br /&gt;
* [http://www.cenqua.com/clovernet/ Clover.NET] — анализ покрытия кода тестами под .NET&lt;br /&gt;
&lt;br /&gt;
== Юмор ==&lt;br /&gt;
* [http://www.youtube.com/watch?v=XV5fViOoV_ «Every build you brake»] — песня в исполнении Роя Ошерова (Roy Osherove)&lt;br /&gt;
* [http://www.youtube.com/watch?v=Azl4nqLn4-Y «Hitler’s nightly build fails»] — пародия о неудавшейся ночной сборке&lt;br /&gt;
* [http://www.buildsonmymachine.com/ «Builds on my machine»] — юмористическая компания в поддержку практики непрерывной интеграции (смотрите так же [http://www.wheresthebuild.com/] и [http://www.youbrokethebuild.com/])&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программирование]]&lt;br /&gt;
[[Категория:Тестирование программного обеспечения]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9B%D0%B8%D0%BD%D1%83%D1%81_%D0%A2%D0%BE%D1%80%D0%B2%D0%B0%D0%BB%D1%8C%D0%B4%D1%81_%D0%BE_GIT_%D0%BD%D0%B0_Google_Talks&amp;diff=11056</id>
		<title>Линус Торвальдс о GIT на Google Talks</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9B%D0%B8%D0%BD%D1%83%D1%81_%D0%A2%D0%BE%D1%80%D0%B2%D0%B0%D0%BB%D1%8C%D0%B4%D1%81_%D0%BE_GIT_%D0%BD%D0%B0_Google_Talks&amp;diff=11056"/>
				<updated>2009-05-30T06:17:12Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* См. также */ Статьи о Subversion&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Linus-git-googletalk.0-00-04.098.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод доклада Линуса Торвальдса о системе контроля версий &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; на «''Google Talk''»&lt;br /&gt;
&amp;lt;ref&amp;gt;Оригинальное видео доклада http://www.youtube.com/watch?v=4XpnKHJAok8&amp;lt;/ref&amp;gt;,&lt;br /&gt;
выполнен сообществом компании [http://team.custis.ru «Заказные ИнформСистемы»].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-00-11.269.jpg|center]]&lt;br /&gt;
[[Категория:Системы контроля версий]]&lt;br /&gt;
&lt;br /&gt;
== Представление ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-00-19.731.jpg|framed|right| Эндрю Мортон. Один из ведущих разработчиков ядра Linux. Работник Google]]&lt;br /&gt;
&lt;br /&gt;
'''''Эндрю:'''''&lt;br /&gt;
Спасибо всем пришедшим, большинство из вас вероятно уже слышали&lt;br /&gt;
о Линусе Торвальдсе, а те, которые не слышали — это люди с Макинтошами на коленях.&lt;br /&gt;
Это парень, который прется от издевательств над людьми.&lt;br /&gt;
Его последняя выходка — создание СУВ&amp;lt;ref&amp;gt;система управления версиями&amp;lt;/ref&amp;gt;, которая явно создана для того,&lt;br /&gt;
чтобы вы почувствовали себя менее умными, чем до знакомства с ней.&lt;br /&gt;
Спасибо, что снизошли до нас сегодня, Линус.&lt;br /&gt;
Последние дни я получал письма от людей, вопрошающих:&lt;br /&gt;
«Где Линус? Почему он не берет мою ветку? Он меня больше не любит… =(»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Image:Linus-git-googletalk.0-00-35.640.jpg|framed|center]] --&amp;gt;&lt;br /&gt;
И вот, он пришел в мой офис сегодня днем, и сказал: «а чем ты вообще тут занимаешься?!»&lt;br /&gt;
О, спасибо вам, что тратите на нас свое время.&lt;br /&gt;
И вот, Линус пришел сегодня, чтобы объяснить нам,&lt;br /&gt;
какого …, он написал такие тулы, гм,&lt;br /&gt;
что только он тот избранный, кто настолько мудр, чтобы понять, как ими пользоваться.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-00-51.199.jpg|framed|center| тут все апплодируют, апплодируют…]]&lt;br /&gt;
&lt;br /&gt;
== Вводное слово ==&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-01-15.165.jpg|framed|left|Линус Торвальдс.]]&lt;br /&gt;
&lt;br /&gt;
'''''Линус:'''''&lt;br /&gt;
&lt;br /&gt;
Ну, я должен слегка предостеречь вас, что я не очень хороший оратор,&lt;br /&gt;
частично потому, что я не люблю выступать, а частично потому,&lt;br /&gt;
что за последние несколько лет все только и хотели от меня докладов&lt;br /&gt;
о туманном будущем Линукса в следующем столетии,&lt;br /&gt;
а я вообще гик и предпочитаю говорить о технологиях.&lt;br /&gt;
&lt;br /&gt;
Так вот, я не буду говорить про ''Ядро''&amp;lt;ref&amp;gt;Проект Linux Kernel.&amp;lt;/ref&amp;gt;, просто потому, что оно слишком большое,&lt;br /&gt;
чтобы рассказать о нем за час, хотя похоже Эндрю сделал это пару дней назад.&lt;br /&gt;
Вместо этого я расскажу вам про [[EnPedia:Git_(software)|git]], систему управления версиями,&lt;br /&gt;
которую мы используем для Ядра.&lt;br /&gt;
&lt;br /&gt;
Я очень-очень-очень плохо делаю слайды, поэтому,&lt;br /&gt;
если я буду строго им следовать, то к концу вы все умрете от тоски.&lt;br /&gt;
Видимо, в любом случае доклад сильно удачным не будет,&lt;br /&gt;
но я из тех докладчиков, которые действительно рады отвечать на вопросы.&lt;br /&gt;
В общем, если мы будем местами отклоняться от плана доклада,&lt;br /&gt;
то всем нам будет лучше, вероятно и разговор у нас получится более интересный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Изображение:linus-git-googletalk.0-01-10.219.jpg|framed|right]] --&amp;gt;&lt;br /&gt;
Я не знаю, как тут у вас, на ''Google talks'', все это происходит,&lt;br /&gt;
я скажу просто — меня не стесняйтесь.&lt;br /&gt;
А если ваш начальник потом вас пристрелит — это будет уже ваша проблема.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-02-21.683.jpg|framed|Потому что Линус любит заставлять людей думать, что он скромный|left]]&lt;br /&gt;
Сначала я хочу раздать несколько отзывов и благодарностей.&lt;br /&gt;
&lt;br /&gt;
О [[CVS]] я будут отзываться только в очень-очень отрицательном ключе,&lt;br /&gt;
потому что я, когда проектировал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, во многих ситуациях&lt;br /&gt;
использовал (в контексте СУВ) подход «что бы тут сделал Иисус», а иногда и «что бы тут CVS никогда не сделала».&lt;br /&gt;
&lt;br /&gt;
Я никогда не использовал CVS при разработке ядра.&lt;br /&gt;
За последние десять лет для поддержки ядра&lt;br /&gt;
мы использовали только тарболы&amp;lt;ref&amp;gt;tarballs — несжатые tar-архивы&amp;lt;/ref&amp;gt;&lt;br /&gt;
и патчи&amp;lt;ref&amp;gt;patch — файлы изменений&amp;lt;/ref&amp;gt;,&lt;br /&gt;
которые оказались лучшими СУВ, чем CVS,&lt;br /&gt;
но я «покончил с CVS» после семилетнего опыта использования ее&lt;br /&gt;
в коммерческой компании, и я страстно ненавижу эту систему.&lt;br /&gt;
&lt;br /&gt;
Когда я сказал, что страстно ненавижу CVS, я должен также сказать, что если в аудитории есть пользователи SVN ([[EnPedia:Subversion (software)|Subversion]]),&lt;br /&gt;
то вы, возможно, захотите уйти.&lt;br /&gt;
Поскольку моя ненависть к CVS означает, что я считаю Subversion самым&lt;br /&gt;
бесцельным проектом, так как основной девиз Subversion некоторое время был&lt;br /&gt;
«Сделанный по-уму CVS» или что-то вроде этого.&lt;br /&gt;
А если вы начинаете с такого слогана, то вы никуда не сможете прийти.&lt;br /&gt;
Это так, потому что CVS невозможно сделать «правильным».&lt;br /&gt;
&lt;br /&gt;
Это была негативная часть.&lt;br /&gt;
&lt;br /&gt;
А вот с благодарностью я упомяну о [[EnPedia:BitKeeper|BitKeeper]],&lt;br /&gt;
хотя я понимаю, что по мнению многих, вокруг ''BitKeeper''’а было&lt;br /&gt;
много проблем и споров да и «развод» с ним был во многих смыслах неприятен.&lt;br /&gt;
Но по-моему, наш развод с BitKeeper-ом был&lt;br /&gt;
вполне полюбовный, хотя снаружи это казалось иначе.&lt;br /&gt;
И BitKeeper не только стал первой системой контроля версий,&lt;br /&gt;
которая показалась мне вполне достойной,&lt;br /&gt;
но, более того, показал мне, в чем была его основная идея&lt;br /&gt;
и как с ней можно реально работать.&lt;br /&gt;
И хотя &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; во многом, в том числе технически, очень-очень сильно отличается от&lt;br /&gt;
BitKeeper (это было специально задумано, чтобы убедить всех, что это&lt;br /&gt;
не клон BitKeeper), многие процессы используемые нами с &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
взяты из BitKeeper.&lt;br /&gt;
&lt;br /&gt;
Кстати, вы используете BitKeeper здесь, в Google? Я сомневаюсь.&lt;br /&gt;
Насколько я знаю, BitKeeper — это единственная коммерческая распределенная СУВ,&lt;br /&gt;
и поэтому, если вам-таки нужна именно коммерческая система,&lt;br /&gt;
то вам стоит использовать BitKeeper.&lt;br /&gt;
&lt;br /&gt;
Я также хотел бы заметить, что я разрабатываю &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; чуть больше двух лет,&lt;br /&gt;
но хотя я запустил проект, разработал архитектуру и начальный код,&lt;br /&gt;
на протяжении последних полутора лет его поддерживает&lt;br /&gt;
гораздо более славный парень, японец ''Junio Hamano'',&lt;br /&gt;
и именно он сделал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; более доступным для простых смертных.&lt;br /&gt;
Ранние версии &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; действительно требовали некоторое количество&lt;br /&gt;
«ментальных пунктов» мозгосилы.&lt;br /&gt;
C тех пор он стал гораздо проще.&lt;br /&gt;
&lt;br /&gt;
В общем, это мой обычный подход —&lt;br /&gt;
все остальные делают все возможное, а я сам могу просто сидеть и потягивать&lt;br /&gt;
ПинаКоладу&amp;lt;ref&amp;gt;Пинья колада (исп. Piña colada), также ошибочно называемый пинаколада/пиноколада и т. п. — традиционный карибский алкогольный коктейль содержащий ром, кокосовое молоко и ананасовый сок.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
ну и типа люди то же вроде как-то при деле…&lt;br /&gt;
&lt;br /&gt;
На этом благодарности окончены, всех вышеперечисленных откладываем в сторону.&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-06-23.653.jpg|framed|right| Он набросал эту презентацию прошлой ночью, не ждите здесь чуда]]&lt;br /&gt;
Вот этому слайду уже один день.&lt;br /&gt;
Я вообще не делал презентацию прошлой ночью, потому что прошлой ночью&lt;br /&gt;
я пьянствовал, отрывался и ел суши. Вот.&lt;br /&gt;
&lt;br /&gt;
И тем не менее, в презентации&lt;br /&gt;
речь пойдет о реализации надежной, высокопроизводительной распределенной&lt;br /&gt;
системы управления содержимым, и ключевое слово здесь — «распределенная».&lt;br /&gt;
Я сначала попытаюсь объяснить, почему распределенность так важна.&lt;br /&gt;
Если мы потом к этой теме не вернемся, я буду действительно счастлив.&lt;br /&gt;
&lt;br /&gt;
И ничего страшного, если мы так и не разберем, как &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; устроен изнутри.&lt;br /&gt;
Учить пользоваться &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;’ом я тоже не буду.&lt;br /&gt;
Ну есть же у вас такая штука, которую вы делаете, «google.com»,&lt;br /&gt;
и в ней есть такое место, куда можно вводить буквы, и если вы введете туда «git»&lt;br /&gt;
и нажмете кнопку «Мне повезет!», вы обязательно попадете [http://git-scm.com/ на официальный сайт &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;],&lt;br /&gt;
на котором есть и вводные обучающие курсы и руководство пользователя в HTML-формате.&lt;br /&gt;
В общем, если вы хотите научиться пользоваться &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, вам нужно первым делом туда,&lt;br /&gt;
а не на этот доклад.&lt;br /&gt;
&lt;br /&gt;
Но, как я уже сказал, ничего страшного, если мы отклонимся в сторону от темы&lt;br /&gt;
из-за ваших вопросов.&lt;br /&gt;
&lt;br /&gt;
== Content Advisory ==&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-08-05.443.jpg|framed|left|Линус критичен и к программам и к людям]]&lt;br /&gt;
&lt;br /&gt;
Я вам уже озвучил эти примечания к заголовкам; я использую сокращение [[EnPedia:Source_Code_Management|SCM]] в&lt;br /&gt;
значении «''source code management''/управление исходным кодом»,&lt;br /&gt;
что то же самое, что контроль версий. Некоторые думают, что SCM означает&lt;br /&gt;
«Управление конфигурациями/''software configuration management''»&lt;br /&gt;
и включают сюда не только контроль версий, но и управление релизами и все такое;&lt;br /&gt;
но я сейчас буду рассказывать не об этом, хотя &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вполне подходит и для этого.&lt;br /&gt;
&lt;br /&gt;
С [[CVS]] мы уже разобрались. Вы можете не соглашаться со мной сколько хотите, но в течение этого доклада&lt;br /&gt;
все, кто не согласен со мной, по определению — тупые уроды.&lt;br /&gt;
Помните об этом!&lt;br /&gt;
Вы будете вольны делать и думать все что захотите, когда я закончу доклад.&lt;br /&gt;
А сейчас я рассказываю свое единственно правильное мнение,&lt;br /&gt;
так что пользователи CVS, если вы действительно его так любите,&lt;br /&gt;
уйдите с глаз моих долой. Вам надо обратиться в психушку или куда-то еще.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-09-24.327.jpg|framed|right|от BitKeeper к &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Теперь, перед тем как начать говорить о самой сути «Распределенности»,&lt;br /&gt;
что, по-моему, архиважно, нельзя не упомянуть об истории &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
потому что если люди что-то и слышали о &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
то это, в первую очередь, историю его возникновения.&lt;br /&gt;
&lt;br /&gt;
Во-первых, я на самом деле вообще не фанат SCM.&lt;br /&gt;
Я никогда особо не интересовался системами контроля версий, и думал, что это зло,&lt;br /&gt;
пока не наткнулся на ''BitKeeper'', который оценил по достоинству; и,&lt;br /&gt;
в некотором смысле, именно поэтому &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; намного лучше всего остального,&lt;br /&gt;
ведь мой мозг не страдал долгие годы, думая, что [[CVS]] делает что-либо разумное.&lt;br /&gt;
&lt;br /&gt;
Мне понадобилась замена для BitKeeper.&lt;br /&gt;
Причина в том, что BitKeeper — это коммерческий продукт,&lt;br /&gt;
но ''BitMover'' и ''Larry McVoy'' разрешили использовать его бесплатно для open-source&lt;br /&gt;
продуктов, как вы, возможно, знаете; единственным ограничением было то,&lt;br /&gt;
что его нельзя было исследовать (''reverse engineer'') и нельзя пытаться создать конкурирующий продукт.&lt;br /&gt;
&lt;br /&gt;
И я был вполне этим доволен, ведь я делаю свободное ПО,&lt;br /&gt;
потому что считаю это единственным правильным способом разработки,&lt;br /&gt;
но я также хочу использовать лучшие инструменты для работы,&lt;br /&gt;
и BitKeeper был как раз таким.&lt;br /&gt;
&lt;br /&gt;
Но не все были согласны со мной.&lt;br /&gt;
Все они тупые уроды, но как бы там ни было,&lt;br /&gt;
они подкинули проблем,&lt;br /&gt;
и это в результате привело к тому, что мы с ''Larry'' несколько раз&lt;br /&gt;
поговорили по телефону и в конце концов договорились прервать сотрудничество,&lt;br /&gt;
дабы не ухудшать отношения.&lt;br /&gt;
&lt;br /&gt;
Тогда, примерно 2 года назад, я выпустил релиз &amp;lt;tt&amp;gt;Linux 2.6.12-rc2&amp;lt;/tt&amp;gt; и сказал,&lt;br /&gt;
что не продолжу разработку Linux, пока у меня не будет замены BitKeeper’у,&lt;br /&gt;
для управления исходным кодом.&lt;br /&gt;
&lt;br /&gt;
Одним из способов замены был возврат к tar-архивам и патчам,&lt;br /&gt;
но все были категорически против.&lt;br /&gt;
&lt;br /&gt;
Поэтому я рассмотрел кучу альтернатив.&lt;br /&gt;
Большинство из них я отбросил, даже не попробовав.&lt;br /&gt;
&lt;br /&gt;
Если система не распределенная, ее не стоит использовать, это же очевидно.&lt;br /&gt;
&lt;br /&gt;
Если у системы проблемы с производительностью,&lt;br /&gt;
ее тоже не стоит использовать, это так же очевидно.&lt;br /&gt;
И наконец, если вы не можете быть уверенными в том, что то, что вы положите в SCM,&lt;br /&gt;
можно легко достать обратно в том же виде,&lt;br /&gt;
такую систему тоже лучше не использовать.&lt;br /&gt;
&lt;br /&gt;
Честно говоря, та малышка [BitKeeper] прекрасно заботилась обо всем.&lt;br /&gt;
Полно СУВ которые не гарантируют, что то, что вы из них достаете,&lt;br /&gt;
является в точности тем, что в них положили.&lt;br /&gt;
Вы можете никогда и не узнать, что у вас повреждена память или жесткий диск.&lt;br /&gt;
А заметите это, только когда получите назад поврежденный файл.&lt;br /&gt;
Причем сама система контроля версий за этим вообще не следит.&lt;br /&gt;
И такое — совсем не редкость.&lt;br /&gt;
Да, это встречается очень, очень часто.&lt;br /&gt;
&lt;br /&gt;
Проблема быстродействия: одной из систем, которая мне более-менее понравились,&lt;br /&gt;
была система [[EnPedia:Monotone_(software)|Monotone]], о которой, кстати, когда-то вроде был доклад в Google,&lt;br /&gt;
хотя может я и ошибаюсь; так вот, в ней было много интересных идей,&lt;br /&gt;
но производительность была просто ужасна,&lt;br /&gt;
так что попробовав ее один день, я понял, что она мне не подходит.&lt;br /&gt;
&lt;br /&gt;
В результате, я решил, что сам за две недели смогу написать что-то получше,&lt;br /&gt;
и не ошибся.&lt;br /&gt;
&lt;br /&gt;
== Distribution ==&lt;br /&gt;
&lt;br /&gt;
[''Показывает слайд «Distribution» с картинкой'']&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk-slide-distribution.jpg|framed|Это не просто хорошая идея. По-другому просто не будет работать!]]&lt;br /&gt;
&lt;br /&gt;
Теперь перейдем к ''Распределенности'', и это худший слайд из всех,&lt;br /&gt;
и мне стыдно за него, но проблема в том, что ''Распределенность''&lt;br /&gt;
действительно очень важна,&lt;br /&gt;
но у меня никогда не получается сделать об этом нормальный слайд.&lt;br /&gt;
Частично это из-за моих скудных художественных способностей,&lt;br /&gt;
которые вы видите перед собой на экране,&lt;br /&gt;
но на самом деле это действительно трудно объяснить.&lt;br /&gt;
&lt;br /&gt;
Поэтому прежде чем я начну, я хотел бы знать,&lt;br /&gt;
кто из вас привык к идее по-настоящему распределенной системы контроля версий?&lt;br /&gt;
&lt;br /&gt;
[''слушатели поднимают руки'']&lt;br /&gt;
&lt;br /&gt;
Большинство из вас разрабатывают ядро?&lt;br /&gt;
Нет?&lt;br /&gt;
Хорошо, примерно десять человек подняли руки.&lt;br /&gt;
&lt;br /&gt;
Распределенность главным образом означает отсутствие центрального места,&lt;br /&gt;
в котором хранятся ваши данные и отслеживаются изменения.&lt;br /&gt;
Ни одно хранилище не является более важным, чем какое-либо другое.&lt;br /&gt;
&lt;br /&gt;
Поэтому, например, я Subversion даже&lt;br /&gt;
трехметровым багром трогать не буду.&lt;br /&gt;
В Subversion большой репозиторий, куда все обязаны складывать свои данные.&lt;br /&gt;
А централизованная модель просто не работает,&lt;br /&gt;
когда… давайте взглянем на некоторые такие случаи.&lt;br /&gt;
&lt;br /&gt;
[''Показывает слайд «Distribution» с пунктами'']&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk-slide-distribution2.jpg|frame|Слайд «Distribution» с пунктами]]&lt;br /&gt;
&lt;br /&gt;
Я сказал, что распределенность — это гораздо больше, чем просто работа в оффлайн,&lt;br /&gt;
но это, пожалуй, понять проще всего:&lt;br /&gt;
вы можете взять по-настоящему распределенную SCM с собой в самолет и,&lt;br /&gt;
даже если в нем нет ни wi-fi, ни спутникового интернета,&lt;br /&gt;
вы просто продолжаете работать — вы можете посмотреть любые логи,&lt;br /&gt;
вы можете фиксировать изменения, вы можете делать все, что вы бы делали,&lt;br /&gt;
если бы вы были подключены прямо к магистральному каналу с гигабитным Ethernet.&lt;br /&gt;
И это действительно важно.&lt;br /&gt;
&lt;br /&gt;
Это вдвойне важно, когда над одним и тем же проектом работают&lt;br /&gt;
сотни и тысячи людей, и они даже не обязательно должны быть все отключены&lt;br /&gt;
от сети, просто на практике они на самом деле не всегда имеют хорошую связь.&lt;br /&gt;
Так что работа в оффлайн — это один из аспектов распределенности,&lt;br /&gt;
и даже если работа не всегда идет оффлайн,&lt;br /&gt;
очень важно иметь возможность делать все, что вам нужно,&lt;br /&gt;
находясь в любом месте и даже не имея возможности подключиться к серверу.&lt;br /&gt;
&lt;br /&gt;
Этот простой факт приводит к появлению гораздо большего количества веток,&lt;br /&gt;
потому что каждый, у кого есть целиком весь репозиторий и возможность в него&lt;br /&gt;
коммитить, будет работать в своей собственной ветке, даже этого не осознавая.&lt;br /&gt;
Да-да, даже если вы считаете, что ваш проект имеет только одну ветвь, каждый раз,&lt;br /&gt;
когда вы отключаетесь от сети и начинаете работать над проектом,&lt;br /&gt;
вы работаете со своей отдельной веткой.&lt;br /&gt;
&lt;br /&gt;
И это действительно очень важно и очень сильно отличается от работы в CVS,&lt;br /&gt;
где ветвление считается уделом настоящих мастеров.&lt;br /&gt;
&lt;br /&gt;
Кто из вас когда-либо пользовался CVS?&lt;br /&gt;
&lt;br /&gt;
[''Слушатели поднимают руки'']&lt;br /&gt;
&lt;br /&gt;
Понятно, все. А кто когда-нибудь по-настоящему создавал ветку, а потом объединял изменения в CVS?&lt;br /&gt;
&lt;br /&gt;
[''Слушатели поднимают руки'']&lt;br /&gt;
&lt;br /&gt;
Хорошо.&lt;br /&gt;
Отмечу, что далеко не все, хотя и гораздо больше, чем я ожидал.&lt;br /&gt;
&lt;br /&gt;
Ну и кому из вас понравилось осуществлять этот процесс?&lt;br /&gt;
&lt;br /&gt;
[''смех'']&lt;br /&gt;
&lt;br /&gt;
Понятно, все-таки нескольким понравилось.&lt;br /&gt;
&lt;br /&gt;
Считается, что это сложная операция. В CVS, когда вы объединяете ветки (а я делал это, избегал как мог, но приходилось),&lt;br /&gt;
вы планируете это на неделю вперед и, как правило, оставляете на это целый день.&lt;br /&gt;
&lt;br /&gt;
Разве я не прав?&lt;br /&gt;
Что-то я не вижу, чтобы многие говорили «Нет, это очень просто, мне нравится это делать».&lt;br /&gt;
Это отвратительно!&lt;br /&gt;
 &lt;br /&gt;
Обязательно нужно понять, что в распределенной системе каждый человек работает&lt;br /&gt;
со своей отдельной веткой.&lt;br /&gt;
И это не страшно, вам даже не надо что-то специально настраивать,&lt;br /&gt;
так устроено изначально.&lt;br /&gt;
&lt;br /&gt;
На самом деле, в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; мы так любим ветки, что многие держат их по 10-15 штук,&lt;br /&gt;
потому что когда вы понимаете, что у вас по-любому будет отдельная ветка,&lt;br /&gt;
вам уже все равно, сколько их будет, и вы делаете отдельные ветки&lt;br /&gt;
для экспериментов и отдельные для поддержки.&lt;br /&gt;
Так что ветвление гораздо более свойственно распределенным системам.&lt;br /&gt;
 &lt;br /&gt;
Еще одна вещь, которая мне кажется важной, — это то, что распределенная система&lt;br /&gt;
в силу своего устройства более надежна.&lt;br /&gt;
&lt;br /&gt;
Мой подход к архивам/бэкапам таков:&lt;br /&gt;
не делать их специально,&lt;br /&gt;
а просто публиковать свои данные на сайте,&lt;br /&gt;
а остальные пусть их копируют/зеркалируют, и мне пофиг,&lt;br /&gt;
если у меня сломается компьютер, потому что я могу скачать все обратно.&lt;br /&gt;
И это отлично работает, и при этом мне не нужна служба поддержки.&lt;br /&gt;
&lt;br /&gt;
Я очень сомневаюсь, что все так делают.&lt;br /&gt;
Но это по-настоящему работает только в распределенных системах.&lt;br /&gt;
Если вы пользуетесь CVS, вы не можете так сделать, если вы используете…&lt;br /&gt;
кстати, чем вы здесь пользуетесь?&lt;br /&gt;
&lt;br /&gt;
Perforce?… [[EnPedia:Perforce|Perforce]]. Ну да, извините.&lt;br /&gt;
Да, он, конечно же, лучше, чем [[CVS]].&lt;br /&gt;
&lt;br /&gt;
[''Слушатели смеются'']&lt;br /&gt;
&lt;br /&gt;
Но все равно это по сути CVS.&lt;br /&gt;
&lt;br /&gt;
Еще одна прикольная вещь, хотя у вас в компании возможно этого и нет,&lt;br /&gt;
но это обязательно есть во всех командах, разрабатывающих свободное ПО,&lt;br /&gt;
которые используют CVS или Subversion или что-то вроде этого, это то,&lt;br /&gt;
что они пользуются понятием «commit access».&lt;br /&gt;
&lt;br /&gt;
Ведь то, что у вас центральный репозиторий, означает, что все,&lt;br /&gt;
кто работают над проектом, должны складывать данные именно туда.&lt;br /&gt;
&lt;br /&gt;
И что это значит? &lt;br /&gt;
Поскольку вы не хотите, чтобы все подряд правили данные в центральном&lt;br /&gt;
репозитории, из-за того, что большинство людей — идиоты, то вам приходится выделять&lt;br /&gt;
людей, которые, по-видимости, идиотами не являются.&lt;br /&gt;
И чаше всего в этой группе оказывается слишком мало людей, потому что очень&lt;br /&gt;
сложно понять, насколько человек шарит, и наоборот,&lt;br /&gt;
даже если эта группа будет очень мала,&lt;br /&gt;
проблемы у вас все равно будут.&lt;br /&gt;
&lt;br /&gt;
В общем, эта проблема доступа к коммитам, которую некоторые компании&lt;br /&gt;
пытаются не замечать, просто давая всем доступ для коммитов, эта&lt;br /&gt;
проблема создает огромный психологический барьер и в большинстве проектов с&lt;br /&gt;
открытым кодом приходится тратить бесконечные часы для того, чтобы определиться&lt;br /&gt;
с политикой коммитов.&lt;br /&gt;
&lt;br /&gt;
Если же у вас распределенная модель, всех этих проблем нет.&lt;br /&gt;
Доступ к коммитам есть у каждого, вы можете делать что угодно со своим проектом.&lt;br /&gt;
Вы просто получаете собственную ветвь, и пишете ли вы в ней гениальный код, или&lt;br /&gt;
какой-нибудь маразм, это никого не волнует, это ваша копия.&lt;br /&gt;
Это ваша ветвь.&lt;br /&gt;
&lt;br /&gt;
И потом, если окажется, что вы сделали что-то полезное, вы можете сказать&lt;br /&gt;
людям: «''Эй, тут в моей ветви все работает в десять раз быстрее, чем у всех остальных,&lt;br /&gt;
так что ня-ня-ня, не хотите взять мой код?''».&lt;br /&gt;
И народ берет.&lt;br /&gt;
&lt;br /&gt;
Так это и работает и у нас нет никаких правил.&lt;br /&gt;
Это конечно не совсем так — у нас регулируется другое,&lt;br /&gt;
но о таких вещах как доступ к коммитам нам беспокоиться не нужно.&lt;br /&gt;
И я думаю, что это огромный результат и уже только из-за него одного любая&lt;br /&gt;
система с открытым кодом должна использовать распределенную модель, а не&lt;br /&gt;
что-либо другое.&lt;br /&gt;
&lt;br /&gt;
Вы избавитесь от кучи проблем.&lt;br /&gt;
&lt;br /&gt;
Одна из них касается коммерческих компаний.&lt;br /&gt;
Распределенная модель может также помочь с процессом выпуска релизов.&lt;br /&gt;
У вас может быть команда тестировщиков, которая работает в своем дереве.&lt;br /&gt;
Они берут код у других, проверяют его и когда проверят, передадут его&lt;br /&gt;
команде выпуска.&lt;br /&gt;
И они скажут: «Эй, мы тут проверили новую версию» и разработчики могут&lt;br /&gt;
продолжать работать головой вместо того, что маяться всякой дурью типа создания&lt;br /&gt;
меток, ветвей и всего того, что вы обычно делаете, чтобы разработчики не&lt;br /&gt;
конфликтовали друг с другом, потому что это достигается тем, что каждая группа&lt;br /&gt;
работает в своем дереве, следит за тем, что она сделала и что хочет сделать.&lt;br /&gt;
&lt;br /&gt;
То есть Распределенность — это на самом деле ключевой момент для любой из&lt;br /&gt;
СУВ, которые стоит использовать.&lt;br /&gt;
&lt;br /&gt;
Так что немедленно избавьтесь от Perforce!&lt;br /&gt;
&lt;br /&gt;
[''Апплодисменты'']&lt;br /&gt;
&lt;br /&gt;
Да, может и жалко, но это архиверно!&lt;br /&gt;
&lt;br /&gt;
Это был мой единственный слайд о распределенности.&lt;br /&gt;
Я бы хотел послушать ваши вопросы, потому что затем мы двинемся к другой теме.&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-21-39.872.jpg|frame|right|И как вы собираетесь это делать?]]&lt;br /&gt;
&lt;br /&gt;
{{question}} Вопрос. И как вы собираетесь это делать?&lt;br /&gt;
Если у вас есть эта монстрообразная, страшно огромная база кода&lt;br /&gt;
и вы хотите использовать ее, не останавливая&lt;br /&gt;
другие дела на шесть месяцев, как вы собираетесь это делать?&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Не отходите от микрофона, потому что я не совсем понял ваш вопрос.&lt;br /&gt;
Он ушел, ну ладно.&lt;br /&gt;
&lt;br /&gt;
«Как вы собираетесь это делать?» — Ну, вот пример реальной распределенности:&lt;br /&gt;
у вас есть команда из пяти человек, которые работают над&lt;br /&gt;
одной небольшой конкретной вещью.&lt;br /&gt;
&lt;br /&gt;
И это означает, что некоторое время это вещь будет сильно-сильно&lt;br /&gt;
испорчена, так?&lt;br /&gt;
Потому что никто на самом деле не создает прекрасный код с первого раза, за&lt;br /&gt;
исключением меня, но я такой один, так?&lt;br /&gt;
Поэтому им нужно иметь собственное дерево,&lt;br /&gt;
в котором они могут работать, не мешая остальным.&lt;br /&gt;
&lt;br /&gt;
Вы можете этого достичь множеством способов.&lt;br /&gt;
В CVS один из наиболее распространенных подходов — не делать коммитов вообще,&lt;br /&gt;
поскольку возиться с ветвями очень нудно.&lt;br /&gt;
&lt;br /&gt;
То есть вы не делаете коммиты, пока код не пройдет абсолютно все тесты.&lt;br /&gt;
Или например, в вашей компании строгое политика коммитов:&lt;br /&gt;
«нельзя делать коммиты пока они не пройдут весь набор тестов»,&lt;br /&gt;
а между прочим все тесты будут выполняться два часа, жесть!&lt;br /&gt;
&lt;br /&gt;
Да, вам не позволяют делать коммиты.&lt;br /&gt;
И это происходит почти в каждой компании.&lt;br /&gt;
Я уверен, что это так даже у вас, в Google.&lt;br /&gt;
У вас вероятно есть строгий набор тестов и вам нельзя делать коммиты, пока&lt;br /&gt;
все тесты не будут пройдены, а это приводит к тому, что на практике люди вносят&lt;br /&gt;
изменения по одной строчке и не тестируют, потому что знают, что изменения в&lt;br /&gt;
одной строчке скорее всего ничего не сломают.&lt;br /&gt;
Да, бывает и так.&lt;br /&gt;
&lt;br /&gt;
Такой подход, конечно — ужас-ужас!&lt;br /&gt;
Это означает, что вы делаете коммит огромного числа изменений за раз,&lt;br /&gt;
потому что работали над этими изменениями две недели.&lt;br /&gt;
И в итоге у вас три человека, которые делают одно и то же, потому&lt;br /&gt;
что они не видят изменений от других, пока не сделают коммит своих.&lt;br /&gt;
Это часто происходит, это происходит везде, это жуть!&lt;br /&gt;
&lt;br /&gt;
Другой вариант — это использовать ветви, пусть даже в централизованной среде.&lt;br /&gt;
Но ветви всегда обрываются, так как их слишком дорого поддерживать,&lt;br /&gt;
так что у вас не получится разрабатывать в них экспериментальную функциональность.&lt;br /&gt;
Вы никогда заранее не знаете, потребуется ли на что-то один день или две недели,&lt;br /&gt;
ведь почти всегда любой программист скажет: «Ха, я сделаю это за 48 часов».&lt;br /&gt;
А потом выясняется, что «не-а, не могу».&lt;br /&gt;
&lt;br /&gt;
Но так как вы думаете, что сможете сделать это за 48 часов, вам очень лень&lt;br /&gt;
создавать ветвь, даже в таких системах, в которых это делать удобнее, чем в CVS.&lt;br /&gt;
И вы этого не делаете, потому что думаете, что как-нибудь справитесь с этим&lt;br /&gt;
и вы возвращаетесь к случаю № 1, но даже если вы решите создать ветвь, то будете&lt;br /&gt;
менять содержимого репозитория и для всех остальных,&lt;br /&gt;
потому что в централизованной среде ветви глобальны.&lt;br /&gt;
&lt;br /&gt;
То есть вы столь любезны, что вы трахаетесь со всеми остальными,&lt;br /&gt;
но при этом не трогаете их ''основной ствол'', так называемую ''головную ветвь''.&lt;br /&gt;
Вы добавляете что-то новое в их репозитории, но при этом так,&lt;br /&gt;
чтобы они ничего не заметили (по-крайней мере, вы на это надеетесь).&lt;br /&gt;
Но общий репозиторий все равно от этого пухнет.&lt;br /&gt;
&lt;br /&gt;
В общем, в любом случае, успеха вы не добьетесь.&lt;br /&gt;
&lt;br /&gt;
В распределенной же среде происходит так: есть пять человек, они берут себе&lt;br /&gt;
текущую головную ветвь, которая надежна и протестирована и они начинают&lt;br /&gt;
работать с ней и делать коммиты,&lt;br /&gt;
и вам не надо ждать две недели, пока ваши изменения не станут стабильными,&lt;br /&gt;
потому что они всегда локальны.&lt;br /&gt;
А внутри этой группы из пяти человек, все могут брать&lt;br /&gt;
изменения друг у друга.&lt;br /&gt;
&lt;br /&gt;
Вот в этом и смысл распределенности — нет центра, а значит, что все&lt;br /&gt;
равны и что можно проводить слияния друг между другом, что можно, если хочется,&lt;br /&gt;
не только делать коммит каждой строчки, не проходя при этом&lt;br /&gt;
двухчасовые тесты, но и гибко взаимодействовать, забирая и сливая&lt;br /&gt;
изменения у кого и с кем угодно, и когда кто-то находит баг и&lt;br /&gt;
исправляет его, он говорит остальным:&lt;br /&gt;
«Эй, у меня в репозитории лежит фикс на этот баг», и потом,&lt;br /&gt;
когда эта группа все сделает через две недели, они&lt;br /&gt;
позвонят менеджеру:&lt;br /&gt;
«Эй, мы все сделали, скажи главной группе, чтоб они забрали&lt;br /&gt;
себе обновленный код и они получат новую функциональность, и, кстати, мы его&lt;br /&gt;
тестили больше двух недель, оно работает и с производительностью все в порядке,&lt;br /&gt;
так как мы смогли также и профилировать этот код до того,&lt;br /&gt;
как просить кого-либо его посмотреть».&lt;br /&gt;
&lt;br /&gt;
И эта модель гораздо лучше для разработки.&lt;br /&gt;
&lt;br /&gt;
И это модель, которая используется в разработке ядра Linux.&lt;br /&gt;
Оказывается, что во многих местах нам не нужна вся эта мощь, даже в ядре.&lt;br /&gt;
И люди обычно не обмениваются обновленным кодом внутри одной группы, но иногда&lt;br /&gt;
случается, например, что те, кто работает над сетью, иногда сталкиваются с&lt;br /&gt;
людьми, которые работают над NFS, и то, что они могут синхронизироваться,&lt;br /&gt;
действительно помогает.&lt;br /&gt;
То есть это действительно помогает!&lt;br /&gt;
&lt;br /&gt;
У кого-то еще есть вопрос?&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-27-03.671.jpg|frame|right|Похоже, что все эти правила и ограничения просто переместились или стали неявными.…]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Похоже, что все эти правила и ограничения просто переместились или стали неявными.&lt;br /&gt;
Да, у каждого есть доступ и все играются со своими ветвями в песочнице, но к вечеру&lt;br /&gt;
ветви нужно соединять и разрешать все конфликты чтобы не было 80&lt;br /&gt;
миллиардов вариантов каждого линуксового ядра.&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Да, именно так.&lt;br /&gt;
Но на практике вы их никогда не увидите, да там может быть тысяча или&lt;br /&gt;
двести тысяч различных ветвей, но на практике вы никогда о них не узнаете,&lt;br /&gt;
потому что вам это не нужно.&lt;br /&gt;
Вы как бы будете видеть только несколько главных ветвей, может быть даже&lt;br /&gt;
только одну.&lt;br /&gt;
&lt;br /&gt;
Вот в случае с ядром, полно людей, которые смотрят только на мою ветвь,&lt;br /&gt;
так что несмотря на то что ветвей может быть очень много, вы можете не обращать&lt;br /&gt;
на это внимания.&lt;br /&gt;
И что важно, это способ, которым происходят слияния, он и определяет,&lt;br /&gt;
насколько все это будет безопасно и надежно.&lt;br /&gt;
&lt;br /&gt;
Через сеть доверия.&lt;br /&gt;
&lt;br /&gt;
Если вы когда-нибудь занимались какой-то работой по безопасности&lt;br /&gt;
и не использовали концепцию сети доверия, то это был онанизм,&lt;br /&gt;
а не работа.&lt;br /&gt;
Я не знаю, чем вы там занимались, но поверьте мне, это единственный способ,&lt;br /&gt;
который дает безопасность и также единственно верный подход&lt;br /&gt;
в разработке ПО.&lt;br /&gt;
&lt;br /&gt;
В своей работе я не доверяю всем без исключения.&lt;br /&gt;
&lt;br /&gt;
Более того, на самом деле я крайне циничен и недоверчив.&lt;br /&gt;
&lt;br /&gt;
Я думаю, большинство из вас полностью некомпетентны.&lt;br /&gt;
&lt;br /&gt;
Основной принцип распределенности — это то, что я не должен вам доверять.&lt;br /&gt;
Я не должен давать вам доступ к коммитам.&lt;br /&gt;
Но я знаю, что среди оравы середнячков есть несколько человек,&lt;br /&gt;
достаточно выдающихся, чтобы я им доверял, ибо с ними я уже работал.&lt;br /&gt;
&lt;br /&gt;
Мне нужно доверять только 5, 10, ну может 15 людям.&lt;br /&gt;
Если у меня есть доверенная сеть, в которую входят эти 5, 10, 15 выдающихся&lt;br /&gt;
человек, и я знаю, что они выдающиеся, я могу забирать новый код&lt;br /&gt;
у них.&lt;br /&gt;
И мне не надо париться на эту тему.&lt;br /&gt;
&lt;br /&gt;
Когда Эндрю присылает мне патчи, он не использует никакого &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
это в некотором роде недостаток, ну и что, он очень надежный человек.&lt;br /&gt;
Когда он просит меня принять обновленный код, он просто посылает мне&lt;br /&gt;
миллион патчей, я просто их применяю.&lt;br /&gt;
Иногда я не согласен с какими-то из этих патчей, но с другой стороны,&lt;br /&gt;
доверие означает, как это сказать… «доверять — значит прощать»? Я не знаю…&lt;br /&gt;
В общем, это означает, что вы должны соглашаться с решениями других людей.&lt;br /&gt;
&lt;br /&gt;
И самое замечательное в доверии — это что оно создает сеть.&lt;br /&gt;
Именно здесь и появляется сеть доверия.&lt;br /&gt;
&lt;br /&gt;
Мне нужно лишь несколько человек, которым я буду доверять.&lt;br /&gt;
А у них есть другие люди, которых они выбрали, типа — «тот парнишка шарит покруче&lt;br /&gt;
меня» — да, это хороший критерий того, от кого вам следует брать исправленный код.&lt;br /&gt;
Если у вас есть кто-то еще, кто шарит лучше вас, — вперед.&lt;br /&gt;
Это беспроигрышно.&lt;br /&gt;
&lt;br /&gt;
Даже если окажется, что вы взяли какую-то чушь, кто-то там начнет&lt;br /&gt;
жаловаться, вы знаете, откуда вы взяли эти исправления, и вы можете просто&lt;br /&gt;
сказать это жалующемуся «хм, я просто скопировал это, иди к нему, он наверное знал, что делал».&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-30-08.466.jpg|frame|right|Именно так я и работаю…]]&lt;br /&gt;
&lt;br /&gt;
Именно так я и работаю, скорее всего также действуют и мои поручики/заместители&lt;br /&gt;
&amp;lt;ref&amp;gt;В оригинале ''lieutenants'', поэтому часто в рунете помощников Линуса зовут «лейтенантами».&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Я забираю изменения по сетевой теме от одного человека, а он получает их от&lt;br /&gt;
множества других людей, с которыми он постоянно работает, и таким образом все&lt;br /&gt;
изменения приходят ко всем, и им не нужно собираться всем в одной точке.&lt;br /&gt;
&lt;br /&gt;
Хотя в ядре все приходит в большей степени в одну точку, так, я думаю, сложилось&lt;br /&gt;
исторически, и на самом деле я всегда пытался поощрять пожелания людей заводить&lt;br /&gt;
больше деревьев, и у нас действительно есть отдельные деревья по производителям оборудования,&lt;br /&gt;
у нас есть специальное «-mm»&amp;lt;ref&amp;gt;Экспериментальная ветвь ядра Linux, специализированная на управлении памятью, см. [[EnPedia:Mm_tree]].&amp;lt;/ref&amp;gt; дерево, в котором много выделенных «точек», просто так получается, что&lt;br /&gt;
моя точка привлекает, быть может, больше внимания, чем должна была бы.&lt;br /&gt;
&lt;br /&gt;
Даже если что-то там не придет к этой одной точке, это значит, что&lt;br /&gt;
можно взять тысячи этих ветвей, игнорируя &amp;lt;tt&amp;gt;99.9%&amp;lt;/tt&amp;gt; из них.&lt;br /&gt;
Зато вам интересно отслеживать, скажем пять ветвей, относящихся к областям, которыми вы интересуетесь.&lt;br /&gt;
&lt;br /&gt;
И все это работает очень естественно.&lt;br /&gt;
&lt;br /&gt;
Одной из хороших вещей в этой целой сети доверия,&lt;br /&gt;
является не только то, что ее легко технически реализовать,&lt;br /&gt;
но и то, насколько легко основательно подключить к ней&lt;br /&gt;
любого человека из этой комнаты.&lt;br /&gt;
&lt;br /&gt;
Люди мыслят именно так.&lt;br /&gt;
&lt;br /&gt;
Мы не знаем сотню людей.&lt;br /&gt;
У нас есть 5, 7, 10 близких личных друзей, ну ладно, пусть мы асоциальные гики,&lt;br /&gt;
поэтому у нас их двое, но это основы человеческого сотрудничества, то&lt;br /&gt;
что у нас есть те, кому мы действительно можем доверять,&lt;br /&gt;
это семья, это близкие друзья, и все это удобно и привычно, не нужно&lt;br /&gt;
держать в голове неестественную модель взаимодействия,&lt;br /&gt;
все подключаются естественным образом.&lt;br /&gt;
Поэтому работа с этой моделью сетевого доверия дает огромные преимущества.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-31-51.970.jpg|frame|right|Знаете ли вы о компаниях, которые используют распределенные системы у себя внутри?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Знаете ли вы о компаниях, которые используют распределенные системы у себя внутри?&lt;br /&gt;
Похоже, тут есть вероятность «сепаратизма» в коде,&lt;br /&gt;
так как народ, разбредется по собственным песочницам, и&lt;br /&gt;
не будет вкладываться в основной ствол.&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Честно говоря, не так уж и много распределенных систем.&lt;br /&gt;
Это BitKeeper, очевидно использующийся коммерческими компаниями,&lt;br /&gt;
мы должны иметь в аудитории кого-нибудь, кто действительно знает, но что …&lt;br /&gt;
[''комментарий из аудитории''], ага,&lt;br /&gt;
HP использует такие системы как BitKeeper в проектах разработки принтеров.&lt;br /&gt;
&lt;br /&gt;
Я уверен, что таких компаний немало.&lt;br /&gt;
В мире open-source ПО, есть пара распределенных&lt;br /&gt;
систем, которых стоит посмотреть прямо сейчас.&lt;br /&gt;
Очевидно одна из них — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
И вы, конечно, должны выбрать ее.&lt;br /&gt;
&lt;br /&gt;
Но есть и другая — Mercurial, которая на самом деле очень похожа по архитектуре.&lt;br /&gt;
Есть некоторые различия в деталях архитектуры и большие различия в реализации,&lt;br /&gt;
но в сухом остатке модели очень похожи.&lt;br /&gt;
Только &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает это лучше.&lt;br /&gt;
&lt;br /&gt;
Все остальное либо централизованное, либо сырое, либо слишком медленное&lt;br /&gt;
для достаточно больших проектов.&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} А какие преимущества у компании, когда все играются в собственных песочницах?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что есть полно компаний, считающих, что такие преимущества есть.&lt;br /&gt;
&lt;br /&gt;
Я знаю это от инсайдеров, и не думаю, что многие компании&lt;br /&gt;
осознанно используют &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, в смысле, чтобы решение по его использованию&lt;br /&gt;
было принято на уровне корпоративного стандарта.&lt;br /&gt;
&lt;br /&gt;
Я знаю несколько компаний, которые внутри&lt;br /&gt;
используют &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, не подозревая об этом, потому что они все еще держат&lt;br /&gt;
свои главные репозитории в Subversion, но многие разработчики затем&lt;br /&gt;
импортируют код в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, потому что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; действительно хорошо выполняет слияния.&lt;br /&gt;
Так что вы можете взять дерево веток из Subversion, импортировать в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
позволить &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сделать слияние,&lt;br /&gt;
что было бы основной головной болью в Subversion,&lt;br /&gt;
зафиксировать изменения и фактически экспортировать их назад в Subversion,&lt;br /&gt;
и никто другой даже не узнает, что вы использовали &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Немного грустно, но я слышал о многих,&lt;br /&gt;
работающих в компаниях в точности по этому сценарию.&lt;br /&gt;
&lt;br /&gt;
А вот чтобы постоянно использовать &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; подряд в течении полугода или больше — таких людей пока еще мало.&lt;br /&gt;
&lt;br /&gt;
Мы сделали масштабные улучшения пользовательских интерфейсов,&lt;br /&gt;
честно говоря, еще год назад в коммерческих компаниях&lt;br /&gt;
многие говорили, что его слишком трудно использовать.&lt;br /&gt;
&lt;br /&gt;
Я думаю, что мы прошли переломный момент.&lt;br /&gt;
Git намного проще использовать, чем CVS, правда-правда!&lt;br /&gt;
 &lt;br /&gt;
Большинство людей склоняются к … э-мнэ-э, он проще в использовании, чем что-либо еще.&lt;br /&gt;
Это всего лишь,… забудьте это.&lt;br /&gt;
Вы не обязаны использовать все его мощные возможности,&lt;br /&gt;
некоторые из них могут&lt;br /&gt;
быть тем, что вы хотели бы объяснить и представить людям только&lt;br /&gt;
после того, как они преодолеют начальные трудности&lt;br /&gt;
понимания того, что действительно означает распределенность,&lt;br /&gt;
но основные вещи делать действительно легко.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-34-59.000.jpg|frame|right|Как вы сводите к минимуму конфликты слияний?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Одна из характеристик централизованных систем — это то, что именно&lt;br /&gt;
тот разработчик, который должен коммитить, обязан также&lt;br /&gt;
провести слияние. Как с этим в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?&lt;br /&gt;
И как вы сводите к минимуму конфликты слияний?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Спасибо, что спросили меня об этом!&lt;br /&gt;
Это не вас ли я просил задать этот вопрос?&lt;br /&gt;
&lt;br /&gt;
Одно из самых приятных свойств &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; это то, что он реально проще&lt;br /&gt;
разбирается со слиянием, чем все остальные системы.&lt;br /&gt;
Объединение ветвей в CVS происходит крайне мучительно, просто невыносимо.&lt;br /&gt;
&lt;br /&gt;
По моим подсчетам ядро Линукса — это на самом деле один из крупнейших&lt;br /&gt;
проектов с открытыми исходниками.&lt;br /&gt;
У нас &amp;lt;tt&amp;gt;22 000&amp;lt;/tt&amp;gt; файлов.&lt;br /&gt;
&lt;br /&gt;
Мы используем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; уже два года.&lt;br /&gt;
В течение этих двух лет у нас было в среднем &amp;lt;tt&amp;gt;4.5&amp;lt;/tt&amp;gt; слияния в день!&lt;br /&gt;
&lt;br /&gt;
Если бы слияние было бы сложным, то точно пользовались чем-то другим.&lt;br /&gt;
Так что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает слияния простыми.&lt;br /&gt;
&lt;br /&gt;
Но у вас неизбежно возникнут разборки между какими-нибудь двумя программистами,&lt;br /&gt;
из тех, кто шлет мне просьбы «пожалуйста, возьми мой код»,&lt;br /&gt;
а я беру первый попавшийся вариант, просто потому что его заявка оказалась&lt;br /&gt;
раньше в моем почтовом ящике.&lt;br /&gt;
&lt;br /&gt;
А другой чел поменял код так сильно и его версия настолько конфликтует с остальными&lt;br /&gt;
(такое бывает, правда не очень часто),&lt;br /&gt;
что я говорю: «Я мог бы это пофиксить, но мне лень».&lt;br /&gt;
В их области я не программирую — это не моя сфера интересов,&lt;br /&gt;
это сетевые технологии или что-то в этом духе,&lt;br /&gt;
я просто не могу разобраться и оценить этот код, не могу его тестировать,&lt;br /&gt;
так что просить меня разобраться с этим слиянием — просто глупо,&lt;br /&gt;
так дела не делаются.&lt;br /&gt;
&lt;br /&gt;
Ага, комп с Виндой опять погас.&lt;br /&gt;
&lt;br /&gt;
Итак, помните, что распределенная модель означает, что «особенных» нет.&lt;br /&gt;
&lt;br /&gt;
Поэтому вместо того чтобы самому разбираться со слиянием,&lt;br /&gt;
я вытаскиваю первое дерево файлов, в котором не было никаких проблем,&lt;br /&gt;
и говорю второму участнику:&lt;br /&gt;
«Эй, я пробовал подгрузить твой код, но там была туча конфликтов со слиянием,&lt;br /&gt;
совсем не тривиальных, так что я решил, что тебе стоит разобраться с этим самому».&lt;br /&gt;
&lt;br /&gt;
И они разбираются.&lt;br /&gt;
Они знают, что делать, потому что это их изменения.&lt;br /&gt;
&lt;br /&gt;
Итак, они объединяют изменения и, вероятно, считают меня дебилом,&lt;br /&gt;
потому что слияние для них так просто и очевидно,&lt;br /&gt;
что я должен был принять их код с самого начала.&lt;br /&gt;
&lt;br /&gt;
Зато они сами объединяют изменения, обновляют свое дерево файлов и говорят мне:&lt;br /&gt;
«Эй, теперь можешь забирать рабочий вариант», и я загружаю себе их версию.&lt;br /&gt;
Они прекрасно сделали всю работу за меня.&lt;br /&gt;
&lt;br /&gt;
В этом-то и есть вся прелесть: ''они все сделали за меня''.&lt;br /&gt;
А мне достаются честь и хвала!&lt;br /&gt;
Далее мне просто нужно подсчитать третью составляющую — ''PROFIT!!!''&lt;br /&gt;
&lt;br /&gt;
Все это аспект, естественным образом возникающий в распределенных системах,&lt;br /&gt;
это не особенность &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;. Да, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; справляется со слияниями гораздо проще, чем все остальные,&lt;br /&gt;
но это свойство вытекает из самой распределенной модели.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-38-02.885.jpg |frame|right|…зачем вам так нужно иметь эту распределенную систему?]]&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} Слушай, я не совсем понимаю, зачем вам так нужно&lt;br /&gt;
иметь эту распределенную систему…&lt;br /&gt;
Ну да, вроде получаешь кучу преимуществ, по крайней мере&lt;br /&gt;
для коммерческой разработки, да и для разработки open-source наверно очень полезно,&lt;br /&gt;
поскольку каждый может работать сам по себе,&lt;br /&gt;
но, когда у тебя централизованная СУВ, общая структура директорий и файлов,&lt;br /&gt;
не окажется ли, что централизованная система с дешевыми ветками&lt;br /&gt;
даст тот же самый эффект?&lt;br /&gt;
Или такое просто невозможно?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Я готов поспорить, что централизованные системы не могут работать нормально,&lt;br /&gt;
но если у вас корпоративная среда с жестким контролем, то, действительно,&lt;br /&gt;
централизованные системы работают лучше,&lt;br /&gt;
и, безусловно, правда в том, что люди используют централизованные системы&lt;br /&gt;
в течение последних 35 лет.&lt;br /&gt;
И никто не будет спорить с тем, что централизованные системы не могут работать.&lt;br /&gt;
&lt;br /&gt;
Они не могут работать так же хорошо, как и распределенные системы!&lt;br /&gt;
&lt;br /&gt;
Одна из проблем состоит в том, что у централизованных систем неизбежны проблемы&lt;br /&gt;
при совместной работе групп из разных мест.&lt;br /&gt;
&lt;br /&gt;
Как правило, они отлично работают если у вас лежит толстенное оптоволокно,&lt;br /&gt;
и я думаю, что у Гугла наверняка есть своя достойная внутренняя сеть,&lt;br /&gt;
так что эта проблема для вас, в отличие от остальных, не настолько критична,&lt;br /&gt;
но, поверьте мне, когда вам не нужно лезть в сеть за каждым файлом,&lt;br /&gt;
это существенно улучшает производительность.&lt;br /&gt;
&lt;br /&gt;
Эээ… мда, я не могу показать вам демонстрацию,&lt;br /&gt;
да и не так уж она интересна,&lt;br /&gt;
но это ноутбук 4-5-летней давности.&lt;br /&gt;
Что-то типа ''Pentium-M 1.6 GHz''.&lt;br /&gt;
&lt;br /&gt;
Я мог бы показать вам, что полный &amp;lt;tt&amp;gt;diff&amp;lt;/tt&amp;gt; проекта Linux Kernel&lt;br /&gt;
на этом ноуте займет чуть больше секунды.&lt;br /&gt;
&lt;br /&gt;
На моей основной машине, это уже будет меньше десятой доли секунды.&lt;br /&gt;
&lt;br /&gt;
Это прирост производительности, которого вы никогда не добьетесь,&lt;br /&gt;
работая по сети.&lt;br /&gt;
&lt;br /&gt;
Как только вы стали использовать сеть, хоть для пары пакетов,&lt;br /&gt;
вы уже впустую потратили производительность.&lt;br /&gt;
&lt;br /&gt;
Так что если у вас децентрализованная система, и вы привыкли&lt;br /&gt;
делать &amp;lt;tt&amp;gt;commit&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;diff&amp;lt;/tt&amp;gt; всего дерева исходников за 30 секунд,&lt;br /&gt;
то, может быть, 30 секунд вам не покажутся злом.&lt;br /&gt;
&lt;br /&gt;
Но поверьте, когда вы привыкли делать это за одну десятую секунды,&lt;br /&gt;
30 секунд — это полный отстой.&lt;br /&gt;
&lt;br /&gt;
Так что, даже если вас супер сеть, всегда есть проблемы с производительностью.&lt;br /&gt;
Не говоря уж о том, что у большинства и в помине нету хорошей сети.&lt;br /&gt;
&lt;br /&gt;
Другая заморочка — это ветки. Даже если вы&lt;br /&gt;
очень эффективно реализовали ветвления, сам факт того, что вы создаете&lt;br /&gt;
ветки и каждый может их увидеть, потому что все централизовано, означает,&lt;br /&gt;
что волей-неволей вам не захочется делать никаких веток.&lt;br /&gt;
&lt;br /&gt;
У вас будут проблемы с пространством имен.&lt;br /&gt;
&lt;br /&gt;
Как вы назовете свою ветку?&lt;br /&gt;
Вы назовете ее «test»?&lt;br /&gt;
Ага-ага, уже есть 5000 других веток,&lt;br /&gt;
названных «test1», «test2», … «test5000», так что вам теперь придется&lt;br /&gt;
выдумывать новые правила именования&lt;br /&gt;
ваших веток, потому что у вас централизованная система&lt;br /&gt;
с централизованным пространством имен у ветвей,&lt;br /&gt;
что совершенно неизбежно при работе с централизованной системой.&lt;br /&gt;
&lt;br /&gt;
Как же это работает в распределенной среде разработки?&lt;br /&gt;
&lt;br /&gt;
Вы называете свою ветку «test», и все!&lt;br /&gt;
Ну на самом деле, вам не следовало бы ее так называть, веткам нужно давать имена&lt;br /&gt;
согласно их функциональности; называйте их кратко, благозвучно&lt;br /&gt;
и конкретно — что эта ветвь делает.&lt;br /&gt;
&lt;br /&gt;
Git дает вам по умолчанию одну ветку под названием «master»:&lt;br /&gt;
красиво, коротко и ясно — это ваш основной ствол.&lt;br /&gt;
&lt;br /&gt;
Но вы можете создать ветку под названием&lt;br /&gt;
«experimental-feature-x» — и все будет понятно.&lt;br /&gt;
&lt;br /&gt;
Но в централизованной среде вы просто не сможете так сделать.&lt;br /&gt;
Вы не можете назвать ветку «experimental-feature-x».&lt;br /&gt;
Вы должны придумывать тупые, идиотские названия.&lt;br /&gt;
&lt;br /&gt;
Я работал в компании, у которой были прекрасные скрипты для CVS,&lt;br /&gt;
настолько прекрасные, насколько это возможно, они помогали создавать ветки.&lt;br /&gt;
Вы даже могли создать ветку с помощью одной простой команды,&lt;br /&gt;
это не занимало много времени — система фиксировала имя вашей ветки,&lt;br /&gt;
добавляя к ней число.&lt;br /&gt;
Вы определяете базовое имя, говоря:&lt;br /&gt;
«это моя ветка, она делает то-то и то-то», и система называет&lt;br /&gt;
вашу ветвь: «то-то-и-то-то—56».&lt;br /&gt;
&lt;br /&gt;
И система добавит тег/закладку там, где вы начали разрабатывать эту ветку,&lt;br /&gt;
потому что в CVS вам приходится это делать…&lt;br /&gt;
Это занимало некоторое время, но работало.&lt;br /&gt;
&lt;br /&gt;
Вы можете так извращаться в централизованных системах, но вам не нужно этого делать!&lt;br /&gt;
&lt;br /&gt;
Ваша система децентрализована, она просто работает.&lt;br /&gt;
&lt;br /&gt;
Именно так все и должно работать.&lt;br /&gt;
&lt;br /&gt;
Итак, я ничего не утверждаю, я не собираюсь вас убеждать переходить&lt;br /&gt;
на децентрализованную систему,&lt;br /&gt;
я просто констатирую факт: «Вы тупые уроды»!&lt;br /&gt;
&lt;br /&gt;
Таков расклад.&lt;br /&gt;
&lt;br /&gt;
Как бы то ни было, перейдем к слайду «Performance».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-43-15.833.jpg|frame|right|…сколько файлов осилит &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} Могу я задать вопрос?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Давай.&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} На самом деле, два вопроса.&lt;br /&gt;
Первый: сколько файлов осилит &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?&lt;br /&gt;
а второй, представьте, что у вас здоровенная древовидная структура файлов в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
возможно ли извлечь только часть этой структуры?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Отличные вопросы.&lt;br /&gt;
&lt;br /&gt;
На самом деле, эти вопросы цепляют совсем другую тему,&lt;br /&gt;
хотя они связаны с производительностью.&lt;br /&gt;
&lt;br /&gt;
Одно из особенных свойств &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; — отслеживание изменений всего содержимого,&lt;br /&gt;
и это отличает &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; даже от [[EnPedia:Mercurial_(software)|Mercurial]], несмотря на то, что они очень похожи.&lt;br /&gt;
&lt;br /&gt;
Он никогда не отслеживает отдельный файл.&lt;br /&gt;
Вы не можете прослеживать изменения файла в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ну, вы можете проследить изменения проекта, в котором один единственный файл.&lt;br /&gt;
Если в вашем проекте один файл, то у вас все получится,&lt;br /&gt;
но если вы отслеживаете изменения в десяти тысячах файлов, то &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; никогда не будет&lt;br /&gt;
возиться с ними по отдельности.&lt;br /&gt;
 &lt;br /&gt;
Git думает, что все вокруг — это единый проект.&lt;br /&gt;
Вся история в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; основана на истории проекта целиком.&lt;br /&gt;
&lt;br /&gt;
Отсюда — важные следствия для производительности.&lt;br /&gt;
&lt;br /&gt;
Когда вы используете CVS, вполне нормально, хотя и глупо,&lt;br /&gt;
иметь один здоровенный репозиторий с миллионом файлов внутри.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в конце дня, поскольку CVS думает о каждом&lt;br /&gt;
из миллиона файлов по отдельности,&lt;br /&gt;
вы можете попросить CVS обновить только один единственный файл —&lt;br /&gt;
все это в рамках CVS-идеологии.&lt;br /&gt;
И это верно для множества других моментов.&lt;br /&gt;
&lt;br /&gt;
Точно также работает и BitKeeper, и это является одной из его ошибок.&lt;br /&gt;
&lt;br /&gt;
Проблема мышления в «концепции наблюдения за каждым файлом по отдельности»&lt;br /&gt;
возникает очень часто, особенно, если вы разработчик высокого уровня (как я).&lt;br /&gt;
У меня 22 тысячи файлов, и мне пофигу, что происходит с одним из них.&lt;br /&gt;
Возможно, я буду следить за подмножеством из тысячи файлов,&lt;br /&gt;
например, коллекцией файлов по подсистеме USB.&lt;br /&gt;
Но я никогда не беспокоюсь о каком-то отдельном файле.&lt;br /&gt;
&lt;br /&gt;
Поэтому &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; следит за всем, как за коллекцией файлов,&lt;br /&gt;
и если вы попросите историю конкретного файла,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; буквально начнет с глобальной истории и упростит ее.&lt;br /&gt;
Это очень эффективная система, вам даже в голову не придет что это так,&lt;br /&gt;
но в действительности, когда вы пытаетесь следить за миллионом файлов&lt;br /&gt;
в репозитории, а потом просите историю конкретного файла — это очень тормозит систему.&lt;br /&gt;
Таким образом, свойства масштабирования у &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сильно отличаются от других систем,&lt;br /&gt;
благодаря этой фундаментальной особенности.&lt;br /&gt;
&lt;br /&gt;
Мы работали с большими репозиториями.&lt;br /&gt;
Мы импортировали историю проекта KDE из SVN, может быть, не всего,&lt;br /&gt;
но уж &amp;lt;m&amp;gt;\frac34&amp;lt;/m&amp;gt; точно.&lt;br /&gt;
И KDEнутые … эээ… ''Я не должен так их называть… Я не буду, поверьте, мне нравится KDE.''&lt;br /&gt;
&lt;br /&gt;
Но они засунули все компоненты в один репозиторий!&lt;br /&gt;
Не слишком умно.&lt;br /&gt;
Получилось так, что тот репозиторий, который, думаю, весил 8 Гб под CVS,&lt;br /&gt;
в SVN разбух еще в три раза!&lt;br /&gt;
Ну может там было меньше 8 Гб под CVS, но он был действительно огромным.&lt;br /&gt;
Точно больше 4 Гб.&lt;br /&gt;
Git же сжал это безобразие до где-то 1.3 Гб.&lt;br /&gt;
&lt;br /&gt;
Итак, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; очень эффективен в обработке этого проекта,&lt;br /&gt;
почти все работает отлично, но не все и не всегда.&lt;br /&gt;
&lt;br /&gt;
Система не заработает хорошо, если вы поместите миллион файлов&lt;br /&gt;
в один репозиторий при начальном клонировании.&lt;br /&gt;
Когда вы его запрашиваете, вы получаете его целиком.&lt;br /&gt;
Вы сваливаете все в один репозиторий, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; думает, что это один обьект.&lt;br /&gt;
Не делайте так.&lt;br /&gt;
&lt;br /&gt;
Если у вас есть множество компонентов, размещайте их в отдельные репозитории,&lt;br /&gt;
вы можете даже создать суперпроект, в котором содержатся указатели&lt;br /&gt;
на другие проекты, при этом что-то теряется в пользовательском интерфейсе,&lt;br /&gt;
но вы храните разные проекты по отдельности.&lt;br /&gt;
Тогда вы избежите проблемы «получения всего сразу».&lt;br /&gt;
Потому что с &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вам придется получить все и сразу.&lt;br /&gt;
&lt;br /&gt;
'''Из зала''':&lt;br /&gt;
{{question}} Как насчет разделяемого кода?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Если они все «расшарили» свой код, что вы можете сделать с помощью &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
если у вас действительно много «расшаренных» файлов,&lt;br /&gt;
то поскольку &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; внутри использует «файловую систему идентифицируемую содержимым»,&lt;br /&gt;
то если существуют одинаковые по содержанию файлы,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; будет использовать для них в точности один и тот же объект.&lt;br /&gt;
И сохранит вам тонны свободного места.&lt;br /&gt;
&lt;br /&gt;
И у вас могут быть эти расшаренные объекты, и в тоже время&lt;br /&gt;
они могут храниться у вас как отдельные сущности.&lt;br /&gt;
Вы также можете хранить их в раздельных репозиториях,&lt;br /&gt;
но лежащих на одной разделяемой файловой системе.&lt;br /&gt;
Вы можете это сделать!&lt;br /&gt;
 &lt;br /&gt;
Если у вас действительно есть расшаренный код, ну например, &lt;br /&gt;
библиотека, которая используется в пяти разных местах,&lt;br /&gt;
то если вам стоить использовать поддержку супер-проекта, где у вас есть&lt;br /&gt;
один репозиторий &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, который просто отслеживает остальные репозитории &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
(и он тоже может содержать например, разделяемую инфраструктуру сборки),&lt;br /&gt;
но при этом индивидуальные части остаются индивидуальными.&lt;br /&gt;
 &lt;br /&gt;
Это похоже на модули CVS.&lt;br /&gt;
В CVS модули не до конца индивидуальны, но это потому,&lt;br /&gt;
что в CVS каталог — это вещь, которая всегда сама по себе,&lt;br /&gt;
так что модуль CVS — это комбинация «каталожности» и их отслеживания,&lt;br /&gt;
но в целом вы можете думать об этом как о модулях CVS.&lt;br /&gt;
&lt;br /&gt;
В общем, мы поддерживаем такую возможность, но вынужден согласиться,&lt;br /&gt;
что код довольно сырой, и это единственная область, где&lt;br /&gt;
наши пользовательские интерфейсы определенно отстают.&lt;br /&gt;
&lt;br /&gt;
Возможно, я забыл ответить на какую-то часть вашего вопроса.&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-49-34.467.jpg|frame|right|Можно ли извлечь из репозитория только часть файлов?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Можно ли извлечь из репозитория только часть файлов, а не целый репозиторий?&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Вы можете экспортировать тарболы или отдельные файлы,&lt;br /&gt;
вы можете переписать всю историю, сказав&lt;br /&gt;
«Я хочу новую версию этого репозитория, которая содержит только эту часть»,&lt;br /&gt;
вы можете это сделать, это довольно дорогая операция,&lt;br /&gt;
это что-то типа, импорта старого репозиторий в новый огромный репозиторий,&lt;br /&gt;
который потом делиться на меньшие части.&lt;br /&gt;
Вы можете это сделать, но я подчеркиваю, что следует этого избегать.&lt;br /&gt;
&lt;br /&gt;
Неверно, что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; не может обрабатывать большие проекты,&lt;br /&gt;
просто производительность будет не так хороша,&lt;br /&gt;
а вы будете иметь проблемы, которых можно было бы избежать.&lt;br /&gt;
&lt;br /&gt;
Так что я пропускаю этот вопрос и возвращаюсь к теме производительности.&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
&lt;br /&gt;
Одна из вещей, которую я хочу сказать по поводу производительности,&lt;br /&gt;
это то, что, похоже, огромное количество людей, кажется, думают, что&lt;br /&gt;
производительность это «как делать то же самое, но быстрее»,&lt;br /&gt;
а это неправда.&lt;br /&gt;
&lt;br /&gt;
''[показывает слайд «Производительность».]''&lt;br /&gt;
[[Image:Linus-git-googletalk.0-51-10.996.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
Производительность — в первую очередь не это.&lt;br /&gt;
&lt;br /&gt;
Если вы можете делать что-то действительно быстро,&lt;br /&gt;
действительно хорошо, люди начнут использовать это по-другому.&lt;br /&gt;
&lt;br /&gt;
Одна из вещей, в которой я хочу вас убедить — это&lt;br /&gt;
то, что слияния происходят очень-очень быстро, потому что&lt;br /&gt;
я хочу, чтобы люди сливали как можно раньше и чаще,&lt;br /&gt;
потому что тогда это легче делать.&lt;br /&gt;
Если вы объединяете изменения каждый день, вы никогда не попадете&lt;br /&gt;
в неожиданную ситуацию с тяжелыми трудноразрешимыми конфликтами.&lt;br /&gt;
&lt;br /&gt;
Итак, если вы действительно легко делаете ветвление и слияние,&lt;br /&gt;
вы избегаете целого класса проблем, которые в противном случае&lt;br /&gt;
требуют много-много времени, чтобы их избежать.&lt;br /&gt;
&lt;br /&gt;
Например, давайте вернемся к одной из вещей, где,&lt;br /&gt;
как мне кажется, разработчики Subversion показали себя полными идиотами.&lt;br /&gt;
&lt;br /&gt;
Жестко сказано, правда?&lt;br /&gt;
&lt;br /&gt;
Наверняка несколько из них сейчас в этой комнате.&lt;br /&gt;
&lt;br /&gt;
Ну вы и тупые!&lt;br /&gt;
&lt;br /&gt;
''[смех]''&lt;br /&gt;
&lt;br /&gt;
Например, Subversion очень шумно хвалится, что&lt;br /&gt;
они исправили CVS, сделав ветвления дешевыми.&lt;br /&gt;
Это есть на их главной странице, где они вроде говорят,&lt;br /&gt;
что ветвление в SVN требует ''O(1)'' операций,&lt;br /&gt;
и что можно сделать дешевых ветвей столько, сколько хотите.&lt;br /&gt;
&lt;br /&gt;
Неважно, что ''O(1)'', мне кажется, на самом деле имеет&lt;br /&gt;
довольно большое ''O'', но даже если ветвление занимает микросекунду,&lt;br /&gt;
кого это волнует?&lt;br /&gt;
&lt;br /&gt;
Вы меряете не то, что нужно.&lt;br /&gt;
&lt;br /&gt;
Ветки полностью бесполезны, если Вы не объединяете их,&lt;br /&gt;
а CVS не может объединить вообще ничего.&lt;br /&gt;
Вы можете слить изменения однажды,&lt;br /&gt;
но тогда CVS забывает то, что вы сделали, и вы никогда не&lt;br /&gt;
сможете объединять снова, не получая адские конфликты.&lt;br /&gt;
Слияния в Subversion — полная беда.&lt;br /&gt;
Разработчики Subversion отчасти признают это, и у них есть некий замысел,&lt;br /&gt;
но эти идеи тоже фигня.&lt;br /&gt;
&lt;br /&gt;
Невероятно, насколько эти люди глупы.&lt;br /&gt;
Они все время смотрели на проблему неверно.&lt;br /&gt;
Проблема-то не в ветвлении, а в слиянии!&lt;br /&gt;
А нормальное слияние они так за пять лет и не сделали.&lt;br /&gt;
Вот что грустно.&lt;br /&gt;
&lt;br /&gt;
Итак, быстродействие важно, но надо смотреть в корень проблемы.&lt;br /&gt;
&lt;br /&gt;
Затраты на то, чтобы сделать ветку под &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
буквально заключаются в создании 41-байтного файла.&lt;br /&gt;
Ну насколько это быстро, как думаете?&lt;br /&gt;
Не думаю, что вы даже сможете это измерить.&lt;br /&gt;
Вы можете, в общем, если вы используете Windows, вероятно&lt;br /&gt;
вы можете измерить это, потому что… [''аудитория: смех'']&lt;br /&gt;
но как бы то ни было, это так быстро, что реально вы&lt;br /&gt;
не сможете это измерить.&lt;br /&gt;
И это создает ветку.&lt;br /&gt;
Но никого это не волнует, это-то не проблема.&lt;br /&gt;
&lt;br /&gt;
Единственное, что важно, это как быстро вы можете сливать изменения.&lt;br /&gt;
В &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вы можете объединить… я сливаю изменения в 22 тысячах файлов несколько раз в день, и я недоволен,&lt;br /&gt;
если объединение занимает более пяти секунд,&lt;br /&gt;
и все эти пять секунд загружаются в основном уходят на загрузку ''diffs'', ладно, не ''diffs'',&lt;br /&gt;
а дельты между двумя деревьями, а само объединение занимает менее&lt;br /&gt;
чем полсекунды.&lt;br /&gt;
&lt;br /&gt;
И я не должен думать об этом.&lt;br /&gt;
&lt;br /&gt;
Вот что длится дольше чем слияние, это то, что после каждого слияния,&lt;br /&gt;
по умолчанию &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сделает &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt;&lt;br /&gt;
всего, что изменилось в результате объединения, потому что&lt;br /&gt;
мне это важно.&lt;br /&gt;
Когда я вливаю чьи-то изменения, я им доверяю, но с другой стороны,&lt;br /&gt;
вдруг они уже забросили свои лекарства?&lt;br /&gt;
Так что я доверяю им, да, но будем говорить начистоту — может&lt;br /&gt;
они были в порядке вчера, но сегодня был не их день…&lt;br /&gt;
Так что для контроля я делаю &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; тоже делает &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; по умолчанию,&lt;br /&gt;
хотя вы конечно можете для скорости его отключить, но лучше не надо,&lt;br /&gt;
&amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; по-любому быстр, и обычно занимает…, ну если большое слияние,&lt;br /&gt;
обычно занимает секунду-другую.&lt;br /&gt;
Поскольку создание ''diff'' и фактически подсчет статистики о том, сколько&lt;br /&gt;
строк изменилось — намного более затратная операция,&lt;br /&gt;
чем выполнение непосредственно слияния.&lt;br /&gt;
&lt;br /&gt;
Это вид быстродействия, который фактически изменяет ваш стиль работы.&lt;br /&gt;
Это не улучшения быстродействия тех же действий, а возможность работать&lt;br /&gt;
совершенно по-другому.&lt;br /&gt;
Вот что на самом деле означает производительность, и вот почему&lt;br /&gt;
вам не стоить смотреть ни на что, кроме &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hg (Mercurial) довольно хорош, но &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; лучше.&lt;br /&gt;
&lt;br /&gt;
Я думаю, что у меня заканчивается время, мы посмотрим, есть ли еще …,&lt;br /&gt;
… о, ОК это все еще интересно.&lt;br /&gt;
&lt;br /&gt;
Мы еще не добрались до части про реализацию,&lt;br /&gt;
но не беспокойтесь, я сейчас я много об этом расскажу:&lt;br /&gt;
реализация очень проста.&lt;br /&gt;
&lt;br /&gt;
Код и структуры данных очень-очень-очень просты.&lt;br /&gt;
Если вы посмотрите на исходный текст и поймете,&lt;br /&gt;
что там всего где-то 80000 строк, в основном на Cи,&lt;br /&gt;
ну на таком Си, на котором пишу я — большинство его не понимает,&lt;br /&gt;
но зато я комментирую код.&lt;br /&gt;
&lt;br /&gt;
Исходный код может порой выглядеть сложным,&lt;br /&gt;
потому что мы очень печемся о производительности, особенно я.&lt;br /&gt;
Я действительно забочусь об этом, и иногда заставляю вещи работать сильно быстрее,&lt;br /&gt;
но при этом приходится использовать более сложные алгоритмы,&lt;br /&gt;
чем последовательная проверка файлов по очереди.&lt;br /&gt;
Когда вы делаете слияние 22 тысяч файлов, вы не хотите проверять по одному файлу,&lt;br /&gt;
вы хотите посмотреть все дерево сразу и сказать:&lt;br /&gt;
«А они же одинаковые, я не должен ничего делать».&lt;br /&gt;
В общем, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает все такие штуки, и все это несколько раздувает объем кода,&lt;br /&gt;
ибо по-уму все это сделать непросто, но основы все же очень и очень просты.&lt;br /&gt;
&lt;br /&gt;
И одна из этих основ, это аспект безопасности и надежности.&lt;br /&gt;
&lt;br /&gt;
''Показывает слайд:''&lt;br /&gt;
[[Image:linus-git-googletalk.0-56-39.330.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Когда &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; отслеживает ваш проект, мы сжимаем каждый блок данных,&lt;br /&gt;
вычисляя дельту (различия) по отношению ко всем другим блокам,&lt;br /&gt;
кроме того мы вычисляем SHA-1 хеш, который проверяется при&lt;br /&gt;
необходимости достать этот блок.&lt;br /&gt;
&lt;br /&gt;
Если у вас побился диск или память, или что-то еще в этом роде — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; об этом сообщит.&lt;br /&gt;
Это даже не вопрос. Это безусловная и безоговорочная гарантия.&lt;br /&gt;
&lt;br /&gt;
У вас могут быть люди, пытающиеся навредить.&lt;br /&gt;
У них не выйдет.&lt;br /&gt;
&lt;br /&gt;
Вам нужно точно знать 20 байтов 160-битного SHA-1 хеша от верхушки вашего дерева,&lt;br /&gt;
и если вы их знаете, вы сможете доверять вашему дереву сверху донизу,&lt;br /&gt;
всей истории целиком.&lt;br /&gt;
У вас может быть десять лет истории проекта с сотней тысяч файлов,&lt;br /&gt;
миллионами ревизий, но вы сможете доверять любой части любой ревизии.&lt;br /&gt;
Потому что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; такой надежный, и все его основные структуры данных&lt;br /&gt;
очень-очень просты.&lt;br /&gt;
&lt;br /&gt;
Да, мы проверяем контрольные суммы.&lt;br /&gt;
Но мы не считаем ''слабую'' контрольную сумму, как у некоторых UDP пакетов,&lt;br /&gt;
то есть 16-битную сумму всех байтов.&lt;br /&gt;
Мы проверяем контрольные суммы, которые считаются криптографически стойкими.&lt;br /&gt;
&lt;br /&gt;
Никто не может взломать SHA-1, но дело в том, что для &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
SHA-1 это не функционал информационной безопасности,&lt;br /&gt;
а просто проверка целостности.&lt;br /&gt;
Безопасность там отдельно.&lt;br /&gt;
&lt;br /&gt;
А то полно народу думают, что раз &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; использует SHA-1,&lt;br /&gt;
а SHA-1 используется во всяком криптографическом софте,&lt;br /&gt;
то наверно это крутая фича в безопасности.&lt;br /&gt;
Так вот, ничего тут нет общего с безопасностью,&lt;br /&gt;
это просто самый лучший хеш из имеющихся.&lt;br /&gt;
&lt;br /&gt;
Хороший хеш дает гарантию целостности данных, а также&lt;br /&gt;
кучу других возможностей, например, то, что когда мы хешируем обьекты,&lt;br /&gt;
мы знаем, что получившийся хеш будет иметь добротное, годное распределение,&lt;br /&gt;
и нам не нужно беспокоится о разных проблемах с ним.&lt;br /&gt;
С точки зрения реализации, это означает, что мы считаем, что&lt;br /&gt;
хеш настолько хорош, что мы можем использовать этот алгоритм хеширования,&lt;br /&gt;
и считать, что у нас нет плохих случаев (коллизий).&lt;br /&gt;
&lt;br /&gt;
Ну то есть, есть тут некоторые основания и с криптографической стороны,&lt;br /&gt;
но все это только про гарантии целостности ваших данных.&lt;br /&gt;
Я вам гарантирую, что если вы положите ваши данные в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
спустя пять лет, даже если вы сконвертировали их с вашего&lt;br /&gt;
винчестера на какой нибудь DVD, или что там будет вместо него, &lt;br /&gt;
вы сможете проверить ваши данные и вернуть их назад в том же состоянии,&lt;br /&gt;
в котором вы поместили их в систему.&lt;br /&gt;
Именно этого вы и должны ждать от любой системы контроля версий.&lt;br /&gt;
&lt;br /&gt;
Одна из причин, по которой я так агитирую за это, состоит в том,&lt;br /&gt;
что у нас был случай со взломом одного из сайтов BitKeeper’а,&lt;br /&gt;
когда народ пытался испортить репозиторий с исходниками ядра,&lt;br /&gt;
а BitKeeper отловил эту попытку.&lt;br /&gt;
Но BitKeeper не имеет по настоящему крутого хеша,&lt;br /&gt;
думаю, там простейший 16-CRC код, или что-то типа этого.&lt;br /&gt;
 &lt;br /&gt;
В принципе, это достаточно, чтобы заметить неуклюжую попытку подмены,&lt;br /&gt;
криптографически оно ненадежно, но на практике атаки сделать уже непросто,&lt;br /&gt;
так что тогда атака была немедленно пресечена.&lt;br /&gt;
&lt;br /&gt;
Но после того, как такое случилось,&lt;br /&gt;
когда ты уже погорел на этом,&lt;br /&gt;
уже не хочется попасться в эту же ловушку снова.&lt;br /&gt;
&lt;br /&gt;
Нет, ну может ваши проекты и не очень важные, но мои проекты точно важны, и поэтому&lt;br /&gt;
я об этом так пекусь.&lt;br /&gt;
&lt;br /&gt;
Это — также одна из причин, … вернемся на секунду к концепции распределенности …,&lt;br /&gt;
ну, например, вы делаете ваш проект [[EnPedia:Google Code|Google code]],&lt;br /&gt;
где можно держать исходники в ваших репозитариях,&lt;br /&gt;
так вот — я бы никогда не доверил Google хранить и поддерживать мои исходники.&lt;br /&gt;
Извините, но вы еще не заслужили моего доверия.&lt;br /&gt;
&lt;br /&gt;
Причина, по которой я предпочитаю распределенные системы,&lt;br /&gt;
состоит в том, что я могу держать свой исходный текст позади&lt;br /&gt;
трех брандмауэров на системе, которая не позволяет даже по &amp;lt;tt&amp;gt;ssh&amp;lt;/tt&amp;gt; войти.&lt;br /&gt;
Вот здесь я не могу читать свою электронную почту, потому что моя почта&lt;br /&gt;
идет на мою машину и единственный путь, как я могу попасть на мою машину&lt;br /&gt;
— это когда я физически нахожусь в той сети.&lt;br /&gt;
&lt;br /&gt;
Может я конечно и полностью свихнулся, может только слегка сдвинулся,&lt;br /&gt;
и я забочусь о безопасности больше, чем большинство окружающих.&lt;br /&gt;
Да и вообще, чтобы я дал эталонную копию репозитария исходников,&lt;br /&gt;
о котором я так пекусь, куда-то на сторону?&lt;br /&gt;
Абсурд!&lt;br /&gt;
 &lt;br /&gt;
Даже Гуглу не дам.&lt;br /&gt;
Никогда в жизни, хоть ты меня режь.&lt;br /&gt;
&lt;br /&gt;
Я позволю Google держать копию репозитория, но&lt;br /&gt;
хочу чтобы было что-то, про что я знаю точно, что никто это не трогал.&lt;br /&gt;
&lt;br /&gt;
Кстати, я не такой уж и крутой сисадмин, так что сбой на винте&lt;br /&gt;
для меня определенно будет проблемой, так как бэкапами я не заморачиваюсь.&lt;br /&gt;
Но все будет в порядке, если я смогу загрузить обратно данные из нескольких&lt;br /&gt;
доверенных источников. Я смогу их сравнить друг с другом, это реально просто,&lt;br /&gt;
я смогу сверить их хеши с теми самыми 20 байтами, о которых я очень-очень&lt;br /&gt;
заботился — надеюсь, в нескольких местах они останутся.&lt;br /&gt;
&lt;br /&gt;
20 байтов отследить легче, чем 180 МБ.&lt;br /&gt;
&lt;br /&gt;
И очень маловероятно, что побьются именно эти 20 байтов.&lt;br /&gt;
&lt;br /&gt;
И если у меня есть эти 20 байтов, я могу загрузить &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;-репозитрий даже&lt;br /&gt;
из совершенно «левого» источника, и могу гарантировать, что они не сделали с ним ничего плохого.&lt;br /&gt;
&lt;br /&gt;
Ваш проект [Google Code] — хостинг репозитариев для народа — крутое и благое дело,&lt;br /&gt;
вот только вы неправильно делаете, если используете для него Subversion.&lt;br /&gt;
Из-за вас люди ночами спать спокойно не будут!&lt;br /&gt;
&lt;br /&gt;
Конечно, если вы делаете это для 70 … , сколько там проектов,&lt;br /&gt;
75 тысяч?&lt;br /&gt;
Большинство из них довольно мелкие и ерундовые, так что все в порядке.&lt;br /&gt;
Но если бы вы все сделали правильно, люди бы чувствовали себя получше.&lt;br /&gt;
&lt;br /&gt;
У меня есть еще несколько слайдов,&lt;br /&gt;
Но я думаю, что мы уже превысили лимит времени,&lt;br /&gt;
и не хотелось бы грузить вас их показом,&lt;br /&gt;
я думаю, они не очень интересны.&lt;br /&gt;
&lt;br /&gt;
== Content Management ==&lt;br /&gt;
&lt;br /&gt;
Я уже немного говорил на тему «Полный целостный проект vs. Отдельные файлы»,&lt;br /&gt;
и что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; отслеживает именно полный проект.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.1-03-18.642.jpg|framed|right| «Это гораздо больше чем случайный набор файлов»]]&lt;br /&gt;
&lt;br /&gt;
Ну тут на слайде единственный пример с вызовом из командной строки,&lt;br /&gt;
''gitk'' — это GUI вьювер истории проекта под &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
это скрипт на tcl/tk для просмотра всей той информации, которую &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;&lt;br /&gt;
действительно хорошо показывает, а вот это пример командной строки, которую я использую как&lt;br /&gt;
«мейнтейнер» высшего уровня.&lt;br /&gt;
&lt;br /&gt;
Я хочу просто спросить «что изменилось с некоторой версии», или быть может «некоторой даты».&lt;br /&gt;
Я могу легко выяснить, что поменялось «в этих двух каталогах» или&lt;br /&gt;
«в этих двух каталогах и этом файле»,&lt;br /&gt;
и мне будет показана полная история, относящаяся к этой части репозитория.&lt;br /&gt;
&lt;br /&gt;
Это более затратно, чем просто посчитать полную историю всего проекта.&lt;br /&gt;
Если бы мой ноутбук был подключен сейчас к видеовыходу,&lt;br /&gt;
я бы показал, что все это происходит за считанные секунды,&lt;br /&gt;
то есть дороговато, но в целом ничего.&lt;br /&gt;
&lt;br /&gt;
Этот функционал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; по-настоящему уникален!&lt;br /&gt;
Больше никто этого не может, а эта функциональность очень важна!&lt;br /&gt;
Может быть, она и не так важна для отдельного разработчика,&lt;br /&gt;
потому что отдельный разработчик часто думает в терминах отдельных файлов,&lt;br /&gt;
но важно для людей, объединяющих версии проекта.&lt;br /&gt;
Это важно для таких как я и тех, с кем я непосредственно работаю,&lt;br /&gt;
потому что они практически никогда не заботятся об отдельных файлах,&lt;br /&gt;
а вот такие вещи для них важны.&lt;br /&gt;
Кто-нибудь отправляет отчеты об ошибке, которые не всегда адекватны,&lt;br /&gt;
но пусть вам попался довольно вменяемый отчет,&lt;br /&gt;
и вы можете сразу засечь — «Ага, это подсистема SCSI».&lt;br /&gt;
&lt;br /&gt;
Вот командная строка (''указывает на слайд'').&lt;br /&gt;
&lt;br /&gt;
Вы не можете указать точно проблемный файл, но можете сказать:&lt;br /&gt;
«Удали последние 15 тысяч коммитов, сделанных с прошлой недели, и он откатит&lt;br /&gt;
проект до 50 [коммитов]»&lt;br /&gt;
&lt;br /&gt;
Это круто, и никакая другая система так не может, уверяю.&lt;br /&gt;
&lt;br /&gt;
Вот поэтому вы и должны хотеть использовать именно &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Вот к чему это сводится.&lt;br /&gt;
Он надежен и так безопасен, что вы можете делать то, что&lt;br /&gt;
остальные системы или не делают, или делают очень медленно,&lt;br /&gt;
и кроме того, он распределенный.&lt;br /&gt;
&lt;br /&gt;
Итак, продолжим.&lt;br /&gt;
Полагаю, мы можем позволить ответить на еще один вопрос.&lt;br /&gt;
Что у нас с временем, я как-то без понятия… Ладно, давайте быстро.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.1-05-57.109.jpg|framed|right|…будет просто дрейф проблем с масштабируемостью…?]]&lt;br /&gt;
&lt;br /&gt;
'''''Слушатель:'''''&lt;br /&gt;
&lt;br /&gt;
{{question}} Итак, причина ухода с Perforce — на самом деле масштабируемость и эффективность.&lt;br /&gt;
Иначе люди просто продолжат ее использовать.&lt;br /&gt;
И может, при переходе будет просто дрейф проблем с масштабируемостью и производительностью&lt;br /&gt;
из одной области в другую?&lt;br /&gt;
&lt;br /&gt;
'''''Линус:'''''&lt;br /&gt;
&lt;br /&gt;
Ну я уже говорил, что я без понятия, как вы работаете&lt;br /&gt;
с Perforce, и какие с ним проблемы, но если вы перейдете на &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
вы можете быть в нем уверены, если, конечно,&lt;br /&gt;
вы будете использовать его в разумных пределах.&lt;br /&gt;
А эти пределы обычно достаточно очевидны.&lt;br /&gt;
У вас есть компилятор, основные исходники,&lt;br /&gt;
документация, ну может ваша документация разбросана как-то фрагментами,&lt;br /&gt;
хотя наверняка у вас есть что-то типа пользовательской документации,&lt;br /&gt;
может в Google не так, но во многих компаниях отдельно&lt;br /&gt;
идет набор документации для потребителей&lt;br /&gt;
и документации, сопровождающей отдельные модули и пакеты.&lt;br /&gt;
&lt;br /&gt;
Так что одним из моментов использования &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, о котором стоит подумать,&lt;br /&gt;
это как организовать разумную структуру проекта.&lt;br /&gt;
Git легко поддерживает здоровые проекты, вы можете без проблем держать в нем&lt;br /&gt;
десятки тысяч файлов, вот в Ядре, например, их 22 тысячи.&lt;br /&gt;
Мы тестировали на ста тысячах — и все было в порядке — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; быстрей, чем что бы то ни было.&lt;br /&gt;
&lt;br /&gt;
С миллионом файлов, подозреваю, другие системы, могут быть в чем-то и побыстрее.&lt;br /&gt;
И не хотелось бы, чтобы вы попали в такую ситуацию.&lt;br /&gt;
Но если вы правильно организуете проект и грамотно настроите,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; будет и быстрее и лучше, что все остальное.&lt;br /&gt;
Я уверен в его исключительной производительности.&lt;br /&gt;
&lt;br /&gt;
Вот одна из вещей, которую мы не очень хорошо делаем,&lt;br /&gt;
это «CVS annotate»&amp;lt;ref&amp;gt;Команда, сообщающая по каждой строчке автора, совершившего в этой строчке последнее изменение и последнюю ревизию, в которой эта строчка менялась.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Люди часто используют эту команду.&lt;br /&gt;
Я говорил, что у Perforce оно тормозит, так что вы,&lt;br /&gt;
вероятно, хотя и не уверен, не используете Perforc’ный «annotate».&lt;br /&gt;
Но пользователи CVS используют «CVS annotate»,&lt;br /&gt;
эту единственную операцию, которую CVS может выполнять быстрее, чем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
потому что CVS работает «пофайлово», а &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; — нет.&lt;br /&gt;
&lt;br /&gt;
У &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; есть «annotate», но фактически это будет поиск,&lt;br /&gt;
вы можете узнать об этом, если вы переместите функцию из одного файла в другой,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; дословно воспроизведет историю функции, даже несмотря на перемещение.&lt;br /&gt;
Внимание, не перемещение файла, а функцию в пределах файла&lt;br /&gt;
он пойдет и откопает и скажет:&lt;br /&gt;
«Эй! Эти две строки на самом деле пришли из&lt;br /&gt;
того файла 5 лет назад».&lt;br /&gt;
&lt;br /&gt;
Опять-таки, это оригинальный функционал, который больше никто не тянет,&lt;br /&gt;
и сводится он к тому же, что рулит контент проекта целиком, а не файлы по отдельности.&lt;br /&gt;
Но за это приходится платить, так что если вы отматываете лет на пять назад,&lt;br /&gt;
это может занять секунд 30.&lt;br /&gt;
На ядре это занимает секунду для любого имеющегося у меня файла,&lt;br /&gt;
ведь два года назад мы начали историю с чистого листа, решив&lt;br /&gt;
«давайте не будем усложнять то, что не требуется»,&lt;br /&gt;
— и прямо сейчас у нас имеется только двухлетняя история ядра.&lt;br /&gt;
&lt;br /&gt;
В других проектах у нас есть история и подлинней,&lt;br /&gt;
мы делали на них замеры, например, после импорта KDE и других проектов &lt;br /&gt;
с еще более длинной историей.&lt;br /&gt;
Тут бывают проблемы с производительностью, но все равно даже&lt;br /&gt;
с учетом таких проблем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; на один-два порядка быстрее, так что&lt;br /&gt;
в основном беспокоиться не о чем.&lt;br /&gt;
&lt;br /&gt;
И если обнаружите какую-нибудь проблему, то у нас сейчас очень-очень&lt;br /&gt;
классное сообщество.&lt;br /&gt;
В &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;-овом списке email-рассылок уровень «шума» очень мал,&lt;br /&gt;
и хотя писем там изрядное количество, это очень вменяемый мейллист.&lt;br /&gt;
Итак, если кто-то заинтересовался, посмотрите исходники,&lt;br /&gt;
но начните с просмотра архива рассылки.&lt;br /&gt;
У нас есть и свои флеймы, есть и бесцельные споры,&lt;br /&gt;
но большинство сообщений там весьма хороши.&lt;br /&gt;
&lt;br /&gt;
OK? Спасибо…&lt;br /&gt;
&lt;br /&gt;
[''апплодисменты'']&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-7724296011317502612 Mercurial Project] — Bryan O'Sullivan на Google TechTalks о распределенной системе контроля версий [http://www.selenic.com/mercurial/ Mercurial]&lt;br /&gt;
* [[:Категория:Статьи о Subversion|Статьи о Subversion]] — Серия переводов популярных статей известных авторов о системе управления версиями [[Subversion]]. &lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9B%D0%B8%D0%BD%D1%83%D1%81_%D0%A2%D0%BE%D1%80%D0%B2%D0%B0%D0%BB%D1%8C%D0%B4%D1%81_%D0%BE_GIT_%D0%BD%D0%B0_Google_Talks&amp;diff=11055</id>
		<title>Линус Торвальдс о GIT на Google Talks</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9B%D0%B8%D0%BD%D1%83%D1%81_%D0%A2%D0%BE%D1%80%D0%B2%D0%B0%D0%BB%D1%8C%D0%B4%D1%81_%D0%BE_GIT_%D0%BD%D0%B0_Google_Talks&amp;diff=11055"/>
				<updated>2009-05-30T06:06:40Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: См. также Bryan O'Sullivan на Google TechTalks о распределенной системе контроля версий Mercurial&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Linus-git-googletalk.0-00-04.098.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод доклада Линуса Торвальдса о системе контроля версий &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; на «''Google Talk''»&lt;br /&gt;
&amp;lt;ref&amp;gt;Оригинальное видео доклада http://www.youtube.com/watch?v=4XpnKHJAok8&amp;lt;/ref&amp;gt;,&lt;br /&gt;
выполнен сообществом компании [http://team.custis.ru «Заказные ИнформСистемы»].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-00-11.269.jpg|center]]&lt;br /&gt;
[[Категория:Системы контроля версий]]&lt;br /&gt;
&lt;br /&gt;
== Представление ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-00-19.731.jpg|framed|right| Эндрю Мортон. Один из ведущих разработчиков ядра Linux. Работник Google]]&lt;br /&gt;
&lt;br /&gt;
'''''Эндрю:'''''&lt;br /&gt;
Спасибо всем пришедшим, большинство из вас вероятно уже слышали&lt;br /&gt;
о Линусе Торвальдсе, а те, которые не слышали — это люди с Макинтошами на коленях.&lt;br /&gt;
Это парень, который прется от издевательств над людьми.&lt;br /&gt;
Его последняя выходка — создание СУВ&amp;lt;ref&amp;gt;система управления версиями&amp;lt;/ref&amp;gt;, которая явно создана для того,&lt;br /&gt;
чтобы вы почувствовали себя менее умными, чем до знакомства с ней.&lt;br /&gt;
Спасибо, что снизошли до нас сегодня, Линус.&lt;br /&gt;
Последние дни я получал письма от людей, вопрошающих:&lt;br /&gt;
«Где Линус? Почему он не берет мою ветку? Он меня больше не любит… =(»&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Image:Linus-git-googletalk.0-00-35.640.jpg|framed|center]] --&amp;gt;&lt;br /&gt;
И вот, он пришел в мой офис сегодня днем, и сказал: «а чем ты вообще тут занимаешься?!»&lt;br /&gt;
О, спасибо вам, что тратите на нас свое время.&lt;br /&gt;
И вот, Линус пришел сегодня, чтобы объяснить нам,&lt;br /&gt;
какого …, он написал такие тулы, гм,&lt;br /&gt;
что только он тот избранный, кто настолько мудр, чтобы понять, как ими пользоваться.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-00-51.199.jpg|framed|center| тут все апплодируют, апплодируют…]]&lt;br /&gt;
&lt;br /&gt;
== Вводное слово ==&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-01-15.165.jpg|framed|left|Линус Торвальдс.]]&lt;br /&gt;
&lt;br /&gt;
'''''Линус:'''''&lt;br /&gt;
&lt;br /&gt;
Ну, я должен слегка предостеречь вас, что я не очень хороший оратор,&lt;br /&gt;
частично потому, что я не люблю выступать, а частично потому,&lt;br /&gt;
что за последние несколько лет все только и хотели от меня докладов&lt;br /&gt;
о туманном будущем Линукса в следующем столетии,&lt;br /&gt;
а я вообще гик и предпочитаю говорить о технологиях.&lt;br /&gt;
&lt;br /&gt;
Так вот, я не буду говорить про ''Ядро''&amp;lt;ref&amp;gt;Проект Linux Kernel.&amp;lt;/ref&amp;gt;, просто потому, что оно слишком большое,&lt;br /&gt;
чтобы рассказать о нем за час, хотя похоже Эндрю сделал это пару дней назад.&lt;br /&gt;
Вместо этого я расскажу вам про [[EnPedia:Git_(software)|git]], систему управления версиями,&lt;br /&gt;
которую мы используем для Ядра.&lt;br /&gt;
&lt;br /&gt;
Я очень-очень-очень плохо делаю слайды, поэтому,&lt;br /&gt;
если я буду строго им следовать, то к концу вы все умрете от тоски.&lt;br /&gt;
Видимо, в любом случае доклад сильно удачным не будет,&lt;br /&gt;
но я из тех докладчиков, которые действительно рады отвечать на вопросы.&lt;br /&gt;
В общем, если мы будем местами отклоняться от плана доклада,&lt;br /&gt;
то всем нам будет лучше, вероятно и разговор у нас получится более интересный.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[Изображение:linus-git-googletalk.0-01-10.219.jpg|framed|right]] --&amp;gt;&lt;br /&gt;
Я не знаю, как тут у вас, на ''Google talks'', все это происходит,&lt;br /&gt;
я скажу просто — меня не стесняйтесь.&lt;br /&gt;
А если ваш начальник потом вас пристрелит — это будет уже ваша проблема.&lt;br /&gt;
&lt;br /&gt;
== Credits ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-02-21.683.jpg|framed|Потому что Линус любит заставлять людей думать, что он скромный|left]]&lt;br /&gt;
Сначала я хочу раздать несколько отзывов и благодарностей.&lt;br /&gt;
&lt;br /&gt;
О [[CVS]] я будут отзываться только в очень-очень отрицательном ключе,&lt;br /&gt;
потому что я, когда проектировал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, во многих ситуациях&lt;br /&gt;
использовал (в контексте СУВ) подход «что бы тут сделал Иисус», а иногда и «что бы тут CVS никогда не сделала».&lt;br /&gt;
&lt;br /&gt;
Я никогда не использовал CVS при разработке ядра.&lt;br /&gt;
За последние десять лет для поддержки ядра&lt;br /&gt;
мы использовали только тарболы&amp;lt;ref&amp;gt;tarballs — несжатые tar-архивы&amp;lt;/ref&amp;gt;&lt;br /&gt;
и патчи&amp;lt;ref&amp;gt;patch — файлы изменений&amp;lt;/ref&amp;gt;,&lt;br /&gt;
которые оказались лучшими СУВ, чем CVS,&lt;br /&gt;
но я «покончил с CVS» после семилетнего опыта использования ее&lt;br /&gt;
в коммерческой компании, и я страстно ненавижу эту систему.&lt;br /&gt;
&lt;br /&gt;
Когда я сказал, что страстно ненавижу CVS, я должен также сказать, что если в аудитории есть пользователи SVN ([[EnPedia:Subversion (software)|Subversion]]),&lt;br /&gt;
то вы, возможно, захотите уйти.&lt;br /&gt;
Поскольку моя ненависть к CVS означает, что я считаю Subversion самым&lt;br /&gt;
бесцельным проектом, так как основной девиз Subversion некоторое время был&lt;br /&gt;
«Сделанный по-уму CVS» или что-то вроде этого.&lt;br /&gt;
А если вы начинаете с такого слогана, то вы никуда не сможете прийти.&lt;br /&gt;
Это так, потому что CVS невозможно сделать «правильным».&lt;br /&gt;
&lt;br /&gt;
Это была негативная часть.&lt;br /&gt;
&lt;br /&gt;
А вот с благодарностью я упомяну о [[EnPedia:BitKeeper|BitKeeper]],&lt;br /&gt;
хотя я понимаю, что по мнению многих, вокруг ''BitKeeper''’а было&lt;br /&gt;
много проблем и споров да и «развод» с ним был во многих смыслах неприятен.&lt;br /&gt;
Но по-моему, наш развод с BitKeeper-ом был&lt;br /&gt;
вполне полюбовный, хотя снаружи это казалось иначе.&lt;br /&gt;
И BitKeeper не только стал первой системой контроля версий,&lt;br /&gt;
которая показалась мне вполне достойной,&lt;br /&gt;
но, более того, показал мне, в чем была его основная идея&lt;br /&gt;
и как с ней можно реально работать.&lt;br /&gt;
И хотя &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; во многом, в том числе технически, очень-очень сильно отличается от&lt;br /&gt;
BitKeeper (это было специально задумано, чтобы убедить всех, что это&lt;br /&gt;
не клон BitKeeper), многие процессы используемые нами с &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
взяты из BitKeeper.&lt;br /&gt;
&lt;br /&gt;
Кстати, вы используете BitKeeper здесь, в Google? Я сомневаюсь.&lt;br /&gt;
Насколько я знаю, BitKeeper — это единственная коммерческая распределенная СУВ,&lt;br /&gt;
и поэтому, если вам-таки нужна именно коммерческая система,&lt;br /&gt;
то вам стоит использовать BitKeeper.&lt;br /&gt;
&lt;br /&gt;
Я также хотел бы заметить, что я разрабатываю &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; чуть больше двух лет,&lt;br /&gt;
но хотя я запустил проект, разработал архитектуру и начальный код,&lt;br /&gt;
на протяжении последних полутора лет его поддерживает&lt;br /&gt;
гораздо более славный парень, японец ''Junio Hamano'',&lt;br /&gt;
и именно он сделал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; более доступным для простых смертных.&lt;br /&gt;
Ранние версии &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; действительно требовали некоторое количество&lt;br /&gt;
«ментальных пунктов» мозгосилы.&lt;br /&gt;
C тех пор он стал гораздо проще.&lt;br /&gt;
&lt;br /&gt;
В общем, это мой обычный подход —&lt;br /&gt;
все остальные делают все возможное, а я сам могу просто сидеть и потягивать&lt;br /&gt;
ПинаКоладу&amp;lt;ref&amp;gt;Пинья колада (исп. Piña colada), также ошибочно называемый пинаколада/пиноколада и т. п. — традиционный карибский алкогольный коктейль содержащий ром, кокосовое молоко и ананасовый сок.&amp;lt;/ref&amp;gt;,&lt;br /&gt;
ну и типа люди то же вроде как-то при деле…&lt;br /&gt;
&lt;br /&gt;
На этом благодарности окончены, всех вышеперечисленных откладываем в сторону.&lt;br /&gt;
&lt;br /&gt;
== Content ==&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.0-06-23.653.jpg|framed|right| Он набросал эту презентацию прошлой ночью, не ждите здесь чуда]]&lt;br /&gt;
Вот этому слайду уже один день.&lt;br /&gt;
Я вообще не делал презентацию прошлой ночью, потому что прошлой ночью&lt;br /&gt;
я пьянствовал, отрывался и ел суши. Вот.&lt;br /&gt;
&lt;br /&gt;
И тем не менее, в презентации&lt;br /&gt;
речь пойдет о реализации надежной, высокопроизводительной распределенной&lt;br /&gt;
системы управления содержимым, и ключевое слово здесь — «распределенная».&lt;br /&gt;
Я сначала попытаюсь объяснить, почему распределенность так важна.&lt;br /&gt;
Если мы потом к этой теме не вернемся, я буду действительно счастлив.&lt;br /&gt;
&lt;br /&gt;
И ничего страшного, если мы так и не разберем, как &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; устроен изнутри.&lt;br /&gt;
Учить пользоваться &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;’ом я тоже не буду.&lt;br /&gt;
Ну есть же у вас такая штука, которую вы делаете, «google.com»,&lt;br /&gt;
и в ней есть такое место, куда можно вводить буквы, и если вы введете туда «git»&lt;br /&gt;
и нажмете кнопку «Мне повезет!», вы обязательно попадете [http://git-scm.com/ на официальный сайт &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;],&lt;br /&gt;
на котором есть и вводные обучающие курсы и руководство пользователя в HTML-формате.&lt;br /&gt;
В общем, если вы хотите научиться пользоваться &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, вам нужно первым делом туда,&lt;br /&gt;
а не на этот доклад.&lt;br /&gt;
&lt;br /&gt;
Но, как я уже сказал, ничего страшного, если мы отклонимся в сторону от темы&lt;br /&gt;
из-за ваших вопросов.&lt;br /&gt;
&lt;br /&gt;
== Content Advisory ==&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-08-05.443.jpg|framed|left|Линус критичен и к программам и к людям]]&lt;br /&gt;
&lt;br /&gt;
Я вам уже озвучил эти примечания к заголовкам; я использую сокращение [[EnPedia:Source_Code_Management|SCM]] в&lt;br /&gt;
значении «''source code management''/управление исходным кодом»,&lt;br /&gt;
что то же самое, что контроль версий. Некоторые думают, что SCM означает&lt;br /&gt;
«Управление конфигурациями/''software configuration management''»&lt;br /&gt;
и включают сюда не только контроль версий, но и управление релизами и все такое;&lt;br /&gt;
но я сейчас буду рассказывать не об этом, хотя &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вполне подходит и для этого.&lt;br /&gt;
&lt;br /&gt;
С [[CVS]] мы уже разобрались. Вы можете не соглашаться со мной сколько хотите, но в течение этого доклада&lt;br /&gt;
все, кто не согласен со мной, по определению — тупые уроды.&lt;br /&gt;
Помните об этом!&lt;br /&gt;
Вы будете вольны делать и думать все что захотите, когда я закончу доклад.&lt;br /&gt;
А сейчас я рассказываю свое единственно правильное мнение,&lt;br /&gt;
так что пользователи CVS, если вы действительно его так любите,&lt;br /&gt;
уйдите с глаз моих долой. Вам надо обратиться в психушку или куда-то еще.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
[[Изображение:Linus-git-googletalk.0-09-24.327.jpg|framed|right|от BitKeeper к &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Теперь, перед тем как начать говорить о самой сути «Распределенности»,&lt;br /&gt;
что, по-моему, архиважно, нельзя не упомянуть об истории &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
потому что если люди что-то и слышали о &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
то это, в первую очередь, историю его возникновения.&lt;br /&gt;
&lt;br /&gt;
Во-первых, я на самом деле вообще не фанат SCM.&lt;br /&gt;
Я никогда особо не интересовался системами контроля версий, и думал, что это зло,&lt;br /&gt;
пока не наткнулся на ''BitKeeper'', который оценил по достоинству; и,&lt;br /&gt;
в некотором смысле, именно поэтому &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; намного лучше всего остального,&lt;br /&gt;
ведь мой мозг не страдал долгие годы, думая, что [[CVS]] делает что-либо разумное.&lt;br /&gt;
&lt;br /&gt;
Мне понадобилась замена для BitKeeper.&lt;br /&gt;
Причина в том, что BitKeeper — это коммерческий продукт,&lt;br /&gt;
но ''BitMover'' и ''Larry McVoy'' разрешили использовать его бесплатно для open-source&lt;br /&gt;
продуктов, как вы, возможно, знаете; единственным ограничением было то,&lt;br /&gt;
что его нельзя было исследовать (''reverse engineer'') и нельзя пытаться создать конкурирующий продукт.&lt;br /&gt;
&lt;br /&gt;
И я был вполне этим доволен, ведь я делаю свободное ПО,&lt;br /&gt;
потому что считаю это единственным правильным способом разработки,&lt;br /&gt;
но я также хочу использовать лучшие инструменты для работы,&lt;br /&gt;
и BitKeeper был как раз таким.&lt;br /&gt;
&lt;br /&gt;
Но не все были согласны со мной.&lt;br /&gt;
Все они тупые уроды, но как бы там ни было,&lt;br /&gt;
они подкинули проблем,&lt;br /&gt;
и это в результате привело к тому, что мы с ''Larry'' несколько раз&lt;br /&gt;
поговорили по телефону и в конце концов договорились прервать сотрудничество,&lt;br /&gt;
дабы не ухудшать отношения.&lt;br /&gt;
&lt;br /&gt;
Тогда, примерно 2 года назад, я выпустил релиз &amp;lt;tt&amp;gt;Linux 2.6.12-rc2&amp;lt;/tt&amp;gt; и сказал,&lt;br /&gt;
что не продолжу разработку Linux, пока у меня не будет замены BitKeeper’у,&lt;br /&gt;
для управления исходным кодом.&lt;br /&gt;
&lt;br /&gt;
Одним из способов замены был возврат к tar-архивам и патчам,&lt;br /&gt;
но все были категорически против.&lt;br /&gt;
&lt;br /&gt;
Поэтому я рассмотрел кучу альтернатив.&lt;br /&gt;
Большинство из них я отбросил, даже не попробовав.&lt;br /&gt;
&lt;br /&gt;
Если система не распределенная, ее не стоит использовать, это же очевидно.&lt;br /&gt;
&lt;br /&gt;
Если у системы проблемы с производительностью,&lt;br /&gt;
ее тоже не стоит использовать, это так же очевидно.&lt;br /&gt;
И наконец, если вы не можете быть уверенными в том, что то, что вы положите в SCM,&lt;br /&gt;
можно легко достать обратно в том же виде,&lt;br /&gt;
такую систему тоже лучше не использовать.&lt;br /&gt;
&lt;br /&gt;
Честно говоря, та малышка [BitKeeper] прекрасно заботилась обо всем.&lt;br /&gt;
Полно СУВ которые не гарантируют, что то, что вы из них достаете,&lt;br /&gt;
является в точности тем, что в них положили.&lt;br /&gt;
Вы можете никогда и не узнать, что у вас повреждена память или жесткий диск.&lt;br /&gt;
А заметите это, только когда получите назад поврежденный файл.&lt;br /&gt;
Причем сама система контроля версий за этим вообще не следит.&lt;br /&gt;
И такое — совсем не редкость.&lt;br /&gt;
Да, это встречается очень, очень часто.&lt;br /&gt;
&lt;br /&gt;
Проблема быстродействия: одной из систем, которая мне более-менее понравились,&lt;br /&gt;
была система [[EnPedia:Monotone_(software)|Monotone]], о которой, кстати, когда-то вроде был доклад в Google,&lt;br /&gt;
хотя может я и ошибаюсь; так вот, в ней было много интересных идей,&lt;br /&gt;
но производительность была просто ужасна,&lt;br /&gt;
так что попробовав ее один день, я понял, что она мне не подходит.&lt;br /&gt;
&lt;br /&gt;
В результате, я решил, что сам за две недели смогу написать что-то получше,&lt;br /&gt;
и не ошибся.&lt;br /&gt;
&lt;br /&gt;
== Distribution ==&lt;br /&gt;
&lt;br /&gt;
[''Показывает слайд «Distribution» с картинкой'']&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk-slide-distribution.jpg|framed|Это не просто хорошая идея. По-другому просто не будет работать!]]&lt;br /&gt;
&lt;br /&gt;
Теперь перейдем к ''Распределенности'', и это худший слайд из всех,&lt;br /&gt;
и мне стыдно за него, но проблема в том, что ''Распределенность''&lt;br /&gt;
действительно очень важна,&lt;br /&gt;
но у меня никогда не получается сделать об этом нормальный слайд.&lt;br /&gt;
Частично это из-за моих скудных художественных способностей,&lt;br /&gt;
которые вы видите перед собой на экране,&lt;br /&gt;
но на самом деле это действительно трудно объяснить.&lt;br /&gt;
&lt;br /&gt;
Поэтому прежде чем я начну, я хотел бы знать,&lt;br /&gt;
кто из вас привык к идее по-настоящему распределенной системы контроля версий?&lt;br /&gt;
&lt;br /&gt;
[''слушатели поднимают руки'']&lt;br /&gt;
&lt;br /&gt;
Большинство из вас разрабатывают ядро?&lt;br /&gt;
Нет?&lt;br /&gt;
Хорошо, примерно десять человек подняли руки.&lt;br /&gt;
&lt;br /&gt;
Распределенность главным образом означает отсутствие центрального места,&lt;br /&gt;
в котором хранятся ваши данные и отслеживаются изменения.&lt;br /&gt;
Ни одно хранилище не является более важным, чем какое-либо другое.&lt;br /&gt;
&lt;br /&gt;
Поэтому, например, я Subversion даже&lt;br /&gt;
трехметровым багром трогать не буду.&lt;br /&gt;
В Subversion большой репозиторий, куда все обязаны складывать свои данные.&lt;br /&gt;
А централизованная модель просто не работает,&lt;br /&gt;
когда… давайте взглянем на некоторые такие случаи.&lt;br /&gt;
&lt;br /&gt;
[''Показывает слайд «Distribution» с пунктами'']&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk-slide-distribution2.jpg|frame|Слайд «Distribution» с пунктами]]&lt;br /&gt;
&lt;br /&gt;
Я сказал, что распределенность — это гораздо больше, чем просто работа в оффлайн,&lt;br /&gt;
но это, пожалуй, понять проще всего:&lt;br /&gt;
вы можете взять по-настоящему распределенную SCM с собой в самолет и,&lt;br /&gt;
даже если в нем нет ни wi-fi, ни спутникового интернета,&lt;br /&gt;
вы просто продолжаете работать — вы можете посмотреть любые логи,&lt;br /&gt;
вы можете фиксировать изменения, вы можете делать все, что вы бы делали,&lt;br /&gt;
если бы вы были подключены прямо к магистральному каналу с гигабитным Ethernet.&lt;br /&gt;
И это действительно важно.&lt;br /&gt;
&lt;br /&gt;
Это вдвойне важно, когда над одним и тем же проектом работают&lt;br /&gt;
сотни и тысячи людей, и они даже не обязательно должны быть все отключены&lt;br /&gt;
от сети, просто на практике они на самом деле не всегда имеют хорошую связь.&lt;br /&gt;
Так что работа в оффлайн — это один из аспектов распределенности,&lt;br /&gt;
и даже если работа не всегда идет оффлайн,&lt;br /&gt;
очень важно иметь возможность делать все, что вам нужно,&lt;br /&gt;
находясь в любом месте и даже не имея возможности подключиться к серверу.&lt;br /&gt;
&lt;br /&gt;
Этот простой факт приводит к появлению гораздо большего количества веток,&lt;br /&gt;
потому что каждый, у кого есть целиком весь репозиторий и возможность в него&lt;br /&gt;
коммитить, будет работать в своей собственной ветке, даже этого не осознавая.&lt;br /&gt;
Да-да, даже если вы считаете, что ваш проект имеет только одну ветвь, каждый раз,&lt;br /&gt;
когда вы отключаетесь от сети и начинаете работать над проектом,&lt;br /&gt;
вы работаете со своей отдельной веткой.&lt;br /&gt;
&lt;br /&gt;
И это действительно очень важно и очень сильно отличается от работы в CVS,&lt;br /&gt;
где ветвление считается уделом настоящих мастеров.&lt;br /&gt;
&lt;br /&gt;
Кто из вас когда-либо пользовался CVS?&lt;br /&gt;
&lt;br /&gt;
[''Слушатели поднимают руки'']&lt;br /&gt;
&lt;br /&gt;
Понятно, все. А кто когда-нибудь по-настоящему создавал ветку, а потом объединял изменения в CVS?&lt;br /&gt;
&lt;br /&gt;
[''Слушатели поднимают руки'']&lt;br /&gt;
&lt;br /&gt;
Хорошо.&lt;br /&gt;
Отмечу, что далеко не все, хотя и гораздо больше, чем я ожидал.&lt;br /&gt;
&lt;br /&gt;
Ну и кому из вас понравилось осуществлять этот процесс?&lt;br /&gt;
&lt;br /&gt;
[''смех'']&lt;br /&gt;
&lt;br /&gt;
Понятно, все-таки нескольким понравилось.&lt;br /&gt;
&lt;br /&gt;
Считается, что это сложная операция. В CVS, когда вы объединяете ветки (а я делал это, избегал как мог, но приходилось),&lt;br /&gt;
вы планируете это на неделю вперед и, как правило, оставляете на это целый день.&lt;br /&gt;
&lt;br /&gt;
Разве я не прав?&lt;br /&gt;
Что-то я не вижу, чтобы многие говорили «Нет, это очень просто, мне нравится это делать».&lt;br /&gt;
Это отвратительно!&lt;br /&gt;
 &lt;br /&gt;
Обязательно нужно понять, что в распределенной системе каждый человек работает&lt;br /&gt;
со своей отдельной веткой.&lt;br /&gt;
И это не страшно, вам даже не надо что-то специально настраивать,&lt;br /&gt;
так устроено изначально.&lt;br /&gt;
&lt;br /&gt;
На самом деле, в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; мы так любим ветки, что многие держат их по 10-15 штук,&lt;br /&gt;
потому что когда вы понимаете, что у вас по-любому будет отдельная ветка,&lt;br /&gt;
вам уже все равно, сколько их будет, и вы делаете отдельные ветки&lt;br /&gt;
для экспериментов и отдельные для поддержки.&lt;br /&gt;
Так что ветвление гораздо более свойственно распределенным системам.&lt;br /&gt;
 &lt;br /&gt;
Еще одна вещь, которая мне кажется важной, — это то, что распределенная система&lt;br /&gt;
в силу своего устройства более надежна.&lt;br /&gt;
&lt;br /&gt;
Мой подход к архивам/бэкапам таков:&lt;br /&gt;
не делать их специально,&lt;br /&gt;
а просто публиковать свои данные на сайте,&lt;br /&gt;
а остальные пусть их копируют/зеркалируют, и мне пофиг,&lt;br /&gt;
если у меня сломается компьютер, потому что я могу скачать все обратно.&lt;br /&gt;
И это отлично работает, и при этом мне не нужна служба поддержки.&lt;br /&gt;
&lt;br /&gt;
Я очень сомневаюсь, что все так делают.&lt;br /&gt;
Но это по-настоящему работает только в распределенных системах.&lt;br /&gt;
Если вы пользуетесь CVS, вы не можете так сделать, если вы используете…&lt;br /&gt;
кстати, чем вы здесь пользуетесь?&lt;br /&gt;
&lt;br /&gt;
Perforce?… [[EnPedia:Perforce|Perforce]]. Ну да, извините.&lt;br /&gt;
Да, он, конечно же, лучше, чем [[CVS]].&lt;br /&gt;
&lt;br /&gt;
[''Слушатели смеются'']&lt;br /&gt;
&lt;br /&gt;
Но все равно это по сути CVS.&lt;br /&gt;
&lt;br /&gt;
Еще одна прикольная вещь, хотя у вас в компании возможно этого и нет,&lt;br /&gt;
но это обязательно есть во всех командах, разрабатывающих свободное ПО,&lt;br /&gt;
которые используют CVS или Subversion или что-то вроде этого, это то,&lt;br /&gt;
что они пользуются понятием «commit access».&lt;br /&gt;
&lt;br /&gt;
Ведь то, что у вас центральный репозиторий, означает, что все,&lt;br /&gt;
кто работают над проектом, должны складывать данные именно туда.&lt;br /&gt;
&lt;br /&gt;
И что это значит? &lt;br /&gt;
Поскольку вы не хотите, чтобы все подряд правили данные в центральном&lt;br /&gt;
репозитории, из-за того, что большинство людей — идиоты, то вам приходится выделять&lt;br /&gt;
людей, которые, по-видимости, идиотами не являются.&lt;br /&gt;
И чаше всего в этой группе оказывается слишком мало людей, потому что очень&lt;br /&gt;
сложно понять, насколько человек шарит, и наоборот,&lt;br /&gt;
даже если эта группа будет очень мала,&lt;br /&gt;
проблемы у вас все равно будут.&lt;br /&gt;
&lt;br /&gt;
В общем, эта проблема доступа к коммитам, которую некоторые компании&lt;br /&gt;
пытаются не замечать, просто давая всем доступ для коммитов, эта&lt;br /&gt;
проблема создает огромный психологический барьер и в большинстве проектов с&lt;br /&gt;
открытым кодом приходится тратить бесконечные часы для того, чтобы определиться&lt;br /&gt;
с политикой коммитов.&lt;br /&gt;
&lt;br /&gt;
Если же у вас распределенная модель, всех этих проблем нет.&lt;br /&gt;
Доступ к коммитам есть у каждого, вы можете делать что угодно со своим проектом.&lt;br /&gt;
Вы просто получаете собственную ветвь, и пишете ли вы в ней гениальный код, или&lt;br /&gt;
какой-нибудь маразм, это никого не волнует, это ваша копия.&lt;br /&gt;
Это ваша ветвь.&lt;br /&gt;
&lt;br /&gt;
И потом, если окажется, что вы сделали что-то полезное, вы можете сказать&lt;br /&gt;
людям: «''Эй, тут в моей ветви все работает в десять раз быстрее, чем у всех остальных,&lt;br /&gt;
так что ня-ня-ня, не хотите взять мой код?''».&lt;br /&gt;
И народ берет.&lt;br /&gt;
&lt;br /&gt;
Так это и работает и у нас нет никаких правил.&lt;br /&gt;
Это конечно не совсем так — у нас регулируется другое,&lt;br /&gt;
но о таких вещах как доступ к коммитам нам беспокоиться не нужно.&lt;br /&gt;
И я думаю, что это огромный результат и уже только из-за него одного любая&lt;br /&gt;
система с открытым кодом должна использовать распределенную модель, а не&lt;br /&gt;
что-либо другое.&lt;br /&gt;
&lt;br /&gt;
Вы избавитесь от кучи проблем.&lt;br /&gt;
&lt;br /&gt;
Одна из них касается коммерческих компаний.&lt;br /&gt;
Распределенная модель может также помочь с процессом выпуска релизов.&lt;br /&gt;
У вас может быть команда тестировщиков, которая работает в своем дереве.&lt;br /&gt;
Они берут код у других, проверяют его и когда проверят, передадут его&lt;br /&gt;
команде выпуска.&lt;br /&gt;
И они скажут: «Эй, мы тут проверили новую версию» и разработчики могут&lt;br /&gt;
продолжать работать головой вместо того, что маяться всякой дурью типа создания&lt;br /&gt;
меток, ветвей и всего того, что вы обычно делаете, чтобы разработчики не&lt;br /&gt;
конфликтовали друг с другом, потому что это достигается тем, что каждая группа&lt;br /&gt;
работает в своем дереве, следит за тем, что она сделала и что хочет сделать.&lt;br /&gt;
&lt;br /&gt;
То есть Распределенность — это на самом деле ключевой момент для любой из&lt;br /&gt;
СУВ, которые стоит использовать.&lt;br /&gt;
&lt;br /&gt;
Так что немедленно избавьтесь от Perforce!&lt;br /&gt;
&lt;br /&gt;
[''Апплодисменты'']&lt;br /&gt;
&lt;br /&gt;
Да, может и жалко, но это архиверно!&lt;br /&gt;
&lt;br /&gt;
Это был мой единственный слайд о распределенности.&lt;br /&gt;
Я бы хотел послушать ваши вопросы, потому что затем мы двинемся к другой теме.&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-21-39.872.jpg|frame|right|И как вы собираетесь это делать?]]&lt;br /&gt;
&lt;br /&gt;
{{question}} Вопрос. И как вы собираетесь это делать?&lt;br /&gt;
Если у вас есть эта монстрообразная, страшно огромная база кода&lt;br /&gt;
и вы хотите использовать ее, не останавливая&lt;br /&gt;
другие дела на шесть месяцев, как вы собираетесь это делать?&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Не отходите от микрофона, потому что я не совсем понял ваш вопрос.&lt;br /&gt;
Он ушел, ну ладно.&lt;br /&gt;
&lt;br /&gt;
«Как вы собираетесь это делать?» — Ну, вот пример реальной распределенности:&lt;br /&gt;
у вас есть команда из пяти человек, которые работают над&lt;br /&gt;
одной небольшой конкретной вещью.&lt;br /&gt;
&lt;br /&gt;
И это означает, что некоторое время это вещь будет сильно-сильно&lt;br /&gt;
испорчена, так?&lt;br /&gt;
Потому что никто на самом деле не создает прекрасный код с первого раза, за&lt;br /&gt;
исключением меня, но я такой один, так?&lt;br /&gt;
Поэтому им нужно иметь собственное дерево,&lt;br /&gt;
в котором они могут работать, не мешая остальным.&lt;br /&gt;
&lt;br /&gt;
Вы можете этого достичь множеством способов.&lt;br /&gt;
В CVS один из наиболее распространенных подходов — не делать коммитов вообще,&lt;br /&gt;
поскольку возиться с ветвями очень нудно.&lt;br /&gt;
&lt;br /&gt;
То есть вы не делаете коммиты, пока код не пройдет абсолютно все тесты.&lt;br /&gt;
Или например, в вашей компании строгое политика коммитов:&lt;br /&gt;
«нельзя делать коммиты пока они не пройдут весь набор тестов»,&lt;br /&gt;
а между прочим все тесты будут выполняться два часа, жесть!&lt;br /&gt;
&lt;br /&gt;
Да, вам не позволяют делать коммиты.&lt;br /&gt;
И это происходит почти в каждой компании.&lt;br /&gt;
Я уверен, что это так даже у вас, в Google.&lt;br /&gt;
У вас вероятно есть строгий набор тестов и вам нельзя делать коммиты, пока&lt;br /&gt;
все тесты не будут пройдены, а это приводит к тому, что на практике люди вносят&lt;br /&gt;
изменения по одной строчке и не тестируют, потому что знают, что изменения в&lt;br /&gt;
одной строчке скорее всего ничего не сломают.&lt;br /&gt;
Да, бывает и так.&lt;br /&gt;
&lt;br /&gt;
Такой подход, конечно — ужас-ужас!&lt;br /&gt;
Это означает, что вы делаете коммит огромного числа изменений за раз,&lt;br /&gt;
потому что работали над этими изменениями две недели.&lt;br /&gt;
И в итоге у вас три человека, которые делают одно и то же, потому&lt;br /&gt;
что они не видят изменений от других, пока не сделают коммит своих.&lt;br /&gt;
Это часто происходит, это происходит везде, это жуть!&lt;br /&gt;
&lt;br /&gt;
Другой вариант — это использовать ветви, пусть даже в централизованной среде.&lt;br /&gt;
Но ветви всегда обрываются, так как их слишком дорого поддерживать,&lt;br /&gt;
так что у вас не получится разрабатывать в них экспериментальную функциональность.&lt;br /&gt;
Вы никогда заранее не знаете, потребуется ли на что-то один день или две недели,&lt;br /&gt;
ведь почти всегда любой программист скажет: «Ха, я сделаю это за 48 часов».&lt;br /&gt;
А потом выясняется, что «не-а, не могу».&lt;br /&gt;
&lt;br /&gt;
Но так как вы думаете, что сможете сделать это за 48 часов, вам очень лень&lt;br /&gt;
создавать ветвь, даже в таких системах, в которых это делать удобнее, чем в CVS.&lt;br /&gt;
И вы этого не делаете, потому что думаете, что как-нибудь справитесь с этим&lt;br /&gt;
и вы возвращаетесь к случаю № 1, но даже если вы решите создать ветвь, то будете&lt;br /&gt;
менять содержимого репозитория и для всех остальных,&lt;br /&gt;
потому что в централизованной среде ветви глобальны.&lt;br /&gt;
&lt;br /&gt;
То есть вы столь любезны, что вы трахаетесь со всеми остальными,&lt;br /&gt;
но при этом не трогаете их ''основной ствол'', так называемую ''головную ветвь''.&lt;br /&gt;
Вы добавляете что-то новое в их репозитории, но при этом так,&lt;br /&gt;
чтобы они ничего не заметили (по-крайней мере, вы на это надеетесь).&lt;br /&gt;
Но общий репозиторий все равно от этого пухнет.&lt;br /&gt;
&lt;br /&gt;
В общем, в любом случае, успеха вы не добьетесь.&lt;br /&gt;
&lt;br /&gt;
В распределенной же среде происходит так: есть пять человек, они берут себе&lt;br /&gt;
текущую головную ветвь, которая надежна и протестирована и они начинают&lt;br /&gt;
работать с ней и делать коммиты,&lt;br /&gt;
и вам не надо ждать две недели, пока ваши изменения не станут стабильными,&lt;br /&gt;
потому что они всегда локальны.&lt;br /&gt;
А внутри этой группы из пяти человек, все могут брать&lt;br /&gt;
изменения друг у друга.&lt;br /&gt;
&lt;br /&gt;
Вот в этом и смысл распределенности — нет центра, а значит, что все&lt;br /&gt;
равны и что можно проводить слияния друг между другом, что можно, если хочется,&lt;br /&gt;
не только делать коммит каждой строчки, не проходя при этом&lt;br /&gt;
двухчасовые тесты, но и гибко взаимодействовать, забирая и сливая&lt;br /&gt;
изменения у кого и с кем угодно, и когда кто-то находит баг и&lt;br /&gt;
исправляет его, он говорит остальным:&lt;br /&gt;
«Эй, у меня в репозитории лежит фикс на этот баг», и потом,&lt;br /&gt;
когда эта группа все сделает через две недели, они&lt;br /&gt;
позвонят менеджеру:&lt;br /&gt;
«Эй, мы все сделали, скажи главной группе, чтоб они забрали&lt;br /&gt;
себе обновленный код и они получат новую функциональность, и, кстати, мы его&lt;br /&gt;
тестили больше двух недель, оно работает и с производительностью все в порядке,&lt;br /&gt;
так как мы смогли также и профилировать этот код до того,&lt;br /&gt;
как просить кого-либо его посмотреть».&lt;br /&gt;
&lt;br /&gt;
И эта модель гораздо лучше для разработки.&lt;br /&gt;
&lt;br /&gt;
И это модель, которая используется в разработке ядра Linux.&lt;br /&gt;
Оказывается, что во многих местах нам не нужна вся эта мощь, даже в ядре.&lt;br /&gt;
И люди обычно не обмениваются обновленным кодом внутри одной группы, но иногда&lt;br /&gt;
случается, например, что те, кто работает над сетью, иногда сталкиваются с&lt;br /&gt;
людьми, которые работают над NFS, и то, что они могут синхронизироваться,&lt;br /&gt;
действительно помогает.&lt;br /&gt;
То есть это действительно помогает!&lt;br /&gt;
&lt;br /&gt;
У кого-то еще есть вопрос?&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-27-03.671.jpg|frame|right|Похоже, что все эти правила и ограничения просто переместились или стали неявными.…]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Похоже, что все эти правила и ограничения просто переместились или стали неявными.&lt;br /&gt;
Да, у каждого есть доступ и все играются со своими ветвями в песочнице, но к вечеру&lt;br /&gt;
ветви нужно соединять и разрешать все конфликты чтобы не было 80&lt;br /&gt;
миллиардов вариантов каждого линуксового ядра.&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Да, именно так.&lt;br /&gt;
Но на практике вы их никогда не увидите, да там может быть тысяча или&lt;br /&gt;
двести тысяч различных ветвей, но на практике вы никогда о них не узнаете,&lt;br /&gt;
потому что вам это не нужно.&lt;br /&gt;
Вы как бы будете видеть только несколько главных ветвей, может быть даже&lt;br /&gt;
только одну.&lt;br /&gt;
&lt;br /&gt;
Вот в случае с ядром, полно людей, которые смотрят только на мою ветвь,&lt;br /&gt;
так что несмотря на то что ветвей может быть очень много, вы можете не обращать&lt;br /&gt;
на это внимания.&lt;br /&gt;
И что важно, это способ, которым происходят слияния, он и определяет,&lt;br /&gt;
насколько все это будет безопасно и надежно.&lt;br /&gt;
&lt;br /&gt;
Через сеть доверия.&lt;br /&gt;
&lt;br /&gt;
Если вы когда-нибудь занимались какой-то работой по безопасности&lt;br /&gt;
и не использовали концепцию сети доверия, то это был онанизм,&lt;br /&gt;
а не работа.&lt;br /&gt;
Я не знаю, чем вы там занимались, но поверьте мне, это единственный способ,&lt;br /&gt;
который дает безопасность и также единственно верный подход&lt;br /&gt;
в разработке ПО.&lt;br /&gt;
&lt;br /&gt;
В своей работе я не доверяю всем без исключения.&lt;br /&gt;
&lt;br /&gt;
Более того, на самом деле я крайне циничен и недоверчив.&lt;br /&gt;
&lt;br /&gt;
Я думаю, большинство из вас полностью некомпетентны.&lt;br /&gt;
&lt;br /&gt;
Основной принцип распределенности — это то, что я не должен вам доверять.&lt;br /&gt;
Я не должен давать вам доступ к коммитам.&lt;br /&gt;
Но я знаю, что среди оравы середнячков есть несколько человек,&lt;br /&gt;
достаточно выдающихся, чтобы я им доверял, ибо с ними я уже работал.&lt;br /&gt;
&lt;br /&gt;
Мне нужно доверять только 5, 10, ну может 15 людям.&lt;br /&gt;
Если у меня есть доверенная сеть, в которую входят эти 5, 10, 15 выдающихся&lt;br /&gt;
человек, и я знаю, что они выдающиеся, я могу забирать новый код&lt;br /&gt;
у них.&lt;br /&gt;
И мне не надо париться на эту тему.&lt;br /&gt;
&lt;br /&gt;
Когда Эндрю присылает мне патчи, он не использует никакого &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
это в некотором роде недостаток, ну и что, он очень надежный человек.&lt;br /&gt;
Когда он просит меня принять обновленный код, он просто посылает мне&lt;br /&gt;
миллион патчей, я просто их применяю.&lt;br /&gt;
Иногда я не согласен с какими-то из этих патчей, но с другой стороны,&lt;br /&gt;
доверие означает, как это сказать… «доверять — значит прощать»? Я не знаю…&lt;br /&gt;
В общем, это означает, что вы должны соглашаться с решениями других людей.&lt;br /&gt;
&lt;br /&gt;
И самое замечательное в доверии — это что оно создает сеть.&lt;br /&gt;
Именно здесь и появляется сеть доверия.&lt;br /&gt;
&lt;br /&gt;
Мне нужно лишь несколько человек, которым я буду доверять.&lt;br /&gt;
А у них есть другие люди, которых они выбрали, типа — «тот парнишка шарит покруче&lt;br /&gt;
меня» — да, это хороший критерий того, от кого вам следует брать исправленный код.&lt;br /&gt;
Если у вас есть кто-то еще, кто шарит лучше вас, — вперед.&lt;br /&gt;
Это беспроигрышно.&lt;br /&gt;
&lt;br /&gt;
Даже если окажется, что вы взяли какую-то чушь, кто-то там начнет&lt;br /&gt;
жаловаться, вы знаете, откуда вы взяли эти исправления, и вы можете просто&lt;br /&gt;
сказать это жалующемуся «хм, я просто скопировал это, иди к нему, он наверное знал, что делал».&lt;br /&gt;
&lt;br /&gt;
[[Image:Linus-git-googletalk.0-30-08.466.jpg|frame|right|Именно так я и работаю…]]&lt;br /&gt;
&lt;br /&gt;
Именно так я и работаю, скорее всего также действуют и мои поручики/заместители&lt;br /&gt;
&amp;lt;ref&amp;gt;В оригинале ''lieutenants'', поэтому часто в рунете помощников Линуса зовут «лейтенантами».&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Я забираю изменения по сетевой теме от одного человека, а он получает их от&lt;br /&gt;
множества других людей, с которыми он постоянно работает, и таким образом все&lt;br /&gt;
изменения приходят ко всем, и им не нужно собираться всем в одной точке.&lt;br /&gt;
&lt;br /&gt;
Хотя в ядре все приходит в большей степени в одну точку, так, я думаю, сложилось&lt;br /&gt;
исторически, и на самом деле я всегда пытался поощрять пожелания людей заводить&lt;br /&gt;
больше деревьев, и у нас действительно есть отдельные деревья по производителям оборудования,&lt;br /&gt;
у нас есть специальное «-mm»&amp;lt;ref&amp;gt;Экспериментальная ветвь ядра Linux, специализированная на управлении памятью, см. [[EnPedia:Mm_tree]].&amp;lt;/ref&amp;gt; дерево, в котором много выделенных «точек», просто так получается, что&lt;br /&gt;
моя точка привлекает, быть может, больше внимания, чем должна была бы.&lt;br /&gt;
&lt;br /&gt;
Даже если что-то там не придет к этой одной точке, это значит, что&lt;br /&gt;
можно взять тысячи этих ветвей, игнорируя &amp;lt;tt&amp;gt;99.9%&amp;lt;/tt&amp;gt; из них.&lt;br /&gt;
Зато вам интересно отслеживать, скажем пять ветвей, относящихся к областям, которыми вы интересуетесь.&lt;br /&gt;
&lt;br /&gt;
И все это работает очень естественно.&lt;br /&gt;
&lt;br /&gt;
Одной из хороших вещей в этой целой сети доверия,&lt;br /&gt;
является не только то, что ее легко технически реализовать,&lt;br /&gt;
но и то, насколько легко основательно подключить к ней&lt;br /&gt;
любого человека из этой комнаты.&lt;br /&gt;
&lt;br /&gt;
Люди мыслят именно так.&lt;br /&gt;
&lt;br /&gt;
Мы не знаем сотню людей.&lt;br /&gt;
У нас есть 5, 7, 10 близких личных друзей, ну ладно, пусть мы асоциальные гики,&lt;br /&gt;
поэтому у нас их двое, но это основы человеческого сотрудничества, то&lt;br /&gt;
что у нас есть те, кому мы действительно можем доверять,&lt;br /&gt;
это семья, это близкие друзья, и все это удобно и привычно, не нужно&lt;br /&gt;
держать в голове неестественную модель взаимодействия,&lt;br /&gt;
все подключаются естественным образом.&lt;br /&gt;
Поэтому работа с этой моделью сетевого доверия дает огромные преимущества.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-31-51.970.jpg|frame|right|Знаете ли вы о компаниях, которые используют распределенные системы у себя внутри?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Знаете ли вы о компаниях, которые используют распределенные системы у себя внутри?&lt;br /&gt;
Похоже, тут есть вероятность «сепаратизма» в коде,&lt;br /&gt;
так как народ, разбредется по собственным песочницам, и&lt;br /&gt;
не будет вкладываться в основной ствол.&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Честно говоря, не так уж и много распределенных систем.&lt;br /&gt;
Это BitKeeper, очевидно использующийся коммерческими компаниями,&lt;br /&gt;
мы должны иметь в аудитории кого-нибудь, кто действительно знает, но что …&lt;br /&gt;
[''комментарий из аудитории''], ага,&lt;br /&gt;
HP использует такие системы как BitKeeper в проектах разработки принтеров.&lt;br /&gt;
&lt;br /&gt;
Я уверен, что таких компаний немало.&lt;br /&gt;
В мире open-source ПО, есть пара распределенных&lt;br /&gt;
систем, которых стоит посмотреть прямо сейчас.&lt;br /&gt;
Очевидно одна из них — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
И вы, конечно, должны выбрать ее.&lt;br /&gt;
&lt;br /&gt;
Но есть и другая — Mercurial, которая на самом деле очень похожа по архитектуре.&lt;br /&gt;
Есть некоторые различия в деталях архитектуры и большие различия в реализации,&lt;br /&gt;
но в сухом остатке модели очень похожи.&lt;br /&gt;
Только &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает это лучше.&lt;br /&gt;
&lt;br /&gt;
Все остальное либо централизованное, либо сырое, либо слишком медленное&lt;br /&gt;
для достаточно больших проектов.&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} А какие преимущества у компании, когда все играются в собственных песочницах?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Я думаю, что есть полно компаний, считающих, что такие преимущества есть.&lt;br /&gt;
&lt;br /&gt;
Я знаю это от инсайдеров, и не думаю, что многие компании&lt;br /&gt;
осознанно используют &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, в смысле, чтобы решение по его использованию&lt;br /&gt;
было принято на уровне корпоративного стандарта.&lt;br /&gt;
&lt;br /&gt;
Я знаю несколько компаний, которые внутри&lt;br /&gt;
используют &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, не подозревая об этом, потому что они все еще держат&lt;br /&gt;
свои главные репозитории в Subversion, но многие разработчики затем&lt;br /&gt;
импортируют код в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, потому что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; действительно хорошо выполняет слияния.&lt;br /&gt;
Так что вы можете взять дерево веток из Subversion, импортировать в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
позволить &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сделать слияние,&lt;br /&gt;
что было бы основной головной болью в Subversion,&lt;br /&gt;
зафиксировать изменения и фактически экспортировать их назад в Subversion,&lt;br /&gt;
и никто другой даже не узнает, что вы использовали &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Немного грустно, но я слышал о многих,&lt;br /&gt;
работающих в компаниях в точности по этому сценарию.&lt;br /&gt;
&lt;br /&gt;
А вот чтобы постоянно использовать &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; подряд в течении полугода или больше — таких людей пока еще мало.&lt;br /&gt;
&lt;br /&gt;
Мы сделали масштабные улучшения пользовательских интерфейсов,&lt;br /&gt;
честно говоря, еще год назад в коммерческих компаниях&lt;br /&gt;
многие говорили, что его слишком трудно использовать.&lt;br /&gt;
&lt;br /&gt;
Я думаю, что мы прошли переломный момент.&lt;br /&gt;
Git намного проще использовать, чем CVS, правда-правда!&lt;br /&gt;
 &lt;br /&gt;
Большинство людей склоняются к … э-мнэ-э, он проще в использовании, чем что-либо еще.&lt;br /&gt;
Это всего лишь,… забудьте это.&lt;br /&gt;
Вы не обязаны использовать все его мощные возможности,&lt;br /&gt;
некоторые из них могут&lt;br /&gt;
быть тем, что вы хотели бы объяснить и представить людям только&lt;br /&gt;
после того, как они преодолеют начальные трудности&lt;br /&gt;
понимания того, что действительно означает распределенность,&lt;br /&gt;
но основные вещи делать действительно легко.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-34-59.000.jpg|frame|right|Как вы сводите к минимуму конфликты слияний?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Одна из характеристик централизованных систем — это то, что именно&lt;br /&gt;
тот разработчик, который должен коммитить, обязан также&lt;br /&gt;
провести слияние. Как с этим в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?&lt;br /&gt;
И как вы сводите к минимуму конфликты слияний?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Спасибо, что спросили меня об этом!&lt;br /&gt;
Это не вас ли я просил задать этот вопрос?&lt;br /&gt;
&lt;br /&gt;
Одно из самых приятных свойств &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; это то, что он реально проще&lt;br /&gt;
разбирается со слиянием, чем все остальные системы.&lt;br /&gt;
Объединение ветвей в CVS происходит крайне мучительно, просто невыносимо.&lt;br /&gt;
&lt;br /&gt;
По моим подсчетам ядро Линукса — это на самом деле один из крупнейших&lt;br /&gt;
проектов с открытыми исходниками.&lt;br /&gt;
У нас &amp;lt;tt&amp;gt;22 000&amp;lt;/tt&amp;gt; файлов.&lt;br /&gt;
&lt;br /&gt;
Мы используем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; уже два года.&lt;br /&gt;
В течение этих двух лет у нас было в среднем &amp;lt;tt&amp;gt;4.5&amp;lt;/tt&amp;gt; слияния в день!&lt;br /&gt;
&lt;br /&gt;
Если бы слияние было бы сложным, то точно пользовались чем-то другим.&lt;br /&gt;
Так что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает слияния простыми.&lt;br /&gt;
&lt;br /&gt;
Но у вас неизбежно возникнут разборки между какими-нибудь двумя программистами,&lt;br /&gt;
из тех, кто шлет мне просьбы «пожалуйста, возьми мой код»,&lt;br /&gt;
а я беру первый попавшийся вариант, просто потому что его заявка оказалась&lt;br /&gt;
раньше в моем почтовом ящике.&lt;br /&gt;
&lt;br /&gt;
А другой чел поменял код так сильно и его версия настолько конфликтует с остальными&lt;br /&gt;
(такое бывает, правда не очень часто),&lt;br /&gt;
что я говорю: «Я мог бы это пофиксить, но мне лень».&lt;br /&gt;
В их области я не программирую — это не моя сфера интересов,&lt;br /&gt;
это сетевые технологии или что-то в этом духе,&lt;br /&gt;
я просто не могу разобраться и оценить этот код, не могу его тестировать,&lt;br /&gt;
так что просить меня разобраться с этим слиянием — просто глупо,&lt;br /&gt;
так дела не делаются.&lt;br /&gt;
&lt;br /&gt;
Ага, комп с Виндой опять погас.&lt;br /&gt;
&lt;br /&gt;
Итак, помните, что распределенная модель означает, что «особенных» нет.&lt;br /&gt;
&lt;br /&gt;
Поэтому вместо того чтобы самому разбираться со слиянием,&lt;br /&gt;
я вытаскиваю первое дерево файлов, в котором не было никаких проблем,&lt;br /&gt;
и говорю второму участнику:&lt;br /&gt;
«Эй, я пробовал подгрузить твой код, но там была туча конфликтов со слиянием,&lt;br /&gt;
совсем не тривиальных, так что я решил, что тебе стоит разобраться с этим самому».&lt;br /&gt;
&lt;br /&gt;
И они разбираются.&lt;br /&gt;
Они знают, что делать, потому что это их изменения.&lt;br /&gt;
&lt;br /&gt;
Итак, они объединяют изменения и, вероятно, считают меня дебилом,&lt;br /&gt;
потому что слияние для них так просто и очевидно,&lt;br /&gt;
что я должен был принять их код с самого начала.&lt;br /&gt;
&lt;br /&gt;
Зато они сами объединяют изменения, обновляют свое дерево файлов и говорят мне:&lt;br /&gt;
«Эй, теперь можешь забирать рабочий вариант», и я загружаю себе их версию.&lt;br /&gt;
Они прекрасно сделали всю работу за меня.&lt;br /&gt;
&lt;br /&gt;
В этом-то и есть вся прелесть: ''они все сделали за меня''.&lt;br /&gt;
А мне достаются честь и хвала!&lt;br /&gt;
Далее мне просто нужно подсчитать третью составляющую — ''PROFIT!!!''&lt;br /&gt;
&lt;br /&gt;
Все это аспект, естественным образом возникающий в распределенных системах,&lt;br /&gt;
это не особенность &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;. Да, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; справляется со слияниями гораздо проще, чем все остальные,&lt;br /&gt;
но это свойство вытекает из самой распределенной модели.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-38-02.885.jpg |frame|right|…зачем вам так нужно иметь эту распределенную систему?]]&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} Слушай, я не совсем понимаю, зачем вам так нужно&lt;br /&gt;
иметь эту распределенную систему…&lt;br /&gt;
Ну да, вроде получаешь кучу преимуществ, по крайней мере&lt;br /&gt;
для коммерческой разработки, да и для разработки open-source наверно очень полезно,&lt;br /&gt;
поскольку каждый может работать сам по себе,&lt;br /&gt;
но, когда у тебя централизованная СУВ, общая структура директорий и файлов,&lt;br /&gt;
не окажется ли, что централизованная система с дешевыми ветками&lt;br /&gt;
даст тот же самый эффект?&lt;br /&gt;
Или такое просто невозможно?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Я готов поспорить, что централизованные системы не могут работать нормально,&lt;br /&gt;
но если у вас корпоративная среда с жестким контролем, то, действительно,&lt;br /&gt;
централизованные системы работают лучше,&lt;br /&gt;
и, безусловно, правда в том, что люди используют централизованные системы&lt;br /&gt;
в течение последних 35 лет.&lt;br /&gt;
И никто не будет спорить с тем, что централизованные системы не могут работать.&lt;br /&gt;
&lt;br /&gt;
Они не могут работать так же хорошо, как и распределенные системы!&lt;br /&gt;
&lt;br /&gt;
Одна из проблем состоит в том, что у централизованных систем неизбежны проблемы&lt;br /&gt;
при совместной работе групп из разных мест.&lt;br /&gt;
&lt;br /&gt;
Как правило, они отлично работают если у вас лежит толстенное оптоволокно,&lt;br /&gt;
и я думаю, что у Гугла наверняка есть своя достойная внутренняя сеть,&lt;br /&gt;
так что эта проблема для вас, в отличие от остальных, не настолько критична,&lt;br /&gt;
но, поверьте мне, когда вам не нужно лезть в сеть за каждым файлом,&lt;br /&gt;
это существенно улучшает производительность.&lt;br /&gt;
&lt;br /&gt;
Эээ… мда, я не могу показать вам демонстрацию,&lt;br /&gt;
да и не так уж она интересна,&lt;br /&gt;
но это ноутбук 4-5-летней давности.&lt;br /&gt;
Что-то типа ''Pentium-M 1.6 GHz''.&lt;br /&gt;
&lt;br /&gt;
Я мог бы показать вам, что полный &amp;lt;tt&amp;gt;diff&amp;lt;/tt&amp;gt; проекта Linux Kernel&lt;br /&gt;
на этом ноуте займет чуть больше секунды.&lt;br /&gt;
&lt;br /&gt;
На моей основной машине, это уже будет меньше десятой доли секунды.&lt;br /&gt;
&lt;br /&gt;
Это прирост производительности, которого вы никогда не добьетесь,&lt;br /&gt;
работая по сети.&lt;br /&gt;
&lt;br /&gt;
Как только вы стали использовать сеть, хоть для пары пакетов,&lt;br /&gt;
вы уже впустую потратили производительность.&lt;br /&gt;
&lt;br /&gt;
Так что если у вас децентрализованная система, и вы привыкли&lt;br /&gt;
делать &amp;lt;tt&amp;gt;commit&amp;lt;/tt&amp;gt; или &amp;lt;tt&amp;gt;diff&amp;lt;/tt&amp;gt; всего дерева исходников за 30 секунд,&lt;br /&gt;
то, может быть, 30 секунд вам не покажутся злом.&lt;br /&gt;
&lt;br /&gt;
Но поверьте, когда вы привыкли делать это за одну десятую секунды,&lt;br /&gt;
30 секунд — это полный отстой.&lt;br /&gt;
&lt;br /&gt;
Так что, даже если вас супер сеть, всегда есть проблемы с производительностью.&lt;br /&gt;
Не говоря уж о том, что у большинства и в помине нету хорошей сети.&lt;br /&gt;
&lt;br /&gt;
Другая заморочка — это ветки. Даже если вы&lt;br /&gt;
очень эффективно реализовали ветвления, сам факт того, что вы создаете&lt;br /&gt;
ветки и каждый может их увидеть, потому что все централизовано, означает,&lt;br /&gt;
что волей-неволей вам не захочется делать никаких веток.&lt;br /&gt;
&lt;br /&gt;
У вас будут проблемы с пространством имен.&lt;br /&gt;
&lt;br /&gt;
Как вы назовете свою ветку?&lt;br /&gt;
Вы назовете ее «test»?&lt;br /&gt;
Ага-ага, уже есть 5000 других веток,&lt;br /&gt;
названных «test1», «test2», … «test5000», так что вам теперь придется&lt;br /&gt;
выдумывать новые правила именования&lt;br /&gt;
ваших веток, потому что у вас централизованная система&lt;br /&gt;
с централизованным пространством имен у ветвей,&lt;br /&gt;
что совершенно неизбежно при работе с централизованной системой.&lt;br /&gt;
&lt;br /&gt;
Как же это работает в распределенной среде разработки?&lt;br /&gt;
&lt;br /&gt;
Вы называете свою ветку «test», и все!&lt;br /&gt;
Ну на самом деле, вам не следовало бы ее так называть, веткам нужно давать имена&lt;br /&gt;
согласно их функциональности; называйте их кратко, благозвучно&lt;br /&gt;
и конкретно — что эта ветвь делает.&lt;br /&gt;
&lt;br /&gt;
Git дает вам по умолчанию одну ветку под названием «master»:&lt;br /&gt;
красиво, коротко и ясно — это ваш основной ствол.&lt;br /&gt;
&lt;br /&gt;
Но вы можете создать ветку под названием&lt;br /&gt;
«experimental-feature-x» — и все будет понятно.&lt;br /&gt;
&lt;br /&gt;
Но в централизованной среде вы просто не сможете так сделать.&lt;br /&gt;
Вы не можете назвать ветку «experimental-feature-x».&lt;br /&gt;
Вы должны придумывать тупые, идиотские названия.&lt;br /&gt;
&lt;br /&gt;
Я работал в компании, у которой были прекрасные скрипты для CVS,&lt;br /&gt;
настолько прекрасные, насколько это возможно, они помогали создавать ветки.&lt;br /&gt;
Вы даже могли создать ветку с помощью одной простой команды,&lt;br /&gt;
это не занимало много времени — система фиксировала имя вашей ветки,&lt;br /&gt;
добавляя к ней число.&lt;br /&gt;
Вы определяете базовое имя, говоря:&lt;br /&gt;
«это моя ветка, она делает то-то и то-то», и система называет&lt;br /&gt;
вашу ветвь: «то-то-и-то-то—56».&lt;br /&gt;
&lt;br /&gt;
И система добавит тег/закладку там, где вы начали разрабатывать эту ветку,&lt;br /&gt;
потому что в CVS вам приходится это делать…&lt;br /&gt;
Это занимало некоторое время, но работало.&lt;br /&gt;
&lt;br /&gt;
Вы можете так извращаться в централизованных системах, но вам не нужно этого делать!&lt;br /&gt;
&lt;br /&gt;
Ваша система децентрализована, она просто работает.&lt;br /&gt;
&lt;br /&gt;
Именно так все и должно работать.&lt;br /&gt;
&lt;br /&gt;
Итак, я ничего не утверждаю, я не собираюсь вас убеждать переходить&lt;br /&gt;
на децентрализованную систему,&lt;br /&gt;
я просто констатирую факт: «Вы тупые уроды»!&lt;br /&gt;
&lt;br /&gt;
Таков расклад.&lt;br /&gt;
&lt;br /&gt;
Как бы то ни было, перейдем к слайду «Performance».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-43-15.833.jpg|frame|right|…сколько файлов осилит &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} Могу я задать вопрос?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Давай.&lt;br /&gt;
&lt;br /&gt;
'''Зритель''':&lt;br /&gt;
&lt;br /&gt;
{{question}} На самом деле, два вопроса.&lt;br /&gt;
Первый: сколько файлов осилит &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;?&lt;br /&gt;
а второй, представьте, что у вас здоровенная древовидная структура файлов в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
возможно ли извлечь только часть этой структуры?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Отличные вопросы.&lt;br /&gt;
&lt;br /&gt;
На самом деле, эти вопросы цепляют совсем другую тему,&lt;br /&gt;
хотя они связаны с производительностью.&lt;br /&gt;
&lt;br /&gt;
Одно из особенных свойств &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; — отслеживание изменений всего содержимого,&lt;br /&gt;
и это отличает &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; даже от [[EnPedia:Mercurial_(software)|Mercurial]], несмотря на то, что они очень похожи.&lt;br /&gt;
&lt;br /&gt;
Он никогда не отслеживает отдельный файл.&lt;br /&gt;
Вы не можете прослеживать изменения файла в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ну, вы можете проследить изменения проекта, в котором один единственный файл.&lt;br /&gt;
Если в вашем проекте один файл, то у вас все получится,&lt;br /&gt;
но если вы отслеживаете изменения в десяти тысячах файлов, то &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; никогда не будет&lt;br /&gt;
возиться с ними по отдельности.&lt;br /&gt;
 &lt;br /&gt;
Git думает, что все вокруг — это единый проект.&lt;br /&gt;
Вся история в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; основана на истории проекта целиком.&lt;br /&gt;
&lt;br /&gt;
Отсюда — важные следствия для производительности.&lt;br /&gt;
&lt;br /&gt;
Когда вы используете CVS, вполне нормально, хотя и глупо,&lt;br /&gt;
иметь один здоровенный репозиторий с миллионом файлов внутри.&lt;br /&gt;
&lt;br /&gt;
Таким образом, в конце дня, поскольку CVS думает о каждом&lt;br /&gt;
из миллиона файлов по отдельности,&lt;br /&gt;
вы можете попросить CVS обновить только один единственный файл —&lt;br /&gt;
все это в рамках CVS-идеологии.&lt;br /&gt;
И это верно для множества других моментов.&lt;br /&gt;
&lt;br /&gt;
Точно также работает и BitKeeper, и это является одной из его ошибок.&lt;br /&gt;
&lt;br /&gt;
Проблема мышления в «концепции наблюдения за каждым файлом по отдельности»&lt;br /&gt;
возникает очень часто, особенно, если вы разработчик высокого уровня (как я).&lt;br /&gt;
У меня 22 тысячи файлов, и мне пофигу, что происходит с одним из них.&lt;br /&gt;
Возможно, я буду следить за подмножеством из тысячи файлов,&lt;br /&gt;
например, коллекцией файлов по подсистеме USB.&lt;br /&gt;
Но я никогда не беспокоюсь о каком-то отдельном файле.&lt;br /&gt;
&lt;br /&gt;
Поэтому &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; следит за всем, как за коллекцией файлов,&lt;br /&gt;
и если вы попросите историю конкретного файла,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; буквально начнет с глобальной истории и упростит ее.&lt;br /&gt;
Это очень эффективная система, вам даже в голову не придет что это так,&lt;br /&gt;
но в действительности, когда вы пытаетесь следить за миллионом файлов&lt;br /&gt;
в репозитории, а потом просите историю конкретного файла — это очень тормозит систему.&lt;br /&gt;
Таким образом, свойства масштабирования у &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сильно отличаются от других систем,&lt;br /&gt;
благодаря этой фундаментальной особенности.&lt;br /&gt;
&lt;br /&gt;
Мы работали с большими репозиториями.&lt;br /&gt;
Мы импортировали историю проекта KDE из SVN, может быть, не всего,&lt;br /&gt;
но уж &amp;lt;m&amp;gt;\frac34&amp;lt;/m&amp;gt; точно.&lt;br /&gt;
И KDEнутые … эээ… ''Я не должен так их называть… Я не буду, поверьте, мне нравится KDE.''&lt;br /&gt;
&lt;br /&gt;
Но они засунули все компоненты в один репозиторий!&lt;br /&gt;
Не слишком умно.&lt;br /&gt;
Получилось так, что тот репозиторий, который, думаю, весил 8 Гб под CVS,&lt;br /&gt;
в SVN разбух еще в три раза!&lt;br /&gt;
Ну может там было меньше 8 Гб под CVS, но он был действительно огромным.&lt;br /&gt;
Точно больше 4 Гб.&lt;br /&gt;
Git же сжал это безобразие до где-то 1.3 Гб.&lt;br /&gt;
&lt;br /&gt;
Итак, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; очень эффективен в обработке этого проекта,&lt;br /&gt;
почти все работает отлично, но не все и не всегда.&lt;br /&gt;
&lt;br /&gt;
Система не заработает хорошо, если вы поместите миллион файлов&lt;br /&gt;
в один репозиторий при начальном клонировании.&lt;br /&gt;
Когда вы его запрашиваете, вы получаете его целиком.&lt;br /&gt;
Вы сваливаете все в один репозиторий, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; думает, что это один обьект.&lt;br /&gt;
Не делайте так.&lt;br /&gt;
&lt;br /&gt;
Если у вас есть множество компонентов, размещайте их в отдельные репозитории,&lt;br /&gt;
вы можете даже создать суперпроект, в котором содержатся указатели&lt;br /&gt;
на другие проекты, при этом что-то теряется в пользовательском интерфейсе,&lt;br /&gt;
но вы храните разные проекты по отдельности.&lt;br /&gt;
Тогда вы избежите проблемы «получения всего сразу».&lt;br /&gt;
Потому что с &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вам придется получить все и сразу.&lt;br /&gt;
&lt;br /&gt;
'''Из зала''':&lt;br /&gt;
{{question}} Как насчет разделяемого кода?&lt;br /&gt;
&lt;br /&gt;
'''Линус''':&lt;br /&gt;
&lt;br /&gt;
Если они все «расшарили» свой код, что вы можете сделать с помощью &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
если у вас действительно много «расшаренных» файлов,&lt;br /&gt;
то поскольку &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; внутри использует «файловую систему идентифицируемую содержимым»,&lt;br /&gt;
то если существуют одинаковые по содержанию файлы,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; будет использовать для них в точности один и тот же объект.&lt;br /&gt;
И сохранит вам тонны свободного места.&lt;br /&gt;
&lt;br /&gt;
И у вас могут быть эти расшаренные объекты, и в тоже время&lt;br /&gt;
они могут храниться у вас как отдельные сущности.&lt;br /&gt;
Вы также можете хранить их в раздельных репозиториях,&lt;br /&gt;
но лежащих на одной разделяемой файловой системе.&lt;br /&gt;
Вы можете это сделать!&lt;br /&gt;
 &lt;br /&gt;
Если у вас действительно есть расшаренный код, ну например, &lt;br /&gt;
библиотека, которая используется в пяти разных местах,&lt;br /&gt;
то если вам стоить использовать поддержку супер-проекта, где у вас есть&lt;br /&gt;
один репозиторий &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, который просто отслеживает остальные репозитории &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
(и он тоже может содержать например, разделяемую инфраструктуру сборки),&lt;br /&gt;
но при этом индивидуальные части остаются индивидуальными.&lt;br /&gt;
 &lt;br /&gt;
Это похоже на модули CVS.&lt;br /&gt;
В CVS модули не до конца индивидуальны, но это потому,&lt;br /&gt;
что в CVS каталог — это вещь, которая всегда сама по себе,&lt;br /&gt;
так что модуль CVS — это комбинация «каталожности» и их отслеживания,&lt;br /&gt;
но в целом вы можете думать об этом как о модулях CVS.&lt;br /&gt;
&lt;br /&gt;
В общем, мы поддерживаем такую возможность, но вынужден согласиться,&lt;br /&gt;
что код довольно сырой, и это единственная область, где&lt;br /&gt;
наши пользовательские интерфейсы определенно отстают.&lt;br /&gt;
&lt;br /&gt;
Возможно, я забыл ответить на какую-то часть вашего вопроса.&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.0-49-34.467.jpg|frame|right|Можно ли извлечь из репозитория только часть файлов?]]&lt;br /&gt;
&lt;br /&gt;
'''Из зала:'''&lt;br /&gt;
&lt;br /&gt;
{{question}} Можно ли извлечь из репозитория только часть файлов, а не целый репозиторий?&lt;br /&gt;
&lt;br /&gt;
'''Линус:'''&lt;br /&gt;
&lt;br /&gt;
Вы можете экспортировать тарболы или отдельные файлы,&lt;br /&gt;
вы можете переписать всю историю, сказав&lt;br /&gt;
«Я хочу новую версию этого репозитория, которая содержит только эту часть»,&lt;br /&gt;
вы можете это сделать, это довольно дорогая операция,&lt;br /&gt;
это что-то типа, импорта старого репозиторий в новый огромный репозиторий,&lt;br /&gt;
который потом делиться на меньшие части.&lt;br /&gt;
Вы можете это сделать, но я подчеркиваю, что следует этого избегать.&lt;br /&gt;
&lt;br /&gt;
Неверно, что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; не может обрабатывать большие проекты,&lt;br /&gt;
просто производительность будет не так хороша,&lt;br /&gt;
а вы будете иметь проблемы, которых можно было бы избежать.&lt;br /&gt;
&lt;br /&gt;
Так что я пропускаю этот вопрос и возвращаюсь к теме производительности.&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
&lt;br /&gt;
Одна из вещей, которую я хочу сказать по поводу производительности,&lt;br /&gt;
это то, что, похоже, огромное количество людей, кажется, думают, что&lt;br /&gt;
производительность это «как делать то же самое, но быстрее»,&lt;br /&gt;
а это неправда.&lt;br /&gt;
&lt;br /&gt;
''[показывает слайд «Производительность».]''&lt;br /&gt;
[[Image:Linus-git-googletalk.0-51-10.996.jpg|right]]&lt;br /&gt;
&lt;br /&gt;
Производительность — в первую очередь не это.&lt;br /&gt;
&lt;br /&gt;
Если вы можете делать что-то действительно быстро,&lt;br /&gt;
действительно хорошо, люди начнут использовать это по-другому.&lt;br /&gt;
&lt;br /&gt;
Одна из вещей, в которой я хочу вас убедить — это&lt;br /&gt;
то, что слияния происходят очень-очень быстро, потому что&lt;br /&gt;
я хочу, чтобы люди сливали как можно раньше и чаще,&lt;br /&gt;
потому что тогда это легче делать.&lt;br /&gt;
Если вы объединяете изменения каждый день, вы никогда не попадете&lt;br /&gt;
в неожиданную ситуацию с тяжелыми трудноразрешимыми конфликтами.&lt;br /&gt;
&lt;br /&gt;
Итак, если вы действительно легко делаете ветвление и слияние,&lt;br /&gt;
вы избегаете целого класса проблем, которые в противном случае&lt;br /&gt;
требуют много-много времени, чтобы их избежать.&lt;br /&gt;
&lt;br /&gt;
Например, давайте вернемся к одной из вещей, где,&lt;br /&gt;
как мне кажется, разработчики Subversion показали себя полными идиотами.&lt;br /&gt;
&lt;br /&gt;
Жестко сказано, правда?&lt;br /&gt;
&lt;br /&gt;
Наверняка несколько из них сейчас в этой комнате.&lt;br /&gt;
&lt;br /&gt;
Ну вы и тупые!&lt;br /&gt;
&lt;br /&gt;
''[смех]''&lt;br /&gt;
&lt;br /&gt;
Например, Subversion очень шумно хвалится, что&lt;br /&gt;
они исправили CVS, сделав ветвления дешевыми.&lt;br /&gt;
Это есть на их главной странице, где они вроде говорят,&lt;br /&gt;
что ветвление в SVN требует ''O(1)'' операций,&lt;br /&gt;
и что можно сделать дешевых ветвей столько, сколько хотите.&lt;br /&gt;
&lt;br /&gt;
Неважно, что ''O(1)'', мне кажется, на самом деле имеет&lt;br /&gt;
довольно большое ''O'', но даже если ветвление занимает микросекунду,&lt;br /&gt;
кого это волнует?&lt;br /&gt;
&lt;br /&gt;
Вы меряете не то, что нужно.&lt;br /&gt;
&lt;br /&gt;
Ветки полностью бесполезны, если Вы не объединяете их,&lt;br /&gt;
а CVS не может объединить вообще ничего.&lt;br /&gt;
Вы можете слить изменения однажды,&lt;br /&gt;
но тогда CVS забывает то, что вы сделали, и вы никогда не&lt;br /&gt;
сможете объединять снова, не получая адские конфликты.&lt;br /&gt;
Слияния в Subversion — полная беда.&lt;br /&gt;
Разработчики Subversion отчасти признают это, и у них есть некий замысел,&lt;br /&gt;
но эти идеи тоже фигня.&lt;br /&gt;
&lt;br /&gt;
Невероятно, насколько эти люди глупы.&lt;br /&gt;
Они все время смотрели на проблему неверно.&lt;br /&gt;
Проблема-то не в ветвлении, а в слиянии!&lt;br /&gt;
А нормальное слияние они так за пять лет и не сделали.&lt;br /&gt;
Вот что грустно.&lt;br /&gt;
&lt;br /&gt;
Итак, быстродействие важно, но надо смотреть в корень проблемы.&lt;br /&gt;
&lt;br /&gt;
Затраты на то, чтобы сделать ветку под &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
буквально заключаются в создании 41-байтного файла.&lt;br /&gt;
Ну насколько это быстро, как думаете?&lt;br /&gt;
Не думаю, что вы даже сможете это измерить.&lt;br /&gt;
Вы можете, в общем, если вы используете Windows, вероятно&lt;br /&gt;
вы можете измерить это, потому что… [''аудитория: смех'']&lt;br /&gt;
но как бы то ни было, это так быстро, что реально вы&lt;br /&gt;
не сможете это измерить.&lt;br /&gt;
И это создает ветку.&lt;br /&gt;
Но никого это не волнует, это-то не проблема.&lt;br /&gt;
&lt;br /&gt;
Единственное, что важно, это как быстро вы можете сливать изменения.&lt;br /&gt;
В &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; вы можете объединить… я сливаю изменения в 22 тысячах файлов несколько раз в день, и я недоволен,&lt;br /&gt;
если объединение занимает более пяти секунд,&lt;br /&gt;
и все эти пять секунд загружаются в основном уходят на загрузку ''diffs'', ладно, не ''diffs'',&lt;br /&gt;
а дельты между двумя деревьями, а само объединение занимает менее&lt;br /&gt;
чем полсекунды.&lt;br /&gt;
&lt;br /&gt;
И я не должен думать об этом.&lt;br /&gt;
&lt;br /&gt;
Вот что длится дольше чем слияние, это то, что после каждого слияния,&lt;br /&gt;
по умолчанию &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; сделает &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt;&lt;br /&gt;
всего, что изменилось в результате объединения, потому что&lt;br /&gt;
мне это важно.&lt;br /&gt;
Когда я вливаю чьи-то изменения, я им доверяю, но с другой стороны,&lt;br /&gt;
вдруг они уже забросили свои лекарства?&lt;br /&gt;
Так что я доверяю им, да, но будем говорить начистоту — может&lt;br /&gt;
они были в порядке вчера, но сегодня был не их день…&lt;br /&gt;
Так что для контроля я делаю &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; и &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; тоже делает &amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; по умолчанию,&lt;br /&gt;
хотя вы конечно можете для скорости его отключить, но лучше не надо,&lt;br /&gt;
&amp;lt;tt&amp;gt;diffstat&amp;lt;/tt&amp;gt; по-любому быстр, и обычно занимает…, ну если большое слияние,&lt;br /&gt;
обычно занимает секунду-другую.&lt;br /&gt;
Поскольку создание ''diff'' и фактически подсчет статистики о том, сколько&lt;br /&gt;
строк изменилось — намного более затратная операция,&lt;br /&gt;
чем выполнение непосредственно слияния.&lt;br /&gt;
&lt;br /&gt;
Это вид быстродействия, который фактически изменяет ваш стиль работы.&lt;br /&gt;
Это не улучшения быстродействия тех же действий, а возможность работать&lt;br /&gt;
совершенно по-другому.&lt;br /&gt;
Вот что на самом деле означает производительность, и вот почему&lt;br /&gt;
вам не стоить смотреть ни на что, кроме &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Hg (Mercurial) довольно хорош, но &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; лучше.&lt;br /&gt;
&lt;br /&gt;
Я думаю, что у меня заканчивается время, мы посмотрим, есть ли еще …,&lt;br /&gt;
… о, ОК это все еще интересно.&lt;br /&gt;
&lt;br /&gt;
Мы еще не добрались до части про реализацию,&lt;br /&gt;
но не беспокойтесь, я сейчас я много об этом расскажу:&lt;br /&gt;
реализация очень проста.&lt;br /&gt;
&lt;br /&gt;
Код и структуры данных очень-очень-очень просты.&lt;br /&gt;
Если вы посмотрите на исходный текст и поймете,&lt;br /&gt;
что там всего где-то 80000 строк, в основном на Cи,&lt;br /&gt;
ну на таком Си, на котором пишу я — большинство его не понимает,&lt;br /&gt;
но зато я комментирую код.&lt;br /&gt;
&lt;br /&gt;
Исходный код может порой выглядеть сложным,&lt;br /&gt;
потому что мы очень печемся о производительности, особенно я.&lt;br /&gt;
Я действительно забочусь об этом, и иногда заставляю вещи работать сильно быстрее,&lt;br /&gt;
но при этом приходится использовать более сложные алгоритмы,&lt;br /&gt;
чем последовательная проверка файлов по очереди.&lt;br /&gt;
Когда вы делаете слияние 22 тысяч файлов, вы не хотите проверять по одному файлу,&lt;br /&gt;
вы хотите посмотреть все дерево сразу и сказать:&lt;br /&gt;
«А они же одинаковые, я не должен ничего делать».&lt;br /&gt;
В общем, &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; делает все такие штуки, и все это несколько раздувает объем кода,&lt;br /&gt;
ибо по-уму все это сделать непросто, но основы все же очень и очень просты.&lt;br /&gt;
&lt;br /&gt;
И одна из этих основ, это аспект безопасности и надежности.&lt;br /&gt;
&lt;br /&gt;
''Показывает слайд:''&lt;br /&gt;
[[Image:linus-git-googletalk.0-56-39.330.jpg|center]]&lt;br /&gt;
&lt;br /&gt;
Когда &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; отслеживает ваш проект, мы сжимаем каждый блок данных,&lt;br /&gt;
вычисляя дельту (различия) по отношению ко всем другим блокам,&lt;br /&gt;
кроме того мы вычисляем SHA-1 хеш, который проверяется при&lt;br /&gt;
необходимости достать этот блок.&lt;br /&gt;
&lt;br /&gt;
Если у вас побился диск или память, или что-то еще в этом роде — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; об этом сообщит.&lt;br /&gt;
Это даже не вопрос. Это безусловная и безоговорочная гарантия.&lt;br /&gt;
&lt;br /&gt;
У вас могут быть люди, пытающиеся навредить.&lt;br /&gt;
У них не выйдет.&lt;br /&gt;
&lt;br /&gt;
Вам нужно точно знать 20 байтов 160-битного SHA-1 хеша от верхушки вашего дерева,&lt;br /&gt;
и если вы их знаете, вы сможете доверять вашему дереву сверху донизу,&lt;br /&gt;
всей истории целиком.&lt;br /&gt;
У вас может быть десять лет истории проекта с сотней тысяч файлов,&lt;br /&gt;
миллионами ревизий, но вы сможете доверять любой части любой ревизии.&lt;br /&gt;
Потому что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; такой надежный, и все его основные структуры данных&lt;br /&gt;
очень-очень просты.&lt;br /&gt;
&lt;br /&gt;
Да, мы проверяем контрольные суммы.&lt;br /&gt;
Но мы не считаем ''слабую'' контрольную сумму, как у некоторых UDP пакетов,&lt;br /&gt;
то есть 16-битную сумму всех байтов.&lt;br /&gt;
Мы проверяем контрольные суммы, которые считаются криптографически стойкими.&lt;br /&gt;
&lt;br /&gt;
Никто не может взломать SHA-1, но дело в том, что для &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
SHA-1 это не функционал информационной безопасности,&lt;br /&gt;
а просто проверка целостности.&lt;br /&gt;
Безопасность там отдельно.&lt;br /&gt;
&lt;br /&gt;
А то полно народу думают, что раз &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; использует SHA-1,&lt;br /&gt;
а SHA-1 используется во всяком криптографическом софте,&lt;br /&gt;
то наверно это крутая фича в безопасности.&lt;br /&gt;
Так вот, ничего тут нет общего с безопасностью,&lt;br /&gt;
это просто самый лучший хеш из имеющихся.&lt;br /&gt;
&lt;br /&gt;
Хороший хеш дает гарантию целостности данных, а также&lt;br /&gt;
кучу других возможностей, например, то, что когда мы хешируем обьекты,&lt;br /&gt;
мы знаем, что получившийся хеш будет иметь добротное, годное распределение,&lt;br /&gt;
и нам не нужно беспокоится о разных проблемах с ним.&lt;br /&gt;
С точки зрения реализации, это означает, что мы считаем, что&lt;br /&gt;
хеш настолько хорош, что мы можем использовать этот алгоритм хеширования,&lt;br /&gt;
и считать, что у нас нет плохих случаев (коллизий).&lt;br /&gt;
&lt;br /&gt;
Ну то есть, есть тут некоторые основания и с криптографической стороны,&lt;br /&gt;
но все это только про гарантии целостности ваших данных.&lt;br /&gt;
Я вам гарантирую, что если вы положите ваши данные в &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
спустя пять лет, даже если вы сконвертировали их с вашего&lt;br /&gt;
винчестера на какой нибудь DVD, или что там будет вместо него, &lt;br /&gt;
вы сможете проверить ваши данные и вернуть их назад в том же состоянии,&lt;br /&gt;
в котором вы поместили их в систему.&lt;br /&gt;
Именно этого вы и должны ждать от любой системы контроля версий.&lt;br /&gt;
&lt;br /&gt;
Одна из причин, по которой я так агитирую за это, состоит в том,&lt;br /&gt;
что у нас был случай со взломом одного из сайтов BitKeeper’а,&lt;br /&gt;
когда народ пытался испортить репозиторий с исходниками ядра,&lt;br /&gt;
а BitKeeper отловил эту попытку.&lt;br /&gt;
Но BitKeeper не имеет по настоящему крутого хеша,&lt;br /&gt;
думаю, там простейший 16-CRC код, или что-то типа этого.&lt;br /&gt;
 &lt;br /&gt;
В принципе, это достаточно, чтобы заметить неуклюжую попытку подмены,&lt;br /&gt;
криптографически оно ненадежно, но на практике атаки сделать уже непросто,&lt;br /&gt;
так что тогда атака была немедленно пресечена.&lt;br /&gt;
&lt;br /&gt;
Но после того, как такое случилось,&lt;br /&gt;
когда ты уже погорел на этом,&lt;br /&gt;
уже не хочется попасться в эту же ловушку снова.&lt;br /&gt;
&lt;br /&gt;
Нет, ну может ваши проекты и не очень важные, но мои проекты точно важны, и поэтому&lt;br /&gt;
я об этом так пекусь.&lt;br /&gt;
&lt;br /&gt;
Это — также одна из причин, … вернемся на секунду к концепции распределенности …,&lt;br /&gt;
ну, например, вы делаете ваш проект [[EnPedia:Google Code|Google code]],&lt;br /&gt;
где можно держать исходники в ваших репозитариях,&lt;br /&gt;
так вот — я бы никогда не доверил Google хранить и поддерживать мои исходники.&lt;br /&gt;
Извините, но вы еще не заслужили моего доверия.&lt;br /&gt;
&lt;br /&gt;
Причина, по которой я предпочитаю распределенные системы,&lt;br /&gt;
состоит в том, что я могу держать свой исходный текст позади&lt;br /&gt;
трех брандмауэров на системе, которая не позволяет даже по &amp;lt;tt&amp;gt;ssh&amp;lt;/tt&amp;gt; войти.&lt;br /&gt;
Вот здесь я не могу читать свою электронную почту, потому что моя почта&lt;br /&gt;
идет на мою машину и единственный путь, как я могу попасть на мою машину&lt;br /&gt;
— это когда я физически нахожусь в той сети.&lt;br /&gt;
&lt;br /&gt;
Может я конечно и полностью свихнулся, может только слегка сдвинулся,&lt;br /&gt;
и я забочусь о безопасности больше, чем большинство окружающих.&lt;br /&gt;
Да и вообще, чтобы я дал эталонную копию репозитария исходников,&lt;br /&gt;
о котором я так пекусь, куда-то на сторону?&lt;br /&gt;
Абсурд!&lt;br /&gt;
 &lt;br /&gt;
Даже Гуглу не дам.&lt;br /&gt;
Никогда в жизни, хоть ты меня режь.&lt;br /&gt;
&lt;br /&gt;
Я позволю Google держать копию репозитория, но&lt;br /&gt;
хочу чтобы было что-то, про что я знаю точно, что никто это не трогал.&lt;br /&gt;
&lt;br /&gt;
Кстати, я не такой уж и крутой сисадмин, так что сбой на винте&lt;br /&gt;
для меня определенно будет проблемой, так как бэкапами я не заморачиваюсь.&lt;br /&gt;
Но все будет в порядке, если я смогу загрузить обратно данные из нескольких&lt;br /&gt;
доверенных источников. Я смогу их сравнить друг с другом, это реально просто,&lt;br /&gt;
я смогу сверить их хеши с теми самыми 20 байтами, о которых я очень-очень&lt;br /&gt;
заботился — надеюсь, в нескольких местах они останутся.&lt;br /&gt;
&lt;br /&gt;
20 байтов отследить легче, чем 180 МБ.&lt;br /&gt;
&lt;br /&gt;
И очень маловероятно, что побьются именно эти 20 байтов.&lt;br /&gt;
&lt;br /&gt;
И если у меня есть эти 20 байтов, я могу загрузить &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;-репозитрий даже&lt;br /&gt;
из совершенно «левого» источника, и могу гарантировать, что они не сделали с ним ничего плохого.&lt;br /&gt;
&lt;br /&gt;
Ваш проект [Google Code] — хостинг репозитариев для народа — крутое и благое дело,&lt;br /&gt;
вот только вы неправильно делаете, если используете для него Subversion.&lt;br /&gt;
Из-за вас люди ночами спать спокойно не будут!&lt;br /&gt;
&lt;br /&gt;
Конечно, если вы делаете это для 70 … , сколько там проектов,&lt;br /&gt;
75 тысяч?&lt;br /&gt;
Большинство из них довольно мелкие и ерундовые, так что все в порядке.&lt;br /&gt;
Но если бы вы все сделали правильно, люди бы чувствовали себя получше.&lt;br /&gt;
&lt;br /&gt;
У меня есть еще несколько слайдов,&lt;br /&gt;
Но я думаю, что мы уже превысили лимит времени,&lt;br /&gt;
и не хотелось бы грузить вас их показом,&lt;br /&gt;
я думаю, они не очень интересны.&lt;br /&gt;
&lt;br /&gt;
== Content Management ==&lt;br /&gt;
&lt;br /&gt;
Я уже немного говорил на тему «Полный целостный проект vs. Отдельные файлы»,&lt;br /&gt;
и что &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; отслеживает именно полный проект.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:linus-git-googletalk.1-03-18.642.jpg|framed|right| «Это гораздо больше чем случайный набор файлов»]]&lt;br /&gt;
&lt;br /&gt;
Ну тут на слайде единственный пример с вызовом из командной строки,&lt;br /&gt;
''gitk'' — это GUI вьювер истории проекта под &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
это скрипт на tcl/tk для просмотра всей той информации, которую &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;&lt;br /&gt;
действительно хорошо показывает, а вот это пример командной строки, которую я использую как&lt;br /&gt;
«мейнтейнер» высшего уровня.&lt;br /&gt;
&lt;br /&gt;
Я хочу просто спросить «что изменилось с некоторой версии», или быть может «некоторой даты».&lt;br /&gt;
Я могу легко выяснить, что поменялось «в этих двух каталогах» или&lt;br /&gt;
«в этих двух каталогах и этом файле»,&lt;br /&gt;
и мне будет показана полная история, относящаяся к этой части репозитория.&lt;br /&gt;
&lt;br /&gt;
Это более затратно, чем просто посчитать полную историю всего проекта.&lt;br /&gt;
Если бы мой ноутбук был подключен сейчас к видеовыходу,&lt;br /&gt;
я бы показал, что все это происходит за считанные секунды,&lt;br /&gt;
то есть дороговато, но в целом ничего.&lt;br /&gt;
&lt;br /&gt;
Этот функционал &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; по-настоящему уникален!&lt;br /&gt;
Больше никто этого не может, а эта функциональность очень важна!&lt;br /&gt;
Может быть, она и не так важна для отдельного разработчика,&lt;br /&gt;
потому что отдельный разработчик часто думает в терминах отдельных файлов,&lt;br /&gt;
но важно для людей, объединяющих версии проекта.&lt;br /&gt;
Это важно для таких как я и тех, с кем я непосредственно работаю,&lt;br /&gt;
потому что они практически никогда не заботятся об отдельных файлах,&lt;br /&gt;
а вот такие вещи для них важны.&lt;br /&gt;
Кто-нибудь отправляет отчеты об ошибке, которые не всегда адекватны,&lt;br /&gt;
но пусть вам попался довольно вменяемый отчет,&lt;br /&gt;
и вы можете сразу засечь — «Ага, это подсистема SCSI».&lt;br /&gt;
&lt;br /&gt;
Вот командная строка (''указывает на слайд'').&lt;br /&gt;
&lt;br /&gt;
Вы не можете указать точно проблемный файл, но можете сказать:&lt;br /&gt;
«Удали последние 15 тысяч коммитов, сделанных с прошлой недели, и он откатит&lt;br /&gt;
проект до 50 [коммитов]»&lt;br /&gt;
&lt;br /&gt;
Это круто, и никакая другая система так не может, уверяю.&lt;br /&gt;
&lt;br /&gt;
Вот поэтому вы и должны хотеть использовать именно &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Вот к чему это сводится.&lt;br /&gt;
Он надежен и так безопасен, что вы можете делать то, что&lt;br /&gt;
остальные системы или не делают, или делают очень медленно,&lt;br /&gt;
и кроме того, он распределенный.&lt;br /&gt;
&lt;br /&gt;
Итак, продолжим.&lt;br /&gt;
Полагаю, мы можем позволить ответить на еще один вопрос.&lt;br /&gt;
Что у нас с временем, я как-то без понятия… Ладно, давайте быстро.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:linus-git-googletalk.1-05-57.109.jpg|framed|right|…будет просто дрейф проблем с масштабируемостью…?]]&lt;br /&gt;
&lt;br /&gt;
'''''Слушатель:'''''&lt;br /&gt;
&lt;br /&gt;
{{question}} Итак, причина ухода с Perforce — на самом деле масштабируемость и эффективность.&lt;br /&gt;
Иначе люди просто продолжат ее использовать.&lt;br /&gt;
И может, при переходе будет просто дрейф проблем с масштабируемостью и производительностью&lt;br /&gt;
из одной области в другую?&lt;br /&gt;
&lt;br /&gt;
'''''Линус:'''''&lt;br /&gt;
&lt;br /&gt;
Ну я уже говорил, что я без понятия, как вы работаете&lt;br /&gt;
с Perforce, и какие с ним проблемы, но если вы перейдете на &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
вы можете быть в нем уверены, если, конечно,&lt;br /&gt;
вы будете использовать его в разумных пределах.&lt;br /&gt;
А эти пределы обычно достаточно очевидны.&lt;br /&gt;
У вас есть компилятор, основные исходники,&lt;br /&gt;
документация, ну может ваша документация разбросана как-то фрагментами,&lt;br /&gt;
хотя наверняка у вас есть что-то типа пользовательской документации,&lt;br /&gt;
может в Google не так, но во многих компаниях отдельно&lt;br /&gt;
идет набор документации для потребителей&lt;br /&gt;
и документации, сопровождающей отдельные модули и пакеты.&lt;br /&gt;
&lt;br /&gt;
Так что одним из моментов использования &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;, о котором стоит подумать,&lt;br /&gt;
это как организовать разумную структуру проекта.&lt;br /&gt;
Git легко поддерживает здоровые проекты, вы можете без проблем держать в нем&lt;br /&gt;
десятки тысяч файлов, вот в Ядре, например, их 22 тысячи.&lt;br /&gt;
Мы тестировали на ста тысячах — и все было в порядке — &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; быстрей, чем что бы то ни было.&lt;br /&gt;
&lt;br /&gt;
С миллионом файлов, подозреваю, другие системы, могут быть в чем-то и побыстрее.&lt;br /&gt;
И не хотелось бы, чтобы вы попали в такую ситуацию.&lt;br /&gt;
Но если вы правильно организуете проект и грамотно настроите,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; будет и быстрее и лучше, что все остальное.&lt;br /&gt;
Я уверен в его исключительной производительности.&lt;br /&gt;
&lt;br /&gt;
Вот одна из вещей, которую мы не очень хорошо делаем,&lt;br /&gt;
это «CVS annotate»&amp;lt;ref&amp;gt;Команда, сообщающая по каждой строчке автора, совершившего в этой строчке последнее изменение и последнюю ревизию, в которой эта строчка менялась.&amp;lt;/ref&amp;gt;.&lt;br /&gt;
Люди часто используют эту команду.&lt;br /&gt;
Я говорил, что у Perforce оно тормозит, так что вы,&lt;br /&gt;
вероятно, хотя и не уверен, не используете Perforc’ный «annotate».&lt;br /&gt;
Но пользователи CVS используют «CVS annotate»,&lt;br /&gt;
эту единственную операцию, которую CVS может выполнять быстрее, чем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;,&lt;br /&gt;
потому что CVS работает «пофайлово», а &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; — нет.&lt;br /&gt;
&lt;br /&gt;
У &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; есть «annotate», но фактически это будет поиск,&lt;br /&gt;
вы можете узнать об этом, если вы переместите функцию из одного файла в другой,&lt;br /&gt;
&amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; дословно воспроизведет историю функции, даже несмотря на перемещение.&lt;br /&gt;
Внимание, не перемещение файла, а функцию в пределах файла&lt;br /&gt;
он пойдет и откопает и скажет:&lt;br /&gt;
«Эй! Эти две строки на самом деле пришли из&lt;br /&gt;
того файла 5 лет назад».&lt;br /&gt;
&lt;br /&gt;
Опять-таки, это оригинальный функционал, который больше никто не тянет,&lt;br /&gt;
и сводится он к тому же, что рулит контент проекта целиком, а не файлы по отдельности.&lt;br /&gt;
Но за это приходится платить, так что если вы отматываете лет на пять назад,&lt;br /&gt;
это может занять секунд 30.&lt;br /&gt;
На ядре это занимает секунду для любого имеющегося у меня файла,&lt;br /&gt;
ведь два года назад мы начали историю с чистого листа, решив&lt;br /&gt;
«давайте не будем усложнять то, что не требуется»,&lt;br /&gt;
— и прямо сейчас у нас имеется только двухлетняя история ядра.&lt;br /&gt;
&lt;br /&gt;
В других проектах у нас есть история и подлинней,&lt;br /&gt;
мы делали на них замеры, например, после импорта KDE и других проектов &lt;br /&gt;
с еще более длинной историей.&lt;br /&gt;
Тут бывают проблемы с производительностью, но все равно даже&lt;br /&gt;
с учетом таких проблем &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; на один-два порядка быстрее, так что&lt;br /&gt;
в основном беспокоиться не о чем.&lt;br /&gt;
&lt;br /&gt;
И если обнаружите какую-нибудь проблему, то у нас сейчас очень-очень&lt;br /&gt;
классное сообщество.&lt;br /&gt;
В &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt;-овом списке email-рассылок уровень «шума» очень мал,&lt;br /&gt;
и хотя писем там изрядное количество, это очень вменяемый мейллист.&lt;br /&gt;
Итак, если кто-то заинтересовался, посмотрите исходники,&lt;br /&gt;
но начните с просмотра архива рассылки.&lt;br /&gt;
У нас есть и свои флеймы, есть и бесцельные споры,&lt;br /&gt;
но большинство сообщений там весьма хороши.&lt;br /&gt;
&lt;br /&gt;
OK? Спасибо…&lt;br /&gt;
&lt;br /&gt;
[''апплодисменты'']&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [http://video.google.com/videoplay?docid=-7724296011317502612 Mercurial Project] — Bryan O'Sullivan на Google TechTalks о распределенной системе контроля версий [http://www.selenic.com/mercurial/ Mercurial]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=10162</id>
		<title>Continuous Integration</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=10162"/>
				<updated>2009-03-23T17:32:12Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Модульное тестирование и покрытие */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=  Введение =&lt;br /&gt;
 «Continuous Integration» — это лекарство от страха. Помогает при программировании.&lt;br /&gt;
                                          Dr. Zoidberg ©&lt;br /&gt;
&lt;br /&gt;
Согласно [http://en.wikipedia.org/wiki/Continuous_Integration Wikipedia] термин Continuous Integration введен Мартином Фаулером (Martin Fowler) и Кентом Беком (Kent Beck). Данный термин был придуман ими для обозначения практики частой сборки (интеграции) проекта. Максимально частая сборка является логичным продолжением цепочки&lt;br /&gt;
 итерационные сборки -&amp;gt; ночные сборки -&amp;gt; непрерывная сборка&lt;br /&gt;
&lt;br /&gt;
В настоящее время Continuous Integration (непрерывная интеграция) одна из практик применяемых в семействе гибких (Agile) методологий. В подобных методологиях она удачно сочитается с другими практиками, такими как модульное(unit) тестирование, рефакторинг, стандарт кодирования. Но даже без них можно получить пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
= Основные принципы =&lt;br /&gt;
&lt;br /&gt;
== Каждое изменение должно интегрироваться ==&lt;br /&gt;
&lt;br /&gt;
Слово continuous в термине [[Continuous Integration]] означает «непрерывный/непрекращающийся». Это означает, что в идеале сборка вашего проекта должна идти буквально все время. Каждое изменение в системе контроля версий (например [[CVS]]) должно интегрироваться без пропусков или задержек. Организация ночных сборок — это хорошая практика, но это не continuous integration. Ведь результаты такой ночной сборки будут доступны лишь на следующий день, когда их актуальность для разработчиков уже значительно снижена. На практике довольно часто реализуют оба процесса и непрерывную интеграция и ночные сборки — более редкую интеграцию.&lt;br /&gt;
В очень крупных проектах это требование иногда невозможно соблюсти, но интеграция каждые сутки это предел за который не стоит уходить.&lt;br /&gt;
Принцип непрерывной интеграции не выполним без другого условия — «Сборка должна идти быстро».&lt;br /&gt;
&lt;br /&gt;
== Быстрая сборка ==&lt;br /&gt;
&lt;br /&gt;
«Сборка должна идти быстро» — точнее не более 10 минут. Если после одного небольшого коммита ваш интеграционный сервер будет уходить в 2-х часовое пыхтение на сборку, тестирование и разворачивание от этого будет мало пользы. Разработчики будут уже далеко, над решение других проблем, им будет сложно вернуться и понять причины сбоя, если таковой был. Ведь суть непрерывной интеграции в получении быстрого feedback. Вдобавок, поздний ответ с сервера может отвлечь их от другого дела.&lt;br /&gt;
&lt;br /&gt;
В случае если все этапы процесса никак не удается втиснуть в приемлемые временные рамки можно разделить его на несколько частей. При каждом коммите производить лишь саму сборку и минимальный набор тестов (smoke tests), чтобы уменьшить время. А по ночам проводить полный цикл интеграции, результаты которого команда будет анализировать с утра. Но это скорее вынужденная мера, а не пример для подражания.&lt;br /&gt;
&lt;br /&gt;
== Сделайте тесты ==&lt;br /&gt;
&lt;br /&gt;
Тесты просто необходимо включать в continuous integration процесс, в противном случае вы не можете быть уверены в качестве и работоспособности своего проекта. Чем тестов больше, тем лучше, в разумных пределах конечно. Основными двумя ограничителями на количество тестов будет:&lt;br /&gt;
* время интеграции — сборка по-прежнему должна оставаться быстрой, основное тестирование можно перенести «на ночь»,&lt;br /&gt;
* наличие автоматизированных тестов — не все тесты требуют автоматизации, нет смысла делать автоматизированные тесты только для самих тестов, они должны быть целесообразны.&lt;br /&gt;
&lt;br /&gt;
Чем лучше ваши тесты, тем раньше находяться ошибки и раньше исправляются. Как известно, чем раньше ошибка исправлена, тем дешевле ее исправление. Это одно из основных преимуществ практики непрерывной интеграции — снижение стоимости исправления ошибок (не всех конечно). Попутно наличие хорошего набора тестов в процессе интеграции дает больше уверенности в том, что проект работает правильно.&lt;br /&gt;
&lt;br /&gt;
Именнно присутствие тестов одно из отличий интеграции от нажатия кнопки Build в вашей любимой IDE.&lt;br /&gt;
&lt;br /&gt;
== Интеграция на специальной машине ==&lt;br /&gt;
&lt;br /&gt;
Организовывать процесс необходимо на специально выделенной машине.&lt;br /&gt;
Такая машина по своей конфигурации и набору прикладных программ должна максимально соответствовать окружению в котором проект будет развернут (production enviroment). Очевидно, что полного совпадения достичь практически невозможно — маловероятно, что эксплуатироватся программа будет на машине с установленными средствами сборки, тестирования и проч. Но точное совпадение версий операционных систем (и сервис паков) необходимо.&lt;br /&gt;
&lt;br /&gt;
При этом это не должна быть машина разработчика или кого-то еще, это должна быть '''выделенная''' машина (можно виртуальная). Ведь зачастую проект, собранный на машине одного разработчика, не собирается на машине другого. Выделение машины для целей интеграции позволяет уменьшить риск связанный с конфигурацией программного и аппаратного обеспечения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Методы =&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration сервер ==&lt;br /&gt;
&lt;br /&gt;
Хотя в принципе практика continuous integration не требует никакого технического и программного обеспечения, гораздо удобнее, проще и дешевле наладить процесс с использованием таких средств. Такие средства называются сервера интеграции (continuous integration server)- специализированные приложения для автоматизации данного процесса.&lt;br /&gt;
&lt;br /&gt;
Наиболее известный из серверов интеграции пожалуй [[CruiseControl]]. [[CruiseControl]] это сервер для интеграции приложений на java, написанный на java. Так же широко распространен его собрат (точнее портированная версия) под .NET — [[CruiseControl.NET]].&lt;br /&gt;
&lt;br /&gt;
Ниже приведена схема организации такого сервера интеграции:&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 rankdir=LR&lt;br /&gt;
&lt;br /&gt;
 Trigger [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Trigger&amp;quot;, URL=&amp;quot;#Trigger&amp;quot;]&lt;br /&gt;
 BuildLoop [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Build Loop&amp;quot;, URL=&amp;quot;#Build_Loop&amp;quot;]&lt;br /&gt;
 Report [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Reporting App&amp;quot;, URL=&amp;quot;#Report&amp;quot;]&lt;br /&gt;
 ExtApps [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;External Applications&amp;quot;, URL=&amp;quot;#Инструменты&amp;quot;] &lt;br /&gt;
 Logs [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Logs&amp;quot;, URL=&amp;quot;#Logs&amp;quot;]&lt;br /&gt;
 Team [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Team&amp;quot;, URL=&amp;quot;#Team&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
 subgraph cluster_machine{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  label = &amp;quot;Build Machine&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Build_Machine&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 subgraph cluster_server{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  BuildLoop -&amp;gt; Report;&lt;br /&gt;
  &lt;br /&gt;
  label = &amp;quot;CI Server&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Continuous_Integration_сервер&amp;quot;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  ExtApps-&amp;gt;BuildLoop; /*-&amp;gt;Logs;*/&lt;br /&gt;
  ExtApps-&amp;gt;Logs-&amp;gt;Report;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Trigger-&amp;gt;BuildLoop;&lt;br /&gt;
 BuildLoop-&amp;gt;ExtApps;&lt;br /&gt;
 Report-&amp;gt;Team;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ручной процесс ==&lt;br /&gt;
&lt;br /&gt;
Хотя решение с выделенным сервером для continuous integration кажется простым и дешевым, у него есть противники. Точнее, сторонники ручного процесса. Один из таких Джеймс Шор (James Shore) в своей статье [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] пишет, как правильно организовать continuous integration процесс без специализированных приложений, вроде [[CruiseControl]]. В этой статье мы не касаемся данного вопроса.&lt;br /&gt;
&lt;br /&gt;
= Процесс интеграции =&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс состоит из нескольких этапов, некоторые из которых обязательны, другие нет:&lt;br /&gt;
* [[#Trigger|Trigger]] — обязателен&lt;br /&gt;
* [[#Update|Update]] — обязателен&lt;br /&gt;
* [[#Analyse|Analyse]] — не обязателен&lt;br /&gt;
* [[#Build|Build]] — а как без него?&lt;br /&gt;
* [[#UnitTest|UnitTest]] — крайне желателен&lt;br /&gt;
* [[#Deploy|Deploy]] — нужен по обстоятельствам&lt;br /&gt;
* [[#Test|Test]] — не обязателен, но крайне желателен&lt;br /&gt;
* [[#Archive|Archive]] — желателен&lt;br /&gt;
* [[#Report|Report]] — обязателен&lt;br /&gt;
&lt;br /&gt;
== Trigger ==&lt;br /&gt;
&lt;br /&gt;
Цикл интеграции начинается со срабатывания триггера. Это может быть одно из следующих событий:&lt;br /&gt;
* изменение в системе контроля версий&lt;br /&gt;
* изменение в файловой системе&lt;br /&gt;
* определенный момент времени&lt;br /&gt;
* сборка другого проекта&lt;br /&gt;
* нажата «красная» кнопка&lt;br /&gt;
* изменение на веб сервере&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что не все CI сервера поддерживают все возможные варианты триггеров, но основные (система контроля версий и файловая система) поддерживаются большинством.&lt;br /&gt;
&lt;br /&gt;
Характерным примером будет случай, когда один из разработчиков делает коммит в систему контроля версий. Для интеграционного сервера это означает, что в исходном коде проекта произошли изменения и необходимо провести сборку для проверки того, что эти изменения ничего не испортили и согласуются с ранее сделанными. После этого наступает следующий этап.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
На данном этапе CI сервер делает update своей локальной копии исходного кода проекта. В процессе update выясняются изменения в коде (и не только) произошедшие с последненй интеграции. Выяснение изменений необходимо для того, чтобы в случае сбоя можно было легко выяснить причину и найти ответственного.&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
&lt;br /&gt;
После того, как свежая версия проекта вытащена из системы контроля версий, но сборка еще не начата, можно провести статический анализ кода.&lt;br /&gt;
Существует множество автоматических средств, для различных языков программирования, позволяющих провести такой анализ. Обычно измеряются следующие характеристики кода:&lt;br /&gt;
* наличие типичных ошибок&lt;br /&gt;
* статические характеристики кода: сложность, размер, прочее&lt;br /&gt;
* соответствие принятым стандартам кодирования&lt;br /&gt;
* другое&lt;br /&gt;
&lt;br /&gt;
Данный этап является необязательным для процесса continuous integration, но в случае его наличия можно получить дополнительный преимущества от введения практики в виде метрик по коду. Данный этап подразумевает не только получение статических характеристик кода, но и их включение в отчеты создаваемые сервером интеграции (о отчетах смотрите [[#Report|здесь]]).&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
Один из основных этапов процесса это сборка проекта. Здесь происходит компиляция (трансляция) исходных кодов в исполнимые файлы или какой-то другой результат. Поскольку сервер интеграции представляет собой специально выделенную машину (смотрите [[#Интеграция_на_специальной_машине|здесь]]) со строго определенной конфигурацией, результат только этой сборки можно считать конечным. Больше никаких «Проект собирается на моей машине!». Есть только одно место, где проект может собираться — это интеграционный сервер.&lt;br /&gt;
&lt;br /&gt;
Естественно сборка является обязательным этапом интеграции.&lt;br /&gt;
&lt;br /&gt;
== UnitTest ==&lt;br /&gt;
&lt;br /&gt;
В методологии Extreme Programming модульное (unit) тестирование является неотъемлемой частью разработки приложения. Модульные тесты изначально автоматизированы, их включение в процесс интеграции крайне желательно. Поскольку часто у разработчиков нет времени или желания запускать такие тесты до того как изменения отправлены в систему контроля версий, дополнительное их исполнение никогда не будет лишним.&lt;br /&gt;
Дополнительную информацию можно извлечь, измеряя покрытие модульных тестов. Эта метрика поможет лучше контролировать качество выпускаемого продукта.&lt;br /&gt;
&lt;br /&gt;
Естественно, при отсутствии самих тестов в проекте этот этап не выполним. Хотя наличие поставленного процесса непрерывной интеграции без модульных тестов заставляет задуматься об их необходимости.&lt;br /&gt;
&lt;br /&gt;
== Deploy ==&lt;br /&gt;
&lt;br /&gt;
После того как мы убедились в некоторой работоспособности проекта — он собирается (этап [[#Build|Build]]) и все модульные тесты проходят ([[#UnitTest|UnitTest]]) проект необходимо «развернуть». В случае веб-приложения это выкладывание на веб-сервер (сервер приложений) и запуск. Для GUI приложений это (пере)установка в системе.&lt;br /&gt;
&lt;br /&gt;
Этап развертывание должен проходить как можно более «чисто», подробнее смотрите [[#Интеграция_на_специальной_машине|здесь]]. При этом для последующего тестирования часто необходимо привести приложение в некое «стандартное» состояние:&lt;br /&gt;
* «залить» дамп базы&lt;br /&gt;
* настроить в стандартном режиме&lt;br /&gt;
* убрать следы предыдущей деятельности приложения&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
После того ка приложение «развернуто» необходимо его протестировать. Здесь имеются ввиду автоматические функциональные тесты, иначе говоря на данном этапе проводиться регрессионное тестирование.&lt;br /&gt;
&lt;br /&gt;
После прохождения регрессионных тестов можно считать, что интеграция прошла успешно и в проект не внесено правок, которые могут привести к его неработоспособности (здесь все зависит от вашего набора тестов модульных и функциональных). В противном случае интеграция не успешна — код содержит ошибки и требуется его исправление/доработка.&lt;br /&gt;
&lt;br /&gt;
Тестирование это один из «фатальных» этапов процесса, ошибка на котором означает сбой сборки. Всего есть несколько таких «фатальных» этапов:&lt;br /&gt;
* [[#Build|Build]] — проект не собирается&lt;br /&gt;
* [[#UnitTest|UnitTest]] — модульные тест не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
* [[#Test|Test]] — регрессионные тесты не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
&lt;br /&gt;
Иногда к ним присоединяют этап [[#Analyse|Analyse]] — если в коде обнаружено несоответствие стандартам кодирования, то это является ошибкой.&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
После того как достигнута максимальная уверенность в качестве исходного кода необходимо сохранить его. Это можно сделать, например, посредством меток в системе контроля версий. Так же необходимо сохранить бинарные файлы проекта. Они могут понадобиться, если нужно будет воспроизвести ошибку в конкретной версии и для ручного тестирования.&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс можно использовать как формализацию процесса передачи версии проекта на тестирование. К примеру можно настроить сервер публиковать свежую версию каждые две недели и сообщать об этом тестировщикам по электронной почте. Тестировщики всегда будут знать откуда брать свежую и «правильную» версию. А наличие регрессионных и модульных тестов является своего рода первичным (smoke) тестированием и гарантирует (в некоторой степени конечно) работоспособность данной версии. Таким образом на тестирование не попадет версия, которая имеет существенные недостатки препятствующие тестированию.&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
В конце идет важный этап генерации и публикации отчетов. Отчеты включают в себя следующее:&lt;br /&gt;
* причина сборки — например изменения в репозитории&lt;br /&gt;
* изменения в исходных кодах — здесь возможны два варианта изменения от последней сборки или от последней успешной сборки&lt;br /&gt;
* отчеты по статическому анализу кода — все результаты какие есть&lt;br /&gt;
* лог сборки&lt;br /&gt;
* лог модульных тестов — какие тесты прошли и, что важнее, какие не прошли&lt;br /&gt;
* лог регрессионных тестов — аналогично модульным тестам&lt;br /&gt;
* статистика сборок проекта:&lt;br /&gt;
** общее число удачных/провальных сборок&lt;br /&gt;
** распределение удачных/провальных сборок во времени&lt;br /&gt;
** статистика результатов статического анализа кода&lt;br /&gt;
* все другие метрики используемые и собираемые в проекте — это поможет менеджеру проекта видеть все и сразу&lt;br /&gt;
&lt;br /&gt;
Механизм публикации отчета может быть разный и даже не один. Это может быть IRC или jabber бот, рассылка по электронной почте, публикация на web или ftp сервере, специализированные клиенты позволяющие узнать статус сборки.&lt;br /&gt;
&lt;br /&gt;
Наиболее эффективна публикация результатов несколькими различными методами сразу. Например рассылка короткого письма команде, только в случае провала сборки, и публикация полного отчета на веб сервере.&lt;br /&gt;
&lt;br /&gt;
Для правильной организации данного этапа важно понимать кого и как необходимо оповещать о результатах интеграции. Здесь надо выбрать между двумя крайностями — оповещать всегда или никогда. Примерное решение этой задачи будет таким:&lt;br /&gt;
* разработчики — минимум при сбое интеграции, в противном случае, как разработчик узнает, что внесенные им изменения сломали код? Конечно, можно оповещать и всегда, это зависит от частоты сборок.&lt;br /&gt;
* тестировщики — если они входят в команду, то оповещать тогда же, когда и разработчиков, ведь иногда ошибки могут быть и в тестах. Если практикуется независимое тестирование вообще не оповещать их или оповещать при окончании интеграции.&lt;br /&gt;
* менеджер проекта — сугубо по желанию&lt;br /&gt;
&lt;br /&gt;
= Профиты =&lt;br /&gt;
&lt;br /&gt;
Так какую пользу можно получить о внедрения непрерывной интеграции в своем проекте?&lt;br /&gt;
&lt;br /&gt;
В первую очередь это безболезненная интеграция всего проекта. Интеграция различных модулей и правок разных программистов перестает быть делом в принципе, она происходит «сама» без участия людей и если что-то не так, вы об этом узнаете. Конечно, сейчас редкость, что проект имеет особую стадию интеграции, когда из кучи разных модулей пытаются сделать приложение, но все же не надо недооценивать пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
Больше никаких «Это работает на моей машине!». Если что-то не работает на сборочном сервере — значит оно не работает вообще. Аргументы программиста, что у него все работает в данном случае не помогут. Сервер интеграции становиться судьей в таких вопросах и этот судья беспристрастен.&lt;br /&gt;
&lt;br /&gt;
Все анализаторы кода и тесты, которые вы используете и написали, обязательно запускаются над каждой сборкой. Если в систему контроля версий попал «плохой» код — вы об этом узнаете. И не важно, нарушен ли один из стандартов кодирования, или статический анализатор кода показывает, что в код попала потенциальная ошибка или тесты не прошли, а может просто покрытие кода модульными тестами упало ниже необходимого минимума. Вы об этом узнаете и сможете принять меры.&lt;br /&gt;
&lt;br /&gt;
Более того, запуск всех этих анализаторов полезен не только для определения состояния в текущий момент времени, но и для анализа тенденций. Можно увидеть, когда ваш код стал сильно больше, сложнее, в каких модулях эта сложность сконцентрирована. Да, это требует наличия и использования соответствующего инструментария.&lt;br /&gt;
&lt;br /&gt;
Чем больше и серьезней проведена работа по настройке сервера интеграции, тем больше пользы можно получить. Если ваш сервер просто собирает проект после каждого изменения в коде, то польза от него не так велика, но и усилий на него почти не потрачено.&lt;br /&gt;
&lt;br /&gt;
= Continuous Improvement =&lt;br /&gt;
&lt;br /&gt;
После того как вы наладили процесс непрерывной интеграции вам может показаться, что дело сделано: сервер работает, билды собираются, почта идет и все хорошо, пока нет никаких ЧП (вроде поломки сервера). Но это не так. Сам процесс требует постоянной наладки, подстройки. Если сначала у вас не было никаких тестов, то их нужно сделать. После вы захотите собирать информацию о покрытии вашего приложения тестами, затем изменение такого покрытия во времени, возможно какие-то еще специфичные метрики. Ну, а если оказалось, что больше улучшать нечего, подождите какое-то время и такая необходимость появится.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
== Публикации ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.martinfowler.com/articles/continuousIntegration.html Continuous Integration] — статья Мартина Фаулера (Martin Fowler) по Continuous Integration&lt;br /&gt;
* [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] — статья Джеймса Шора (James Shore) о ручном методе интеграции&lt;br /&gt;
* [http://blogs.msdn.com/mswanson/articles/169058.aspx Automated Continuous Integration and the Ambient Orb] — статья Майка Свонсона (Mike Swanson)&lt;br /&gt;
* [http://www.custis.ru/docs/publishing/secr-2008/article-ci.pdf «Введение в непрерывную интеграцию или каша из топора»] — статья  Андрея Сатарина, представленная на конференции [http://secr.ru/ SEC(R) 2008]. Так же доступна [http://www.custis.ru/docs/publishing/secr-2008/talk-ci.pdf презентация] и [http://www.custis.ru/docs/publishing/secr-2008/talk-ci-handout.pdf презентация-handout].&lt;br /&gt;
* [http://c2.com/cgi/wiki?ContinuousIntegration c2.com] — статья по Continuous Integration в wiki на c2.com&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Continuous_Integration en.wikipedia.org] — статья по Continuous Integration в Wikipedia&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Непрерывная_интеграция ru.wikipedia.org] — статья по непрерывной интеграции в Википедии&lt;br /&gt;
&lt;br /&gt;
* [http://www.pragprog.com/titles/auto/pragmatic-project-automation www.pragprog.com] — книга «Pragmatic Project Automation». [http://media.pragprog.com/titles/auto/scheduled.pdf Глава], которая посвящена непрерывной интеграции доступна бесплатно.&lt;br /&gt;
* [http://www.amazon.com/Continuous-Integration-Improving-Addison-Wesley-Signature/dp/0321336380/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1206124954&amp;amp;sr=8-1 www.amazon.com] — книга Пола Дюваля (Paul Duvall) о непрерывной интеграции, получившая Jolt Award в 2008 году&lt;br /&gt;
* [http://www.ozon.ru/context/detail/id/3851770/ www.ozon.ru] — эта же книга изданная на русском языке&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Сервера интеграции ===&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net CruiseControl] — сервер интеграции для Java (см. так же [[CruiseControl]]).&lt;br /&gt;
* [http://studio.thoughtworks.com/cruise-continuous-integration ThoughtWorks Cruise] — коммерческий сервер интеграции от компании ThoughtWorks (есть бесплатная версия).&lt;br /&gt;
* [http://ccnet.sourceforge.net CruiseControl.NET] — сервер интеграции для .NET (см. так же [[CruiseControl.NET]])&lt;br /&gt;
* [http://cruisecontrolrb.thoughtworks.com CruiseControl.rb] — сервер интеграции для Ruby.&lt;br /&gt;
* [http://hudson.dev.java.net Hudson] — open-source сервер интеграции, создан как альтернатива [[CruiseControl]]. Функциональность расширяется плагинами.&lt;br /&gt;
* [http://bitten.edgewall.org Bitten] — open-source сервер интеграции написанный на [[Python]], интегрируется с [[Trac]].&lt;br /&gt;
* [http://www.jetbrains.com/teamcity/index.html TeamCity] — коммерческий сервер интеграции от компаниии JetBrains для java и .NET (есть бесплатная версия).&lt;br /&gt;
&lt;br /&gt;
=== Инструменты сборки ===&lt;br /&gt;
* [http://ant.apache.org Ant] — средство сборки для Java&lt;br /&gt;
* [http://maven.apache.org Maven] — средство сборки для Java&lt;br /&gt;
* [http://nant.sourceforge.net/ NAnt] — аналог Ant под .NET&lt;br /&gt;
&lt;br /&gt;
=== Статический анализ ===&lt;br /&gt;
* [http://pmd.sourceforge.net PMD] — анализ кода Java&lt;br /&gt;
* [http://findbugs.sourceforge.net Findbugs] — анализ кода на типичные ошибки&lt;br /&gt;
* [http://www.redhillconsulting.com.au/products/simian/ Simian] — поиск повторов (copу+paste) в коде Java&lt;br /&gt;
* [http://www.gotdotnet.com/team/fxcop/ FXCop] — анализ кода .NET&lt;br /&gt;
* [http://qalab.sourceforge.net/index.html QALab] — объединение логов нескольких инструментов анализа кода, сбор статистики&lt;br /&gt;
* [http://www.panopticode.org/ Panopticode] — объединение логов нескольких инструментов анализа кода для Java, графическое представление результатов&lt;br /&gt;
&lt;br /&gt;
=== Модульное тестирование и покрытие ===&lt;br /&gt;
* [http://junit.org JUnit] — де-факто стандарт модульного тестирования Java&lt;br /&gt;
* [http://testng.org TestNG] — инструмент нового поколения для модульного тестирования Java&lt;br /&gt;
* [http://www.nunit.org/ NUnit] — модульные тесты для приложений .NET&lt;br /&gt;
* [http://cobertura.sourceforge.net Cobertura] — измерение покрытия кода модульными тестами для Java&lt;br /&gt;
* [http://www.atlassian.com/software/clover/ Clover] — анализ покрытия кода тестами для Java&lt;br /&gt;
* [http://www.cenqua.com/clovernet/ Clover.NET] — анализ покрытия кода тестами под .NET&lt;br /&gt;
&lt;br /&gt;
== Юмор ==&lt;br /&gt;
* [http://www.youtube.com/watch?v=XV5fViOoV_ «Every build you brake»] — песня в исполнении Роя Ошерова (Roy Osherove)&lt;br /&gt;
* [http://www.youtube.com/watch?v=Azl4nqLn4-Y «Hitler’s nightly build fails»] — пародия о неудавшейся ночной сборке&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программирование]]&lt;br /&gt;
[[Категория:Тестирование программного обеспечения]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=CruiseControl&amp;diff=9910</id>
		<title>CruiseControl</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=CruiseControl&amp;diff=9910"/>
				<updated>2008-09-12T07:05:10Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: Отмена правки № 9909 участника Andrew (обсуждение)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Введение =&lt;br /&gt;
&lt;br /&gt;
CruiseControl — платформа (серверное приложение) для организации [[Continuous Integration|непрерывной сборки]] написанная полностью на Java.&lt;br /&gt;
* Сайт http://cruisecontrol.sourceforge.net/&lt;br /&gt;
* Лицензия — открытая, BSD-подобная&lt;br /&gt;
&lt;br /&gt;
CruiseControl используется для организации [[Continuous Integration|непрерывной сборки]] проектов, без участия людей (кроме начального этапа конфигурирования). После конфигурирования сервер собирает и тестирует проект при помощи различных внешний инструментов при каждом изменении в репозитории проекта. При помощи него можно сразу отловить новые ошибки возникающии при интеграции кода разных разработчиков и постоянно проверять старые при помощи автоматических тестов.&lt;br /&gt;
&lt;br /&gt;
== Зачем это надо ==&lt;br /&gt;
&lt;br /&gt;
Непрерывная интеграция вещь очень полезная, настроив все правильно один раз можно дальше спать спокойно. Если проект собирается автоматически — значит проблем нет, если не собирается — вы сразу об этом узнаете.&lt;br /&gt;
&lt;br /&gt;
Если к сборке добавить еще и автоматичесикие тесты, то всегда можно быть уверенным в том, что текущая версия в CVS и работает как надо. Всю сборку и тестирование можно проводить при каждом commit`е не тратя никаких усилий (все сам сделает сервер), а возникающие ошибки и несовместимости решать сразу быстро и эффективно.&lt;br /&gt;
Более подробные примеры использования можно найти в первых двух [[#Ссылки|ссылках]].&lt;br /&gt;
&lt;br /&gt;
== Возможности ==&lt;br /&gt;
&lt;br /&gt;
Сервер CruiseControl имеет следующие возможности:&lt;br /&gt;
* работает по расписанию или &lt;br /&gt;
* следит за изменениями:&lt;br /&gt;
** в репозитории [[CVS]] и многих других систем контроля версий&lt;br /&gt;
** в файлах и директориях&lt;br /&gt;
** в сборке других проектов&lt;br /&gt;
* сам вытащит новую версию из [[CVS]](и других)&lt;br /&gt;
* соберет используя Ant, Maven, скрипт&lt;br /&gt;
* опубликует результаты:&lt;br /&gt;
** в зависамости от результата сборки&lt;br /&gt;
** на web-сервере входящем в комплект&lt;br /&gt;
** разошлет почту&lt;br /&gt;
** выполнит скрипт (shell, bat)&lt;br /&gt;
** выполнит скрипт Ant&lt;br /&gt;
** много других способов&lt;br /&gt;
* конфигурируется одним XML файлом — его тоже можно хранить под [[CVS]]&lt;br /&gt;
&lt;br /&gt;
== Конфигурационный файл ==&lt;br /&gt;
&lt;br /&gt;
Это XML файл в котором описано как, когда и что должен делать CruiseControl.&lt;br /&gt;
Самый верхний уровень это проект — все остальные настройки в нем. Проектов может быть много и они могут собираться или не собираться в зависимости друг от друга.&lt;br /&gt;
&lt;br /&gt;
Внутри файла:&lt;br /&gt;
* &amp;lt;property&amp;gt; — переменные или файл переменных&lt;br /&gt;
* &amp;lt;bootstrappers&amp;gt; — то, что выполняется до сборки&lt;br /&gt;
* &amp;lt;listeners&amp;gt; — в основном для отображения статуса на web-сервере&lt;br /&gt;
* &amp;lt;modificationset&amp;gt; — за какими изменениями следить&lt;br /&gt;
* &amp;lt;schedule&amp;gt; — собственно расписание сборки (см. [[#Цикл сборки]])&lt;br /&gt;
* &amp;lt;publishers&amp;gt; — публикация результатов&lt;br /&gt;
 &lt;br /&gt;
== Цикл сборки ==&lt;br /&gt;
&lt;br /&gt;
В цикл сборки запускается процесс-демон, который периодически выполняет действия описанные в конфигурационном файле в элементе &amp;lt;schedule&amp;gt;. Собирать проект можно: &lt;br /&gt;
* скриптом&lt;br /&gt;
* Maven 1 или Maven 2&lt;br /&gt;
* Ant&lt;br /&gt;
* NAnt&lt;br /&gt;
Но за один раз запускается только один сборщик, а не все подряд как этого иногда хочется(см. [[#Проблемы/решения]]).&lt;br /&gt;
Сборщик запускается только если были обнаружены изменения описанные в &amp;lt;modificationset&amp;gt;, перед сборкой запускается &amp;lt;bootstrappers&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Публикация результатов ==&lt;br /&gt;
&lt;br /&gt;
Публикация результатов — важная часть процесса непрерывной интеграции, это единственный способ CruiseControl сообщить вам, что все хорошо/плохо. В CruiseControl есть много разных способов опубликовать результаты. Основной из них web-сервер на котором показаны результаты всех билдов и можно посмотреть их логи, для публикации на нем ничего делать не надо. В принципе от web-сервера можно отказаться, не запускать его и использовать только e-mail оповещение.&lt;br /&gt;
Еще можно использовать другие методы публикации:&lt;br /&gt;
* скрипт Ant&lt;br /&gt;
* скрипт&lt;br /&gt;
* выкладывание артефактов на web-сервере&lt;br /&gt;
* e-mail&lt;br /&gt;
* публикация статуса сборки — для последующего за ним слежения с сервера&lt;br /&gt;
Метод(-ы) публикации настраивается внутри элемента &amp;lt;publishers&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Проблемы/решения =&lt;br /&gt;
&lt;br /&gt;
* закладка с метриками не работает под Linux если нет доступа к графическому дисплею(X-консоли)&lt;br /&gt;
 запускать CruiseControl из-под Х-консоли и блокировать консоль&lt;br /&gt;
* задокументированная особенность: за раз выполняется только один билдер т. е. для такой конфигурации:&lt;br /&gt;
     &amp;lt;schedule interval=&amp;quot;${cc.interval}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;exec command=&amp;quot;sh&amp;quot; args=&amp;quot;${mvn.before}&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;maven2&lt;br /&gt;
             mvnscript=&amp;quot;${mvn.script}&amp;quot; &lt;br /&gt;
 	     pomfile=&amp;quot;${mvn.file}&amp;quot;&lt;br /&gt;
 	     goal=&amp;quot;${mvn.goal}&amp;quot;&lt;br /&gt;
 	/&amp;gt;&lt;br /&gt;
     &amp;lt;/schedule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет выполнен ЛИБО exec ЛИБО maven2, что плохо, приходится все сливать в один скрипт.&lt;br /&gt;
Но есть и свои преимущества можно сделать разные билды(например обычный и с тестами) и выполнять с разной частотой.&lt;br /&gt;
&lt;br /&gt;
В последних версиях для удобства есть метод сборки &amp;lt;composite&amp;gt;, в который можно включать другие методы сборки. В этом случае все они будут выполнены последовательно, если не произойдет сбоя.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
* [http://en.wikipedia.org/wiki/CruiseControl CruiseControl в Wikipedia]&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net Cтраница проекта CruiseControl]&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование]]&lt;br /&gt;
[[Category:Тестирование программного обеспечения]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=CruiseControl&amp;diff=9909</id>
		<title>CruiseControl</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=CruiseControl&amp;diff=9909"/>
				<updated>2008-09-10T18:27:16Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Ссылки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Введение =&lt;br /&gt;
&lt;br /&gt;
CruiseControl — платформа (серверное приложение) для организации [[Continuous Integration|непрерывной сборки]] написанная полностью на Java.&lt;br /&gt;
* Сайт http://cruisecontrol.sourceforge.net/&lt;br /&gt;
* Лицензия — открытая, BSD-подобная&lt;br /&gt;
&lt;br /&gt;
CruiseControl используется для организации [[Continuous Integration|непрерывной сборки]] проектов, без участия людей (кроме начального этапа конфигурирования). После конфигурирования сервер собирает и тестирует проект при помощи различных внешний инструментов при каждом изменении в репозитории проекта. При помощи него можно сразу отловить новые ошибки возникающии при интеграции кода разных разработчиков и постоянно проверять старые при помощи автоматических тестов.&lt;br /&gt;
&lt;br /&gt;
== Зачем это надо ==&lt;br /&gt;
&lt;br /&gt;
Непрерывная интеграция вещь очень полезная, настроив все правильно один раз можно дальше спать спокойно. Если проект собирается автоматически — значит проблем нет, если не собирается — вы сразу об этом узнаете.&lt;br /&gt;
&lt;br /&gt;
Если к сборке добавить еще и автоматичесикие тесты, то всегда можно быть уверенным в том, что текущая версия в CVS и работает как надо. Всю сборку и тестирование можно проводить при каждом commit`е не тратя никаких усилий (все сам сделает сервер), а возникающие ошибки и несовместимости решать сразу быстро и эффективно.&lt;br /&gt;
Более подробные примеры использования можно найти в первых двух [[#Ссылки|ссылках]].&lt;br /&gt;
&lt;br /&gt;
== Возможности ==&lt;br /&gt;
&lt;br /&gt;
Сервер CruiseControl имеет следующие возможности:&lt;br /&gt;
* работает по расписанию или &lt;br /&gt;
* следит за изменениями:&lt;br /&gt;
** в репозитории [[CVS]] и многих других систем контроля версий&lt;br /&gt;
** в файлах и директориях&lt;br /&gt;
** в сборке других проектов&lt;br /&gt;
* сам вытащит новую версию из [[CVS]](и других)&lt;br /&gt;
* соберет используя Ant, Maven, скрипт&lt;br /&gt;
* опубликует результаты:&lt;br /&gt;
** в зависамости от результата сборки&lt;br /&gt;
** на web-сервере входящем в комплект&lt;br /&gt;
** разошлет почту&lt;br /&gt;
** выполнит скрипт (shell, bat)&lt;br /&gt;
** выполнит скрипт Ant&lt;br /&gt;
** много других способов&lt;br /&gt;
* конфигурируется одним XML файлом — его тоже можно хранить под [[CVS]]&lt;br /&gt;
&lt;br /&gt;
== Конфигурационный файл ==&lt;br /&gt;
&lt;br /&gt;
Это XML файл в котором описано как, когда и что должен делать CruiseControl.&lt;br /&gt;
Самый верхний уровень это проект — все остальные настройки в нем. Проектов может быть много и они могут собираться или не собираться в зависимости друг от друга.&lt;br /&gt;
&lt;br /&gt;
Внутри файла:&lt;br /&gt;
* &amp;lt;property&amp;gt; — переменные или файл переменных&lt;br /&gt;
* &amp;lt;bootstrappers&amp;gt; — то, что выполняется до сборки&lt;br /&gt;
* &amp;lt;listeners&amp;gt; — в основном для отображения статуса на web-сервере&lt;br /&gt;
* &amp;lt;modificationset&amp;gt; — за какими изменениями следить&lt;br /&gt;
* &amp;lt;schedule&amp;gt; — собственно расписание сборки (см. [[#Цикл сборки]])&lt;br /&gt;
* &amp;lt;publishers&amp;gt; — публикация результатов&lt;br /&gt;
 &lt;br /&gt;
== Цикл сборки ==&lt;br /&gt;
&lt;br /&gt;
В цикл сборки запускается процесс-демон, который периодически выполняет действия описанные в конфигурационном файле в элементе &amp;lt;schedule&amp;gt;. Собирать проект можно: &lt;br /&gt;
* скриптом&lt;br /&gt;
* Maven 1 или Maven 2&lt;br /&gt;
* Ant&lt;br /&gt;
* NAnt&lt;br /&gt;
Но за один раз запускается только один сборщик, а не все подряд как этого иногда хочется(см. [[#Проблемы/решения]]).&lt;br /&gt;
Сборщик запускается только если были обнаружены изменения описанные в &amp;lt;modificationset&amp;gt;, перед сборкой запускается &amp;lt;bootstrappers&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Публикация результатов ==&lt;br /&gt;
&lt;br /&gt;
Публикация результатов — важная часть процесса непрерывной интеграции, это единственный способ CruiseControl сообщить вам, что все хорошо/плохо. В CruiseControl есть много разных способов опубликовать результаты. Основной из них web-сервер на котором показаны результаты всех билдов и можно посмотреть их логи, для публикации на нем ничего делать не надо. В принципе от web-сервера можно отказаться, не запускать его и использовать только e-mail оповещение.&lt;br /&gt;
Еще можно использовать другие методы публикации:&lt;br /&gt;
* скрипт Ant&lt;br /&gt;
* скрипт&lt;br /&gt;
* выкладывание артефактов на web-сервере&lt;br /&gt;
* e-mail&lt;br /&gt;
* публикация статуса сборки — для последующего за ним слежения с сервера&lt;br /&gt;
Метод(-ы) публикации настраивается внутри элемента &amp;lt;publishers&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Проблемы/решения =&lt;br /&gt;
&lt;br /&gt;
* закладка с метриками не работает под Linux если нет доступа к графическому дисплею(X-консоли)&lt;br /&gt;
 запускать CruiseControl из-под Х-консоли и блокировать консоль&lt;br /&gt;
* задокументированная особенность: за раз выполняется только один билдер т. е. для такой конфигурации:&lt;br /&gt;
     &amp;lt;schedule interval=&amp;quot;${cc.interval}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;exec command=&amp;quot;sh&amp;quot; args=&amp;quot;${mvn.before}&amp;quot;/&amp;gt;&lt;br /&gt;
        &amp;lt;maven2&lt;br /&gt;
             mvnscript=&amp;quot;${mvn.script}&amp;quot; &lt;br /&gt;
 	     pomfile=&amp;quot;${mvn.file}&amp;quot;&lt;br /&gt;
 	     goal=&amp;quot;${mvn.goal}&amp;quot;&lt;br /&gt;
 	/&amp;gt;&lt;br /&gt;
     &amp;lt;/schedule&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Будет выполнен ЛИБО exec ЛИБО maven2, что плохо, приходится все сливать в один скрипт.&lt;br /&gt;
Но есть и свои преимущества можно сделать разные билды(например обычный и с тестами) и выполнять с разной частотой.&lt;br /&gt;
&lt;br /&gt;
В последних версиях для удобства есть метод сборки &amp;lt;composite&amp;gt;, в который можно включать другие методы сборки. В этом случае все они будут выполнены последовательно, если не произойдет сбоя.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
* {{Link-to-wikipedia}}&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net Cтраница проекта CruiseControl]&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование]]&lt;br /&gt;
[[Category:Тестирование программного обеспечения]]&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=9908</id>
		<title>Шаблон:Replicate-from-custiswiki-to-all</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=9908"/>
				<updated>2008-09-09T17:41:34Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;nbsp;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=9907</id>
		<title>Шаблон:Replicate-from-custiswiki-to-all</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Replicate-from-custiswiki-to-all&amp;diff=9907"/>
				<updated>2008-09-09T17:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: Новая: .&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Subversion%E2%80%99s_Future%3F&amp;diff=9906</id>
		<title>Subversion’s Future?</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Subversion%E2%80%99s_Future%3F&amp;diff=9906"/>
				<updated>2008-09-06T07:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Перевод статьи [http://blog.red-bean.com/sussman/?p=90 {{PAGENAME}}] («Что ждет Subversion?») выполнен сообществом компании [http://www.custis.ru «Заказные ИнформСистемы»].&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Согласно статистике '''Google Analytics''', один из самых просматриваемых постов в моем блоге — это тот, который я написал годы назад — «[[the Risks of Distributed Version Control|Риски распределенного управления версиями]]».&lt;br /&gt;
Там полно сердитых комментариев о том, насколько я неправ.  &lt;br /&gt;
Думаю, надо дополнить тот пост новостями и свежими идеями.&lt;br /&gt;
&lt;br /&gt;
Итак, должен сказать, после некоторого времени использования [[RuPedia:Mercurial|Mercurial]], &lt;br /&gt;
я думаю, что распределенное управление версиями — штука весьма изящная.&lt;br /&gt;
&lt;br /&gt;
Пока идет тестирование последней предрелизной 1.5 версии   [[Subversion]],&lt;br /&gt;
в которой уже будут ограниченные возможности отслеживания слияний,&lt;br /&gt;
в коллективе разработчиков Subversion присутствует некая неясность, каким же все-таки будет его будущее.&lt;br /&gt;
Системы [[RuPedia:Mercurial|Mercurial]] и [[RuPedia:Git|Git]] сейчас повсюду, и постоянно становятся все более популярными, особенно среди «20%» — разработчиков-новаторов.&lt;br /&gt;
Какая роль у Subversion — «лучшей из лучших» централизованных систем контроля версий —  в мире, где все потихоньку двигается в сторону использования децентрализованных систем?&lt;br /&gt;
&lt;br /&gt;
[[Subversion]] четко выполнила задачу, которую мы поставили в 2000-м — «заменить [[CVS]].&lt;br /&gt;
Но останавливаться нельзя — если у [[Subversion]] не будет четких планов на будущее, то она будет заменена чем-то лучшим.&lt;br /&gt;
Это могут быть Mercurial или Git, а может — чем-то еще.&lt;br /&gt;
В идеале Subversion должна заменить себя сама. :-) &lt;br /&gt;
&lt;br /&gt;
Итак, что бы мы заложили в «Subversion 2.0», если бы нам выпала честь его проектировать?&lt;br /&gt;
На прошлой неделе один из наших разработчиков написал изящный e-mail, где очень хорошо обобщил возможную новую миссию. Это нужно видеть — вот неплохая аннотация:&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Сейчас я бы почти наверняка не выбрал Subversion для небольшого нового open-source проекта. [...]&lt;br /&gt;
Значит ли это, что &amp;lt;tt&amp;gt;Subversion&amp;lt;/tt&amp;gt; мертва? &lt;br /&gt;
Что нам пора сменить корабль, написать новый GUI для Git и добиться &lt;br /&gt;
чтобы все это работало под Windows?&lt;br /&gt;
Нет. Централизованный контроль версий все еще хорош для некоторых вещей.&lt;br /&gt;
*Работа над огромными проектами, где помещение всей ''рабочей версии'' исходного кода на все машины неосуществимо, уже не говоря о всей истории (однако здесь атомарные транзакции через произвольные части проекта все же требуется).&lt;br /&gt;
*Механизм авторизации по чтению! Клиент-серверная модель — лучшее решение, если Вы планируете не позволять давать всем все данные (Несомненно, есть теоретические пути осуществить авторизацию по чтению на распределенных системах, но это не очень-то и просто.)&lt;br /&gt;
Итак, что делать?&lt;br /&gt;
Проект Subversion больше не должен тратить время на попытки улучшения применимости для небольших&lt;br /&gt;
открытых проектов. &lt;br /&gt;
Subversion уже подходит для этой задачи, и у других систем есть больший потенциал, чем она. &lt;br /&gt;
Мы должны сфокусировать внимание на задаче представления Subversion как лучшего средства для организаций, &lt;br /&gt;
чьим пользователям необходимо нетривиально взаимодействовать с репозиториями.  [...]&lt;br /&gt;
Я общался с другими разработчиками, и мы пришли к некоторым схожим личным&lt;br /&gt;
заключениям по поводу будущего Subversion.&lt;br /&gt;
&lt;br /&gt;
Во-первых, мы думаем, что это, вероятно, «последняя» централизованная&lt;br /&gt;
система, написанная в «мире открытого кода» — и представляет&lt;br /&gt;
«заключительную черту» для этой модели огранизации кода.&lt;br /&gt;
&lt;br /&gt;
Она будет продолжать использоваться в течение многих лет, &lt;br /&gt;
причем в корпоративном мире — с громандной популярностью,&lt;br /&gt;
пока не проиграет (окончательно) распределенным системам в мире open-source.&lt;br /&gt;
&lt;br /&gt;
У всех нас, погруженных в «open-source», действительно несколько искаженное представление о реальности. &lt;br /&gt;
Нам кажется, что «все переключаются на ''Git''»&lt;br /&gt;
но когда вы смотрите на график публичных  (т.е. общедоступных, не частных) &lt;br /&gt;
серверов Subversion под Apache, обнаруженных в Инете, &lt;br /&gt;
видно, что Subversion никоим образом не «исчезает». &lt;br /&gt;
&lt;br /&gt;
Как раз наоборот: его применение в корпоративном мире все еще растет квадратично, без малейших признаков замедления. &lt;br /&gt;
Все это происходит независимо от новаторов-опенсорсщиков,&lt;br /&gt;
теряющих интерес к Subversion. &lt;br /&gt;
&lt;br /&gt;
Subversion может, в конце концов, стать полноценно «корпоративным» open-source проектом,&lt;br /&gt;
(то есть, вся разработка будет финансироваться корпорациями-пользователями Subversion), &lt;br /&gt;
но это прекрасный выход для зрелого программного обеспечения.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;br /&gt;
[[category:Статьи о Subversion]]&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=9874</id>
		<title>Continuous Integration</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=9874"/>
				<updated>2008-08-26T18:35:56Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Введение */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=  Введение =&lt;br /&gt;
 «Continuous Integration» — это лекарство от страха. Помогает при программировании.&lt;br /&gt;
                                          Dr. Zoidberg ©&lt;br /&gt;
&lt;br /&gt;
Согласно [http://en.wikipedia.org/wiki/Continuous_Integration Wikipedia] термин Continuous Integration введен Мартином Фаулером (Martin Fowler) и Кентом Беком (Kent Beck). Данный термин был придуман ими для обозначения практики частой сборки (интеграции) проекта. Максимально частая сборка является логичным продолжением цепочки&lt;br /&gt;
 редкие сборки под релизы-&amp;gt;ночные сборки-&amp;gt;непрерывные сборки&lt;br /&gt;
&lt;br /&gt;
В настоящее время Continuous Integration (непрерывная интеграция) одна из практик применяемых в семействе гибких (Agile) методологий. В подобных методологиях она удачно сочитается с другими практиками, такими как модульное(unit) тестирование, рефакторинг, стандарт кодирования. Но даже без них можно получить пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
= Основные принципы =&lt;br /&gt;
&lt;br /&gt;
== Каждое изменение должно интегрироваться ==&lt;br /&gt;
&lt;br /&gt;
Слово continuous в термине [[Continuous Integration]] означает «непрерывный/непрекращающийся». Это означает, что в идеале сборка вашего проекта должна идти буквально все время. Каждое изменение в системе контроля версий (например [[CVS]]) должно интегрироваться без пропусков или задержек. Организация ночных сборок — это хорошая практика, но это не continuous integration. Ведь результаты такой ночной сборки будут доступны лишь на следующий день, когда их актуальность для разработчиков уже значительно снижена. На практике довольно часто реализуют оба процесса и непрерывную интеграция и ночные сборки — более редкую интеграцию.&lt;br /&gt;
В очень крупных проектах это требование иногда невозможно соблюсти, но интеграция каждые сутки это предел за который не стоит уходить.&lt;br /&gt;
Принцип непрерывной интеграции не выполним без другого условия — «Сборка должна идти быстро».&lt;br /&gt;
&lt;br /&gt;
== Быстрая сборка ==&lt;br /&gt;
&lt;br /&gt;
«Сборка должна идти быстро» — точнее не более 10 минут. Если после одного небольшого коммита ваш интеграционный сервер будет уходить в 2-х часовое пыхтение на сборку, тестирование и разворачивание от этого будет мало пользы. Разработчики будут уже далеко, над решение других проблем, им будет сложно вернуться и понять причины сбоя, если таковой был. Ведь суть непрерывной интеграции в получении быстрого feedback. Вдобавок, поздний ответ с сервера может отвлечь их от другого дела.&lt;br /&gt;
&lt;br /&gt;
В случае если все этапы процесса никак не удается втиснуть в приемлемые временные рамки можно разделить его на несколько частей. При каждом коммите производить лишь саму сборку и минимальный набор тестов (smoke tests), чтобы уменьшить время. А по ночам проводить полный цикл интеграции, результаты которого команда будет анализировать с утра. Но это скорее вынужденная мера, а не пример для подражания.&lt;br /&gt;
&lt;br /&gt;
== Сделайте тесты ==&lt;br /&gt;
&lt;br /&gt;
Тесты просто необходимо включать в continuous integration процесс, в противном случае вы не можете быть уверены в качестве и работоспособности своего проекта. Чем тестов больше, тем лучше, в разумных пределах конечно. Основными двумя ограничителями на количество тестов будет:&lt;br /&gt;
* время интеграции — сборка по-прежнему должна оставаться быстрой, основное тестирование можно перенести «на ночь»,&lt;br /&gt;
* наличие автоматизированных тестов — не все тесты требуют автоматизации, нет смысла делать автоматизированные тесты только для самих тестов, они должны быть целесообразны.&lt;br /&gt;
&lt;br /&gt;
Чем лучше ваши тесты, тем раньше находяться ошибки и раньше исправляются. Как известно, чем раньше ошибка исправлена, тем дешевле ее исправление. Это одно из основных преимуществ практики непрерывной интеграции — снижение стоимости исправления ошибок (не всех конечно). Попутно наличие хорошего набора тестов в процессе интеграции дает больше уверенности в том, что проект работает правильно.&lt;br /&gt;
&lt;br /&gt;
Именнно присутствие тестов одно из отличий интеграции от нажатия кнопки Build в вашей любимой IDE.&lt;br /&gt;
&lt;br /&gt;
== Интеграция на специальной машине ==&lt;br /&gt;
&lt;br /&gt;
Организовывать процесс необходимо на специально выделенной машине.&lt;br /&gt;
Такая машина по своей конфигурации и набору прикладных программ должна максимально соответствовать окружению в котором проект будет развернут (production enviroment). Очевидно, что полного совпадения достичь практически невозможно — маловероятно, что эксплуатироватся программа будет на машине с установленными средствами сборки, тестирования и проч. Но точное совпадение версий операционных систем (и сервис паков) необходимо.&lt;br /&gt;
&lt;br /&gt;
При этом это не должна быть машина разработчика или кого-то еще, это должна быть '''выделенная''' машина (можно виртуальная). Ведь зачастую проект, собранный на машине одного разработчика, не собирается на машине другого. Выделение машины для целей интеграции позволяет уменьшить риск связанный с конфигурацией программного и аппаратного обеспечения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Методы =&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration сервер ==&lt;br /&gt;
&lt;br /&gt;
Хотя в принципе практика continuous integration не требует никакого технического и программного обеспечения, гораздо удобнее, проще и дешевле наладить процесс с использованием таких средств. Такие средства называются сервера интеграции (continuous integration server)- специализированные приложения для автоматизации данного процесса.&lt;br /&gt;
&lt;br /&gt;
Наиболее известный из серверов интеграции пожалуй [[CruiseControl]]. [[CruiseControl]] это сервер для интеграции приложений на java, написанный на java. Так же широко распространен его собрат (точнее портированная версия) под .NET — [[CruiseControl.NET]].&lt;br /&gt;
&lt;br /&gt;
Ниже приведена схема организации такого сервера интеграции:&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 rankdir=LR&lt;br /&gt;
&lt;br /&gt;
 Trigger [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Trigger&amp;quot;, URL=&amp;quot;#Trigger&amp;quot;]&lt;br /&gt;
 BuildLoop [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Build Loop&amp;quot;, URL=&amp;quot;#Build_Loop&amp;quot;]&lt;br /&gt;
 Report [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Reporting App&amp;quot;, URL=&amp;quot;#Report&amp;quot;]&lt;br /&gt;
 ExtApps [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;External Applications&amp;quot;, URL=&amp;quot;#Инструменты&amp;quot;] &lt;br /&gt;
 Logs [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Logs&amp;quot;, URL=&amp;quot;#Logs&amp;quot;]&lt;br /&gt;
 Team [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Team&amp;quot;, URL=&amp;quot;#Team&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
 subgraph cluster_machine{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  label = &amp;quot;Build Machine&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Build_Machine&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 subgraph cluster_server{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  BuildLoop -&amp;gt; Report;&lt;br /&gt;
  &lt;br /&gt;
  label = &amp;quot;CI Server&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Continuous_Integration_сервер&amp;quot;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  ExtApps-&amp;gt;BuildLoop; /*-&amp;gt;Logs;*/&lt;br /&gt;
  ExtApps-&amp;gt;Logs-&amp;gt;Report;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Trigger-&amp;gt;BuildLoop;&lt;br /&gt;
 BuildLoop-&amp;gt;ExtApps;&lt;br /&gt;
 Report-&amp;gt;Team;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ручной процесс ==&lt;br /&gt;
&lt;br /&gt;
Хотя решение с выделенным сервером для continuous integration кажется простым и дешевым, у него есть противники. Точнее, сторонники ручного процесса. Один из таких Джеймс Шор (James Shore) в своей статье [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] пишет, как правильно организовать continuous integration процесс без специализированных приложений, вроде [[CruiseControl]]. В этой статье мы не касаемся данного вопроса.&lt;br /&gt;
&lt;br /&gt;
= Процесс интеграции =&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс состоит из нескольких этапов, некоторые из которых обязательны, другие нет:&lt;br /&gt;
* [[#Trigger|Trigger]] — обязателен&lt;br /&gt;
* [[#Update|Update]] — обязателен&lt;br /&gt;
* [[#Analyse|Analyse]] — не обязателен&lt;br /&gt;
* [[#Build|Build]] — а как без него?&lt;br /&gt;
* [[#UnitTest|UnitTest]] — крайне желателен&lt;br /&gt;
* [[#Deploy|Deploy]] — нужен по обстоятельствам&lt;br /&gt;
* [[#Test|Test]] — не обязателен, но крайне желателен&lt;br /&gt;
* [[#Archive|Archive]] — желателен&lt;br /&gt;
* [[#Report|Report]] — обязателен&lt;br /&gt;
&lt;br /&gt;
== Trigger ==&lt;br /&gt;
&lt;br /&gt;
Цикл интеграции начинается со срабатывания триггера. Это может быть одно из следующих событий:&lt;br /&gt;
* изменение в системе контроля версий&lt;br /&gt;
* изменение в файловой системе&lt;br /&gt;
* определенный момент времени&lt;br /&gt;
* сборка другого проекта&lt;br /&gt;
* нажата «красная» кнопка&lt;br /&gt;
* изменение на веб сервере&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что не все CI сервера поддерживают все возможные варианты триггеров, но основные (система контроля версий и файловая система) поддерживаются большинством.&lt;br /&gt;
&lt;br /&gt;
Характерным примером будет случай, когда один из разработчиков делает коммит в систему контроля версий. Для интеграционного сервера это означает, что в исходном коде проекта произошли изменения и необходимо провести сборку для проверки того, что эти изменения ничего не испортили и согласуются с ранее сделанными. После этого наступает следующий этап.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
На данном этапе CI сервер делает update своей локальной копии исходного кода проекта. В процессе update выясняются изменения в коде (и не только) произошедшие с последненй интеграции. Выяснение изменений необходимо для того, чтобы в случае сбоя можно было легко выяснить причину и найти ответственного.&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
&lt;br /&gt;
После того, как свежая версия проекта вытащена из системы контроля версий, но сборка еще не начата, можно провести статический анализ кода.&lt;br /&gt;
Существует множество автоматических средств, для различных языков программирования, позволяющих провести такой анализ. Обычно измеряются следующие характеристики кода:&lt;br /&gt;
* наличие типичных ошибок&lt;br /&gt;
* статические характеристики кода: сложность, размер, прочее&lt;br /&gt;
* соответствие принятым стандартам кодирования&lt;br /&gt;
* другое&lt;br /&gt;
&lt;br /&gt;
Данный этап является необязательным для процесса continuous integration, но в случае его наличия можно получить дополнительный преимущества от введения практики в виде метрик по коду. Данный этап подразумевает не только получение статических характеристик кода, но и их включение в отчеты создаваемые сервером интеграции (о отчетах смотрите [[#Report|здесь]]).&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
Один из основных этапов процесса это сборка проекта. Здесь происходит компиляция (трансляция) исходных кодов в исполнимые файлы или какой-то другой результат. Поскольку сервер интеграции представляет собой специально выделенную машину (смотрите [[#Интеграция_на_специальной_машине|здесь]]) со строго определенной конфигурацией, результат только этой сборки можно считать конечным. Больше никаких «Проект собирается на моей машине!». Есть только одно место, где проект может собираться — это интеграционный сервер.&lt;br /&gt;
&lt;br /&gt;
Естественно сборка является обязательным этапом интеграции.&lt;br /&gt;
&lt;br /&gt;
== UnitTest ==&lt;br /&gt;
&lt;br /&gt;
В методологии Extreme Programming модульное (unit) тестирование является неотъемлемой частью разработки приложения. Модульные тесты изначально автоматизированы, их включение в процесс интеграции крайне желательно. Поскольку часто у разработчиков нет времени или желания запускать такие тесты до того как изменения отправлены в систему контроля версий, дополнительное их исполнение никогда не будет лишним.&lt;br /&gt;
Дополнительную информацию можно извлечь, измеряя покрытие модульных тестов. Эта метрика поможет лучше контролировать качество выпускаемого продукта.&lt;br /&gt;
&lt;br /&gt;
Естественно, при отсутствии самих тестов в проекте этот этап не выполним. Хотя наличие поставленного процесса непрерывной интеграции без модульных тестов заставляет задуматься об их необходимости.&lt;br /&gt;
&lt;br /&gt;
== Deploy ==&lt;br /&gt;
&lt;br /&gt;
После того как мы убедились в некоторой работоспособности проекта — он собирается (этап [[#Build|Build]]) и все модульные тесты проходят ([[#UnitTest|UnitTest]]) проект необходимо «развернуть». В случае веб-приложения это выкладывание на веб-сервер (сервер приложений) и запуск. Для GUI приложений это (пере)установка в системе.&lt;br /&gt;
&lt;br /&gt;
Этап развертывание должен проходить как можно более «чисто», подробнее смотрите [[#Интеграция_на_специальной_машине|здесь]]. При этом для последующего тестирования часто необходимо привести приложение в некое «стандартное» состояние:&lt;br /&gt;
* «залить» дамп базы&lt;br /&gt;
* настроить в стандартном режиме&lt;br /&gt;
* убрать следы предыдущей деятельности приложения&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
После того ка приложение «развернуто» необходимо его протестировать. Здесь имеются ввиду автоматические функциональные тесты, иначе говоря на данном этапе проводиться регрессионное тестирование.&lt;br /&gt;
&lt;br /&gt;
После прохождения регрессионных тестов можно считать, что интеграция прошла успешно и в проект не внесено правок, которые могут привести к его неработоспособности (здесь все зависит от вашего набора тестов модульных и функциональных). В противном случае интеграция не успешна — код содержит ошибки и требуется его исправление/доработка.&lt;br /&gt;
&lt;br /&gt;
Тестирование это один из «фатальных» этапов процесса, ошибка на котором означает сбой сборки. Всего есть несколько таких «фатальных» этапов:&lt;br /&gt;
* [[#Build|Build]] — проект не собирается&lt;br /&gt;
* [[#UnitTest|UnitTest]] — модульные тест не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
* [[#Test|Test]] — регрессионные тесты не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
&lt;br /&gt;
Иногда к ним присоединяют этап [[#Analyse|Analyse]] — если в коде обнаружено несоответствие стандартам кодирования, то это является ошибкой.&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
После того как достигнута максимальная уверенность в качестве исходного кода необходимо сохранить его. Это можно сделать, например, посредством меток в системе контроля версий. Так же необходимо сохранить бинарные файлы проекта. Они могут понадобиться, если нужно будет воспроизвести ошибку в конкретной версии и для ручного тестирования.&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс можно использовать как формализацию процесса передачи версии проекта на тестирование. К примеру можно настроить сервер публиковать свежую версию каждые две недели и сообщать об этом тестировщикам по электронной почте. Тестировщики всегда будут знать откуда брать свежую и «правильную» версию. А наличие регрессионных и модульных тестов является своего рода первичным (smoke) тестированием и гарантирует (в некоторой степени конечно) работоспособность данной версии. Таким образом на тестирование не попадет версия, которая имеет существенные недостатки препятствующие тестированию.&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
В конце идет важный этап генерации и публикации отчетов. Отчеты включают в себя следующее:&lt;br /&gt;
* причина сборки — например изменения в репозитории&lt;br /&gt;
* изменения в исходных кодах — здесь возможны два варианта изменения от последней сборки или от последней успешной сборки&lt;br /&gt;
* отчеты по статическому анализу кода — все результаты какие есть&lt;br /&gt;
* лог сборки&lt;br /&gt;
* лог модульных тестов — какие тесты прошли и, что важнее, какие не прошли&lt;br /&gt;
* лог регрессионных тестов — аналогично модульным тестам&lt;br /&gt;
* статистика сборок проекта:&lt;br /&gt;
** общее число удачных/провальных сборок&lt;br /&gt;
** распределение удачных/провальных сборок во времени&lt;br /&gt;
** статистика результатов статического анализа кода&lt;br /&gt;
* все другие метрики используемые и собираемые в проекте — это поможет менеджеру проекта видеть все и сразу&lt;br /&gt;
&lt;br /&gt;
Механизм публикации отчета может быть разный и даже не один. Это может быть IRC или jabber бот, рассылка по электронной почте, публикация на web или ftp сервере, специализированные клиенты позволяющие узнать статус сборки.&lt;br /&gt;
&lt;br /&gt;
Наиболее эффективна публикация результатов несколькими различными методами сразу. Например рассылка короткого письма команде, только в случае провала сборки, и публикация полного отчета на веб сервере.&lt;br /&gt;
&lt;br /&gt;
Для правильной организации данного этапа важно понимать кого и как необходимо оповещать о результатах интеграции. Здесь надо выбрать между двумя крайностями — оповещать всегда или никогда. Примерное решение этой задачи будет таким:&lt;br /&gt;
* разработчики — минимум при сбое интеграции, в противном случае, как разработчик узнает, что внесенные им изменения сломали код? Конечно, можно оповещать и всегда, это зависит от частоты сборок.&lt;br /&gt;
* тестировщики — если они входят в команду, то оповещать тогда же, когда и разработчиков, ведь иногда ошибки могут быть и в тестах. Если практикуется независимое тестирование вообще не оповещать их или оповещать при окончании интеграции.&lt;br /&gt;
* менеджер проекта — сугубо по желанию&lt;br /&gt;
&lt;br /&gt;
= Профиты =&lt;br /&gt;
&lt;br /&gt;
Так какую пользу можно получить о внедрения непрерывной интеграции в своем проекте?&lt;br /&gt;
&lt;br /&gt;
В первую очередь это безболезненная интеграция всего проекта. Интеграция различных модулей и правок разных программистов перестает быть делом в принципе, она происходит «сама» без участия людей и если что-то не так, вы об этом узнаете. Конечно, сейчас редкость, что проект имеет особую стадию интеграции, когда из кучи разных модулей пытаются сделать приложение, но все же не надо недооценивать пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
Больше никаких «Это работает на моей машине!». Если что-то не работает на сборочном сервере — значит оно не работает вообще. Аргументы программиста, что у него все работает в данном случае не помогут. Сервер интеграции становиться судьей в таких вопросах и этот судья беспристрастен.&lt;br /&gt;
&lt;br /&gt;
Все анализаторы кода и тесты, которые вы используете и написали, обязательно запускаются над каждой сборкой. Если в систему контроля версий попал «плохой» код — вы об этом узнаете. И не важно, нарушен ли один из стандартов кодирования, или статический анализатор кода показывает, что в код попала потенциальная ошибка или тесты не прошли, а может просто покрытие кода модульными тестами упало ниже необходимого минимума. Вы об этом узнаете и сможете принять меры.&lt;br /&gt;
&lt;br /&gt;
Более того, запуск всех этих анализаторов полезен не только для определения состояния в текущий момент времени, но и для анализа тенденций. Можно увидеть, когда ваш код стал сильно больше, сложнее, в каких модулях эта сложность сконцентрирована. Да, это требует наличия и использования соответствующего инструментария.&lt;br /&gt;
&lt;br /&gt;
Чем больше и серьезней проведена работа по настройке сервера интеграции, тем больше пользы можно получить. Если ваш сервер просто собирает проект после каждого изменения в коде, то пользы от него почти нет, но и усилий на него почти не потрачено.&lt;br /&gt;
&lt;br /&gt;
= Continuous Improvement =&lt;br /&gt;
&lt;br /&gt;
После того как вы наладили процесс непрерывной интеграции вам может показаться, что дело сделано: сервер работает, билды собираются, почта идет и все хорошо, пока нет никаких ЧП (вроде поломки сервера). Но это не так. Сам процесс требует постоянной наладки, подстройки. Если сначала у вас не было никаких тестов, то их нужно сделать. После вы захотите собирать информацию о покрытии вашего приложения тестами, затем изменение такого покрытия во времени, возможно какие-то еще специфичные метрики. Ну, а если оказалось, что больше улучшать нечего, подождите какое-то время и такая необходимость появится.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
== Публикации ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.martinfowler.com/articles/continuousIntegration.html Continuous Integration] — статья Мартина Фаулера (Martin Fowler) по Continuous Integration&lt;br /&gt;
* [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] — статья Джеймса Шора (James Shore) о ручном методе интеграции&lt;br /&gt;
* [http://blogs.msdn.com/mswanson/articles/169058.aspx Automated Continuous Integration and the Ambient Orb] — статья Майка Свонсона (Mike Swanson)&lt;br /&gt;
* [http://c2.com/cgi/wiki?ContinuousIntegration c2.com] — статья по Continuous Integration в wiki на c2.com&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Continuous_Integration en.wikipedia.org] — статья по Continuous Integration в Wikipedia&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Непрерывная_интеграция ru.wikipedia.org] — статья по непрерывной интеграции в Википедии&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Сервера интеграции ===&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net CruiseControl] — сервер интеграции для Java (см. так же [[CruiseControl]]).&lt;br /&gt;
* [http://studio.thoughtworks.com/cruise-continuous-integration ThoughtWorks Cruise] — коммерческий сервер интеграции от компании ThoughtWorks (есть бесплатная версия).&lt;br /&gt;
* [http://ccnet.sourceforge.net CruiseControl.NET] — сервер интеграции для .NET (см. так же [[CruiseControl.NET]])&lt;br /&gt;
* [http://cruisecontrolrb.thoughtworks.com CruiseControl.rb] — сервер интеграции для Ruby.&lt;br /&gt;
* [http://hudson.dev.java.net Hudson] — open-source сервер интеграции, создан как альтернатива [[CruiseControl]]. Функциональность расширяется плагинами.&lt;br /&gt;
* [http://bitten.edgewall.org Bitten] — open-source сервер интеграции написанный на [[Python]], интегрируется с [[Trac]].&lt;br /&gt;
* [http://www.jetbrains.com/teamcity/index.html TeamCity] — коммерческий сервер интеграции от компаниии JetBrains для java и .NET (есть бесплатная версия).&lt;br /&gt;
&lt;br /&gt;
=== Инструменты сборки ===&lt;br /&gt;
* [http://ant.apache.org Ant] — средство сборки для Java&lt;br /&gt;
* [http://maven.apache.org Maven] — средство сборки для Java&lt;br /&gt;
* [http://nant.sourceforge.net/ NAnt] — аналог Ant под .NET&lt;br /&gt;
&lt;br /&gt;
=== Статический анализ ===&lt;br /&gt;
* [http://pmd.sourceforge.net PMD] — анализ кода Java&lt;br /&gt;
* [http://findbugs.sourceforge.net Findbugs] — анализ кода на типичные ошибки&lt;br /&gt;
* [http://www.redhillconsulting.com.au/products/simian/ Simian] — поиск повторов (copу+paste) в коде Java&lt;br /&gt;
* [http://www.gotdotnet.com/team/fxcop/ FXCop] — анализ кода .NET&lt;br /&gt;
* [http://qalab.sourceforge.net/index.html QALab] — объединение логов нескольких инструментов анализа кода, сбор статистики&lt;br /&gt;
* [http://www.panopticode.org/ Panopticode] — объединение логов нескольких инструментов анализа кода для Java, графическое представление результатов&lt;br /&gt;
&lt;br /&gt;
=== Модульное тестирование и покрытие ===&lt;br /&gt;
* [http://junit.org JUnit] — де-факто стандарт модульного тестирования Java&lt;br /&gt;
* [http://testng.org TestNG] — инструмент нового поколения для модульного тестирования Java&lt;br /&gt;
* [http://www.nunit.org/ NUnit] — модульные тесты для приложений .NET&lt;br /&gt;
* [http://cobertura.sourceforge.net Cobertura] — измерение покрытия кода модульными тестами для Java&lt;br /&gt;
* [http://www.atlassian.com/software/clover/ Clover] — анализ покрытия кода тестами для Java&lt;br /&gt;
* [http://www.cenqua.com/clovernet/ Clover.NET] — анализ покрытия кода тестами под .NET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программирование]]&lt;br /&gt;
[[Категория:Тестирование программного обеспечения]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=9627</id>
		<title>Continuous Integration</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=9627"/>
				<updated>2008-07-29T06:45:33Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=  Введение =&lt;br /&gt;
 «Continuous Integration» — это лекарство от страха. Помогает при программировании.&lt;br /&gt;
                                          Dr. Zoidberg ©&lt;br /&gt;
&lt;br /&gt;
Согласно [http://en.wikipedia.org/wiki/Continuous_Integration Wikipedia] термин Continuous Integration введен Мартином Фаулером (Martin Fowler) и Кентом Беком (Kent Beck). Данный термин был придуман ими для обозначения практики частой сборки (интеграции) проекта. Максимально частая сборка является логичным продолжением цепочки&lt;br /&gt;
 редкие сборки под релизы-&amp;gt;ночные сборки-&amp;gt;непрерывные сборки&lt;br /&gt;
&lt;br /&gt;
В настоящее время Continuous Integration (непрерывная интеграция) одна из практик применяемых в семействе гибких (Agile) методологий. В подобных методологиях она удачно сочетается с другими практиками, такими как модульное(unit) тестирование, рефакторинг, стандарт кодирования. Но даже без них модно получить пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
= Основные принципы =&lt;br /&gt;
&lt;br /&gt;
== Каждое изменение должно интегрироваться ==&lt;br /&gt;
&lt;br /&gt;
Слово continuous в термине [[Continuous Integration]] означает «непрерывный/непрекращающийся». Это означает, что в идеале сборка вашего проекта должна идти буквально все время. Каждое изменение в системе контроля версий (например [[CVS]]) должно интегрироваться без пропусков или задержек. Организация ночных сборок — это хорошая практика, но это не continuous integration. Ведь результаты такой ночной сборки будут доступны лишь на следующий день, когда их актуальность для разработчиков уже значительно снижена. На практике довольно часто реализуют оба процесса и непрерывную интеграция и ночные сборки — более редкую интеграцию.&lt;br /&gt;
В очень крупных проектах это требование иногда невозможно соблюсти, но интеграция каждые сутки это предел за который не стоит уходить.&lt;br /&gt;
Принцип непрерывной интеграции не выполним без другого условия — «Сборка должна идти быстро».&lt;br /&gt;
&lt;br /&gt;
== Быстрая сборка ==&lt;br /&gt;
&lt;br /&gt;
«Сборка должна идти быстро» — точнее не более 10 минут. Если после одного небольшого коммита ваш интеграционный сервер будет уходить в 2-х часовое пыхтение на сборку, тестирование и разворачивание от этого будет мало пользы. Разработчики будут уже далеко, над решение других проблем, им будет сложно вернуться и понять причины сбоя, если таковой был. Ведь суть непрерывной интеграции в получении быстрого feedback. Вдобавок, поздний ответ с сервера может отвлечь их от другого дела.&lt;br /&gt;
&lt;br /&gt;
В случае если все этапы процесса никак не удается втиснуть в приемлемые временные рамки можно разделить его на несколько частей. При каждом коммите производить лишь саму сборку и минимальный набор тестов (smoke tests), чтобы уменьшить время. А по ночам проводить полный цикл интеграции, результаты которого команда будет анализировать с утра. Но это скорее вынужденная мера, а не пример для подражания.&lt;br /&gt;
&lt;br /&gt;
== Сделайте тесты ==&lt;br /&gt;
&lt;br /&gt;
Тесты просто необходимо включать в continuous integration процесс, в противном случае вы не можете быть уверены в качестве и работоспособности своего проекта. Чем тестов больше, тем лучше, в разумных пределах конечно. Основными двумя ограничителями на количество тестов будет:&lt;br /&gt;
* время интеграции — сборка по-прежнему должна оставаться быстрой, основное тестирование можно перенести «на ночь»,&lt;br /&gt;
* наличие автоматизированных тестов — не все тесты требуют автоматизации, нет смысла делать автоматизированные тесты только для самих тестов, они должны быть целесообразны.&lt;br /&gt;
&lt;br /&gt;
Чем лучше ваши тесты, тем раньше находяться ошибки и раньше исправляются. Как известно, чем раньше ошибка исправлена, тем дешевле ее исправление. Это одно из основных преимуществ практики непрерывной интеграции — снижение стоимости исправления ошибок (не всех конечно). Попутно наличие хорошего набора тестов в процессе интеграции дает больше уверенности в том, что проект работает правильно.&lt;br /&gt;
&lt;br /&gt;
Именнно присутствие тестов одно из отличий интеграции от нажатия кнопки Build в вашей любимой IDE.&lt;br /&gt;
&lt;br /&gt;
== Интеграция на специальной машине ==&lt;br /&gt;
&lt;br /&gt;
Организовывать процесс необходимо на специально выделенной машине.&lt;br /&gt;
Такая машина по своей конфигурации и набору прикладных программ должна максимально соответствовать окружению в котором проект будет развернут (production enviroment). Очевидно, что полного совпадения достичь практически невозможно — маловероятно, что эксплуатироватся программа будет на машине с установленными средствами сборки, тестирования и проч. Но точное совпадение версий операционных систем (и сервис паков) необходимо.&lt;br /&gt;
&lt;br /&gt;
При этом это не должна быть машина разработчика или кого-то еще, это должна быть '''выделенная''' машина (можно виртуальная). Ведь зачастую проект, собранный на машине одного разработчика, не собирается на машине другого. Выделение машины для целей интеграции позволяет уменьшить риск связанный с конфигурацией программного и аппаратного обеспечения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Методы =&lt;br /&gt;
&lt;br /&gt;
== Continuous Integration сервер ==&lt;br /&gt;
&lt;br /&gt;
Хотя в принципе практика continuous integration не требует никакого технического и программного обеспечения, гораздо удобнее, проще и дешевле наладить процесс с использованием таких средств. Такие средства называются сервера интеграции (continuous integration server)- специализированные приложения для автоматизации данного процесса.&lt;br /&gt;
&lt;br /&gt;
Наиболее известный из серверов интеграции пожалуй [[CruiseControl]]. [[CruiseControl]] это сервер для интеграции приложений на java, написанный на java. Так же широко распространен его собрат (точнее портированная версия) под .NET — [[CruiseControl.NET]].&lt;br /&gt;
&lt;br /&gt;
Ниже приведена схема организации такого сервера интеграции:&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 rankdir=LR&lt;br /&gt;
&lt;br /&gt;
 Trigger [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Trigger&amp;quot;, URL=&amp;quot;#Trigger&amp;quot;]&lt;br /&gt;
 BuildLoop [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Build Loop&amp;quot;, URL=&amp;quot;#Build_Loop&amp;quot;]&lt;br /&gt;
 Report [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Reporting App&amp;quot;, URL=&amp;quot;#Report&amp;quot;]&lt;br /&gt;
 ExtApps [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;External Applications&amp;quot;, URL=&amp;quot;#Инструменты&amp;quot;] &lt;br /&gt;
 Logs [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Logs&amp;quot;, URL=&amp;quot;#Logs&amp;quot;]&lt;br /&gt;
 Team [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Team&amp;quot;, URL=&amp;quot;#Team&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
 subgraph cluster_machine{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  label = &amp;quot;Build Machine&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Build_Machine&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 subgraph cluster_server{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  BuildLoop -&amp;gt; Report;&lt;br /&gt;
  &lt;br /&gt;
  label = &amp;quot;CI Server&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Continuous_Integration_сервер&amp;quot;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  ExtApps-&amp;gt;BuildLoop; /*-&amp;gt;Logs;*/&lt;br /&gt;
  ExtApps-&amp;gt;Logs-&amp;gt;Report;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Trigger-&amp;gt;BuildLoop;&lt;br /&gt;
 BuildLoop-&amp;gt;ExtApps;&lt;br /&gt;
 Report-&amp;gt;Team;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ручной процесс ==&lt;br /&gt;
&lt;br /&gt;
Хотя решение с выделенным сервером для continuous integration кажется простым и дешевым, у него есть противники. Точнее, сторонники ручного процесса. Один из таких Джеймс Шор (James Shore) в своей статье [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] пишет, как правильно организовать continuous integration процесс без специализированных приложений, вроде [[CruiseControl]]. В этой статье мы не касаемся данного вопроса.&lt;br /&gt;
&lt;br /&gt;
= Процесс интеграции =&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс состоит из нескольких этапов, некоторые из которых обязательны, другие нет:&lt;br /&gt;
* [[#Trigger|Trigger]] — обязателен&lt;br /&gt;
* [[#Update|Update]] — обязателен&lt;br /&gt;
* [[#Analyse|Analyse]] — не обязателен&lt;br /&gt;
* [[#Build|Build]] — а как без него?&lt;br /&gt;
* [[#UnitTest|UnitTest]] — крайне желателен&lt;br /&gt;
* [[#Deploy|Deploy]] — нужен по обстоятельствам&lt;br /&gt;
* [[#Test|Test]] — не обязателен, но крайне желателен&lt;br /&gt;
* [[#Archive|Archive]] — желателен&lt;br /&gt;
* [[#Report|Report]] — обязателен&lt;br /&gt;
&lt;br /&gt;
== Trigger ==&lt;br /&gt;
&lt;br /&gt;
Цикл интеграции начинается со срабатывания триггера. Это может быть одно из следующих событий:&lt;br /&gt;
* изменение в системе контроля версий&lt;br /&gt;
* изменение в файловой системе&lt;br /&gt;
* определенный момент времени&lt;br /&gt;
* сборка другого проекта&lt;br /&gt;
* нажата «красная» кнопка&lt;br /&gt;
* изменение на веб сервере&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что не все CI сервера поддерживают все возможные варианты триггеров, но основные (система контроля версий и файловая система) поддерживаются большинством.&lt;br /&gt;
&lt;br /&gt;
Характерным примером будет случай, когда один из разработчиков делает коммит в систему контроля версий. Для интеграционного сервера это означает, что в исходном коде проекта произошли изменения и необходимо провести сборку для проверки того, что эти изменения ничего не испортили и согласуются с ранее сделанными. После этого наступает следующий этап.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
На данном этапе CI сервер делает update своей локальной копии исходного кода проекта. В процессе update выясняются изменения в коде (и не только) произошедшие с последненй интеграции. Выяснение изменений необходимо для того, чтобы в случае сбоя можно было легко выяснить причину и найти ответственного.&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
&lt;br /&gt;
После того, как свежая версия проекта вытащена из системы контроля версий, но сборка еще не начата, можно провести статический анализ кода.&lt;br /&gt;
Существует множество автоматических средств, для различных языков программирования, позволяющих провести такой анализ. Обычно измеряются следующие характеристики кода:&lt;br /&gt;
* наличие типичных ошибок&lt;br /&gt;
* статические характеристики кода: сложность, размер, прочее&lt;br /&gt;
* соответствие принятым стандартам кодирования&lt;br /&gt;
* другое&lt;br /&gt;
&lt;br /&gt;
Данный этап является необязательным для процесса continuous integration, но в случае его наличия можно получить дополнительный преимущества от введения практики в виде метрик по коду. Данный этап подразумевает не только получение статических характеристик кода, но и их включение в отчеты создаваемые сервером интеграции (о отчетах смотрите [[#Report|здесь]]).&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
Один из основных этапов процесса это сборка проекта. Здесь происходит компиляция (трансляция) исходных кодов в исполнимые файлы или какой-то другой результат. Поскольку сервер интеграции представляет собой специально выделенную машину (смотрите [[#Интеграция_на_специальной_машине|здесь]]) со строго определенной конфигурацией, результат только этой сборки можно считать конечным. Больше никаких «Проект собирается на моей машине!». Есть только одно место, где проект может собираться — это интеграционный сервер.&lt;br /&gt;
&lt;br /&gt;
Естественно сборка является обязательным этапом интеграции.&lt;br /&gt;
&lt;br /&gt;
== UnitTest ==&lt;br /&gt;
&lt;br /&gt;
В методологии Extreme Programming модульное (unit) тестирование является неотъемлемой частью разработки приложения. Модульные тесты изначально автоматизированы, их включение в процесс интеграции крайне желательно. Поскольку часто у разработчиков нет времени или желания запускать такие тесты до того как изменения отправлены в систему контроля версий, дополнительное их исполнение никогда не будет лишним.&lt;br /&gt;
Дополнительную информацию можно извлечь, измеряя покрытие модульных тестов. Эта метрика поможет лучше контролировать качество выпускаемого продукта.&lt;br /&gt;
&lt;br /&gt;
Естественно, при отсутствии самих тестов в проекте этот этап не выполним. Хотя наличие поставленного процесса непрерывной интеграции без модульных тестов заставляет задуматься об их необходимости.&lt;br /&gt;
&lt;br /&gt;
== Deploy ==&lt;br /&gt;
&lt;br /&gt;
После того как мы убедились в некоторой работоспособности проекта — он собирается (этап [[#Build|Build]]) и все модульные тесты проходят ([[#UnitTest|UnitTest]]) проект необходимо «развернуть». В случае веб-приложения это выкладывание на веб-сервер (сервер приложений) и запуск. Для GUI приложений это (пере)установка в системе.&lt;br /&gt;
&lt;br /&gt;
Этап развертывание должен проходить как можно более «чисто», подробнее смотрите [[#Интеграция_на_специальной_машине|здесь]]. При этом для последующего тестирования часто необходимо привести приложение в некое «стандартное» состояние:&lt;br /&gt;
* «залить» дамп базы&lt;br /&gt;
* настроить в стандартном режиме&lt;br /&gt;
* убрать следы предыдущей деятельности приложения&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
После того ка приложение «развернуто» необходимо его протестировать. Здесь имеются ввиду автоматические функциональные тесты, иначе говоря на данном этапе проводиться регрессионное тестирование.&lt;br /&gt;
&lt;br /&gt;
После прохождения регрессионных тестов можно считать, что интеграция прошла успешно и в проект не внесено правок, которые могут привести к его неработоспособности (здесь все зависит от вашего набора тестов модульных и функциональных). В противном случае интеграция не успешна — код содержит ошибки и требуется его исправление/доработка.&lt;br /&gt;
&lt;br /&gt;
Тестирование это один из «фатальных» этапов процесса, ошибка на котором означает сбой сборки. Всего есть несколько таких «фатальных» этапов:&lt;br /&gt;
* [[#Build|Build]] — проект не собирается&lt;br /&gt;
* [[#UnitTest|UnitTest]] — модульные тест не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
* [[#Test|Test]] — регрессионные тесты не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
&lt;br /&gt;
Иногда к ним присоединяют этап [[#Analyse|Analyse]] — если в коде обнаружено несоответствие стандартам кодирования, то это является ошибкой.&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
После того как достигнута максимальная уверенность в качестве исходного кода необходимо сохранить его. Это можно сделать, например, посредством меток в системе контроля версий. Так же необходимо сохранить бинарные файлы проекта. Они могут понадобиться, если нужно будет воспроизвести ошибку в конкретной версии и для ручного тестирования.&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс можно использовать как формализацию процесса передачи версии проекта на тестирование. К примеру можно настроить сервер публиковать свежую версию каждые две недели и сообщать об этом тестировщикам по электронной почте. Тестировщики всегда будут знать откуда брать свежую и «правильную» версию. А наличие регрессионных и модульных тестов является своего рода первичным (smoke) тестированием и гарантирует (в некоторой степени конечно) работоспособность данной версии. Таким образом на тестирование не попадет версия, которая имеет существенные недостатки препятствующие тестированию.&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
В конце идет важный этап генерации и публикации отчетов. Отчеты включают в себя следующее:&lt;br /&gt;
* причина сборки — например изменения в репозитории&lt;br /&gt;
* изменения в исходных кодах — здесь возможны два варианта изменения от последней сборки или от последней успешной сборки&lt;br /&gt;
* отчеты по статическому анализу кода — все результаты какие есть&lt;br /&gt;
* лог сборки&lt;br /&gt;
* лог модульных тестов — какие тесты прошли и, что важнее, какие не прошли&lt;br /&gt;
* лог регрессионных тестов — аналогично модульным тестам&lt;br /&gt;
* статистика сборок проекта:&lt;br /&gt;
** общее число удачных/провальных сборок&lt;br /&gt;
** распределение удачных/провальных сборок во времени&lt;br /&gt;
** статистика результатов статического анализа кода&lt;br /&gt;
* все другие метрики используемые и собираемые в проекте — это поможет менеджеру проекта видеть все и сразу&lt;br /&gt;
&lt;br /&gt;
Механизм публикации отчета может быть разный и даже не один. Это может быть IRC или jabber бот, рассылка по электронной почте, публикация на web или ftp сервере, специализированные клиенты позволяющие узнать статус сборки.&lt;br /&gt;
&lt;br /&gt;
Наиболее эффективна публикация результатов несколькими различными методами сразу. Например рассылка короткого письма команде, только в случае провала сборки, и публикация полного отчета на веб сервере.&lt;br /&gt;
&lt;br /&gt;
Для правильной организации данного этапа важно понимать кого и как необходимо оповещать о результатах интеграции. Здесь надо выбрать между двумя крайностями — оповещать всегда или никогда. Примерное решение этой задачи будет таким:&lt;br /&gt;
* разработчики — минимум при сбое интеграции, в противном случае, как разработчик узнает, что внесенные им изменения сломали код? Конечно, можно оповещать и всегда, это зависит от частоты сборок.&lt;br /&gt;
* тестировщики — если они входят в команду, то оповещать тогда же, когда и разработчиков, ведь иногда ошибки могут быть и в тестах. Если практикуется независимое тестирование вообще не оповещать их или оповещать при окончании интеграции.&lt;br /&gt;
* менеджер проекта — сугубо по желанию&lt;br /&gt;
&lt;br /&gt;
= Профиты =&lt;br /&gt;
&lt;br /&gt;
Так какую пользу можно получить о внедрения непрерывной интеграции в своем проекте?&lt;br /&gt;
&lt;br /&gt;
В первую очередь это безболезненная интеграция всего проекта. Интеграция различных модулей и правок разных программистов перестает быть делом в принципе, она происходит «сама» без участия людей и если что-то не так, вы об этом узнаете. Конечно, сейчас редкость, что проект имеет особую стадию интеграции, когда из кучи разных модулей пытаются сделать приложение, но все же не надо недооценивать пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
Больше никаких «Это работает на моей машине!». Если что-то не работает на сборочном сервере — значит оно не работает вообще. Аргументы программиста, что у него все работает в данном случае не помогут. Сервер интеграции становиться судьей в таких вопросах и этот судья беспристрастен.&lt;br /&gt;
&lt;br /&gt;
Все анализаторы кода и тесты, которые вы используете и написали, обязательно запускаются над каждой сборкой. Если в систему контроля версий попал «плохой» код — вы об этом узнаете. И не важно, нарушен ли один из стандартов кодирования, или статический анализатор кода показывает, что в код попала потенциальная ошибка или тесты не прошли, а может просто покрытие кода модульными тестами упало ниже необходимого минимума. Вы об этом узнаете и сможете принять меры.&lt;br /&gt;
&lt;br /&gt;
Более того, запуск всех этих анализаторов полезен не только для определения состояния в текущий момент времени, но и для анализа тенденций. Можно увидеть, когда ваш код стал сильно больше, сложнее, в каких модулях эта сложность сконцентрирована. Да, это требует наличия и использования соответствующего инструментария.&lt;br /&gt;
&lt;br /&gt;
Чем больше и серьезней проведена работа по настройке сервера интеграции, тем больше пользы можно получить. Если ваш сервер просто собирает проект после каждого изменения в коде, то пользы от него почти нет, но и усилий на него почти не потрачено.&lt;br /&gt;
&lt;br /&gt;
= Continuous Improvement =&lt;br /&gt;
&lt;br /&gt;
После того как вы наладили процесс непрерывной интеграции вам может показаться, что дело сделано: сервер работает, билды собираются, почта идет и все хорошо, пока нет никаких ЧП (вроде поломки сервера). Но это не так. Сам процесс требует постоянной наладки, подстройки. Если сначала у вас не было никаких тестов, то их нужно сделать. После вы захотите собирать информацию о покрытии вашего приложения тестами, затем изменение такого покрытия во времени, возможно какие-то еще специфичные метрики. Ну, а если оказалось, что больше улучшать нечего, подождите какое-то время и такая необходимость появится.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
== Публикации ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.martinfowler.com/articles/continuousIntegration.html Continuous Integration] — статья Мартина Фаулера (Martin Fowler) по Continuous Integration&lt;br /&gt;
* [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] — статья Джеймса Шора (James Shore) о ручном методе интеграции&lt;br /&gt;
* [http://blogs.msdn.com/mswanson/articles/169058.aspx Automated Continuous Integration and the Ambient Orb] — статья Майка Свонсона (Mike Swanson)&lt;br /&gt;
* [http://c2.com/cgi/wiki?ContinuousIntegration c2.com] — статья по Continuous Integration в wiki на c2.com&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Continuous_Integration en.wikipedia.org] — статья по Continuous Integration в Wikipedia&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Непрерывная_интеграция ru.wikipedia.org] — статья по непрерывной интеграции в Википедии&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
&lt;br /&gt;
=== Сервера интеграции ===&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net CruiseControl] — сервер интеграции для Java (см. так же [[CruiseControl]]).&lt;br /&gt;
* [http://studio.thoughtworks.com/cruise-continuous-integration ThoughtWorks Cruise] — коммерческий сервер интеграции от компании ThoughtWorks (есть бесплатная версия).&lt;br /&gt;
* [http://ccnet.sourceforge.net CruiseControl.NET] — сервер интеграции для .NET (см. так же [[CruiseControl.NET]])&lt;br /&gt;
* [http://cruisecontrolrb.thoughtworks.com CruiseControl.rb] — сервер интеграции для Ruby.&lt;br /&gt;
* [http://hudson.dev.java.net Hudson] — open-source сервер интеграции, создан как альтернатива [[CruiseControl]]. Функциональность расширяется плагинами.&lt;br /&gt;
* [http://bitten.edgewall.org Bitten] — open-source сервер интеграции написанный на [[Python]], интегрируется с [[Trac]].&lt;br /&gt;
* [http://www.jetbrains.com/teamcity/index.html TeamCity] — коммерческий сервер интеграции от компаниии JetBrains для java и .NET (есть бесплатная версия).&lt;br /&gt;
&lt;br /&gt;
=== Инструменты сборки ===&lt;br /&gt;
* [http://ant.apache.org Ant] — средство сборки для Java&lt;br /&gt;
* [http://maven.apache.org Maven] — средство сборки для Java&lt;br /&gt;
* [http://nant.sourceforge.net/ NAnt] — аналог Ant под .NET&lt;br /&gt;
&lt;br /&gt;
=== Статический анализ ===&lt;br /&gt;
* [http://pmd.sourceforge.net PMD] — анализ кода Java&lt;br /&gt;
* [http://findbugs.sourceforge.net Findbugs] — анализ кода на типичные ошибки&lt;br /&gt;
* [http://www.redhillconsulting.com.au/products/simian/ Simian] — поиск повторов (copу+paste) в коде Java&lt;br /&gt;
* [http://www.gotdotnet.com/team/fxcop/ FXCop] — анализ кода .NET&lt;br /&gt;
* [http://qalab.sourceforge.net/index.html QALab] — объединение логов нескольких инструментов анализа кода, сбор статистики&lt;br /&gt;
* [http://www.panopticode.org/ Panopticode] — объединение логов нескольких инструментов анализа кода для Java, графическое представление результатов&lt;br /&gt;
&lt;br /&gt;
=== Модульное тестирование и покрытие ===&lt;br /&gt;
* [http://junit.org JUnit] — де-факто стандарт модульного тестирования Java&lt;br /&gt;
* [http://testng.org TestNG] — инструмент нового поколения для модульного тестирования Java&lt;br /&gt;
* [http://www.nunit.org/ NUnit] — модульные тесты для приложений .NET&lt;br /&gt;
* [http://cobertura.sourceforge.net Cobertura] — измерение покрытия кода модульными тестами для Java&lt;br /&gt;
* [http://www.atlassian.com/software/clover/ Clover] — анализ покрытия кода тестами для Java&lt;br /&gt;
* [http://www.cenqua.com/clovernet/ Clover.NET] — анализ покрытия кода тестами под .NET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Программирование]]&lt;br /&gt;
[[Категория:Тестирование программного обеспечения]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=9626</id>
		<title>Continuous Integration</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Continuous_Integration&amp;diff=9626"/>
				<updated>2008-07-29T06:44:48Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Сервера интеграции */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Введение =&lt;br /&gt;
 «Continuous Integration» — это лекарство от страха. Помогает при программировании.&lt;br /&gt;
                                          Dr. Zoidberg ©&lt;br /&gt;
&lt;br /&gt;
Согласно [http://en.wikipedia.org/wiki/Continuous_Integration Wikipedia] термин Continuous Integration введен Мартином Фаулером (Martin Fowler) и Кентом Беком (Kent Beck). Данный термин был придуман ими для обозначения практики частой сборки (интеграции) проекта. Максимально частая сборка является логичным продолжением цепочки &lt;br /&gt;
 редкие сборки под релизы-&amp;gt;ночные сборки-&amp;gt;непрерывные сборки&lt;br /&gt;
&lt;br /&gt;
В настоящее время Continuous Integration (непрерывная интеграция) одна из практик применяемых в семействе гибких (Agile) методологий. В подобных методологиях она удачно сочетается с другими практиками, такими как модульное(unit) тестирование, рефакторинг, стандарт кодирования. Но даже без них модно получить пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
= Основные принципы =&lt;br /&gt;
&lt;br /&gt;
== Каждое изменение должно интегрироваться ==&lt;br /&gt;
&lt;br /&gt;
Слово continuous в термине [[Continuous Integration]] означает «непрерывный/непрекращающийся». Это означает, что в идеале сборка вашего проекта должна идти буквально все время. Каждое изменение в системе контроля версий (например [[CVS]]) должно интегрироваться без пропусков или задержек. Организация ночных сборок — это хорошая практика, но это не continuous integration. Ведь результаты такой ночной сборки будут доступны лишь на следующий день, когда их актуальность для разработчиков уже значительно снижена. На практике довольно часто реализуют оба процесса и непрерывную интеграция и ночные сборки — более редкую интеграцию. &lt;br /&gt;
В очень крупных проектах это требование иногда невозможно соблюсти, но интеграция каждые сутки это предел за который не стоит уходить. &lt;br /&gt;
Принцип непрерывной интеграции не выполним без другого условия — «Сборка должна идти быстро».&lt;br /&gt;
&lt;br /&gt;
== Быстрая сборка ==&lt;br /&gt;
&lt;br /&gt;
«Сборка должна идти быстро» — точнее не более 10 минут. Если после одного небольшого коммита ваш интеграционный сервер будет уходить в 2-х часовое пыхтение на сборку, тестирование и разворачивание от этого будет мало пользы. Разработчики будут уже далеко, над решение других проблем, им будет сложно вернуться и понять причины сбоя, если таковой был. Ведь суть непрерывной интеграции в получении быстрого feedback. Вдобавок, поздний ответ с сервера может отвлечь их от другого дела.&lt;br /&gt;
&lt;br /&gt;
В случае если все этапы процесса никак не удается втиснуть в приемлемые временные рамки можно разделить его на несколько частей. При каждом коммите производить лишь саму сборку и минимальный набор тестов (smoke tests), чтобы уменьшить время. А по ночам проводить полный цикл интеграции, результаты которого команда будет анализировать с утра. Но это скорее вынужденная мера, а не пример для подражания.&lt;br /&gt;
&lt;br /&gt;
== Сделайте тесты ==&lt;br /&gt;
&lt;br /&gt;
Тесты просто необходимо включать в continuous integration процесс, в противном случае вы не можете быть уверены в качестве и работоспособности своего проекта. Чем тестов больше, тем лучше, в разумных пределах конечно. Основными двумя ограничителями на количество тестов будет:&lt;br /&gt;
* время интеграции — сборка по-прежнему должна оставаться быстрой, основное тестирование можно перенести «на ночь»,&lt;br /&gt;
* наличие автоматизированных тестов — не все тесты требуют автоматизации, нет смысла делать автоматизированные тесты только для самих тестов, они должны быть целесообразны.&lt;br /&gt;
&lt;br /&gt;
Чем лучше ваши тесты, тем раньше находяться ошибки и раньше исправляются. Как известно, чем раньше ошибка исправлена, тем дешевле ее исправление. Это одно из основных преимуществ практики непрерывной интеграции — снижение стоимости исправления ошибок (не всех конечно). Попутно наличие хорошего набора тестов в процессе интеграции дает больше уверенности в том, что проект работает правильно. &lt;br /&gt;
&lt;br /&gt;
Именнно присутствие тестов одно из отличий интеграции от нажатия кнопки Build в вашей любимой IDE.&lt;br /&gt;
&lt;br /&gt;
== Интеграция на специальной машине ==&lt;br /&gt;
&lt;br /&gt;
Организовывать процесс необходимо на специально выделенной машине. &lt;br /&gt;
Такая машина по своей конфигурации и набору прикладных программ должна максимально соответствовать окружению в котором проект будет развернут (production enviroment). Очевидно, что полного совпадения достичь практически невозможно — маловероятно, что эксплуатироватся программа будет на машине с установленными средствами сборки, тестирования и проч. Но точное совпадение версий операционных систем (и сервис паков) необходимо.&lt;br /&gt;
&lt;br /&gt;
При этом это не должна быть машина разработчика или кого-то еще, это должна быть '''выделенная''' машина (можно виртуальная). Ведь зачастую проект, собранный на машине одного разработчика, не собирается на машине другого. Выделение машины для целей интеграции позволяет уменьшить риск связанный с конфигурацией программного и аппаратного обеспечения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Методы =&lt;br /&gt;
== Continuous Integration сервер ==&lt;br /&gt;
&lt;br /&gt;
Хотя в принципе практика continuous integration не требует никакого технического и программного обеспечения, гораздо удобнее, проще и дешевле наладить процесс с использованием таких средств. Такие средства называются сервера интеграции (continuous integration server)- специализированные приложения для автоматизации данного процесса. &lt;br /&gt;
&lt;br /&gt;
Наиболее известный из серверов интеграции пожалуй [[CruiseControl]]. [[CruiseControl]] это сервер для интеграции приложений на java, написанный на java. Так же широко распространен его собрат (точнее портированная версия) под .NET — [[CruiseControl.NET]].&lt;br /&gt;
&lt;br /&gt;
Ниже приведена схема организации такого сервера интеграции:&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 rankdir=LR&lt;br /&gt;
&lt;br /&gt;
 Trigger [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Trigger&amp;quot;, URL=&amp;quot;#Trigger&amp;quot;]&lt;br /&gt;
 BuildLoop [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Build Loop&amp;quot;, URL=&amp;quot;#Build_Loop&amp;quot;]&lt;br /&gt;
 Report [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Reporting App&amp;quot;, URL=&amp;quot;#Report&amp;quot;]&lt;br /&gt;
 ExtApps [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;External Applications&amp;quot;, URL=&amp;quot;#Инструменты&amp;quot;] &lt;br /&gt;
 Logs [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;, label=&amp;quot;Logs&amp;quot;, URL=&amp;quot;#Logs&amp;quot;]&lt;br /&gt;
 Team [shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;green&amp;quot;, label=&amp;quot;Team&amp;quot;, URL=&amp;quot;#Team&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
 subgraph cluster_machine{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  label = &amp;quot;Build Machine&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Build_Machine&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 subgraph cluster_server{&lt;br /&gt;
  node [style=filled];&lt;br /&gt;
  BuildLoop -&amp;gt; Report;&lt;br /&gt;
  &lt;br /&gt;
  label = &amp;quot;CI Server&amp;quot;;&lt;br /&gt;
  URL=&amp;quot;#Continuous_Integration_сервер&amp;quot;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
  ExtApps-&amp;gt;BuildLoop; /*-&amp;gt;Logs;*/&lt;br /&gt;
  ExtApps-&amp;gt;Logs-&amp;gt;Report;&lt;br /&gt;
  color=blue;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Trigger-&amp;gt;BuildLoop;&lt;br /&gt;
 BuildLoop-&amp;gt;ExtApps;&lt;br /&gt;
 Report-&amp;gt;Team;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ручной процесс ==&lt;br /&gt;
&lt;br /&gt;
Хотя решение с выделенным сервером для continuous integration кажется простым и дешевым, у него есть противники. Точнее, сторонники ручного процесса. Один из таких Джеймс Шор (James Shore) в своей статье [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] пишет, как правильно организовать continuous integration процесс без специализированных приложений, вроде [[CruiseControl]]. В этой статье мы не касаемся данного вопроса.&lt;br /&gt;
&lt;br /&gt;
= Процесс интеграции =&lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс состоит из нескольких этапов:&lt;br /&gt;
* [[#Trigger|Trigger]]- от этого не избавиться&lt;br /&gt;
* [[#Update|Update]] — обязателен&lt;br /&gt;
* [[#Analyse|Analyse]] — не обязателен&lt;br /&gt;
* [[#Build|Build]] — а как без него?&lt;br /&gt;
* [[#UnitTest|UnitTest]] — крайне желателен&lt;br /&gt;
* [[#Deploy|Deploy]] — нужен по обстоятельствам&lt;br /&gt;
* [[#Test|Test]] — не обязателен&lt;br /&gt;
* [[#Archive|Archive]] — желателен&lt;br /&gt;
* [[#Report|Report]] — обязателен&lt;br /&gt;
&lt;br /&gt;
== Trigger ==&lt;br /&gt;
&lt;br /&gt;
Цикл интеграции начинается со срабатывания триггера. Это может быть одно из следующих событий:&lt;br /&gt;
* изменение в системе контроля версий&lt;br /&gt;
* изменение в файловой системе&lt;br /&gt;
* определенный момент времени&lt;br /&gt;
* сборка другого проекта&lt;br /&gt;
* нажата «красная» кнопка&lt;br /&gt;
* изменение на веб сервере&lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что не все CI сервера поддерживают все возможные варианты триггеров, но основные (система контроля версий и файловая система) поддерживаются большинством.&lt;br /&gt;
&lt;br /&gt;
Характерным примером будет случай, когда один из разработчиков делает коммит в систему контроля версий. Для интеграционного сервера это означает, что в исходном коде проекта произошли изменения и необходимо провести сборку для проверки того, что эти изменения ничего не испортили и согласуются с ранее сделанными. После этого наступает следующий этап.&lt;br /&gt;
&lt;br /&gt;
== Update ==&lt;br /&gt;
&lt;br /&gt;
На данном этапе CI сервер делает update своей локальной копии исходного кода проекта. В процессе update выясняются изменения в коде (и не только) произошедшие с последненй интеграции. Выяснение изменений необходимо для того, чтобы в случае сбоя можно было легко выяснить причину и найти ответственного.&lt;br /&gt;
&lt;br /&gt;
== Analyse ==&lt;br /&gt;
&lt;br /&gt;
После того, как свежая версия проекта вытащена из системы контроля версий, но сборка еще не начата, можно провести статический анализ кода.&lt;br /&gt;
Существует множество автоматических средств, для различных языков программирования, позволяющих провести такой анализ. Обычно измеряются следующие характеристики кода:&lt;br /&gt;
* наличие типичных ошибок&lt;br /&gt;
* статические характеристики кода: сложность, размер, прочее&lt;br /&gt;
* соответствие принятым стандартам кодирования&lt;br /&gt;
* другое&lt;br /&gt;
&lt;br /&gt;
Данный этап является необязательным для процесса continuous integration, но в случае его наличия можно получить дополнительный преимущества от введения практики в виде метрик по коду. Данный этап подразумевает не только получение статических характеристик кода, но и их включение в отчеты создаваемые сервером интеграции (о отчетах смотрите [[#Report|здесь]]).&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
Один из основных этапов процесса это сборка проекта. Здесь происходит компиляция (трансляция) исходных кодов в исполнимые файлы или какой-то другой результат. Поскольку сервер интеграции представляет собой специально выделенную машину (смотрите [[#Интеграция_на_специальной_машине|здесь]]) со строго определенной конфигурацией, результат только этой сборки можно считать конечным. Больше никаких «Проект собирается на моей машине!». Есть только одно место, где проект может собираться — это интеграционный сервер.&lt;br /&gt;
&lt;br /&gt;
Естественно сборка является обязательным этапом интеграции.&lt;br /&gt;
&lt;br /&gt;
== UnitTest ==&lt;br /&gt;
&lt;br /&gt;
В методологии Extreme Programming модульное (unit) тестирование является неотъемлемой частью разработки приложения. Модульные тесты изначально автоматизированы, их включение в процесс интеграции крайне желательно. Поскольку часто у разработчиков нет времени или желания запускать такие тесты до того как изменения отправлены в систему контроля версий, дополнительное их исполнение никогда не будет лишним. &lt;br /&gt;
Дополнительную информацию можно извлечь, измеряя покрытие модульных тестов. Эта метрика поможет лучше контролировать качество выпускаемого продукта. &lt;br /&gt;
&lt;br /&gt;
Естественно, при отсутствии самих тестов в проекте этот этап не выполним. Хотя наличие поставленного процесса непрерывной интеграции без модульных тестов заставляет задуматься об их необходимости.&lt;br /&gt;
&lt;br /&gt;
== Deploy ==&lt;br /&gt;
&lt;br /&gt;
После того как мы убедились в некоторой работоспособности проекта — он собирается (этап [[#Build|Build]]) и все модульные тесты проходят ([[#UnitTest|UnitTest]]) проект необходимо «развернуть». В случае веб-приложения это выкладывание на веб-сервер (сервер приложений) и запуск. Для GUI приложений это (пере)установка в системе. &lt;br /&gt;
&lt;br /&gt;
Этап развертывание должен проходить как можно более «чисто», подробнее смотрите [[#Интеграция_на_специальной_машине|здесь]]. При этом для последующего тестирования часто необходимо привести приложение в некое «стандартное» состояние: &lt;br /&gt;
* «залить» дамп базы&lt;br /&gt;
* настроить в стандартном режиме&lt;br /&gt;
* убрать следы предыдущей деятельности приложения&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
После того ка приложение «развернуто» необходимо его протестировать. Здесь имеются ввиду автоматические функциональные тесты, иначе говоря на данном этапе проводиться регрессионное тестирование.&lt;br /&gt;
&lt;br /&gt;
После прохождения регрессионных тестов можно считать, что интеграция прошла успешно и в проект не внесено правок, которые могут привести к его неработоспособности (здесь все зависит от вашего набора тестов модульных и функциональных). В противном случае интеграция не успешна — код содержит ошибки и требуется его исправление/доработка.&lt;br /&gt;
&lt;br /&gt;
Тестирование это один из «фатальных» этапов процесса, ошибка на котором означает сбой сборки. Всего есть несколько таких «фатальных» этапов:&lt;br /&gt;
* [[#Build|Build]] — проект не собирается &lt;br /&gt;
* [[#UnitTest|UnitTest]] — модульные тест не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
* [[#Test|Test]] — регрессионные тесты не прошли или покрытие упало ниже заданного уровня&lt;br /&gt;
&lt;br /&gt;
Иногда к ним присоединяют этап [[#Analyse|Analyse]] — если в коде обнаружено несоответствие стандартам кодирования, то это является ошибкой.&lt;br /&gt;
&lt;br /&gt;
== Archive ==&lt;br /&gt;
&lt;br /&gt;
После того как достигнута максимальная уверенность в качестве исходного кода необходимо сохранить его. Это можно сделать, например, посредством меток в системе контроля версий. Так же необходимо сохранить бинарные файлы проекта. Они могут понадобиться, если нужно будет воспроизвести ошибку в конкретной версии и для ручного тестирования. &lt;br /&gt;
&lt;br /&gt;
Continuous integration процесс можно использовать как формализацию процесса передачи версии проекта на тестирование. К примеру можно настроить сервер публиковать свежую версию каждые две недели и сообщать об этом тестировщикам по электронной почте. Тестировщики всегда будут знать откуда брать свежую и «правильную» версию. А наличие регрессионных и модульных тестов является своего рода первичным (smoke) тестированием и гарантирует (в некоторой степени конечно) работоспособность данной версии. Таким образом на тестирование не попадет версия, которая имеет существенные недостатки препятствующие тестированию.&lt;br /&gt;
&lt;br /&gt;
== Report ==&lt;br /&gt;
&lt;br /&gt;
В конце идет важный этап генерации и публикации отчетов. Отчеты включают в себя следующее:&lt;br /&gt;
* причина сборки — например изменения в репозитории&lt;br /&gt;
* изменения в исходных кодах — здесь возможны два варианта изменения от последней сборки или от последней успешной сборки &lt;br /&gt;
* отчеты по статическому анализу кода — все результаты какие есть&lt;br /&gt;
* лог сборки&lt;br /&gt;
* лог модульных тестов — какие тесты прошли и, что важнее, какие не прошли&lt;br /&gt;
* лог регрессионных тестов — аналогично модульным тестам&lt;br /&gt;
* статистика сборок проекта:&lt;br /&gt;
** общее число удачных/провальных сборок&lt;br /&gt;
** распределение удачных/провальных сборок во времени&lt;br /&gt;
** статистика результатов статического анализа кода&lt;br /&gt;
* все другие метрики используемые и собираемые в проекте — это поможет менеджеру проекта видеть все и сразу&lt;br /&gt;
&lt;br /&gt;
Механизм публикации отчета может быть разный и даже не один. Это может быть IRC или jabber бот, рассылка по электронной почте, публикация на web или ftp сервере, специализированные клиенты позволяющие узнать статус сборки.&lt;br /&gt;
&lt;br /&gt;
Наиболее эффективна публикация результатов несколькими различными методами сразу. Например рассылка короткого письма команде, только в случае провала сборки, и публикация полного отчета на веб сервере.&lt;br /&gt;
&lt;br /&gt;
Для правильной организации данного этапа важно понимать кого и как необходимо оповещать о результатах интеграции. Здесь надо выбрать между двумя крайностями — оповещать всегда или никогда. Примерное решение этой задачи будет таким:&lt;br /&gt;
* разработчики — минимум при сбое интеграции, в противном случае, как разработчик узнает, что внесенные им изменения сломали код? Конечно, можно оповещать и всегда, это зависит от частоты сборок.&lt;br /&gt;
* тестировщики — если они входят в команду, то оповещать тогда же, когда и разработчиков, ведь иногда ошибки могут быть и в тестах. Если практикуется независимое тестирование вообще не оповещать их или оповещать при окончании интеграции.&lt;br /&gt;
* менеджер проекта — сугубо по желанию&lt;br /&gt;
&lt;br /&gt;
= Профиты =&lt;br /&gt;
&lt;br /&gt;
Так какую пользу можно получить о внедрения непрерывной интеграции в своем проекте? &lt;br /&gt;
&lt;br /&gt;
В первую очередь это безболезненная интеграция всего проекта. Интеграция различных модулей и правок разных программистов перестает быть делом в принципе, она происходит «сама» без участия людей и если что-то не так, вы об этом узнаете. Конечно, сейчас редкость, что проект имеет особую стадию интеграции, когда из кучи разных модулей пытаются сделать приложение, но все же не надо недооценивать пользу от непрерывной интеграции.&lt;br /&gt;
&lt;br /&gt;
Больше никаких «Это работает на моей машине!». Если что-то не работает на сборочном сервере — значит оно не работает вообще. Аргументы программиста, что у него все работает в данном случае не помогут. Сервер интеграции становиться судьей в таких вопросах и этот судья беспристрастен.&lt;br /&gt;
&lt;br /&gt;
Все анализаторы кода и тесты, которые вы используете и написали, обязательно запускаются над каждой сборкой. Если в систему контроля версий попал «плохой» код — вы об этом узнаете. И не важно, нарушен ли один из стандартов кодирования, или статический анализатор кода показывает, что в код попала потенциальная ошибка или тесты не прошли, а может просто покрытие кода модульными тестами упало ниже необходимого минимума. Вы об этом узнаете и сможете принять меры. &lt;br /&gt;
&lt;br /&gt;
Более того, запуск всех этих анализаторов полезен не только для определения состояния в текущий момент времени, но и для анализа тенденций. Можно увидеть, когда ваш код стал сильно больше, сложнее, в каких модулях эта сложность сконцентрирована. Да, это требует наличия и использования соответствующего инструментария.&lt;br /&gt;
&lt;br /&gt;
Чем больше и серьезней проведена работа по настройке сервера интеграции, тем больше пользы можно получить. Если ваш сервер просто собирает проект после каждого изменения в коде, то пользы от него почти нет, но и усилий на него почти не потрачено.&lt;br /&gt;
&lt;br /&gt;
= Continuous Improvement = &lt;br /&gt;
&lt;br /&gt;
После того как вы наладили процесс непрерывной интеграции вам может показаться, что дело сделано: сервер работает, билды собираются, почта идет и все хорошо, пока нет никаких ЧП (вроде поломки сервера). Но это не так. Сам процесс требует постоянной наладки, подстройки. Если сначала у вас не было никаких тестов, то их нужно сделать. После вы захотите собирать информацию о покрытии вашего приложения тестами, затем изменение такого покрытия во времени, возможно какие-то еще специфичные метрики. Ну, а если оказалось, что больше улучшать нечего, подождите какое-то время и такая необходимость появится.&lt;br /&gt;
&lt;br /&gt;
= Ссылки =&lt;br /&gt;
&lt;br /&gt;
== Публикации ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.martinfowler.com/articles/continuousIntegration.html Continuous Integration] — статья Мартина Фаулера (Martin Fowler) по Continuous Integration&lt;br /&gt;
* [http://www.jamesshore.com/Blog/Continuous-Integration-on-a-Dollar-a-Day.html Continuous Integration on a Dollar a Day] — статья Джеймса Шора (James Shore) о ручном методе интеграции&lt;br /&gt;
* [http://blogs.msdn.com/mswanson/articles/169058.aspx Automated Continuous Integration and the Ambient Orb] — статья Майка Свонсона (Mike Swanson)&lt;br /&gt;
* [http://c2.com/cgi/wiki?ContinuousIntegration c2.com] — статья по Continuous Integration в wiki на c2.com &lt;br /&gt;
* [http://en.wikipedia.org/wiki/Continuous_Integration en.wikipedia.org] — статья по Continuous Integration в Wikipedia&lt;br /&gt;
* [http://ru.wikipedia.org/wiki/Непрерывная_интеграция ru.wikipedia.org] — статья по непрерывной интеграции в Википедии&lt;br /&gt;
&lt;br /&gt;
== Инструменты ==&lt;br /&gt;
=== Сервера интеграции ===&lt;br /&gt;
* [http://cruisecontrol.sourceforge.net CruiseControl] — сервер интеграции для Java (см. так же [[CruiseControl]]).&lt;br /&gt;
* [http://studio.thoughtworks.com/cruise-continuous-integration ThoughtWorks Cruise] — коммерческий сервер интеграции от компании ThoughtWorks (есть бесплатная версия).&lt;br /&gt;
* [http://ccnet.sourceforge.net CruiseControl.NET] — сервер интеграции для .NET (см. так же [[CruiseControl.NET]])&lt;br /&gt;
* [http://cruisecontrolrb.thoughtworks.com CruiseControl.rb] — сервер интеграции для Ruby.&lt;br /&gt;
* [http://hudson.dev.java.net Hudson] — open-source сервер интеграции, создан как альтернатива [[CruiseControl]]. Функциональность расширяется плагинами.&lt;br /&gt;
* [http://bitten.edgewall.org Bitten] — open-source сервер интеграции написанный на [[Python]], интегрируется с [[Trac]].&lt;br /&gt;
* [http://www.jetbrains.com/teamcity/index.html TeamCity] — коммерческий сервер интеграции от компаниии JetBrains для java и .NET (есть бесплатная версия).&lt;br /&gt;
&lt;br /&gt;
=== Инструменты сборки ===&lt;br /&gt;
* [http://ant.apache.org Ant] — средство сборки для Java&lt;br /&gt;
* [http://maven.apache.org Maven] — средство сборки для Java&lt;br /&gt;
* [http://nant.sourceforge.net/ NAnt] — аналог Ant под .NET&lt;br /&gt;
&lt;br /&gt;
=== Статический анализ ===&lt;br /&gt;
* [http://pmd.sourceforge.net PMD] — анализ кода Java&lt;br /&gt;
* [http://findbugs.sourceforge.net Findbugs] — анализ кода на типичные ошибки&lt;br /&gt;
* [http://www.redhillconsulting.com.au/products/simian/ Simian] — поиск повторов (copу+paste) в коде Java&lt;br /&gt;
* [http://www.gotdotnet.com/team/fxcop/ FXCop] — анализ кода .NET&lt;br /&gt;
* [http://qalab.sourceforge.net/index.html QALab] — объединение логов нескольких инструментов анализа кода, сбор статистики&lt;br /&gt;
* [http://www.panopticode.org/ Panopticode] — объединение логов нескольких инструментов анализа кода для Java, графическое представление результатов&lt;br /&gt;
&lt;br /&gt;
=== Модульное тестирование и покрытие ===&lt;br /&gt;
* [http://junit.org JUnit] — де-факто стандарт модульного тестирования Java&lt;br /&gt;
* [http://testng.org TestNG] — инструмент нового поколения для модульного тестирования Java&lt;br /&gt;
* [http://www.nunit.org/ NUnit] — модульные тесты для приложений .NET&lt;br /&gt;
* [http://cobertura.sourceforge.net Cobertura] — измерение покрытия кода модульными тестами для Java&lt;br /&gt;
* [http://www.atlassian.com/software/clover/ Clover] — анализ покрытия кода тестами для Java&lt;br /&gt;
* [http://www.cenqua.com/clovernet/ Clover.NET] — анализ покрытия кода тестами под .NET&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Программирование]]&lt;br /&gt;
[[Category:Тестирование программного обеспечения]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Open_Source-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%B4%D0%BB%D1%8F_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%BE%D0%B9_%D0%9F%D0%9E&amp;diff=3223</id>
		<title>Интеграция Open Source-систем для управления разработкой ПО</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%98%D0%BD%D1%82%D0%B5%D0%B3%D1%80%D0%B0%D1%86%D0%B8%D1%8F_Open_Source-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC_%D0%B4%D0%BB%D1%8F_%D1%83%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%BE%D0%B9_%D0%9F%D0%9E&amp;diff=3223"/>
				<updated>2007-12-29T13:57:20Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Участник:StasFomin|Стас Фомин]] на [http://secr.ru SECR-2007] был представил доклад «Интеграция Open Source-систем для управления разработкой ПО».&lt;br /&gt;
* [http://stanislav.fomin.googlepages.com/secr-2007-open-source-4-development.pdf Доклад]&lt;br /&gt;
* [http://stanislav.fomin.googlepages.com/secr-2007-show-open-source-4-develop.pdf Презентация]&lt;br /&gt;
&lt;br /&gt;
Доклад вызвал оживленное обсуждение.&lt;br /&gt;
Можно продолжить его обсуждать здесь. Можно писать свои статьи-идеи, высказывать пожелания или конструктивную критику (т. е. «все отстой» кричать нежелательно, а мнения типа «лучше сделать так» — приветствуются).&lt;br /&gt;
&lt;br /&gt;
[[{{SITENAME}}]] конечно не форум, но ее вполне можно использовать для обсуждения, см. &lt;br /&gt;
[[Help:Советы#Замечания и обсуждения]]. Вообще, рекомендуется хотя бы просмотреть [[Help:Contents|справочный раздел]]. Если вдруг не получится зарегистрироваться,&lt;br /&gt;
(да, там есть некоторая защита от спамеров), то свяжитесь с stas@custis.ru — все решим.&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=ExecMain.html_(TestLink-RU)&amp;diff=3157</id>
		<title>ExecMain.html (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=ExecMain.html_(TestLink-RU)&amp;diff=3157"/>
				<updated>2007-10-07T13:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;&lt;br /&gt;
    &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;en&amp;quot; xml:lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;generator&amp;quot; content=&lt;br /&gt;
    &amp;quot;HTML Tidy for Windows (vers 14 February 2006), see www.w3.org&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-language&amp;quot; content=&amp;quot;en&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Martin Havlat&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;GNU&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;NOFOLLOW&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&lt;br /&gt;
      TestLink Help: Test Execution&lt;br /&gt;
    &amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&lt;br /&gt;
    &amp;quot;../../{$smarty.const.TL_THEME_CSS_DIR}tl_docs.css&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&lt;br /&gt;
      Прогон тестов&lt;br /&gt;
    &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;javascript:%20window.close();&amp;quot; class=&amp;quot;tlButton&amp;quot;&amp;gt;Закрыть&amp;lt;/a&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;javascript:%20history.back();&amp;quot; class=&amp;quot;tlButton&amp;quot;&amp;gt;Назад&amp;lt;/a&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;content.html&amp;quot; class=&amp;quot;tlButton&amp;quot;&amp;gt;Оглавление&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Раздел &amp;quot;Прогон тестов&amp;quot; позволяет пользователю выполнять сами тесты.&lt;br /&gt;
      Выполнить тест означает, что пользователь присваивает тестовому примеру&lt;br /&gt;
      фактический результат его прогона (пройден, провален, блокирован) на&lt;br /&gt;
      текущей сборке(версии).&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=ExecFilter.html_(TestLink-RU)&amp;diff=3155</id>
		<title>ExecFilter.html (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=ExecFilter.html_(TestLink-RU)&amp;diff=3155"/>
				<updated>2007-10-07T13:33:09Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot;&lt;br /&gt;
    &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;en&amp;quot; xml:lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;generator&amp;quot; content=&lt;br /&gt;
    &amp;quot;HTML Tidy for Windows (vers 14 February 2006), see www.w3.org&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;pragma&amp;quot; content=&amp;quot;no-cache&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Martin Havlat&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;GNU&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;NOFOLLOW&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&lt;br /&gt;
      TestLink Help: Test Filtering&lt;br /&gt;
    &amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&lt;br /&gt;
    &amp;quot;../../{$smarty.const.TL_THEME_CSS_DIR}tl_docs.css&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;h1&amp;gt;&lt;br /&gt;
      Отбор тестов&lt;br /&gt;
    &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;div id=&amp;quot;menu&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;javascript:%20window.close();&amp;quot; class=&amp;quot;tlButton&amp;quot;&amp;gt;Закрыть&amp;lt;/a&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;javascript:%20history.back();&amp;quot; class=&amp;quot;tlButton&amp;quot;&amp;gt;Назад&amp;lt;/a&amp;gt;&lt;br /&gt;
      &amp;lt;a href=&amp;quot;content.html&amp;quot; class=&amp;quot;tlButton&amp;quot;&amp;gt;Оглавление&amp;lt;/a&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;&lt;br /&gt;
      Назначение&lt;br /&gt;
    &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Данная таблица дает возможность пользователю отобрать тесты для прогона&lt;br /&gt;
      по следующим параметрам.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;&lt;br /&gt;
      Принадлежность&lt;br /&gt;
    &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Пользователь может отбирать тесты по их владельцу. Принадлежность может &lt;br /&gt;
      определятся как для целых групп так и для каждого теста в отдельности, ее задает руководитель (leader), и она&lt;br /&gt;
      может быть изменена на странице &amp;quot;Поручить выполнение тестов&amp;quot;.&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;&lt;br /&gt;
      Ключевое слово&lt;br /&gt;
    &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Пользователи могут делать выборку тестов по ключевому слову. Ключевые&lt;br /&gt;
      слова задаются на странице Создания/ редактирования/ удаления тестов или&lt;br /&gt;
      на странице &amp;quot;Привязать ключевые слова&amp;quot;. Создание, редактирование и&lt;br /&gt;
      удаление Ключевых слов является правом руководителя. Задавать ключевые&lt;br /&gt;
      слова для тестов может и пользователь с правами тестера.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;&lt;br /&gt;
      Сборка (версия)&lt;br /&gt;
    &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Пользователи могут отбирать тесты для прогона по сборке&lt;br /&gt;
      программного обеспечения. Сборка являются основным компонентом для&lt;br /&gt;
      прослеживаемости тестов. Тест может быть запущен несколько раз на одной&lt;br /&gt;
      сборке, но в отчетах фигурирует только последний результат выполнения теста над сборкой&amp;lt;br /&amp;gt;&lt;br /&gt;
      Сборки создаются руководителем на странице &amp;quot;Управление сборками&amp;quot;.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;&lt;br /&gt;
      Результат прогона&lt;br /&gt;
    &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      Пользователи могут отбирать тесты по результатам прогона на определенной&lt;br /&gt;
      сборке. Тесты может быть пройденным, проваленным, блокированным&lt;br /&gt;
      или невыполненным.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;h2&amp;gt;&lt;br /&gt;
      Последний результат прогона&lt;br /&gt;
    &amp;lt;/h2&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      По умолчанию или если не выбрано значение &amp;quot;Последний прогон&amp;quot;, дерево&lt;br /&gt;
      тестов будет отсортировано по выбранной версии. При этом в структуре&lt;br /&gt;
      тестов цветом будет отображаться их статус.&amp;lt;br /&amp;gt;&lt;br /&gt;
      Например: На навигационной панели пользователь назначил отбор тестов по&lt;br /&gt;
      версии 2, и не выбрал значение &amp;quot;последний прогон&amp;quot;. В результате будут&lt;br /&gt;
      показаны все тесты со своими статусами из версии 2. Так, если тест 1&lt;br /&gt;
      пройден в версии 2, то он будет отображаться зеленым цветом.&amp;lt;br /&amp;gt;&lt;br /&gt;
      Если пользователь решил задать значение &amp;quot;последний прогон&amp;quot; тесты в дереве&lt;br /&gt;
      будут окрашено согласно результатам последнего прогона.&amp;lt;br /&amp;gt;&lt;br /&gt;
      Например: Пользователь назначил отбор тестов по версии 2, и на этот раз&lt;br /&gt;
      выбрал значение &amp;quot;последний прогон&amp;quot;. Все тесты будут окрашены согласно&lt;br /&gt;
      результату последнего прогона. Поэтому, если тест 1 оказался пройденным&lt;br /&gt;
      только в версии 3, он будет выделен зеленым цветом, несмотря на то, что&lt;br /&gt;
      пользователь выбрал версию 2.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=EditTc.html_(TestLink-RU)&amp;diff=3153</id>
		<title>EditTc.html (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=EditTc.html_(TestLink-RU)&amp;diff=3153"/>
				<updated>2007-10-07T13:29:01Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
    &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;en&amp;quot; xml:lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;generator&amp;quot; content=&lt;br /&gt;
    &amp;quot;HTML Tidy for Windows (vers 14 February 2006), see www.w3.org&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=utf-8&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta http-equiv=&amp;quot;Content-language&amp;quot; content=&amp;quot;en&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Martin Havlat&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;GNU&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;NOFOLLOW&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&lt;br /&gt;
      Справка TestLink: Редактирование тестов&lt;br /&gt;
    &amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;style media=&amp;quot;all&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
/*&amp;lt;![CDATA[*/&lt;br /&gt;
    @import &amp;quot;../../{$smarty.const.TL_THEME_CSS_DIR}testlink.css&amp;quot;;&lt;br /&gt;
    /*]]&amp;gt;*/&lt;br /&gt;
    &amp;lt;/style&amp;gt;&lt;br /&gt;
    &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;../../javascript/testlink_library.js&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;div class=&amp;quot;workBack&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;&lt;br /&gt;
        Редактирование тестов&lt;br /&gt;
      &amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;&lt;br /&gt;
        Назначение:&lt;br /&gt;
      &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;p&amp;gt;&lt;br /&gt;
        В этом разделе пользователь может просмотреть и отредактировать&lt;br /&gt;
        &amp;lt;span class=&amp;quot;help&amp;quot; onclick=&lt;br /&gt;
        &amp;quot;javascript:open_popup('./glosary.html#testcase');&amp;quot;&amp;gt;тесты&amp;lt;/span&amp;gt; и&lt;br /&gt;
        группы тестов относящиеся к заданному &amp;lt;span class=&amp;quot;help&amp;quot; onclick=&lt;br /&gt;
        &amp;quot;javascript:open_popup('./glosary.html#product');&amp;quot;&amp;gt;проекту&amp;lt;/span&amp;gt;.&lt;br /&gt;
        Пользователь не может просмотреть различные версии теста – база данных&lt;br /&gt;
        содержит только последнюю (действующую) версию. Рекомендуется&lt;br /&gt;
        распечатывать описания тестов в ходе тестирования.&lt;br /&gt;
      &amp;lt;/p&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;&lt;br /&gt;
        Что делать:&lt;br /&gt;
      &amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;ol&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Выберите название проекта из выпадающего меню, расположенного в&lt;br /&gt;
        правом верхнем углу экрана.&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Создайте новые группы и тест для этого проекта.&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Используя древовидную структуру панели навигации слева,&lt;br /&gt;
        отредактируйте описания тестовых примеров.&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;li&amp;gt;Когда тест будет готов, включите его в соответствующий &amp;lt;span class=&amp;quot;help&amp;quot;&lt;br /&gt;
          onclick=&amp;quot;javascript:open_popup('./glosary.html#testplan');&amp;quot;&amp;gt;План&lt;br /&gt;
          тестирования&amp;lt;/span&amp;gt;.&lt;br /&gt;
        &amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;/ol&amp;gt;&lt;br /&gt;
      &amp;lt;h1 align=&amp;quot;right&amp;quot;&amp;gt;&lt;br /&gt;
        см. также: &amp;lt;span class=&amp;quot;help&amp;quot; onclick=&lt;br /&gt;
        &amp;quot;javascript:open_popup('./content.html');&amp;quot;&amp;gt;Справка TestLink&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;/div&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Bug_add.html_(TestLink-RU)&amp;diff=3147</id>
		<title>Bug add.html (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Bug_add.html_(TestLink-RU)&amp;diff=3147"/>
				<updated>2007-10-07T13:26:56Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html &lt;br /&gt;
     PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
     &amp;quot;DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; xml:lang=&amp;quot;en&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;Content-language&amp;quot; content=&amp;quot;en&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;expires&amp;quot; content=&amp;quot;-1&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;pragma&amp;quot; content=&amp;quot;no-cache&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Martin Havlat&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;GNU&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;NOFOLLOW&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;TestLink Instructions&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;style media=&amp;quot;all&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;@import &amp;quot;../../{$smarty.const.TL_THEME_CSS_DIR}testlink.css&amp;quot;;&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;workback&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;h1&amp;gt;Привязка багов к тесту&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
TestLink очень примитивно интегрирован с системой управления ошибками (багами): &amp;lt;br/&amp;gt;&lt;br /&gt;
нет возможности ни создать баг в BTS (Bug Tracking System), ни получить &lt;br /&gt;
полную информацию по багу из неё (краткая информация по зарегистрированным багам показывается).&amp;lt;br/&amp;gt;&lt;br /&gt;
Интеграция заключается  в использовании ссылок на страницы BTS, на которых и &lt;br /&gt;
осуществляется показ полной информации по багу и вставка новых багов.&lt;br /&gt;
&amp;lt;/p&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Добавление бага&amp;lt;/h2&amp;gt;&lt;br /&gt;
   &amp;lt;ol&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Используйте соответствующую ссылку, чтобы перейти на страницу добавления бага в BTS и вставить новый баг. &amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Запомните идентификатор бага (BUGID), присвоенный багу системой BTS.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;Введите этот BUGID в соответствующее поле в TestLink'е, и нажмите кнопку &amp;amp;laquo;добавить&amp;amp;raquo;.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ol&amp;gt;&lt;br /&gt;
Можно привязать к одному результату выполнения несколько багов сразу, достаточно ввести их номера через запятую в соответствующее поле в TestLink'е. &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=BrowseResults.html_(TestLink-RU)&amp;diff=3135</id>
		<title>BrowseResults.html (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=BrowseResults.html_(TestLink-RU)&amp;diff=3135"/>
				<updated>2007-10-07T13:24:06Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html &lt;br /&gt;
     PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
     &amp;quot;DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;Content-language&amp;quot; content=&amp;quot;en&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Martin Havlat&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;GNU&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;NOFOLLOW&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;TestLink Instructions&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;style media=&amp;quot;all&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;@import &amp;quot;../../{$smarty.const.TL_THEME_CSS_DIR}testlink.css&amp;quot;;&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;workBack&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Отчеты о результатах тестирования&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Общие метрики плана тестирования&amp;lt;/h2&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны результаты тестирования текущей сборки продукта.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Общий статус всех сборок&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показан суммарный результат прогона тестов по каждой сборке продукта.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Запрос метрик&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Данный отчет формируется на основе выбора пользователем следующих параметров испытаний: сборка продукта, &lt;br /&gt;
	владелец теста, ключевые слова, статус результата последнего прогона теста.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Отчет о прогоне тестов&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны тесты и результаты их прогона для всех версий продукта.&amp;lt;br /&amp;gt;&lt;br /&gt;
В данном случае доступен экспорт отчета в файл формата Excel.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Блокированные тесты&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны все тесты, блокированные в настоящий момент.	&amp;lt;br /&amp;gt;&lt;br /&gt;
Например, если тест был пройден в версии 1 и блокирован в версии 2, то он будет показан в этом отчете.&amp;lt;br /&amp;gt;&lt;br /&gt;
А если он был блокирован в версии 1 и пройден в версии 2, то не будет. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Проваленные тесты&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны все тесты, которые в настоящий момент провалены.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Отчет об обнаруженных багах&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны все тесты заданного плана и все обнаруженные баги.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Отчет о выполнении требований&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны результаты прогона тестов, спроецированные на покрываемые ими требования.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Формат отчета&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Здесь пользователю предлагается возможность выбора способа предоставления отчета: &lt;br /&gt;
   &amp;lt;ol&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;посмотреть отчет в веб интерфейсе системы TestLink,&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;отправить отчет на любой адрес электронной почты,&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;li&amp;gt;представить отчет в формате MS Excel.&amp;lt;/li&amp;gt;&lt;br /&gt;
   &amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1 align=right &amp;gt; см. также: &lt;br /&gt;
     &amp;lt;span class=&amp;quot;help&amp;quot; &lt;br /&gt;
onclick=&amp;quot;javascript:open_popup('./content.html');&amp;quot;&amp;gt; Справка TestLink&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=BrowseResults.html_(TestLink-RU)&amp;diff=9472</id>
		<title>BrowseResults.html (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=BrowseResults.html_(TestLink-RU)&amp;diff=9472"/>
				<updated>2007-10-07T13:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&amp;lt;code-xml&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html &lt;br /&gt;
     PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;br /&gt;
     &amp;quot;DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot; lang=&amp;quot;en&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta http-equiv=&amp;quot;Content-language&amp;quot; content=&amp;quot;en&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Martin Havlat&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;copyright&amp;quot; content=&amp;quot;GNU&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;meta name=&amp;quot;robots&amp;quot; content=&amp;quot;NOFOLLOW&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;TestLink Instructions&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;style media=&amp;quot;all&amp;quot; type=&amp;quot;text/css&amp;quot;&amp;gt;@import &amp;quot;../../{$smarty.const.TL_THEME_CSS_DIR}testlink.css&amp;quot;;&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;workBack&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1&amp;gt;Отчеты о результатах тестирования&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Общие метрики плана тестирования&amp;lt;/h2&amp;gt; &lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны результаты тестирования текущей сборки продукта.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Общий статус всех сборок&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показан суммарный результат прогона тестов по каждой сборке продукта.&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Запрос метрик&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Данный отчет формируется на основе выбора пользователем следующих параметров испытаний: сборка продукта, &lt;br /&gt;
	владелец теста, ключевые слова, статус результата последнего прогона теста.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Отчет о прогоне тестов&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны тесты и результаты их прогона для всех версий продукта.&amp;lt;br /&amp;gt;&lt;br /&gt;
В данном случае доступен экспорт отчета в файл формата Excel.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Блокированные тесты&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны все тесты, блокированные в настоящий момент.	&amp;lt;br /&amp;gt;&lt;br /&gt;
Например, если тест был пройден в версии 1 и блокирован в версии 2, то он будет показан в этом отчете.&amp;lt;br /&amp;gt;&lt;br /&gt;
А если он был блокирован в версии 1 и пройден в версии 2, то не будет. &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Проваленные тесты&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны все тесты, которые в настоящий момент провалены.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Отчет об обнаруженных багах&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны все тесты заданного плана и все обнаруженные баги.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Отчет о выполнении требований&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;В данном отчете показаны результаты прогона тестов, спроецированные на покрываемые ими требования.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;h2&amp;gt;Формат отчета&amp;lt;/h2&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Здесь пользователю предлагается возможность выбора способа предоставления отчета: &lt;br /&gt;
* посмотреть отчет в веб интерфейсе системы TestLink&lt;br /&gt;
* отправить отчет на любой адрес электронной почты&lt;br /&gt;
* представить отчет в формате MS Excel&lt;br /&gt;
&amp;lt;/p&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;h1 align=right &amp;gt; см. также: &lt;br /&gt;
     &amp;lt;span class=&amp;quot;help&amp;quot; &lt;br /&gt;
onclick=&amp;quot;javascript:open_popup('./content.html');&amp;quot;&amp;gt; Справка TestLink&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/code-xml&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9544</id>
		<title>Strings.txt (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9544"/>
				<updated>2007-10-07T13:19:50Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* lib/results/resultsNavigator.php */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
Статьяz с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «[[#Скачать|скачать]]» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скачать=&lt;br /&gt;
[{{SERVER}}{{localurl:Special:CisGetPHPPage|pagetitle={{PAGENAMEE}}}} Получить PHP-код]&lt;br /&gt;
&lt;br /&gt;
= Оригинал (наиболее полный английский перевод) =&lt;br /&gt;
* http://testlink.cvs.sourceforge.net/testlink/testlink/locale/en_GB/&lt;br /&gt;
&lt;br /&gt;
=Разделы файла strings.txt (ru_RU)=&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * TestLink Open Source Project - http://testlink.sourceforge.net/ &lt;br /&gt;
 *&lt;br /&gt;
 * Filename $RCSfile: strings.txt,v $&lt;br /&gt;
 *&lt;br /&gt;
 * @version  $Revision$&lt;br /&gt;
 * @modified $Date$ $Author$&lt;br /&gt;
 *&lt;br /&gt;
 * @author Vadim Ivanchenko, Stas Fomin, and russian Testlink community.&lt;br /&gt;
 * http://lib.custis.ru/index.php/TestLink:_strings.txt_%28RU%29&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
**/&lt;br /&gt;
&lt;br /&gt;
$TLS_STRINGFILE_CHARSET = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_asc    = &amp;quot;по возрастанию&amp;quot;;&lt;br /&gt;
$TLS_btn_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_desc = &amp;quot;по убыванию&amp;quot;;&lt;br /&gt;
$TLS_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan = $TLS_test_plan;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_SRS = &amp;quot;SRS&amp;quot;;&lt;br /&gt;
$TLS_Role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_Keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_Milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_testsuite_created = &amp;quot;Группа тестов создана&amp;quot;;&lt;br /&gt;
$TLS_requirement = &amp;quot;Требование&amp;quot;;&lt;br /&gt;
$TLS_assigned = &amp;quot;назначен&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;свободен&amp;quot;;&lt;br /&gt;
$TLS_import_file_type = &amp;quot;Тип импортируемого файла&amp;quot;;&lt;br /&gt;
$TLS_max_file_size_is = &amp;quot;Макс. размер файла&amp;quot;;&lt;br /&gt;
$TLS_supported_file_formats = &amp;quot;Поддерживаемые форматы файлов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==firstLogin.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_user = &amp;quot;К сожалению, не удалось создать ваш логин. Пожалуйста, свяжитесь с администратором!&amp;quot;;&lt;br /&gt;
$TLS_empty_email_address = &amp;quot; Пожалуйста, укажите  e-mail!&amp;quot;;&lt;br /&gt;
$TLS_empty_first_name = &amp;quot; Пожалуйста, укажите имя пользователя.&amp;quot;;&lt;br /&gt;
$TLS_empty_last_name = &amp;quot; Пожалуйста, укажите фамилию.&amp;quot;;&lt;br /&gt;
$TLS_fatal_page_title = &amp;quot;TestLink ::: Fatal Error&amp;quot;;&lt;br /&gt;
$TLS_invalid_user_name = &amp;quot;Некорректный логин пользователя. Пожалуйста, придумайте другой.&amp;quot;;&lt;br /&gt;
$TLS_passwd_dont_match = &amp;quot;Два введенных пароля не совпадают. Учтите, что пароли чувствительны к регистру, и попробуйте ещё раз.&amp;quot;;&lt;br /&gt;
$TLS_user_cant_be_created_because = &amp;quot;Не удалось создать ваш аккаунт. Причина:&amp;quot;;&lt;br /&gt;
$TLS_user_name_exists = &amp;quot;Этот логин пользователя уже используется. Пожалуйста, выберите другой.&amp;quot;;&lt;br /&gt;
$TLS_valid_user_name_format = &amp;quot;Логин пользователя может состоять только из алфавитно-цифровых символов, пробелов, дефисов и подчеркиваний.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd = &amp;quot;Пожалуйста, укажите пароль. Пароль не может быть пустым.&amp;quot;;&lt;br /&gt;
$TLS_your_info_please = &amp;quot;Введите информацию о пользователе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==index.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_main_page_title = &amp;quot;TestLink::Главная страница&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==keywordsimport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_keywords_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_keywords_file = &amp;quot;Файл с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lostPassword.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user = &amp;quot;Пользователь не найден, попробуйте еще&amp;quot;;&lt;br /&gt;
$TLS_contact_admin = &amp;quot;&amp;lt;br&amp;gt; Если проблемы будут продолжаться, пожалуйста, свяжитесь с администратором системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_empty_address = &amp;quot;Вы не указали email-адреса в вашем профиле!  Теперь, чтобы сбросить пароль вам нужно связаться с администратором TestLink-системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_passwd_subject = &amp;quot;Ваш новый пароль к TestLink'у.&amp;quot;;&lt;br /&gt;
$TLS_mail_problems = &amp;quot;Ошибка в почтовых настройках, пожалуйста, свяжитесь с администратором.&amp;quot;;&lt;br /&gt;
$TLS_page_title_lost_passwd = &amp;quot;TestLink - Утерян пароль&amp;quot;;&lt;br /&gt;
$TLS_your_info_for_passwd = &amp;quot;Заполните информацию о вашем пользователе, и пароль будет вам выслан по почте.&amp;quot;;&lt;br /&gt;
$TLS_your_password_is = &amp;quot;Ваш пароль к TestLink'у: &amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==login.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user_passwd = &amp;quot;Логин или пароль неверен. Попробуйте ещё!&amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists1 = &amp;quot;Ваша сессия в этом броузере ещё активна. Пожалуйста, используйте &amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists2 = &amp;quot; если вы хотите обновить вашу сессию.&amp;quot;;&lt;br /&gt;
$TLS_logout_link = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_passwd_lost = &amp;quot;Ваш пароль выслан вам по email на адрес, который вы указали при регистрации. Проверьте вашу почту. В случае проблем, обратитесь к администратору вашего TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_password_reseted=&amp;quot;Новый пароль выслан вам по почте&amp;quot;;&lt;br /&gt;
$TLS_please_login = &amp;quot;Пожалуйста, войдите в систему...&amp;quot;;&lt;br /&gt;
$TLS_session_expired = &amp;quot;Время ваша сессии окончилось. Пожалуйста, войдите в систему заново.&amp;quot;;&lt;br /&gt;
$TLS_your_first_login = &amp;quot;Добро пожаловать в TestLink! Сейчас у вас только гостевой доступ. Для большего, нужно войти в систему.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==planPriority.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_high_priority    = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_priority     = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_priority  = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_risk        = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_risk         = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_risk      = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_importance  = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_low_importance   = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_medium_importance= &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tc_created = &amp;quot;Тест %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_tc_deleted = &amp;quot;Тест %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_tc_updated = &amp;quot;Тест %s отредактирован успешно&amp;quot;;&lt;br /&gt;
$TLS_tc_update_failed = &amp;quot;Не удалась правка теста %s!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachment404.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_close = &amp;quot;Закрыть&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_not_found = &amp;quot;Ошибка: Вложение не найдено!&amp;quot;;&lt;br /&gt;
$TLS_title_downloading_attachment = &amp;quot;Загружаем вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentdelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_deleting_was_ok = &amp;quot;Вложение удалено.&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_delete = &amp;quot;При удалении вложения произошла ошибка!&amp;quot;;&lt;br /&gt;
$TLS_title_delete_attachment = &amp;quot;Удалить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_del_comp = &amp;quot;Да, удалить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_container_title_testsuite =$TLS_test_suite;&lt;br /&gt;
$TLS_linked_but_not_executed=&amp;quot;Связан с одним или более планом тестирования, но не выполнялась&amp;quot;;&lt;br /&gt;
$TLS_question_del = &amp;quot;Действительно удалить&amp;quot;;&lt;br /&gt;
$TLS_th_link_exec_status = &amp;quot;Статус исполнения и связей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_testsuite = &amp;quot;Создать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_tc_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_title_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_testsuite_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_add.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_bug = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_bug_id = &amp;quot;Bug id&amp;quot;;&lt;br /&gt;
$TLS_button_enter_bug = &amp;quot;Создать новый баг&amp;quot;;&lt;br /&gt;
$TLS_title_bug_add = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_link_bts_create_bug = &amp;quot;Доступ к системе регистрации багов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_delete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_delete_bug = &amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cp               = &amp;quot;Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_move             = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_target        = &amp;quot;Выберите куда&amp;quot;;&lt;br /&gt;
$TLS_cont_move_first      = &amp;quot;Переместить это&amp;quot;;&lt;br /&gt;
$TLS_cont_move_second     = &amp;quot;в другое&amp;quot;;&lt;br /&gt;
$TLS_copy_keywords        = &amp;quot;Копировать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_defined_exclam       = &amp;quot;определен !&amp;quot;;&lt;br /&gt;
$TLS_include_nested       = &amp;quot;Включая вложенные данные (только для копирования).&amp;quot;;&lt;br /&gt;
$TLS_sorry_further        = &amp;quot;К сожалению, больше ничего нет &amp;quot;;&lt;br /&gt;
$TLS_title_move_cp        = &amp;quot;Переместить/Скопировать&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_btn_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_help = &amp;quot;Помощь&amp;quot;;&lt;br /&gt;
$TLS_req_create = &amp;quot;Создать требование&amp;quot;;&lt;br /&gt;
$TLS_req_doc_id = &amp;quot;DOC-ID&amp;quot;;&lt;br /&gt;
$TLS_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_reqs = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_req_title = &amp;quot;Заголовок требования должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_reqdoc_id = &amp;quot;ID документа-требования не должен быть пуст!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerOrder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_no_nodes_to_reorder = &amp;quot;К сожалению, тут нечего упорядочивать.&amp;quot;;&lt;br /&gt;
$TLS_node = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_th_node_type = &amp;quot;Тест / Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_order = &amp;quot;Порядок&amp;quot;;&lt;br /&gt;
$TLS_title_change_node_order = &amp;quot;Изменить порядок 'потомков'&amp;quot;;&lt;br /&gt;
$TLS_node_type_dbtable_testsuites=$TLS_test_suite;&lt;br /&gt;
$TLS_node_type_dbtable_testcases=$TLS_testcase;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_del_com    = &amp;quot;Удалить эту группу тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_com   = &amp;quot;Править дату и заголовок для этой группы тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_move_cp_com = &amp;quot;Переместить или скопировать эту группу тестов в другой проект&amp;quot;;&lt;br /&gt;
$TLS_btn_del_com = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_com = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_export_all_testsuites = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_export_tc = &amp;quot;Экспортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_export_testsuite = &amp;quot;Экспортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_import_tc = &amp;quot;Импортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_import_testsuite = &amp;quot;Импортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_move_cp_com = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_cat = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_com = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_tc = &amp;quot;Создать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_reorder_cat = &amp;quot;Переупорядочить потомков&amp;quot;;&lt;br /&gt;
$TLS_edit_testproject_basic_data = &amp;quot;Править основные данные проекта&amp;quot;;&lt;br /&gt;
$TLS_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_product_name = &amp;quot;Имя проекта&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_edit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_available_on = &amp;quot;Доступно для&amp;quot;;&lt;br /&gt;
$TLS_btn_add = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_btn_delete = &amp;quot;Удалить&amp;quot;; &lt;br /&gt;
$TLS_btn_ok = &amp;quot;Ok&amp;quot;;&lt;br /&gt;
$TLS_custom_field = &amp;quot;Пользовательское поле&amp;quot;;&lt;br /&gt;
$TLS_enable_on_design = &amp;quot;Разрешить при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_enable_on_exec = &amp;quot;Разрешить при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_label = &amp;quot;Метка&amp;quot;;&lt;br /&gt;
$TLS_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_custom_field = &amp;quot;Вы уверены, что хотите удалить пользовательское поле?&amp;quot;;&lt;br /&gt;
$TLS_possible_values = &amp;quot;Возможные значения&amp;quot;;&lt;br /&gt;
$TLS_show_on_design = &amp;quot;Показывать при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_show_on_exec = &amp;quot;Показывать при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_title_cfields_mgmt = &amp;quot;Пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_type = &amp;quot;Тип&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_label = &amp;quot;Пожалуйста, введите метку для этого пользовательского поля.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_name = &amp;quot;Пожалуйста, введите имя этого пользовательского поля.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_update.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_failed_db_upd = &amp;quot;Не удалось обновить базу данных!&amp;quot;;&lt;br /&gt;
$TLS_info_failed_db_upd_details = &amp;quot;Не удалось обновить базу данных! - Подробности:&amp;quot;;&lt;br /&gt;
$TLS_invalid_query = &amp;quot;Ошибка:&amp;quot;;&lt;br /&gt;
$TLS_warning = &amp;quot;Предупреждение!!&amp;quot;;&lt;br /&gt;
$TLS_was_success = &amp;quot; был(и) успешно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestPlan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_btn_apply_filter = &amp;quot;Применить фильтр&amp;quot;;&lt;br /&gt;
$TLS_btn_update_menu = &amp;quot;Обновить меню&amp;quot;;&lt;br /&gt;
$TLS_caption_nav_filter_settings = &amp;quot;Параметры выборки&amp;quot;;&lt;br /&gt;
$TLS_current_build = &amp;quot;Текущая сборка&amp;quot;;&lt;br /&gt;
$TLS_filter_owner = &amp;quot;Ответственный&amp;quot;;&lt;br /&gt;
$TLS_filter_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_filter_tcID = &amp;quot;Фильтр: ID теста&amp;quot;;&lt;br /&gt;
$TLS_keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_test_status_all_status=&amp;quot;Все&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_th_my_perc_completed = &amp;quot;У меня выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_perc_completed = &amp;quot;Выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_title_your_tp_metrics = &amp;quot;Ваши метрики для плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/newest_tcversions.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_linked_version = &amp;quot;Связанная версия&amp;quot;;&lt;br /&gt;
$TLS_newest_version = &amp;quot;Самая новая из доступных активных версий&amp;quot;;&lt;br /&gt;
$TLS_title_newest_tcversions = &amp;quot;Самые новые версии связанных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/emailSent.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_test_report = &amp;quot;- Послать тест-отчёт&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_Title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_btn_back2srs = &amp;quot;Назад, к спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_btn_import = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_btn_upload_file = &amp;quot;Загрузить файл&amp;quot;;&lt;br /&gt;
$TLS_check_req_file_structure = &amp;quot;Пожалуйста, проверьте формат файла. Не получается получить из этого файла требования&amp;quot;;&lt;br /&gt;
$TLS_local_file = &amp;quot;Файл:&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file1 = &amp;quot;Максимальный размер для этого файла&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file2 = &amp;quot;kB&amp;quot;;&lt;br /&gt;
$TLS_req_import_check_note = &amp;quot;Пожалуйста, разрешите возможные конфликты и запустите процесс импорта.&amp;quot;;&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Не импортируйте элементы с пустой Сферой&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_double = &amp;quot;Добавить ещё с тем же заголовком&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_header = &amp;quot;Разрешить конфликт&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_overwrite = &amp;quot;Обновить существующий&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_skip = &amp;quot;Пропускать импорт дублирующих требований&amp;quot;;&lt;br /&gt;
$TLS_req_import_type = &amp;quot;Тип:&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement = &amp;quot;Нет требований&amp;quot;;&lt;br /&gt;
$TLS_required_cvs_format = &amp;quot;Формат файла с требованиями:&amp;quot;;&lt;br /&gt;
$TLS_title_choose_file_type = &amp;quot;Выберите тип файла&amp;quot;;&lt;br /&gt;
$TLS_title_choose_local_file = &amp;quot;Выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_title_req_import = &amp;quot;Загрузка требований&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_check_input = &amp;quot;Проверьте импортируемые данные&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_build = &amp;quot;Удалить эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_attachment = &amp;quot;Удалить это вложение&amp;quot;;&lt;br /&gt;
$TLS_attached_files = &amp;quot;Вложенные файлы&amp;quot;;&lt;br /&gt;
$TLS_attachment_feature_disabled = &amp;quot;вложения отключены&amp;quot;;&lt;br /&gt;
$TLS_button_upload = &amp;quot;Загрузить&amp;quot;;&lt;br /&gt;
$TLS_upload_file_new_file = &amp;quot;Загрузить новый файл&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_attachment = &amp;quot;Действительно удалить вложение?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_print = &amp;quot;Печать&amp;quot;;&lt;br /&gt;
$TLS_note_email_sent_t = &amp;quot;Примечание: email format послан на email пользователя&amp;quot;;&lt;br /&gt;
$TLS_send_results = &amp;quot;Послать отчеты&amp;quot;;&lt;br /&gt;
$TLS_send_to = &amp;quot;To:&amp;quot;;&lt;br /&gt;
$TLS_subject = &amp;quot;Subject:&amp;quot;;&lt;br /&gt;
$TLS_title_active_build = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_title_report_type = &amp;quot;Формат отчета&amp;quot;;&lt;br /&gt;
$TLS_via_email = &amp;quot;через eMail&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments_upload.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_view.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cfields_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_manage_cfield = &amp;quot;Управлять пользовательскими полями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_ro_m0.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_category = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_configuration = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_not_defined = &amp;quot;Не определено.&amp;quot;;&lt;br /&gt;
$TLS_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_alt_name = &amp;quot;Обязательно заполнить имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_cat_config = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_cat_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_cat_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_cat_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_by = &amp;quot;by&amp;quot;;&lt;br /&gt;
$TLS_coverage = &amp;quot;Покрытие&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_req = &amp;quot;Удалить это требование, Вы уверены?&amp;quot;;&lt;br /&gt;
$TLS_req_edit = &amp;quot;Править требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notestcase = &amp;quot;Связанных тестов нет.&amp;quot;;&lt;br /&gt;
$TLS_requirement_spec = &amp;quot;Спецификация требования&amp;quot;;&lt;br /&gt;
$TLS_test_case_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_title_created = &amp;quot;Создано:&amp;quot;;&lt;br /&gt;
$TLS_title_last_mod = &amp;quot;Последняя правка:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_active = &amp;quot;Активная&amp;quot;;&lt;br /&gt;
$TLS_enter_build = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_enter_build_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_msg_build = &amp;quot;Замечание: Каждая сборка относится к активному плану тестирования. Описание должно включать: список развертываемых пакетов, утверждений, состояние, и т.п.&amp;quot;;&lt;br /&gt;
$TLS_open = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_build_2 = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_title_build_create = &amp;quot;Создать новую Сборку&amp;quot;;&lt;br /&gt;
$TLS_title_build_update = &amp;quot;Править Сборку&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_build_name = &amp;quot;Пожалуйста, введите имя для этой Сборки!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_introduction = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_limitations = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_methodology = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_references = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_comp_alt_name = &amp;quot;Обязательно введите имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_comp_intro = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_comp_lim = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_comp_method = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_comp_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_comp_ref = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_analyse = &amp;quot;Анализировать&amp;quot;;&lt;br /&gt;
$TLS_btn_check_all = &amp;quot;Проверить все&amp;quot;;&lt;br /&gt;
$TLS_btn_delete_spec = &amp;quot;Удалить спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_spec = &amp;quot;Править спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_export_reqs = &amp;quot;Экспортировать требования&amp;quot;;&lt;br /&gt;
$TLS_btn_req_create = &amp;quot;Создать новое требование&amp;quot;;&lt;br /&gt;
$TLS_btn_spec_list = &amp;quot;Список спецификаций&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck_all = &amp;quot;Убрать все отметки&amp;quot;;&lt;br /&gt;
$TLS_cant_delete_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_popup_sure_delete = &amp;quot;Вы уверены удалить эту спецификацию требования?&amp;quot;;&lt;br /&gt;
$TLS_req_select_create_tc = &amp;quot;Создать тесты&amp;quot;;&lt;br /&gt;
$TLS_req_select_delete = &amp;quot;Удалить требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_list = &amp;quot;Список требований&amp;quot;;&lt;br /&gt;
$TLS_req_total = &amp;quot;Всего треб.&amp;quot;;&lt;br /&gt;
$TLS_req_reorder = &amp;quot;Переупорядочить требования?&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_requirements = &amp;quot;Вы уверены удалить выбранные требования?&amp;quot;;&lt;br /&gt;
$TLS_title_change_req_order = &amp;quot;Переупорядочивание требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_copyrightnotice.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_gnu_gpl = &amp;quot;GNU GPL&amp;quot;;&lt;br /&gt;
$TLS_lic_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_lic_product = &amp;quot;TestLink project&amp;quot;;&lt;br /&gt;
$TLS_licensed_under = &amp;quot;TestLink лицензируется согласно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update_testsuite = &amp;quot;Обновить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_title_edit_level = &amp;quot;Править&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecAnalyse.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_none = &amp;quot;Пусто &amp;quot;;&lt;br /&gt;
$TLS_req = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_req_spec_change = &amp;quot;Изменить спецификацию требований на &amp;quot;;&lt;br /&gt;
$TLS_req_title_analyse = &amp;quot;Анализировать спецификацию требований &amp;quot;;&lt;br /&gt;
$TLS_req_title_covered = &amp;quot;Покрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_in_tl = &amp;quot;Требований, зарегистрированных в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_title_nottestable = &amp;quot;Нетестируемые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_uncovered = &amp;quot;Непокрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_not_in_tl = &amp;quot;Требований, отсутствующих в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_total_count = &amp;quot;Всего требований&amp;quot;;&lt;br /&gt;
$TLS_testcases = &amp;quot;Тесты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_action_create_srs = &amp;quot;Создать спецификацию требований&amp;quot;;&lt;br /&gt;
$TLS_testproject = &amp;quot;проект&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_reqView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_last_edit = &amp;quot;Последняя правка: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_comp.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_top_level_suites = &amp;quot;Результаты топовых групп тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_blocked = &amp;quot;Блокировано&amp;quot;;&lt;br /&gt;
$TLS_trep_comp = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_comp_perc = &amp;quot;Выполнена [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_failed = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_trep_not_run = &amp;quot;Не запускали&amp;quot;;&lt;br /&gt;
$TLS_trep_passed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_trep_total = &amp;quot;Всего&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_keyw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_kw = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_trep_kw = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_owner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_owner = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_owner = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_tester = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_tester = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_prio.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tit_end_date = &amp;quot;Дата окончания&amp;quot;;&lt;br /&gt;
$TLS_tit_milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_prio = &amp;quot;Результаты по приоритету&amp;quot;;&lt;br /&gt;
$TLS_trep_milestone_goal = &amp;quot;Цель вехи [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_prio = &amp;quot;Приоритет&amp;quot;;&lt;br /&gt;
$TLS_trep_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_ts.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_ts = &amp;quot;Результаты по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_imp = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_trep_risk = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_trep_ts = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecEdit.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_show_bug_table.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_build = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_caption_bugtable = &amp;quot;Связанные баги&amp;quot;;&lt;br /&gt;
$TLS_delete_bug=&amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
$TLS_del_bug_warning_msg = &amp;quot;Действительно удалить этот баг?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecList.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign_tc = &amp;quot;Указать тест&amp;quot;;&lt;br /&gt;
$TLS_no_docs = &amp;quot;Нет доступных документов.&amp;quot;;&lt;br /&gt;
$TLS_req_list_docs = &amp;quot;Спецификации требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_New_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_add_tc_name = &amp;quot;Обязательно укажите имя теста.&amp;quot;;&lt;br /&gt;
$TLS_expected_results = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_tc_title = &amp;quot;Заголовок тест-кейса&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/show_exec_notes.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_execution_notes = &amp;quot;Замечания по выполнению&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_role = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_role = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_caption_define_role = &amp;quot;Определить роль&amp;quot;;&lt;br /&gt;
$TLS_caption_possible_affected_users = &amp;quot;Возможно влияет на следующих пользователей&amp;quot;;&lt;br /&gt;
$TLS_enter_role_notes = &amp;quot;Введите описание роли&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_product_roles = &amp;quot;Укажите роли проекта&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testplan_roles = &amp;quot;Укажите роли для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_menu_define_roles = &amp;quot;Новая роль&amp;quot;;&lt;br /&gt;
$TLS_menu_mod_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_new_user = &amp;quot;Новый пользователь&amp;quot;;&lt;br /&gt;
$TLS_menu_edit_user = &amp;quot;Редактировать пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_view_users = &amp;quot;Список пользователей&amp;quot;;&lt;br /&gt;
$TLS_menu_view_roles = &amp;quot;Просмотр ролей&amp;quot;;&lt;br /&gt;
$TLS_th_cf_rights = &amp;quot;Права на пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_th_kw_rights = &amp;quot;Права на ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_th_mgttc_rights = &amp;quot;Права на управление тест-кейсами&amp;quot;;&lt;br /&gt;
$TLS_th_product_rights = &amp;quot;Права на проект&amp;quot;;&lt;br /&gt;
$TLS_th_req_rights = &amp;quot;Права на требование&amp;quot;;&lt;br /&gt;
$TLS_th_rights = &amp;quot;Разрешения&amp;quot;;&lt;br /&gt;
$TLS_th_rolename = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_th_tp_rights = &amp;quot;Права на план тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_user_rights = &amp;quot;Права пользователей&amp;quot;;&lt;br /&gt;
$TLS_title_user_mgmt = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_warning_modify_role = &amp;quot;Действительно исправить роль?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcSearchForm.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_find             = &amp;quot;Найти&amp;quot;;&lt;br /&gt;
$TLS_caption_search_form  = &amp;quot;Искать тесты&amp;quot;;&lt;br /&gt;
$TLS_not_applied          = &amp;quot;Не применимо&amp;quot;;&lt;br /&gt;
$TLS_th_tcid              = &amp;quot;ID теста&amp;quot;;&lt;br /&gt;
$TLS_th_tcversion         = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
$TLS_th_title             = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_title_search_tcs     = &amp;quot;Поиск&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/infoWindow.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_iw2del = &amp;quot;Да, удалите тест!&amp;quot;;&lt;br /&gt;
$TLS_question_del_tc = &amp;quot;Действительно удалить тест?&amp;quot;;&lt;br /&gt;
$TLS_th_executed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_th_linked_to_tplan = &amp;quot;Связан с планом тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_new_tc = &amp;quot;Создать тест&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_tc_title = &amp;quot;Пожалуйста, задайте заголовок для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_imp_tc_data = &amp;quot;Импорт данных для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsimport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_keyword_import_to = &amp;quot;Импортировать ключевые слова в &amp;quot;;&lt;br /&gt;
$TLS_title_keyword_import = &amp;quot;Импорт ключевых слов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_export = &amp;quot;Экспорт&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_to = &amp;quot;Импортировать требования в документ:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_tproject_assign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign = &amp;quot;Привязать&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_active_mgmt = &amp;quot;Обновить активное состояние&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_display_order = &amp;quot;Сохранить порядок показа&amp;quot;;&lt;br /&gt;
$TLS_btn_unassign = &amp;quot;Освободить от&amp;quot;;&lt;br /&gt;
$TLS_cfields_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_cfields_tproject_assign = &amp;quot;Привязать пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_display_order = &amp;quot;Порядок показа&amp;quot;;&lt;br /&gt;
$TLS_title_assigned_cfields = &amp;quot;Привязанные пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_title_available_cfields = &amp;quot;Доступные пользовательские поля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_No = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_Yes = &amp;quot;Да&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_order_by_login = &amp;quot;По порядку логинов&amp;quot;;&lt;br /&gt;
$TLS_order_by_role_descr = &amp;quot;По порядку описания ролей&amp;quot;;&lt;br /&gt;
$TLS_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_th_delete = &amp;quot;Удалить?&amp;quot;;&lt;br /&gt;
$TLS_th_email = &amp;quot;Email&amp;quot;;&lt;br /&gt;
$TLS_th_first_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_last_name = &amp;quot;Фамилия&amp;quot;;&lt;br /&gt;
$TLS_th_locale = &amp;quot;Локализация&amp;quot;;&lt;br /&gt;
$TLS_th_login = &amp;quot;Логин&amp;quot;;&lt;br /&gt;
$TLS_th_role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/login.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_login = &amp;quot;Войти&amp;quot;;&lt;br /&gt;
$TLS_login_name = &amp;quot;Логин:&amp;quot;;&lt;br /&gt;
$TLS_lost_password_q = &amp;quot;Забыли пароль?&amp;quot;;&lt;br /&gt;
$TLS_new_user_q = &amp;quot;Новый пользователь?&amp;quot;;&lt;br /&gt;
$TLS_password = &amp;quot;Пароль:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginFirst.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_user_data = &amp;quot;Добавить пользовательские данные&amp;quot;;&lt;br /&gt;
$TLS_e_mail = &amp;quot;E-mail (нужен, чтобы получить новый пароль):&amp;quot;;&lt;br /&gt;
$TLS_first_name = &amp;quot;Имя:&amp;quot;;&lt;br /&gt;
$TLS_last_name = &amp;quot;Фамилия:&amp;quot;;&lt;br /&gt;
$TLS_link_back_to_login = &amp;quot;Войти еще раз&amp;quot;;&lt;br /&gt;
$TLS_password_again = &amp;quot;Повторите пароль:&amp;quot;;&lt;br /&gt;
$TLS_password_mgmt_is_external = &amp;quot;Используется внешнее управление паролями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_mv = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_cat = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_inst_move = &amp;quot;Переместить этот тест в другую группу тестов (внутри того же плана тестирования).&amp;quot;;&lt;br /&gt;
$TLS_title_mv_cp_tc = &amp;quot;Переместить/Копировать тест&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginLost.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send = &amp;quot;Выслать пароль&amp;quot;;&lt;br /&gt;
$TLS_password_reset = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_records_found = &amp;quot;Ничего не найдено.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execSetResults.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_alt_notes = &amp;quot;заметки&amp;quot;;&lt;br /&gt;
$TLS_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_btn_history_off = &amp;quot;Показывать только последний прогон&amp;quot;;&lt;br /&gt;
$TLS_btn_history_on = &amp;quot;Показывать полную историю прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_all_tests_results = &amp;quot;Сохранить все результаты прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_tc_exec_results = &amp;quot;Сохранить результат прогона&amp;quot;;&lt;br /&gt;
$TLS_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_build_is_closed = &amp;quot;Сборка закрыта&amp;quot;;&lt;br /&gt;
$TLS_builds_notes = &amp;quot;Описание сборки&amp;quot;;&lt;br /&gt;
$TLS_bulk_tc_status_management = &amp;quot;Массовое управление состоянием тестов&amp;quot;;&lt;br /&gt;
$TLS_date_time_run = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_details = &amp;quot;Подробности&amp;quot;;&lt;br /&gt;
$TLS_exec_notes = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
$TLS_exec_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_execution_history = &amp;quot;История прогонов&amp;quot;;&lt;br /&gt;
$TLS_img_title_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_img_title_delete_execution= &amp;quot;Удалить прогон&amp;quot;;&lt;br /&gt;
$TLS_just_last_execution_for_this_build = &amp;quot;Последний прогон для этой сборки&amp;quot;;&lt;br /&gt;
$TLS_no_data_available = &amp;quot;Данные отсутствуют&amp;quot;;&lt;br /&gt;
$TLS_set_all_tc_to = &amp;quot;Установить всем состояние &amp;quot;;&lt;br /&gt;
$TLS_show_hide = &amp;quot;Показать / скрыть&amp;quot;;&lt;br /&gt;
$TLS_tc_not_tested_yet = &amp;quot;Еще не протестировано:&amp;quot;;&lt;br /&gt;
$TLS_test_cases_cannot_be_executed = &amp;quot;Тесты не могут быть выполнены&amp;quot;;&lt;br /&gt;
$TLS_test_exec_by = &amp;quot;Протестировано: &amp;quot;;&lt;br /&gt;
$TLS_test_exec_expected_r = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_test_exec_last_run_date = &amp;quot;Самые последние запуски:&amp;quot;;&lt;br /&gt;
$TLS_test_exec_notes = &amp;quot;Заметки / Описание&amp;quot;;&lt;br /&gt;
$TLS_test_exec_on_build = &amp;quot; в Сборке&amp;quot;;&lt;br /&gt;
$TLS_test_exec_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_test_exec_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_test_exec_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_test_plan_notes = &amp;quot;Заметки по плану тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_status_not_run = &amp;quot;Не запущен&amp;quot;;&lt;br /&gt;
$TLS_th_test_case_id = &amp;quot;ID &amp;quot;;&lt;br /&gt;
$TLS_th_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_on_build = &amp;quot;Результы тестов по Сборке&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_owner = &amp;quot; Ответственный:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/navBar.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_link_logout = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_product = &amp;quot;Проект&amp;quot;;&lt;br /&gt;
$TLS_product_role = &amp;quot;Роль проекта&amp;quot;;&lt;br /&gt;
$TLS_title_edit_personal_data = &amp;quot;Мой профиль&amp;quot;;&lt;br /&gt;
$TLS_title_execute = &amp;quot;Выполнить&amp;quot;;&lt;br /&gt;
$TLS_title_results = &amp;quot;Отчеты&amp;quot;;&lt;br /&gt;
$TLS_title_specification = &amp;quot;Спецификация&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_rw.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_add_tc = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_add_remove_selected_tc_hint = &amp;quot;Операция будет выполнена над ВСЕМИ группами тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_add_remove_selected_tc = &amp;quot;Добавить / Удалить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_add_selected_tc = &amp;quot;Добавить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_check = &amp;quot;Отметить&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck = &amp;quot;Снять отметки&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_tc = &amp;quot;Все тесты в этой группе тестов.&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_all_checkboxes=&amp;quot;отметить все/снять все отметки&amp;quot;;&lt;br /&gt;
$TLS_has_been_executed = &amp;quot;были выполнены&amp;quot;;&lt;br /&gt;
$TLS_inactive_testcase = &amp;quot;неактивны&amp;quot;;&lt;br /&gt;
$TLS_no_testcase_available = &amp;quot;Тестов нет&amp;quot;;&lt;br /&gt;
$TLS_note_keyword_filter = &amp;quot;Тесты фильтруются по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_remove_tc = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_th_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_title_add_remove_test_to_plan = &amp;quot;Добавить/Удалить тест(ы) в/из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_add_test_to_plan = &amp;quot;Добавить тесты в план тестирования&amp;quot;;&lt;br /&gt;
$TLS_warning_add_remove_selected_tc = &amp;quot;Вы уверены удалить выбранные тесты из этого плана тестирования?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTCNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_navigator = &amp;quot;Навигатор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planPriority.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_prio   = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_title_priority = &amp;quot;Определить приоритеты для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tr_th_importance = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_tr_th_prio_cba = &amp;quot;Приоритет (C/B/A)&amp;quot;;&lt;br /&gt;
$TLS_tr_th_risk = &amp;quot;Риск/Важность&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_testplan_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_opt_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_testplan_question_create_tp_from = &amp;quot;Создать из существующего плана тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_create = &amp;quot;Создать новый план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_edit = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_for_project = &amp;quot;для проекта: &amp;quot;;&lt;br /&gt;
$TLS_testplan_title_tp_management = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_notes = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
План тестирования должен содержать ясно определенные задачи, включая временные границы. &lt;br /&gt;
Он может содержать тест-активность для выпускаемой версии продукта (включая патчи) &lt;br /&gt;
или просто единственный запрос от пользователя.&amp;lt;br/&amp;gt;&lt;br /&gt;
В описании можно ссылаться на план и другую документацию по проекту.&lt;br /&gt;
Разумно перечислить тестируемые возможности, риски и т.п.&amp;lt;br/&amp;gt;&lt;br /&gt;
Можно создать новый план тестирования из существующего (&amp;quot;клонировать&amp;quot;). &lt;br /&gt;
Будут скопированы следующие элементы: сборки, тесты, приоритеты, &lt;br /&gt;
Вехи и роли пользователей.&amp;lt;br/&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать/заморозить: т.е. запретить любое изменение &lt;br /&gt;
атрибутов или вложенных элементов плана тестирования. &lt;br /&gt;
Такие планы тестирования будут видны только на странице отчетов и на этой странице.&lt;br /&gt;
END;&lt;br /&gt;
 &lt;br /&gt;
$TLS_warning_empty_tp_name = &amp;quot;Пожалуйста, введите имя плана тестирования.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_btn_edit = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_testplan_btn_new = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_list = &amp;quot;Список&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planMilestones.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_milestone = &amp;quot;Удалить веху?&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_milestone = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_new_milestone = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_info_milestones_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'&amp;quot;;&lt;br /&gt;
$TLS_no_milestones = &amp;quot;Для этого плана тестирования вехи не определены.&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_milestones = &amp;quot;Вы уверены удалить веху %NAME% ?&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_milestone_name=&amp;quot;Укажите имя вехи!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$TLS_th_date_format = &amp;quot;Целевая Дата&amp;quot;;&lt;br /&gt;
$TLS_th_perc_a_prio = &amp;quot;% A-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_b_prio = &amp;quot;% B-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_c_prio = &amp;quot;% C-приоритет&amp;quot;;&lt;br /&gt;
$TLS_title_existing_milestones = &amp;quot;Существующие вехи&amp;quot;;&lt;br /&gt;
$TLS_title_milestones = &amp;quot;Вехи для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_new_milestone = &amp;quot;Новая Веха&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/projectedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_activate         = &amp;quot;Активировать&amp;quot;;&lt;br /&gt;
$TLS_btn_del              = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_del         = &amp;quot;Править / Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_inactivate       = &amp;quot;Деактивировать&amp;quot;;&lt;br /&gt;
$TLS_caption_edit_product = &amp;quot;Править проект&amp;quot;;&lt;br /&gt;
$TLS_caption_new_product  = &amp;quot;Создать проект&amp;quot;;&lt;br /&gt;
$TLS_color                = &amp;quot;Цвет&amp;quot;;&lt;br /&gt;
$TLS_enable_requirements  = &amp;quot;Включить функциональность Требований&amp;quot;;&lt;br /&gt;
$TLS_info_failed_loc_prod = &amp;quot;Не удалось локализовать проект.&amp;quot;;&lt;br /&gt;
$TLS_notes                = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
// Warning!!! - if JS string you must use \\n to get \n                                       &lt;br /&gt;
$TLS_popup_product_delete = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Внимание! Вы собираетесь необратимо удалить все данные связанные проектом:&lt;br /&gt;
результаты тестов, планы тестирования, тесты и т.п. \\n&lt;br /&gt;
Вместо удаления вы можете деактивировать проект. \\n&lt;br /&gt;
Если вы всё-таки настроены удалить проект, рекомендуем вам сначала &lt;br /&gt;
сделать бэкап базы данных. \\n&lt;br /&gt;
Итак, вы по прежнему уверены удалить проект? &lt;br /&gt;
END;&lt;br /&gt;
$TLS_warning_empty_tproject_name = &amp;quot;Обязательно задайте имя проекта!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_select_a_req        = &amp;quot;Пожалуйста, выберите требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement66    = &amp;quot;Требования нет&amp;quot;;&lt;br /&gt;
$TLS_req_title_assign           = &amp;quot;Привяжите требования к тесту&amp;quot;;&lt;br /&gt;
$TLS_req_title_assigned         = &amp;quot;Привязанные требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_unassigned       = &amp;quot;Доступные требования&amp;quot;;&lt;br /&gt;
$TLS_warning_req_tc_assignment_impossible = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Вы &amp;lt;b&amp;gt;не можете&amp;lt;/b&amp;gt; делать привязку по одной из следующих причин:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Не определено ни одной спецификации требования;&lt;br /&gt;
  &amp;lt;li&amp;gt;Спецификации требований пусты.&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_edit_tc = &amp;quot;Править тест&amp;quot;;&lt;br /&gt;
$TLS_warning_editing_executed_tc = &amp;quot;Внимание: Этот версия теста уже выполнялась&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planOwner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assign_ownership     = &amp;quot;Назначить ответственного&amp;quot;;&lt;br /&gt;
$TLS_def_prio_rules       = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_opt_label_none       = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_th_imp               = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_th_owner             = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_risk              = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_th_test_suite        = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_plan_ownership = &amp;quot;Владелец плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_activate_this_tcversion  = &amp;quot;Активировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_Requirements             = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_btn_del_this_version     = &amp;quot;Удалить эту версию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit                 = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_mv_cp                = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_version          = &amp;quot;Создать новую версию&amp;quot;;&lt;br /&gt;
$TLS_can_not_edit_tc = &amp;quot;Вы не можете редактировать эту версию, т.к. она уже выполнялась&amp;quot;;&lt;br /&gt;
$TLS_deactivate_this_tcversion = &amp;quot;Деактивировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_tcversion_is_inactive_msg = &amp;quot;Эта версия &amp;lt;b&amp;gt;неактивна&amp;lt;/b&amp;gt;, и не будет доступна для включения в план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planRemoveTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_remove_selected_tc = &amp;quot;Удалить выбранные тесты tcs&amp;quot;;&lt;br /&gt;
$TLS_remove_ok = &amp;quot;Удаление прошло успешно ok&amp;quot;;&lt;br /&gt;
$TLS_title_remove_test_from_plan = &amp;quot;Удалить тест из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTesters.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_save = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keyword_assignment_empty_tsuite = &amp;quot;В этой группе тестов нет тестов =&amp;gt; ключевое слово привязать нельзя&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_kw_to_tc = &amp;quot;Привязать к  тестам&amp;quot;;&lt;br /&gt;
$TLS_menu_manage_keywords = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_title_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTestersNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_label_list_of = &amp;quot;Список &amp;quot;;&lt;br /&gt;
$TLS_opt_test_plans = &amp;quot;планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_opt_users = &amp;quot;пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planUpdateTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_ck_tc        = &amp;quot;Изменить выбранные тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_info_all_tc_uptodate = &amp;quot;Все тесты актуальны.&amp;quot;;&lt;br /&gt;
$TLS_th_category          = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_component         = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_id_tc = &amp;quot;[ID] теста&amp;quot;;&lt;br /&gt;
$TLS_th_reason = &amp;quot;Причина правки&amp;quot;;&lt;br /&gt;
$TLS_th_spec_version = &amp;quot;Специальная версия&amp;quot;;&lt;br /&gt;
$TLS_th_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_th_suite_version = &amp;quot;Версия группы тестов&amp;quot;;&lt;br /&gt;
$TLS_th_update = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_title_upd_mod_tc = &amp;quot;Изменить исправленные тесты в &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_keyword   = &amp;quot;Удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_btn_create_keyword   = &amp;quot;Создать ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_keyword     = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_import_keywords  = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_th_keyword           = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_keyword = &amp;quot;Вы уверены удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least1 = &amp;quot;Пожалуйста, введите хотя бы  &amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less1 = &amp;quot;Пожалуйста, используйте не больше чем&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_req_export_to = &amp;quot;Экспорт требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsAllBuilds.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_status_blocked  = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_test_status_failed   = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_test_status_passed   = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_th_build             = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_th_tc_total          = &amp;quot;Всего тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_date                   = &amp;quot;Дата:&amp;quot;;&lt;br /&gt;
$TLS_printed_by             = &amp;quot;Напечатано:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_bugs   = &amp;quot;Баги по тесту&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_timestamp = &amp;quot;Временная метка теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_title = &amp;quot;Заголовок теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_suite_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBuild.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_met_of_build = &amp;quot;Метрики сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsByStatus.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_test_results = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Показываются результаты только последнего теста.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
В частности, тесты скрыты, если результаты тестов для следующей сборки &lt;br /&gt;
имеют статус отличный от &amp;quot;в процессе&amp;quot;. &lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_th_bugs = &amp;quot;Баги&amp;quot;;&lt;br /&gt;
$TLS_th_date = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_th_run_by = &amp;quot;Запустил:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsGeneral.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_gen_test_rep = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_query_form.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_excel_format             = &amp;quot;MS Excel&amp;quot;;&lt;br /&gt;
$TLS_html_format              = &amp;quot;HTML&amp;quot;;&lt;br /&gt;
$TLS_last_status_any          = &amp;quot;Любой&amp;quot;;&lt;br /&gt;
$TLS_last_status_blocked      = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_last_status_failed       = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_last_status_not_run      = &amp;quot;Не стартовал&amp;quot;;&lt;br /&gt;
$TLS_last_status_passed       = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_select_builds_header     = &amp;quot;Выберите сборку(и)&amp;quot;;&lt;br /&gt;
$TLS_select_components_header = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_select_keyword_header    = &amp;quot;Выберите ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_select_last_result_header = &amp;quot;Выберите последний результат&amp;quot;;&lt;br /&gt;
$TLS_select_owner_header      = &amp;quot;Выберите владельца&amp;quot;;&lt;br /&gt;
$TLS_select_report_format_header = &amp;quot;Выберите формат отчета&amp;quot;;&lt;br /&gt;
$TLS_submit_query             = &amp;quot;Выполнить запрос&amp;quot;;&lt;br /&gt;
$TLS_test_plan_header         = &amp;quot;План тестирования: &amp;quot;;&lt;br /&gt;
$TLS_query_metrics_report     = &amp;quot;Запросить отчет по метрикам&amp;quot;;&lt;br /&gt;
$TLS_enter_start_time         = &amp;quot;Введите начальное время&amp;quot;;&lt;br /&gt;
$TLS_enter_end_time           = &amp;quot;Введите конечное время&amp;quot;;&lt;br /&gt;
$TLS_year                     = &amp;quot;год&amp;quot;;&lt;br /&gt;
$TLS_month                    = &amp;quot;месяц&amp;quot;;&lt;br /&gt;
$TLS_day                      = &amp;quot;день&amp;quot;;&lt;br /&gt;
$TLS_hour                     = &amp;quot;час&amp;quot;;&lt;br /&gt;
$TLS_search_in_notes          = &amp;quot;поиск строки в заметках&amp;quot;;&lt;br /&gt;
$TLS_executor                 = &amp;quot;исполнитель&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_report.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_show_collapse                  = &amp;quot;Показать/Свернуть&amp;quot;;&lt;br /&gt;
$TLS_caption_user_selected_query_parameters = &amp;quot;Параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_not_yet_executed                       = &amp;quot;Еще не выполнялся&amp;quot;;&lt;br /&gt;
$TLS_show_hide_all                          = &amp;quot;Показать/Скрыть все&amp;quot;;&lt;br /&gt;
$TLS_th_builds                              = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_th_execution_ts                        = &amp;quot;Время&amp;quot;;&lt;br /&gt;
$TLS_th_last_result                         = &amp;quot;Последний результат&amp;quot;;&lt;br /&gt;
$TLS_th_report_format                       = &amp;quot;Тип отчета&amp;quot;;&lt;br /&gt;
$TLS_th_test_plan                           = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_test_suites                         = &amp;quot;Группа(ы) тестов&amp;quot;;&lt;br /&gt;
$TLS_th_tester_id                           = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_total_block                         = &amp;quot;# блокированных &amp;quot;;&lt;br /&gt;
$TLS_th_total_cases                         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_th_total_fail                          = &amp;quot;# сбоев&amp;quot;;&lt;br /&gt;
$TLS_th_total_not_run                       = &amp;quot;# не стартовавших&amp;quot;;&lt;br /&gt;
$TLS_th_total_pass                          = &amp;quot;# выполненных&amp;quot;;&lt;br /&gt;
$TLS_th_start_time      = &amp;quot;Время начала&amp;quot;;&lt;br /&gt;
$TLS_th_end_time        = &amp;quot;Время окончания&amp;quot;;&lt;br /&gt;
$TLS_th_executor        = &amp;quot;Исполнитель&amp;quot;;&lt;br /&gt;
$TLS_th_search_notes_string = &amp;quot;в заметках искать строку&amp;quot;;&lt;br /&gt;
$TLS_true               = &amp;quot;да&amp;quot;;&lt;br /&gt;
$TLS_false              = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_display_suite_summaries = &amp;quot;Показать итоги по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_display_query_params    = &amp;quot;Показать параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_display_totals          = &amp;quot;Показать суммарную информацию&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsReqs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_title_blocked  = &amp;quot;Заблокировано требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_failed   = &amp;quot;Нарушено требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_notrun   = &amp;quot;Непроверенных требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_passed   = &amp;quot;Выполнено требований&amp;quot;;&lt;br /&gt;
$TLS_title_result_req_testplan = &amp;quot;Результаты тестов основанных на спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan    = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsSend.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send_report        = &amp;quot;Послать отчет&amp;quot;;&lt;br /&gt;
$TLS_check_send_to_me       = &amp;quot;Послать отчет самому себе&amp;quot;;&lt;br /&gt;
$TLS_mail_body              = &amp;quot;Тело письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_report            = &amp;quot;Отчет:&amp;quot;;&lt;br /&gt;
$TLS_mail_subject           = &amp;quot;Тема письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_to                = &amp;quot;Кому:&amp;quot;;&lt;br /&gt;
$TLS_status_for_build       = &amp;quot;Состояние сборки&amp;quot;;&lt;br /&gt;
$TLS_tp_status              = &amp;quot;Общее состояние плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tp_status_for_build    = &amp;quot;Состояние плана тестирования для сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_generated_by_TestLink_on=&amp;quot;Сформировано системой TestLink,  &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_m2.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcPrintNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_print_opt  = &amp;quot;Настройки печати&amp;quot;;&lt;br /&gt;
$TLS_tr_td_show_as      = &amp;quot;Показать как&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcReorder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_tc_to_reorder       = &amp;quot;Нет тестов для переупорядочивания.&amp;quot;;&lt;br /&gt;
$TLS_title_change_tc_order  = &amp;quot;Изменить порядок тестов в этой группе тестов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcTree.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_refresh       = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_button_update_tree   = &amp;quot;Обновить дерево&amp;quot;;&lt;br /&gt;
$TLS_do_auto_update       = &amp;quot;Обновлять дерево после каждой операции&amp;quot;;&lt;br /&gt;
$TLS_no_tc_spec_av        = &amp;quot;Нет тест-спецификаций.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tc_exec_assignment.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_do                     = &amp;quot;Пуск&amp;quot;;&lt;br /&gt;
$TLS_btn_update_selected_tc     = &amp;quot;Изменить выбранные тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tc_exec_assignment   = &amp;quot;Назначить прогоны тестов для плана тестирования &amp;quot;;&lt;br /&gt;
$TLS_user                       = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_user_bulk_assignment       = &amp;quot;Массовое назначение ответственных пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/testSetNavigator.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/userInfo.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_change_passwd        = &amp;quot;Сменить пароль&amp;quot;;&lt;br /&gt;
$TLS_btn_upd_user_data        = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd            = &amp;quot;Новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd_again      = &amp;quot;Повторите новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_old_passwd            = &amp;quot;Старый пароль&amp;quot;;&lt;br /&gt;
$TLS_title_account_settings   = &amp;quot;Настройки профиля&amp;quot;;&lt;br /&gt;
$TLS_title_change_your_passwd = &amp;quot;Сменить ваш пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_different_pwd    = &amp;quot;Пожалуйста, повторите еще раз ваш новый пароль. Введенные пароли не совпадают.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd        = &amp;quot;Пароль должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_your_password_is_external = &amp;quot;Ваш пароль ведётся во внешней системе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersassign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestProject          = &amp;quot;проект&amp;quot;;&lt;br /&gt;
$TLS_User                 = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_btn_change           = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testplan_user_roles = &amp;quot;Назначить роли плана тестирования пользователям&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testproject_user_roles = &amp;quot;Назначить роли проекта пользователям&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testproject_roles = &amp;quot;Назначить роли проекта&amp;quot;;&lt;br /&gt;
$TLS_th_roles = &amp;quot;Роли&amp;quot;;&lt;br /&gt;
$TLS_title_assign_roles = &amp;quot;Назначить роли&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_reset_password = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
$TLS_caption_user_details = &amp;quot;Свойства пользователя&amp;quot;;&lt;br /&gt;
$TLS_th_password = &amp;quot;Пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_first_name = &amp;quot;Пожалуста, введите имя&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_last_name = &amp;quot;Пожалуйста, введите фамилию&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_login = &amp;quot;Пожалуйста, введите логин&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentupload.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachment_upload_ok=&amp;quot;Файл загружен.&amp;quot;;&lt;br /&gt;
$TLS_enter_attachment_title = &amp;quot;Введите заголовок для этого вложения.&amp;quot;;&lt;br /&gt;
$TLS_import_was_ok = &amp;quot;Импорт прошел успешно.&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file = &amp;quot;Максимальный размер файла:&amp;quot;;&lt;br /&gt;
$TLS_title_upload_attachment = &amp;quot;Загрузить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_N_A                          = &amp;quot;N/A&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_role              = &amp;quot;Удалить роль&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_role                = &amp;quot;Править роль&amp;quot;;&lt;br /&gt;
$TLS_btn_confirm_delete           = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_no_roles                     = &amp;quot;Нет ролей&amp;quot;;&lt;br /&gt;
$TLS_title_roles                  = &amp;quot;Доступные роли&amp;quot;;&lt;br /&gt;
$TLS_warning_users_will_be_reset  = &amp;quot;'Задетым пользователям' будет назначена гостевая роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_export_with_keywords = &amp;quot;Экспортировать с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_active_build     = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_build       = &amp;quot;Редактировать эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_open_build       = &amp;quot;Открыть сборку&amp;quot;;&lt;br /&gt;
$TLS_btn_build_create     = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_no_builds            = &amp;quot;В этот плане тестирования сборок не определено.&amp;quot;;&lt;br /&gt;
$TLS_th_description       = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_open              = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_title_build_list     = &amp;quot;Список существующих сборок&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_build = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Вы действительно хотите уничтожить эту сборку? &amp;lt;p&amp;gt;&lt;br /&gt;
Все связанные данные (в частности, результаты тестов) будут также удалены!&amp;quot;;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_alt_delete_tp   = &amp;quot;Удалить этот план тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_alt_edit_tp     = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_msg_delete_confirm = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Вы уверены, что хотите удалить план тестирования? &amp;lt;p&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать не удаляя.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_testplan_th_delete     = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_list    = &amp;quot;Список планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_empty_list = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 Ни одного плана тестирования не определено! &amp;lt;p&amp;gt;&lt;br /&gt;
 Чтобы воспользоваться функциональностью прогонов тестов, нужно &lt;br /&gt;
 создать хотя бы один.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_alt_active_testplan = &amp;quot;Активный план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==gui/templates/mainPage_left.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_href_assign_user_roles = &amp;quot;Назначить пользовательские роли&amp;quot;;&lt;br /&gt;
$TLS_href_browse_tc = &amp;quot;Просмотр тестов&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_tproject_assign = &amp;quot;Привязка пользовательских полей&amp;quot;;&lt;br /&gt;
$TLS_href_create_product = &amp;quot;Создать новый проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_product = &amp;quot;Править/Удалить проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_tc = &amp;quot;Редактировать тесты&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_assign = &amp;quot;Привязать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_manage = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_view = &amp;quot;Просмотр ключевых слов&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc = &amp;quot;Печать тестов&amp;quot;;&lt;br /&gt;
$TLS_href_req_assign = &amp;quot;Привязать требования&amp;quot;;&lt;br /&gt;
$TLS_href_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_href_roles_management = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_href_search_tc = &amp;quot;Искать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_user_management = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_title_requirements = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_title_test_spec = &amp;quot;Спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_product_mgmt = &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage_right.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_filter_tp_by_product   = &amp;quot;Фильтровать план тестирования по проектам&amp;quot;;&lt;br /&gt;
$TLS_href_add_test_case     = &amp;quot;Добавить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_build_new         = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_href_execute_test      = &amp;quot;Выполнить тесты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_assign_priority = &amp;quot;Установить приоритеты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_define_priority = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_href_plan_management   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_plan_mstones      = &amp;quot;Управление вехами&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc_suite    = &amp;quot;Печать плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_remove_test_case  = &amp;quot;Удалить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_rep_and_metrics   = &amp;quot;Отчеты и метрики&amp;quot;;&lt;br /&gt;
$TLS_href_tc_exec_assignment = &amp;quot;Поручить прогон тестов&amp;quot;;&lt;br /&gt;
$TLS_href_upd_mod_tc        = &amp;quot;Сохранить измененные тесты&amp;quot;;&lt;br /&gt;
$TLS_msg_no_rights_for_tp   = &amp;quot;- недоступен (У вас нет доступа ни для одного плана тестирования)&amp;quot;;&lt;br /&gt;
$TLS_testplan_role          = &amp;quot;Роль плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_suite  = &amp;quot;Содержание плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_execution   = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan_mgmt   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_newest_tcversions = &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_add.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bug_added                = &amp;quot;Баг добавлен&amp;quot;;&lt;br /&gt;
$TLS_error_bug_does_not_exist_on_bts=&amp;quot;Бага с таким ID не зарегистрировано в BTS!&amp;quot;;&lt;br /&gt;
$TLS_error_wrong_BugID_format = &amp;quot;Неверный формат BugID!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_delete.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugdeleting_was_ok = &amp;quot;Баг успешно удален.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/doAuthorize.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_ldap_auth_failed = &amp;quot;LDAP-аутентификация не удалась&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_bind_failed = &amp;quot;Не удалось выполнить LDAP-binding&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_server_connect_failed = &amp;quot;Не удалось соединится с LDAP-сервером&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_update_failed = &amp;quot;Обновление LDAP не удалось&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_user_not_found = &amp;quot;LDAP-пользователь не найден&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/product.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_product_delete_fails = &amp;quot;При удалении этого проекта произошла ошибка&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/results.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_trep_failing = &amp;quot;Провалены&amp;quot;;&lt;br /&gt;
$TLS_trep_passing = &amp;quot;Прошли&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_build = &amp;quot;Состояние для сборки&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_ts = &amp;quot;Состояние для группы тестов&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;Не назначены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/resultsMoreBuilds.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugs                 = &amp;quot;Связанные Баги&amp;quot;;&lt;br /&gt;
$TLS_builds_selected      = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_case_not_run_warning = &amp;quot;Тест не запущен&amp;quot;;&lt;br /&gt;
$TLS_category_header      = &amp;quot;Группа тестов =&amp;quot;;&lt;br /&gt;
$TLS_daterun              = &amp;quot;Дата запуска&amp;quot;;&lt;br /&gt;
$TLS_last_status          = &amp;quot;Последнее состояние&amp;quot;;&lt;br /&gt;
$TLS_number_blocked       = &amp;quot;# блокированных&amp;quot;;&lt;br /&gt;
$TLS_number_cases         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_number_executions    = &amp;quot;# тест-пусков&amp;quot;;&lt;br /&gt;
$TLS_number_failed        = &amp;quot;# тест-сбоев&amp;quot;;&lt;br /&gt;
$TLS_number_not_run       = &amp;quot;# не запущено&amp;quot;;&lt;br /&gt;
$TLS_number_passed        = &amp;quot;# пройденных&amp;quot;;&lt;br /&gt;
$TLS_owner                = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_owner_header         = &amp;quot;Tester =&amp;quot;;&lt;br /&gt;
$TLS_runby                = &amp;quot;Запущен тестировщиком &amp;quot;;&lt;br /&gt;
$TLS_test_plan_name       = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/roles.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_desc_cfield_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_desc_cfield_view       = &amp;quot;Просмотр пользовательских полей (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_key    = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_product= &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_req    = &amp;quot;Управление требованиями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_tc     = &amp;quot;Создание/правка тестов&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_users  = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_key      = &amp;quot;Просмотр ключевых слов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_req      = &amp;quot;Просмотр требований (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_tc       = &amp;quot;Просмотр тестов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_role_management   = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_create_build = &amp;quot;Создание/редактирование сборки&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_execute  = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_metrics  = &amp;quot;Метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_planning = &amp;quot;Составление плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_user_role_assignment = &amp;quot;Назначение ролей&amp;quot;;&lt;br /&gt;
$TLS_error_duplicate_rolename = &amp;quot;Роль с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rights     = &amp;quot;Вы не можете создать роль без каких-либо прав!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rolename   = &amp;quot;Вам нужно ввести имя для этой роли.&amp;quot;;&lt;br /&gt;
$TLS_mgt_testplan_create      = &amp;quot;Создать/править план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testproject.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_creating_req_spec    = &amp;quot;Ошибка при создании спецификации требования&amp;quot;;&lt;br /&gt;
$TLS_info_product_name_empty    = &amp;quot;Нельзя давать пустое имя.&amp;quot;;&lt;br /&gt;
$TLS_keyword_already_exists     = &amp;quot;Такое ключевое слово уже есть&amp;quot;;&lt;br /&gt;
$TLS_string_contains_bad_chars  = &amp;quot;Введенная строка содержит недопустимые символы.&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_req_title= &amp;quot;Требование с таким заголовком уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/requirements.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_conflict               = &amp;quot;Конфликт&amp;quot;;&lt;br /&gt;
$TLS_error_deleting_req     = &amp;quot;Ошибка при удалении требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_inserting_req    = &amp;quot;Ошибка при вставке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_req     = &amp;quot;Ошибка при правке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_reqspec = &amp;quot;Ошибка при правке спецификаций требований.&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_xml = &amp;quot;Файл не распознан как корректный XML, и не может быть использован.&amp;quot;;&lt;br /&gt;
$TLS_ok = &amp;quot;OK&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description1 = &amp;quot; - тип CSV требует три поля на каждую запись: 'req_doc_id','title','description'&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description2 = &amp;quot; - CSV, экспортированный из DOORS требует запись-заголовок.&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_overwritten  = &amp;quot;перезаписано!&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_skipped      = &amp;quot;пропущено&amp;quot;;&lt;br /&gt;
$TLS_req_state_not_testable         = &amp;quot;не тестируемо&amp;quot;;&lt;br /&gt;
$TLS_req_state_valid                = &amp;quot;актуально&amp;quot;;&lt;br /&gt;
$TLS_the_format_req_xml_import      = &amp;quot;Неверный XML-формат для импорта требований&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_reqdoc_id    = &amp;quot;Не уникальный (дублирующий) id документа&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testsuite.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component_name_already_exists = &amp;quot;Группа тестов с таким именем уже зарегистрирована&amp;quot;;&lt;br /&gt;
$TLS_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/exec.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_results_submitted = &amp;quot;Результаты тестов отправлены.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/print.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_printed_by_TestLink_on = &amp;quot;Распечатано TestLink'ом &amp;quot;;&lt;br /&gt;
$TLS_title_toc = &amp;quot;Содержание&amp;quot;;&lt;br /&gt;
$TLS_passfail = &amp;quot;Пройден / Провален&amp;quot;;&lt;br /&gt;
$TLS_testnotes = &amp;quot;Заметки к тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testcase.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testcase_name_already_exists = &amp;quot;Тест с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_the_format_tc_xml_import = &amp;quot;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/info.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_email_sent_message = &amp;quot;Ваше письмо отослано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/users.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Unknown = &amp;quot;Неизвестно&amp;quot;;&lt;br /&gt;
$TLS_duplicate_login = &amp;quot;Пользователь с таким логином уже есть!&amp;quot;;&lt;br /&gt;
$TLS_login_must_not_be_empty = &amp;quot;Логин не должен быть пустым!&amp;quot;;&lt;br /&gt;
$TLS_wrong_old_password = &amp;quot;Старый пароль неверен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/email_api.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_stmp_host_unconfigured = &amp;quot;Некорректно указан SMTP host!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/common.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/configCheck.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachments_dir = &amp;quot;каталог для вложений:&amp;quot;;&lt;br /&gt;
$TLS_bts_connection_problems = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Не удалось соединиться с вашей Bug Tracking System.&amp;lt;p&amp;gt;&lt;br /&gt;
Пожалуйста, проверьте настройки.&amp;lt;p&amp;gt;&lt;br /&gt;
Будьте внимательны, эта проблема &lt;br /&gt;
снижает производительность TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_but_directory_is_not_writable = &amp;quot;Каталог закрыт для записи!&amp;quot;;&lt;br /&gt;
$TLS_directory_is_writable = &amp;quot;Каталог открыт для записи.&amp;quot;;&lt;br /&gt;
$TLS_does_not_exist = &amp;quot;не существует&amp;quot;;&lt;br /&gt;
$TLS_exists = &amp;quot;существует&amp;quot;;&lt;br /&gt;
$TLS_ldap_extension_not_loaded=&amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Метод аутентификации указан как LDAP &amp;lt;/br&amp;gt;&lt;br /&gt;
однако PHP/LDAP extension не загружено =&amp;gt; &lt;br /&gt;
Вам не удастся войти в систему. &lt;br /&gt;
Пожалуйста, свяжитесь с администратором TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_sec_note_admin_default_pwd = &amp;quot;Вам необходимо сменить пароль по умолчанию у пользователя 'admin'!&amp;quot;;&lt;br /&gt;
$TLS_sec_note_remove_install_dir = &amp;quot;Инсталляционный каталог должен быть удален!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/frmWorkArea.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_create_a_build = &amp;quot;Создать новую сборку&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part1 = &amp;quot;Ни одной сборки для этого тест плана не создано.&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part2 = &amp;quot;Создайте их или попросите об этом свое руководство.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/myTPInfo.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testplans_available = &amp;quot;К сожалению, ни одного плана тестирования не доступно&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/tlsmarty.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywords.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_empty_keyword_no = &amp;quot;Ключевое слово должно быть непустым!&amp;quot;;&lt;br /&gt;
$TLS_keywords_char_not_allowed = &amp;quot;Запятые и кавычки недопустимы в ключевых словах!&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails2 = &amp;quot; дал сбой &amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_csv_import = &amp;quot;keyword;notes&amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_xml_import = &amp;quot;&amp;amp;lt;keywords&amp;gt;&amp;amp;lt;keyword name=\&amp;quot;name\&amp;quot;&amp;gt;Notes&amp;amp;lt;/keyword&amp;gt;&amp;amp;lt;/keywords&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_kw_delete_fails = &amp;quot;Не удалось удаление ключевого слова!&amp;quot;;&lt;br /&gt;
$TLS_kw_update_fails = &amp;quot;Не удалась правка ключевого слова!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assigned_kword  = &amp;quot;Связанные ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_available_kword = &amp;quot;Доступные ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/buildNew.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cannot_add_build     = &amp;quot;Невозможно добавить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_delete_build  = &amp;quot;Невозможно удалить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_update_build  = &amp;quot;Ошибка при правке сборки!&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_build = &amp;quot;Сборка с таким идентификатором уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/plan.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_warning_empty_milestone_name = &amp;quot;Обязательно введите имя для вехи!&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_valid_date = &amp;quot;Введенная дата некорректна!&amp;quot;;&lt;br /&gt;
$TLS_warning_invalid_percentage_value = &amp;quot;Значения-проценты должны быть от 0 to 100 (%)&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'!&amp;quot;;&lt;br /&gt;
$TLS_warning_percentage_value_higher_than_100 = &amp;quot;Сумма всех значений-процентов не должна быть больше 100!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planMilestones.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_milestone_delete_fails         = &amp;quot;Не удалось удалить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_add_failed   = &amp;quot;Не удалось добавить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_update_failed = &amp;quot;Не удалось править веху!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planOwner.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_imp_high     = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_low      = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_medium   = &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_assign_tp    = &amp;quot;Поручить планы тестирования пользователю: &amp;quot;;&lt;br /&gt;
$TLS_title_assign_users = &amp;quot;Назначить пользователей на план тестирования: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_nav_test_plan = &amp;quot;Навигатор - Планы тестирования&amp;quot;;&lt;br /&gt;
$TLS_nav_users = &amp;quot;Навигатор - Пользователи&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planUpdateTC.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_category_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_component_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_deleted = &amp;quot;удалена&amp;quot;;&lt;br /&gt;
$TLS_different_versions = &amp;quot;Различные версии&amp;quot;;&lt;br /&gt;
$TLS_plan_update_no_tc_updated = &amp;quot;Ни один тест не изменен&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted2 = &amp;quot;был удален.&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated2 = &amp;quot;был изменен.&amp;quot;;&lt;br /&gt;
$TLS_tcorder_has_changed = &amp;quot;Порядок тестов был изменен&amp;quot;;&lt;br /&gt;
$TLS_updated = &amp;quot;изменен&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_plan_navigator = &amp;quot;Навигация по планам тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetRemove.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tcase_removed_from_tplan=&amp;quot;тест удален из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_multiple_tcase_removed_from_tplan=&amp;quot;Тесты удалены из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_created_ok = &amp;quot;План тестирования был создан&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed1 = &amp;quot;Правка плана тестирования '&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed2 = &amp;quot;' не удалась&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_tplan_name = &amp;quot;План тестирования с таким именем уже есть. Выберите другое имя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/print/selectData.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_show_doc_header = &amp;quot;Показать заголовок документа&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_body = &amp;quot;Показать тело теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_summary = &amp;quot;Показать резюме теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_toc = &amp;quot;Показать Содержание&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_author = &amp;quot;Показать автора теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_passfail = &amp;quot;Показать статус &amp;amp;laquo;пройден/провален&amp;amp;raquo; и заметки&amp;quot;;&lt;br /&gt;
$TLS_title_tc_print_navigator = &amp;quot;Навигация - Печать спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tp_print_navigator = &amp;quot;Навигация - Печать плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/project/projectedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_product_name_duplicate = &amp;quot;Уже есть проект с именем %s. &amp;lt;br&amp;gt;Пожалуйста, выберите другое имя&amp;quot;;&lt;br /&gt;
$TLS_info_no_more_prods = &amp;quot;проектов больше нет.&amp;quot;;&lt;br /&gt;
$TLS_info_product_activated = &amp;quot;проект активирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_inactivated = &amp;quot;проект деактивирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_not_deleted_check_log = &amp;quot;Не удалось удалить проект. Проверьте лог TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_info_product_was_deleted = &amp;quot;проект успешно удален.&amp;quot;;&lt;br /&gt;
$TLS_refer_to_log = &amp;quot; Пожалуйста, изучите лог TestLink'а для дополнительной информации.&amp;quot;;&lt;br /&gt;
$TLS_test_project_activated = &amp;quot;проект %s успешно активирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_created = &amp;quot;проект %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_test_project_deleted = &amp;quot;проект %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_test_project_inactivated = &amp;quot;проект %s успешно деактивирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_updated = &amp;quot;проект %s успешно отредактирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_update_failed = &amp;quot;Правка проекта %s не удалась!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/charts.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_maani_copyright = &amp;quot;flash technology предоставлена http://www.maani.us&amp;quot;;&lt;br /&gt;
$TLS_graphical_reports = &amp;quot;Графические отчеты&amp;quot;;&lt;br /&gt;
$TLS_overall_metrics = &amp;quot;Общие метрики&amp;quot;;&lt;br /&gt;
$TLS_results_by_keyword = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_results_by_tester = &amp;quot;Рузультаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_results_top_level_suites = &amp;quot;Результаты по топ группам тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_file_is_not_ok_for_import_type = &amp;quot;Кажется тип файла не совпадает с выбранным для импорта типом&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_text = &amp;quot;Это не текстовый файл. Использовать нельзя.&amp;quot;;&lt;br /&gt;
$TLS_please_choose_req_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_req_import_finished = &amp;quot;Импорт завершен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqSpecView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_tc_from_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_req_created = &amp;quot;Требование %s успешно создано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqTcAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_msg_noselect = &amp;quot;Ничего не выбрано&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notupdated_coverage = &amp;quot;Покрытие не обновлено для Требований: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsBugs.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_report_all_builds = &amp;quot;Отчет: Результаты тестов для всех сборок&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsAllBuilds.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_metrics_x_build = &amp;quot; - Результаты тестов. Метрики X Сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsByStatus.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_list_of_blocked = &amp;quot;Список блокированных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_failed = &amp;quot;Список проваленных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_not_run = &amp;quot;Список незапущенных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsTC.php==&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_link_charts=&amp;quot;Диаграммы&amp;quot;;&lt;br /&gt;
$TLS_link_report_blocked_tcs = &amp;quot;Блокированные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_failed = &amp;quot;Проваленные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_general_tp_metrics = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_active_build = &amp;quot;Метрики активной сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_more_builds = &amp;quot;Запрос метрик&amp;quot;;&lt;br /&gt;
$TLS_link_report_not_run=&amp;quot;Не запущенные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_overall_build = &amp;quot;Общий статус всех сборок&amp;quot;;&lt;br /&gt;
$TLS_link_report_reqs_coverage = &amp;quot;Отчет о выполнении требований&amp;quot;;&lt;br /&gt;
$TLS_link_report_test = &amp;quot;Отчет о прогоне тестов&amp;quot;;&lt;br /&gt;
$TLS_link_report_total_bugs = &amp;quot;Отчет об обнаруженных багах&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsSend.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_to_empty_email_warning = &amp;quot;Пожалуйста, введите правильный email.&amp;quot;;&lt;br /&gt;
$TLS_warning_create_build_first = &amp;quot;Сначала Вы должны создать или импортировать сборки.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/displayMgr.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_sendreport_no_email_credentials = &amp;quot;Email для этого пользователя не указан, пожалуйста, укажите его в настройках своего профиля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/archive.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/listTestCases.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_file_to_import = &amp;quot;Пожалуйста, выберите файл для импорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_import_to = &amp;quot;Импорт тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_import_to = &amp;quot;Импорт группы тестов&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tcase_file = &amp;quot;Некорректный XML в файле с тестами&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tsuite_file = &amp;quot;Некорректный XML в файле с группой тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcexport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testcases_to_export = &amp;quot;Нет тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_no_testsuites_to_export = &amp;quot;Нет группы тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export = &amp;quot;Экспорт теста&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export_all = &amp;quot;Экспортировать все тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export_all = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/containerEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_delete = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_delete_notice = &amp;quot;Внимание: Все связанные результаты прогонов будут удалены&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_com_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_current = &amp;quot;текущий&amp;quot;;&lt;br /&gt;
$TLS_delete_linked = &amp;quot;Ссылки на планы тестирования будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_delete_linked_and_exec = &amp;quot;Ссылки на планы тестирования и результаты выполнения будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_error_tc_add = &amp;quot;При добавлении теста произошла ошибка&amp;quot;;&lt;br /&gt;
$TLS_title_del_tc = &amp;quot;Удалить тест &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesview.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_deletion = &amp;quot;Не удалось удалить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersassign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_test_projects = &amp;quot;Не заведено ни одного проекта&amp;quot;;&lt;br /&gt;
$TLS_no_test_plans = &amp;quot;Для этого проекта не заведено ни одного плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_project_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
$TLS_test_plan_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_user_created=&amp;quot;Пользователь %s был успешно создан&amp;quot;;&lt;br /&gt;
$TLS_user_deleted=&amp;quot;Пользователь %s был успешно удален&amp;quot;;&lt;br /&gt;
$TLS_user_not_added = &amp;quot;Не удалось добавить пользователя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_creation = &amp;quot;Не удалось создать роль!&amp;quot;;&lt;br /&gt;
$TLS_error_role_update = &amp;quot;Не удалось исправить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/cfields/cfields_edit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cf_name_exists = &amp;quot;Пользовательское поле с таким именем уже существует. Пожалуста, выберите другое имя.&amp;quot;;&lt;br /&gt;
$TLS_error_creating_cf = &amp;quot;Не удалось создать пользовательское поле!&amp;quot;;&lt;br /&gt;
$TLS_do_update = &amp;quot;исправлено&amp;quot;;&lt;br /&gt;
$TLS_do_delete = &amp;quot;удалено&amp;quot;;&lt;br /&gt;
$TLS_do_add = &amp;quot;добавлено&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Open=&amp;quot;Открыто&amp;quot;;&lt;br /&gt;
$TLS_Resolved=&amp;quot;Исправленных&amp;quot;;&lt;br /&gt;
$TLS_Total=&amp;quot;Всего&amp;quot;;&lt;br /&gt;
$TLS_TCs_with_Bugs=&amp;quot;Тестов с багами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9468</id>
		<title>Strings.txt (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9468"/>
				<updated>2007-10-07T13:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* lib/results/resultsNavigator.php */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
Статьяz с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «[[#Скачать|скачать]]» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скачать=&lt;br /&gt;
[{{SERVER}}{{localurl:Special:CisGetPHPPage|pagetitle={{PAGENAMEE}}}} Получить PHP-код]&lt;br /&gt;
&lt;br /&gt;
= Оригинал (наиболее полный английский перевод) =&lt;br /&gt;
* http://testlink.cvs.sourceforge.net/testlink/testlink/locale/en_GB/&lt;br /&gt;
&lt;br /&gt;
=Разделы файла strings.txt (ru_RU)=&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * TestLink Open Source Project - http://testlink.sourceforge.net/ &lt;br /&gt;
 *&lt;br /&gt;
 * Filename $RCSfile: strings.txt,v $&lt;br /&gt;
 *&lt;br /&gt;
 * @version  $Revision$&lt;br /&gt;
 * @modified $Date$ $Author$&lt;br /&gt;
 *&lt;br /&gt;
 * @author Vadim Ivanchenko, Stas Fomin, and russian Testlink community.&lt;br /&gt;
 * http://lib.custis.ru/index.php/TestLink:_strings.txt_%28RU%29&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
**/&lt;br /&gt;
&lt;br /&gt;
$TLS_STRINGFILE_CHARSET = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_asc    = &amp;quot;по возрастанию&amp;quot;;&lt;br /&gt;
$TLS_btn_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_desc = &amp;quot;по убыванию&amp;quot;;&lt;br /&gt;
$TLS_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan = $TLS_test_plan;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_SRS = &amp;quot;SRS&amp;quot;;&lt;br /&gt;
$TLS_Role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_Keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_Milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_testsuite_created = &amp;quot;Группа тестов создана&amp;quot;;&lt;br /&gt;
$TLS_requirement = &amp;quot;Требование&amp;quot;;&lt;br /&gt;
$TLS_assigned = &amp;quot;назначен&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;свободен&amp;quot;;&lt;br /&gt;
$TLS_import_file_type = &amp;quot;Тип импортируемого файла&amp;quot;;&lt;br /&gt;
$TLS_max_file_size_is = &amp;quot;Макс. размер файла&amp;quot;;&lt;br /&gt;
$TLS_supported_file_formats = &amp;quot;Поддерживаемые форматы файлов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==firstLogin.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_user = &amp;quot;К сожалению, не удалось создать ваш логин. Пожалуйста, свяжитесь с администратором!&amp;quot;;&lt;br /&gt;
$TLS_empty_email_address = &amp;quot; Пожалуйста, укажите  e-mail!&amp;quot;;&lt;br /&gt;
$TLS_empty_first_name = &amp;quot; Пожалуйста, укажите имя пользователя.&amp;quot;;&lt;br /&gt;
$TLS_empty_last_name = &amp;quot; Пожалуйста, укажите фамилию.&amp;quot;;&lt;br /&gt;
$TLS_fatal_page_title = &amp;quot;TestLink ::: Fatal Error&amp;quot;;&lt;br /&gt;
$TLS_invalid_user_name = &amp;quot;Некорректный логин пользователя. Пожалуйста, придумайте другой.&amp;quot;;&lt;br /&gt;
$TLS_passwd_dont_match = &amp;quot;Два введенных пароля не совпадают. Учтите, что пароли чувствительны к регистру, и попробуйте ещё раз.&amp;quot;;&lt;br /&gt;
$TLS_user_cant_be_created_because = &amp;quot;Не удалось создать ваш аккаунт. Причина:&amp;quot;;&lt;br /&gt;
$TLS_user_name_exists = &amp;quot;Этот логин пользователя уже используется. Пожалуйста, выберите другой.&amp;quot;;&lt;br /&gt;
$TLS_valid_user_name_format = &amp;quot;Логин пользователя может состоять только из алфавитно-цифровых символов, пробелов, дефисов и подчеркиваний.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd = &amp;quot;Пожалуйста, укажите пароль. Пароль не может быть пустым.&amp;quot;;&lt;br /&gt;
$TLS_your_info_please = &amp;quot;Введите информацию о пользователе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==index.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_main_page_title = &amp;quot;TestLink::Главная страница&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==keywordsimport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_keywords_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_keywords_file = &amp;quot;Файл с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lostPassword.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user = &amp;quot;Пользователь не найден, попробуйте еще&amp;quot;;&lt;br /&gt;
$TLS_contact_admin = &amp;quot;&amp;lt;br&amp;gt; Если проблемы будут продолжаться, пожалуйста, свяжитесь с администратором системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_empty_address = &amp;quot;Вы не указали email-адреса в вашем профиле!  Теперь, чтобы сбросить пароль вам нужно связаться с администратором TestLink-системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_passwd_subject = &amp;quot;Ваш новый пароль к TestLink'у.&amp;quot;;&lt;br /&gt;
$TLS_mail_problems = &amp;quot;Ошибка в почтовых настройках, пожалуйста, свяжитесь с администратором.&amp;quot;;&lt;br /&gt;
$TLS_page_title_lost_passwd = &amp;quot;TestLink - Утерян пароль&amp;quot;;&lt;br /&gt;
$TLS_your_info_for_passwd = &amp;quot;Заполните информацию о вашем пользователе, и пароль будет вам выслан по почте.&amp;quot;;&lt;br /&gt;
$TLS_your_password_is = &amp;quot;Ваш пароль к TestLink'у: &amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==login.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user_passwd = &amp;quot;Логин или пароль неверен. Попробуйте ещё!&amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists1 = &amp;quot;Ваша сессия в этом броузере ещё активна. Пожалуйста, используйте &amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists2 = &amp;quot; если вы хотите обновить вашу сессию.&amp;quot;;&lt;br /&gt;
$TLS_logout_link = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_passwd_lost = &amp;quot;Ваш пароль выслан вам по email на адрес, который вы указали при регистрации. Проверьте вашу почту. В случае проблем, обратитесь к администратору вашего TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_password_reseted=&amp;quot;Новый пароль выслан вам по почте&amp;quot;;&lt;br /&gt;
$TLS_please_login = &amp;quot;Пожалуйста, войдите в систему...&amp;quot;;&lt;br /&gt;
$TLS_session_expired = &amp;quot;Время ваша сессии окончилось. Пожалуйста, войдите в систему заново.&amp;quot;;&lt;br /&gt;
$TLS_your_first_login = &amp;quot;Добро пожаловать в TestLink! Сейчас у вас только гостевой доступ. Для большего, нужно войти в систему.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==planPriority.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_high_priority    = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_priority     = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_priority  = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_risk        = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_risk         = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_risk      = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_importance  = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_low_importance   = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_medium_importance= &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tc_created = &amp;quot;Тест %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_tc_deleted = &amp;quot;Тест %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_tc_updated = &amp;quot;Тест %s отредактирован успешно&amp;quot;;&lt;br /&gt;
$TLS_tc_update_failed = &amp;quot;Не удалась правка теста %s!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachment404.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_close = &amp;quot;Закрыть&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_not_found = &amp;quot;Ошибка: Вложение не найдено!&amp;quot;;&lt;br /&gt;
$TLS_title_downloading_attachment = &amp;quot;Загружаем вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentdelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_deleting_was_ok = &amp;quot;Вложение удалено.&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_delete = &amp;quot;При удалении вложения произошла ошибка!&amp;quot;;&lt;br /&gt;
$TLS_title_delete_attachment = &amp;quot;Удалить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_del_comp = &amp;quot;Да, удалить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_container_title_testsuite =$TLS_test_suite;&lt;br /&gt;
$TLS_linked_but_not_executed=&amp;quot;Связан с одним или более планом тестирования, но не выполнялась&amp;quot;;&lt;br /&gt;
$TLS_question_del = &amp;quot;Действительно удалить&amp;quot;;&lt;br /&gt;
$TLS_th_link_exec_status = &amp;quot;Статус исполнения и связей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_testsuite = &amp;quot;Создать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_tc_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_title_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_testsuite_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_add.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_bug = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_bug_id = &amp;quot;Bug id&amp;quot;;&lt;br /&gt;
$TLS_button_enter_bug = &amp;quot;Создать новый баг&amp;quot;;&lt;br /&gt;
$TLS_title_bug_add = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_link_bts_create_bug = &amp;quot;Доступ к системе регистрации багов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_delete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_delete_bug = &amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cp               = &amp;quot;Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_move             = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_target        = &amp;quot;Выберите куда&amp;quot;;&lt;br /&gt;
$TLS_cont_move_first      = &amp;quot;Переместить это&amp;quot;;&lt;br /&gt;
$TLS_cont_move_second     = &amp;quot;в другое&amp;quot;;&lt;br /&gt;
$TLS_copy_keywords        = &amp;quot;Копировать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_defined_exclam       = &amp;quot;определен !&amp;quot;;&lt;br /&gt;
$TLS_include_nested       = &amp;quot;Включая вложенные данные (только для копирования).&amp;quot;;&lt;br /&gt;
$TLS_sorry_further        = &amp;quot;К сожалению, больше ничего нет &amp;quot;;&lt;br /&gt;
$TLS_title_move_cp        = &amp;quot;Переместить/Скопировать&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_btn_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_help = &amp;quot;Помощь&amp;quot;;&lt;br /&gt;
$TLS_req_create = &amp;quot;Создать требование&amp;quot;;&lt;br /&gt;
$TLS_req_doc_id = &amp;quot;DOC-ID&amp;quot;;&lt;br /&gt;
$TLS_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_reqs = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_req_title = &amp;quot;Заголовок требования должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_reqdoc_id = &amp;quot;ID документа-требования не должен быть пуст!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerOrder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_no_nodes_to_reorder = &amp;quot;К сожалению, тут нечего упорядочивать.&amp;quot;;&lt;br /&gt;
$TLS_node = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_th_node_type = &amp;quot;Тест / Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_order = &amp;quot;Порядок&amp;quot;;&lt;br /&gt;
$TLS_title_change_node_order = &amp;quot;Изменить порядок 'потомков'&amp;quot;;&lt;br /&gt;
$TLS_node_type_dbtable_testsuites=$TLS_test_suite;&lt;br /&gt;
$TLS_node_type_dbtable_testcases=$TLS_testcase;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_del_com    = &amp;quot;Удалить эту группу тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_com   = &amp;quot;Править дату и заголовок для этой группы тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_move_cp_com = &amp;quot;Переместить или скопировать эту группу тестов в другой проект&amp;quot;;&lt;br /&gt;
$TLS_btn_del_com = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_com = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_export_all_testsuites = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_export_tc = &amp;quot;Экспортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_export_testsuite = &amp;quot;Экспортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_import_tc = &amp;quot;Импортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_import_testsuite = &amp;quot;Импортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_move_cp_com = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_cat = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_com = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_tc = &amp;quot;Создать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_reorder_cat = &amp;quot;Переупорядочить потомков&amp;quot;;&lt;br /&gt;
$TLS_edit_testproject_basic_data = &amp;quot;Править основные данные проекта&amp;quot;;&lt;br /&gt;
$TLS_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_product_name = &amp;quot;Имя проекта&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_edit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_available_on = &amp;quot;Доступно для&amp;quot;;&lt;br /&gt;
$TLS_btn_add = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_btn_delete = &amp;quot;Удалить&amp;quot;; &lt;br /&gt;
$TLS_btn_ok = &amp;quot;Ok&amp;quot;;&lt;br /&gt;
$TLS_custom_field = &amp;quot;Пользовательское поле&amp;quot;;&lt;br /&gt;
$TLS_enable_on_design = &amp;quot;Разрешить при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_enable_on_exec = &amp;quot;Разрешить при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_label = &amp;quot;Метка&amp;quot;;&lt;br /&gt;
$TLS_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_custom_field = &amp;quot;Вы уверены, что хотите удалить пользовательское поле?&amp;quot;;&lt;br /&gt;
$TLS_possible_values = &amp;quot;Возможные значения&amp;quot;;&lt;br /&gt;
$TLS_show_on_design = &amp;quot;Показывать при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_show_on_exec = &amp;quot;Показывать при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_title_cfields_mgmt = &amp;quot;Пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_type = &amp;quot;Тип&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_label = &amp;quot;Пожалуйста, введите метку для этого пользовательского поля.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_name = &amp;quot;Пожалуйста, введите имя этого пользовательского поля.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_update.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_failed_db_upd = &amp;quot;Не удалось обновить базу данных!&amp;quot;;&lt;br /&gt;
$TLS_info_failed_db_upd_details = &amp;quot;Не удалось обновить базу данных! - Подробности:&amp;quot;;&lt;br /&gt;
$TLS_invalid_query = &amp;quot;Ошибка:&amp;quot;;&lt;br /&gt;
$TLS_warning = &amp;quot;Предупреждение!!&amp;quot;;&lt;br /&gt;
$TLS_was_success = &amp;quot; был(и) успешно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestPlan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_btn_apply_filter = &amp;quot;Применить фильтр&amp;quot;;&lt;br /&gt;
$TLS_btn_update_menu = &amp;quot;Обновить меню&amp;quot;;&lt;br /&gt;
$TLS_caption_nav_filter_settings = &amp;quot;Параметры выборки&amp;quot;;&lt;br /&gt;
$TLS_current_build = &amp;quot;Текущая сборка&amp;quot;;&lt;br /&gt;
$TLS_filter_owner = &amp;quot;Ответственный&amp;quot;;&lt;br /&gt;
$TLS_filter_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_filter_tcID = &amp;quot;Фильтр: ID теста&amp;quot;;&lt;br /&gt;
$TLS_keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_test_status_all_status=&amp;quot;Все&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_th_my_perc_completed = &amp;quot;У меня выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_perc_completed = &amp;quot;Выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_title_your_tp_metrics = &amp;quot;Ваши метрики для плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/newest_tcversions.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_linked_version = &amp;quot;Связанная версия&amp;quot;;&lt;br /&gt;
$TLS_newest_version = &amp;quot;Самая новая из доступных активных версий&amp;quot;;&lt;br /&gt;
$TLS_title_newest_tcversions = &amp;quot;Самые новые версии связанных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/emailSent.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_test_report = &amp;quot;- Послать тест-отчёт&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_Title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_btn_back2srs = &amp;quot;Назад, к спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_btn_import = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_btn_upload_file = &amp;quot;Загрузить файл&amp;quot;;&lt;br /&gt;
$TLS_check_req_file_structure = &amp;quot;Пожалуйста, проверьте формат файла. Не получается получить из этого файла требования&amp;quot;;&lt;br /&gt;
$TLS_local_file = &amp;quot;Файл:&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file1 = &amp;quot;Максимальный размер для этого файла&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file2 = &amp;quot;kB&amp;quot;;&lt;br /&gt;
$TLS_req_import_check_note = &amp;quot;Пожалуйста, разрешите возможные конфликты и запустите процесс импорта.&amp;quot;;&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Не импортируйте элементы с пустой Сферой&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_double = &amp;quot;Добавить ещё с тем же заголовком&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_header = &amp;quot;Разрешить конфликт&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_overwrite = &amp;quot;Обновить существующий&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_skip = &amp;quot;Пропускать импорт дублирующих требований&amp;quot;;&lt;br /&gt;
$TLS_req_import_type = &amp;quot;Тип:&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement = &amp;quot;Нет требований&amp;quot;;&lt;br /&gt;
$TLS_required_cvs_format = &amp;quot;Формат файла с требованиями:&amp;quot;;&lt;br /&gt;
$TLS_title_choose_file_type = &amp;quot;Выберите тип файла&amp;quot;;&lt;br /&gt;
$TLS_title_choose_local_file = &amp;quot;Выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_title_req_import = &amp;quot;Загрузка требований&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_check_input = &amp;quot;Проверьте импортируемые данные&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_build = &amp;quot;Удалить эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_attachment = &amp;quot;Удалить это вложение&amp;quot;;&lt;br /&gt;
$TLS_attached_files = &amp;quot;Вложенные файлы&amp;quot;;&lt;br /&gt;
$TLS_attachment_feature_disabled = &amp;quot;вложения отключены&amp;quot;;&lt;br /&gt;
$TLS_button_upload = &amp;quot;Загрузить&amp;quot;;&lt;br /&gt;
$TLS_upload_file_new_file = &amp;quot;Загрузить новый файл&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_attachment = &amp;quot;Действительно удалить вложение?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_print = &amp;quot;Печать&amp;quot;;&lt;br /&gt;
$TLS_note_email_sent_t = &amp;quot;Примечание: email format послан на email пользователя&amp;quot;;&lt;br /&gt;
$TLS_send_results = &amp;quot;Послать отчеты&amp;quot;;&lt;br /&gt;
$TLS_send_to = &amp;quot;To:&amp;quot;;&lt;br /&gt;
$TLS_subject = &amp;quot;Subject:&amp;quot;;&lt;br /&gt;
$TLS_title_active_build = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_title_report_type = &amp;quot;Формат отчета&amp;quot;;&lt;br /&gt;
$TLS_via_email = &amp;quot;через eMail&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments_upload.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_view.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cfields_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_manage_cfield = &amp;quot;Управлять пользовательскими полями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_ro_m0.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_category = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_configuration = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_not_defined = &amp;quot;Не определено.&amp;quot;;&lt;br /&gt;
$TLS_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_alt_name = &amp;quot;Обязательно заполнить имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_cat_config = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_cat_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_cat_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_cat_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_by = &amp;quot;by&amp;quot;;&lt;br /&gt;
$TLS_coverage = &amp;quot;Покрытие&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_req = &amp;quot;Удалить это требование, Вы уверены?&amp;quot;;&lt;br /&gt;
$TLS_req_edit = &amp;quot;Править требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notestcase = &amp;quot;Связанных тестов нет.&amp;quot;;&lt;br /&gt;
$TLS_requirement_spec = &amp;quot;Спецификация требования&amp;quot;;&lt;br /&gt;
$TLS_test_case_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_title_created = &amp;quot;Создано:&amp;quot;;&lt;br /&gt;
$TLS_title_last_mod = &amp;quot;Последняя правка:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_active = &amp;quot;Активная&amp;quot;;&lt;br /&gt;
$TLS_enter_build = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_enter_build_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_msg_build = &amp;quot;Замечание: Каждая сборка относится к активному плану тестирования. Описание должно включать: список развертываемых пакетов, утверждений, состояние, и т.п.&amp;quot;;&lt;br /&gt;
$TLS_open = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_build_2 = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_title_build_create = &amp;quot;Создать новую Сборку&amp;quot;;&lt;br /&gt;
$TLS_title_build_update = &amp;quot;Править Сборку&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_build_name = &amp;quot;Пожалуйста, введите имя для этой Сборки!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_introduction = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_limitations = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_methodology = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_references = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_comp_alt_name = &amp;quot;Обязательно введите имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_comp_intro = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_comp_lim = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_comp_method = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_comp_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_comp_ref = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_analyse = &amp;quot;Анализировать&amp;quot;;&lt;br /&gt;
$TLS_btn_check_all = &amp;quot;Проверить все&amp;quot;;&lt;br /&gt;
$TLS_btn_delete_spec = &amp;quot;Удалить спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_spec = &amp;quot;Править спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_export_reqs = &amp;quot;Экспортировать требования&amp;quot;;&lt;br /&gt;
$TLS_btn_req_create = &amp;quot;Создать новое требование&amp;quot;;&lt;br /&gt;
$TLS_btn_spec_list = &amp;quot;Список спецификаций&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck_all = &amp;quot;Убрать все отметки&amp;quot;;&lt;br /&gt;
$TLS_cant_delete_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_popup_sure_delete = &amp;quot;Вы уверены удалить эту спецификацию требования?&amp;quot;;&lt;br /&gt;
$TLS_req_select_create_tc = &amp;quot;Создать тесты&amp;quot;;&lt;br /&gt;
$TLS_req_select_delete = &amp;quot;Удалить требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_list = &amp;quot;Список требований&amp;quot;;&lt;br /&gt;
$TLS_req_total = &amp;quot;Всего треб.&amp;quot;;&lt;br /&gt;
$TLS_req_reorder = &amp;quot;Переупорядочить требования?&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_requirements = &amp;quot;Вы уверены удалить выбранные требования?&amp;quot;;&lt;br /&gt;
$TLS_title_change_req_order = &amp;quot;Переупорядочивание требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_copyrightnotice.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_gnu_gpl = &amp;quot;GNU GPL&amp;quot;;&lt;br /&gt;
$TLS_lic_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_lic_product = &amp;quot;TestLink project&amp;quot;;&lt;br /&gt;
$TLS_licensed_under = &amp;quot;TestLink лицензируется согласно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update_testsuite = &amp;quot;Обновить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_title_edit_level = &amp;quot;Править&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecAnalyse.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_none = &amp;quot;Пусто &amp;quot;;&lt;br /&gt;
$TLS_req = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_req_spec_change = &amp;quot;Изменить спецификацию требований на &amp;quot;;&lt;br /&gt;
$TLS_req_title_analyse = &amp;quot;Анализировать спецификацию требований &amp;quot;;&lt;br /&gt;
$TLS_req_title_covered = &amp;quot;Покрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_in_tl = &amp;quot;Требований, зарегистрированных в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_title_nottestable = &amp;quot;Нетестируемые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_uncovered = &amp;quot;Непокрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_not_in_tl = &amp;quot;Требований, отсутствующих в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_total_count = &amp;quot;Всего требований&amp;quot;;&lt;br /&gt;
$TLS_testcases = &amp;quot;Тесты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_action_create_srs = &amp;quot;Создать спецификацию требований&amp;quot;;&lt;br /&gt;
$TLS_testproject = &amp;quot;проект&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_reqView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_last_edit = &amp;quot;Последняя правка: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_comp.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_top_level_suites = &amp;quot;Результаты топовых групп тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_blocked = &amp;quot;Блокировано&amp;quot;;&lt;br /&gt;
$TLS_trep_comp = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_comp_perc = &amp;quot;Выполнена [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_failed = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_trep_not_run = &amp;quot;Не запускали&amp;quot;;&lt;br /&gt;
$TLS_trep_passed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_trep_total = &amp;quot;Всего&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_keyw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_kw = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_trep_kw = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_owner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_owner = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_owner = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_tester = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_tester = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_prio.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tit_end_date = &amp;quot;Дата окончания&amp;quot;;&lt;br /&gt;
$TLS_tit_milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_prio = &amp;quot;Результаты по приоритету&amp;quot;;&lt;br /&gt;
$TLS_trep_milestone_goal = &amp;quot;Цель вехи [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_prio = &amp;quot;Приоритет&amp;quot;;&lt;br /&gt;
$TLS_trep_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_ts.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_ts = &amp;quot;Результаты по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_imp = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_trep_risk = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_trep_ts = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecEdit.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_show_bug_table.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_build = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_caption_bugtable = &amp;quot;Связанные баги&amp;quot;;&lt;br /&gt;
$TLS_delete_bug=&amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
$TLS_del_bug_warning_msg = &amp;quot;Действительно удалить этот баг?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecList.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign_tc = &amp;quot;Указать тест&amp;quot;;&lt;br /&gt;
$TLS_no_docs = &amp;quot;Нет доступных документов.&amp;quot;;&lt;br /&gt;
$TLS_req_list_docs = &amp;quot;Спецификации требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_New_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_add_tc_name = &amp;quot;Обязательно укажите имя теста.&amp;quot;;&lt;br /&gt;
$TLS_expected_results = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_tc_title = &amp;quot;Заголовок тест-кейса&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/show_exec_notes.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_execution_notes = &amp;quot;Замечания по выполнению&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_role = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_role = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_caption_define_role = &amp;quot;Определить роль&amp;quot;;&lt;br /&gt;
$TLS_caption_possible_affected_users = &amp;quot;Возможно влияет на следующих пользователей&amp;quot;;&lt;br /&gt;
$TLS_enter_role_notes = &amp;quot;Введите описание роли&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_product_roles = &amp;quot;Укажите роли проекта&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testplan_roles = &amp;quot;Укажите роли для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_menu_define_roles = &amp;quot;Новая роль&amp;quot;;&lt;br /&gt;
$TLS_menu_mod_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_new_user = &amp;quot;Новый пользователь&amp;quot;;&lt;br /&gt;
$TLS_menu_edit_user = &amp;quot;Редактировать пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_view_users = &amp;quot;Список пользователей&amp;quot;;&lt;br /&gt;
$TLS_menu_view_roles = &amp;quot;Просмотр ролей&amp;quot;;&lt;br /&gt;
$TLS_th_cf_rights = &amp;quot;Права на пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_th_kw_rights = &amp;quot;Права на ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_th_mgttc_rights = &amp;quot;Права на управление тест-кейсами&amp;quot;;&lt;br /&gt;
$TLS_th_product_rights = &amp;quot;Права на проект&amp;quot;;&lt;br /&gt;
$TLS_th_req_rights = &amp;quot;Права на требование&amp;quot;;&lt;br /&gt;
$TLS_th_rights = &amp;quot;Разрешения&amp;quot;;&lt;br /&gt;
$TLS_th_rolename = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_th_tp_rights = &amp;quot;Права на план тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_user_rights = &amp;quot;Права пользователей&amp;quot;;&lt;br /&gt;
$TLS_title_user_mgmt = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_warning_modify_role = &amp;quot;Действительно исправить роль?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcSearchForm.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_find             = &amp;quot;Найти&amp;quot;;&lt;br /&gt;
$TLS_caption_search_form  = &amp;quot;Искать тесты&amp;quot;;&lt;br /&gt;
$TLS_not_applied          = &amp;quot;Не применимо&amp;quot;;&lt;br /&gt;
$TLS_th_tcid              = &amp;quot;ID теста&amp;quot;;&lt;br /&gt;
$TLS_th_tcversion         = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
$TLS_th_title             = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_title_search_tcs     = &amp;quot;Поиск&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/infoWindow.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_iw2del = &amp;quot;Да, удалите тест!&amp;quot;;&lt;br /&gt;
$TLS_question_del_tc = &amp;quot;Действительно удалить тест?&amp;quot;;&lt;br /&gt;
$TLS_th_executed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_th_linked_to_tplan = &amp;quot;Связан с планом тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_new_tc = &amp;quot;Создать тест&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_tc_title = &amp;quot;Пожалуйста, задайте заголовок для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_imp_tc_data = &amp;quot;Импорт данных для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsimport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_keyword_import_to = &amp;quot;Импортировать ключевые слова в &amp;quot;;&lt;br /&gt;
$TLS_title_keyword_import = &amp;quot;Импорт ключевых слов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_export = &amp;quot;Экспорт&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_to = &amp;quot;Импортировать требования в документ:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_tproject_assign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign = &amp;quot;Привязать&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_active_mgmt = &amp;quot;Обновить активное состояние&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_display_order = &amp;quot;Сохранить порядок показа&amp;quot;;&lt;br /&gt;
$TLS_btn_unassign = &amp;quot;Освободить от&amp;quot;;&lt;br /&gt;
$TLS_cfields_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_cfields_tproject_assign = &amp;quot;Привязать пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_display_order = &amp;quot;Порядок показа&amp;quot;;&lt;br /&gt;
$TLS_title_assigned_cfields = &amp;quot;Привязанные пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_title_available_cfields = &amp;quot;Доступные пользовательские поля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_No = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_Yes = &amp;quot;Да&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_order_by_login = &amp;quot;По порядку логинов&amp;quot;;&lt;br /&gt;
$TLS_order_by_role_descr = &amp;quot;По порядку описания ролей&amp;quot;;&lt;br /&gt;
$TLS_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_th_delete = &amp;quot;Удалить?&amp;quot;;&lt;br /&gt;
$TLS_th_email = &amp;quot;Email&amp;quot;;&lt;br /&gt;
$TLS_th_first_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_last_name = &amp;quot;Фамилия&amp;quot;;&lt;br /&gt;
$TLS_th_locale = &amp;quot;Локализация&amp;quot;;&lt;br /&gt;
$TLS_th_login = &amp;quot;Логин&amp;quot;;&lt;br /&gt;
$TLS_th_role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/login.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_login = &amp;quot;Войти&amp;quot;;&lt;br /&gt;
$TLS_login_name = &amp;quot;Логин:&amp;quot;;&lt;br /&gt;
$TLS_lost_password_q = &amp;quot;Забыли пароль?&amp;quot;;&lt;br /&gt;
$TLS_new_user_q = &amp;quot;Новый пользователь?&amp;quot;;&lt;br /&gt;
$TLS_password = &amp;quot;Пароль:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginFirst.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_user_data = &amp;quot;Добавить пользовательские данные&amp;quot;;&lt;br /&gt;
$TLS_e_mail = &amp;quot;E-mail (нужен, чтобы получить новый пароль):&amp;quot;;&lt;br /&gt;
$TLS_first_name = &amp;quot;Имя:&amp;quot;;&lt;br /&gt;
$TLS_last_name = &amp;quot;Фамилия:&amp;quot;;&lt;br /&gt;
$TLS_link_back_to_login = &amp;quot;Войти еще раз&amp;quot;;&lt;br /&gt;
$TLS_password_again = &amp;quot;Повторите пароль:&amp;quot;;&lt;br /&gt;
$TLS_password_mgmt_is_external = &amp;quot;Используется внешнее управление паролями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_mv = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_cat = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_inst_move = &amp;quot;Переместить этот тест в другую группу тестов (внутри того же плана тестирования).&amp;quot;;&lt;br /&gt;
$TLS_title_mv_cp_tc = &amp;quot;Переместить/Копировать тест&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginLost.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send = &amp;quot;Выслать пароль&amp;quot;;&lt;br /&gt;
$TLS_password_reset = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_records_found = &amp;quot;Ничего не найдено.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execSetResults.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_alt_notes = &amp;quot;заметки&amp;quot;;&lt;br /&gt;
$TLS_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_btn_history_off = &amp;quot;Показывать только последний прогон&amp;quot;;&lt;br /&gt;
$TLS_btn_history_on = &amp;quot;Показывать полную историю прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_all_tests_results = &amp;quot;Сохранить все результаты прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_tc_exec_results = &amp;quot;Сохранить результат прогона&amp;quot;;&lt;br /&gt;
$TLS_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_build_is_closed = &amp;quot;Сборка закрыта&amp;quot;;&lt;br /&gt;
$TLS_builds_notes = &amp;quot;Описание сборки&amp;quot;;&lt;br /&gt;
$TLS_bulk_tc_status_management = &amp;quot;Массовое управление состоянием тестов&amp;quot;;&lt;br /&gt;
$TLS_date_time_run = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_details = &amp;quot;Подробности&amp;quot;;&lt;br /&gt;
$TLS_exec_notes = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
$TLS_exec_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_execution_history = &amp;quot;История прогонов&amp;quot;;&lt;br /&gt;
$TLS_img_title_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_img_title_delete_execution= &amp;quot;Удалить прогон&amp;quot;;&lt;br /&gt;
$TLS_just_last_execution_for_this_build = &amp;quot;Последний прогон для этой сборки&amp;quot;;&lt;br /&gt;
$TLS_no_data_available = &amp;quot;Данные отсутствуют&amp;quot;;&lt;br /&gt;
$TLS_set_all_tc_to = &amp;quot;Установить всем состояние &amp;quot;;&lt;br /&gt;
$TLS_show_hide = &amp;quot;Показать / скрыть&amp;quot;;&lt;br /&gt;
$TLS_tc_not_tested_yet = &amp;quot;Еще не протестировано:&amp;quot;;&lt;br /&gt;
$TLS_test_cases_cannot_be_executed = &amp;quot;Тесты не могут быть выполнены&amp;quot;;&lt;br /&gt;
$TLS_test_exec_by = &amp;quot;Протестировано: &amp;quot;;&lt;br /&gt;
$TLS_test_exec_expected_r = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_test_exec_last_run_date = &amp;quot;Самые последние запуски:&amp;quot;;&lt;br /&gt;
$TLS_test_exec_notes = &amp;quot;Заметки / Описание&amp;quot;;&lt;br /&gt;
$TLS_test_exec_on_build = &amp;quot; в Сборке&amp;quot;;&lt;br /&gt;
$TLS_test_exec_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_test_exec_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_test_exec_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_test_plan_notes = &amp;quot;Заметки по плану тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_status_not_run = &amp;quot;Не запущен&amp;quot;;&lt;br /&gt;
$TLS_th_test_case_id = &amp;quot;ID &amp;quot;;&lt;br /&gt;
$TLS_th_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_on_build = &amp;quot;Результы тестов по Сборке&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_owner = &amp;quot; Ответственный:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/navBar.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_link_logout = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_product = &amp;quot;Проект&amp;quot;;&lt;br /&gt;
$TLS_product_role = &amp;quot;Роль проекта&amp;quot;;&lt;br /&gt;
$TLS_title_edit_personal_data = &amp;quot;Мой профиль&amp;quot;;&lt;br /&gt;
$TLS_title_execute = &amp;quot;Выполнить&amp;quot;;&lt;br /&gt;
$TLS_title_results = &amp;quot;Отчеты&amp;quot;;&lt;br /&gt;
$TLS_title_specification = &amp;quot;Спецификация&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_rw.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_add_tc = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_add_remove_selected_tc_hint = &amp;quot;Операция будет выполнена над ВСЕМИ группами тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_add_remove_selected_tc = &amp;quot;Добавить / Удалить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_add_selected_tc = &amp;quot;Добавить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_check = &amp;quot;Отметить&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck = &amp;quot;Снять отметки&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_tc = &amp;quot;Все тесты в этой группе тестов.&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_all_checkboxes=&amp;quot;отметить все/снять все отметки&amp;quot;;&lt;br /&gt;
$TLS_has_been_executed = &amp;quot;были выполнены&amp;quot;;&lt;br /&gt;
$TLS_inactive_testcase = &amp;quot;неактивны&amp;quot;;&lt;br /&gt;
$TLS_no_testcase_available = &amp;quot;Тестов нет&amp;quot;;&lt;br /&gt;
$TLS_note_keyword_filter = &amp;quot;Тесты фильтруются по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_remove_tc = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_th_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_title_add_remove_test_to_plan = &amp;quot;Добавить/Удалить тест(ы) в/из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_add_test_to_plan = &amp;quot;Добавить тесты в план тестирования&amp;quot;;&lt;br /&gt;
$TLS_warning_add_remove_selected_tc = &amp;quot;Вы уверены удалить выбранные тесты из этого плана тестирования?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTCNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_navigator = &amp;quot;Навигатор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planPriority.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_prio   = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_title_priority = &amp;quot;Определить приоритеты для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tr_th_importance = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_tr_th_prio_cba = &amp;quot;Приоритет (C/B/A)&amp;quot;;&lt;br /&gt;
$TLS_tr_th_risk = &amp;quot;Риск/Важность&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_testplan_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_opt_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_testplan_question_create_tp_from = &amp;quot;Создать из существующего плана тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_create = &amp;quot;Создать новый план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_edit = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_for_project = &amp;quot;для проекта: &amp;quot;;&lt;br /&gt;
$TLS_testplan_title_tp_management = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_notes = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
План тестирования должен содержать ясно определенные задачи, включая временные границы. &lt;br /&gt;
Он может содержать тест-активность для выпускаемой версии продукта (включая патчи) &lt;br /&gt;
или просто единственный запрос от пользователя.&amp;lt;br/&amp;gt;&lt;br /&gt;
В описании можно ссылаться на план и другую документацию по проекту.&lt;br /&gt;
Разумно перечислить тестируемые возможности, риски и т.п.&amp;lt;br/&amp;gt;&lt;br /&gt;
Можно создать новый план тестирования из существующего (&amp;quot;клонировать&amp;quot;). &lt;br /&gt;
Будут скопированы следующие элементы: сборки, тесты, приоритеты, &lt;br /&gt;
Вехи и роли пользователей.&amp;lt;br/&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать/заморозить: т.е. запретить любое изменение &lt;br /&gt;
атрибутов или вложенных элементов плана тестирования. &lt;br /&gt;
Такие планы тестирования будут видны только на странице отчетов и на этой странице.&lt;br /&gt;
END;&lt;br /&gt;
 &lt;br /&gt;
$TLS_warning_empty_tp_name = &amp;quot;Пожалуйста, введите имя плана тестирования.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_btn_edit = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_testplan_btn_new = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_list = &amp;quot;Список&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planMilestones.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_milestone = &amp;quot;Удалить веху?&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_milestone = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_new_milestone = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_info_milestones_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'&amp;quot;;&lt;br /&gt;
$TLS_no_milestones = &amp;quot;Для этого плана тестирования вехи не определены.&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_milestones = &amp;quot;Вы уверены удалить веху %NAME% ?&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_milestone_name=&amp;quot;Укажите имя вехи!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$TLS_th_date_format = &amp;quot;Целевая Дата&amp;quot;;&lt;br /&gt;
$TLS_th_perc_a_prio = &amp;quot;% A-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_b_prio = &amp;quot;% B-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_c_prio = &amp;quot;% C-приоритет&amp;quot;;&lt;br /&gt;
$TLS_title_existing_milestones = &amp;quot;Существующие вехи&amp;quot;;&lt;br /&gt;
$TLS_title_milestones = &amp;quot;Вехи для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_new_milestone = &amp;quot;Новая Веха&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/projectedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_activate         = &amp;quot;Активировать&amp;quot;;&lt;br /&gt;
$TLS_btn_del              = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_del         = &amp;quot;Править / Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_inactivate       = &amp;quot;Деактивировать&amp;quot;;&lt;br /&gt;
$TLS_caption_edit_product = &amp;quot;Править проект&amp;quot;;&lt;br /&gt;
$TLS_caption_new_product  = &amp;quot;Создать проект&amp;quot;;&lt;br /&gt;
$TLS_color                = &amp;quot;Цвет&amp;quot;;&lt;br /&gt;
$TLS_enable_requirements  = &amp;quot;Включить функциональность Требований&amp;quot;;&lt;br /&gt;
$TLS_info_failed_loc_prod = &amp;quot;Не удалось локализовать проект.&amp;quot;;&lt;br /&gt;
$TLS_notes                = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
// Warning!!! - if JS string you must use \\n to get \n                                       &lt;br /&gt;
$TLS_popup_product_delete = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Внимание! Вы собираетесь необратимо удалить все данные связанные проектом:&lt;br /&gt;
результаты тестов, планы тестирования, тесты и т.п. \\n&lt;br /&gt;
Вместо удаления вы можете деактивировать проект. \\n&lt;br /&gt;
Если вы всё-таки настроены удалить проект, рекомендуем вам сначала &lt;br /&gt;
сделать бэкап базы данных. \\n&lt;br /&gt;
Итак, вы по прежнему уверены удалить проект? &lt;br /&gt;
END;&lt;br /&gt;
$TLS_warning_empty_tproject_name = &amp;quot;Обязательно задайте имя проекта!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_select_a_req        = &amp;quot;Пожалуйста, выберите требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement66    = &amp;quot;Требования нет&amp;quot;;&lt;br /&gt;
$TLS_req_title_assign           = &amp;quot;Привяжите требования к тесту&amp;quot;;&lt;br /&gt;
$TLS_req_title_assigned         = &amp;quot;Привязанные требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_unassigned       = &amp;quot;Доступные требования&amp;quot;;&lt;br /&gt;
$TLS_warning_req_tc_assignment_impossible = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Вы &amp;lt;b&amp;gt;не можете&amp;lt;/b&amp;gt; делать привязку по одной из следующих причин:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Не определено ни одной спецификации требования;&lt;br /&gt;
  &amp;lt;li&amp;gt;Спецификации требований пусты.&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_edit_tc = &amp;quot;Править тест&amp;quot;;&lt;br /&gt;
$TLS_warning_editing_executed_tc = &amp;quot;Внимание: Этот версия теста уже выполнялась&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planOwner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assign_ownership     = &amp;quot;Назначить ответственного&amp;quot;;&lt;br /&gt;
$TLS_def_prio_rules       = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_opt_label_none       = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_th_imp               = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_th_owner             = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_risk              = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_th_test_suite        = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_plan_ownership = &amp;quot;Владелец плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_activate_this_tcversion  = &amp;quot;Активировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_Requirements             = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_btn_del_this_version     = &amp;quot;Удалить эту версию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit                 = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_mv_cp                = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_version          = &amp;quot;Создать новую версию&amp;quot;;&lt;br /&gt;
$TLS_can_not_edit_tc = &amp;quot;Вы не можете редактировать эту версию, т.к. она уже выполнялась&amp;quot;;&lt;br /&gt;
$TLS_deactivate_this_tcversion = &amp;quot;Деактивировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_tcversion_is_inactive_msg = &amp;quot;Эта версия &amp;lt;b&amp;gt;неактивна&amp;lt;/b&amp;gt;, и не будет доступна для включения в план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planRemoveTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_remove_selected_tc = &amp;quot;Удалить выбранные тесты tcs&amp;quot;;&lt;br /&gt;
$TLS_remove_ok = &amp;quot;Удаление прошло успешно ok&amp;quot;;&lt;br /&gt;
$TLS_title_remove_test_from_plan = &amp;quot;Удалить тест из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTesters.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_save = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keyword_assignment_empty_tsuite = &amp;quot;В этой группе тестов нет тестов =&amp;gt; ключевое слово привязать нельзя&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_kw_to_tc = &amp;quot;Привязать к  тестам&amp;quot;;&lt;br /&gt;
$TLS_menu_manage_keywords = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_title_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTestersNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_label_list_of = &amp;quot;Список &amp;quot;;&lt;br /&gt;
$TLS_opt_test_plans = &amp;quot;планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_opt_users = &amp;quot;пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planUpdateTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_ck_tc        = &amp;quot;Изменить выбранные тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_info_all_tc_uptodate = &amp;quot;Все тесты актуальны.&amp;quot;;&lt;br /&gt;
$TLS_th_category          = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_component         = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_id_tc = &amp;quot;[ID] теста&amp;quot;;&lt;br /&gt;
$TLS_th_reason = &amp;quot;Причина правки&amp;quot;;&lt;br /&gt;
$TLS_th_spec_version = &amp;quot;Специальная версия&amp;quot;;&lt;br /&gt;
$TLS_th_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_th_suite_version = &amp;quot;Версия группы тестов&amp;quot;;&lt;br /&gt;
$TLS_th_update = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_title_upd_mod_tc = &amp;quot;Изменить исправленные тесты в &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_keyword   = &amp;quot;Удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_btn_create_keyword   = &amp;quot;Создать ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_keyword     = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_import_keywords  = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_th_keyword           = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_keyword = &amp;quot;Вы уверены удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least1 = &amp;quot;Пожалуйста, введите хотя бы  &amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less1 = &amp;quot;Пожалуйста, используйте не больше чем&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_req_export_to = &amp;quot;Экспорт требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsAllBuilds.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_status_blocked  = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_test_status_failed   = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_test_status_passed   = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_th_build             = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_th_tc_total          = &amp;quot;Всего тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_date                   = &amp;quot;Дата:&amp;quot;;&lt;br /&gt;
$TLS_printed_by             = &amp;quot;Напечатано:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_bugs   = &amp;quot;Баги по тесту&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_timestamp = &amp;quot;Временная метка теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_title = &amp;quot;Заголовок теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_suite_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBuild.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_met_of_build = &amp;quot;Метрики сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsByStatus.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_test_results = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Показываются результаты только последнего теста.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
В частности, тесты скрыты, если результаты тестов для следующей сборки &lt;br /&gt;
имеют статус отличный от &amp;quot;в процессе&amp;quot;. &lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_th_bugs = &amp;quot;Баги&amp;quot;;&lt;br /&gt;
$TLS_th_date = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_th_run_by = &amp;quot;Запустил:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsGeneral.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_gen_test_rep = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_query_form.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_excel_format             = &amp;quot;MS Excel&amp;quot;;&lt;br /&gt;
$TLS_html_format              = &amp;quot;HTML&amp;quot;;&lt;br /&gt;
$TLS_last_status_any          = &amp;quot;Любой&amp;quot;;&lt;br /&gt;
$TLS_last_status_blocked      = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_last_status_failed       = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_last_status_not_run      = &amp;quot;Не стартовал&amp;quot;;&lt;br /&gt;
$TLS_last_status_passed       = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_select_builds_header     = &amp;quot;Выберите сборку(и)&amp;quot;;&lt;br /&gt;
$TLS_select_components_header = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_select_keyword_header    = &amp;quot;Выберите ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_select_last_result_header = &amp;quot;Выберите последний результат&amp;quot;;&lt;br /&gt;
$TLS_select_owner_header      = &amp;quot;Выберите владельца&amp;quot;;&lt;br /&gt;
$TLS_select_report_format_header = &amp;quot;Выберите формат отчета&amp;quot;;&lt;br /&gt;
$TLS_submit_query             = &amp;quot;Выполнить запрос&amp;quot;;&lt;br /&gt;
$TLS_test_plan_header         = &amp;quot;План тестирования: &amp;quot;;&lt;br /&gt;
$TLS_query_metrics_report     = &amp;quot;Запросить отчет по метрикам&amp;quot;;&lt;br /&gt;
$TLS_enter_start_time         = &amp;quot;Введите начальное время&amp;quot;;&lt;br /&gt;
$TLS_enter_end_time           = &amp;quot;Введите конечное время&amp;quot;;&lt;br /&gt;
$TLS_year                     = &amp;quot;год&amp;quot;;&lt;br /&gt;
$TLS_month                    = &amp;quot;месяц&amp;quot;;&lt;br /&gt;
$TLS_day                      = &amp;quot;день&amp;quot;;&lt;br /&gt;
$TLS_hour                     = &amp;quot;час&amp;quot;;&lt;br /&gt;
$TLS_search_in_notes          = &amp;quot;поиск строки в заметках&amp;quot;;&lt;br /&gt;
$TLS_executor                 = &amp;quot;исполнитель&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_report.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_show_collapse                  = &amp;quot;Показать/Свернуть&amp;quot;;&lt;br /&gt;
$TLS_caption_user_selected_query_parameters = &amp;quot;Параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_not_yet_executed                       = &amp;quot;Еще не выполнялся&amp;quot;;&lt;br /&gt;
$TLS_show_hide_all                          = &amp;quot;Показать/Скрыть все&amp;quot;;&lt;br /&gt;
$TLS_th_builds                              = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_th_execution_ts                        = &amp;quot;Время&amp;quot;;&lt;br /&gt;
$TLS_th_last_result                         = &amp;quot;Последний результат&amp;quot;;&lt;br /&gt;
$TLS_th_report_format                       = &amp;quot;Тип отчета&amp;quot;;&lt;br /&gt;
$TLS_th_test_plan                           = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_test_suites                         = &amp;quot;Группа(ы) тестов&amp;quot;;&lt;br /&gt;
$TLS_th_tester_id                           = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_total_block                         = &amp;quot;# блокированных &amp;quot;;&lt;br /&gt;
$TLS_th_total_cases                         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_th_total_fail                          = &amp;quot;# сбоев&amp;quot;;&lt;br /&gt;
$TLS_th_total_not_run                       = &amp;quot;# не стартовавших&amp;quot;;&lt;br /&gt;
$TLS_th_total_pass                          = &amp;quot;# выполненных&amp;quot;;&lt;br /&gt;
$TLS_th_start_time      = &amp;quot;Время начала&amp;quot;;&lt;br /&gt;
$TLS_th_end_time        = &amp;quot;Время окончания&amp;quot;;&lt;br /&gt;
$TLS_th_executor        = &amp;quot;Исполнитель&amp;quot;;&lt;br /&gt;
$TLS_th_search_notes_string = &amp;quot;в заметках искать строку&amp;quot;;&lt;br /&gt;
$TLS_true               = &amp;quot;да&amp;quot;;&lt;br /&gt;
$TLS_false              = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_display_suite_summaries = &amp;quot;Показать итоги по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_display_query_params    = &amp;quot;Показать параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_display_totals          = &amp;quot;Показать суммарную информацию&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsReqs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_title_blocked  = &amp;quot;Заблокировано требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_failed   = &amp;quot;Нарушено требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_notrun   = &amp;quot;Непроверенных требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_passed   = &amp;quot;Выполнено требований&amp;quot;;&lt;br /&gt;
$TLS_title_result_req_testplan = &amp;quot;Результаты тестов основанных на спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan    = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsSend.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send_report        = &amp;quot;Послать отчет&amp;quot;;&lt;br /&gt;
$TLS_check_send_to_me       = &amp;quot;Послать отчет самому себе&amp;quot;;&lt;br /&gt;
$TLS_mail_body              = &amp;quot;Тело письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_report            = &amp;quot;Отчет:&amp;quot;;&lt;br /&gt;
$TLS_mail_subject           = &amp;quot;Тема письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_to                = &amp;quot;Кому:&amp;quot;;&lt;br /&gt;
$TLS_status_for_build       = &amp;quot;Состояние сборки&amp;quot;;&lt;br /&gt;
$TLS_tp_status              = &amp;quot;Общее состояние плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tp_status_for_build    = &amp;quot;Состояние плана тестирования для сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_generated_by_TestLink_on=&amp;quot;Сформировано системой TestLink,  &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_m2.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcPrintNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_print_opt  = &amp;quot;Настройки печати&amp;quot;;&lt;br /&gt;
$TLS_tr_td_show_as      = &amp;quot;Показать как&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcReorder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_tc_to_reorder       = &amp;quot;Нет тестов для переупорядочивания.&amp;quot;;&lt;br /&gt;
$TLS_title_change_tc_order  = &amp;quot;Изменить порядок тестов в этой группе тестов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcTree.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_refresh       = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_button_update_tree   = &amp;quot;Обновить дерево&amp;quot;;&lt;br /&gt;
$TLS_do_auto_update       = &amp;quot;Обновлять дерево после каждой операции&amp;quot;;&lt;br /&gt;
$TLS_no_tc_spec_av        = &amp;quot;Нет тест-спецификаций.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tc_exec_assignment.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_do                     = &amp;quot;Пуск&amp;quot;;&lt;br /&gt;
$TLS_btn_update_selected_tc     = &amp;quot;Изменить выбранные тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tc_exec_assignment   = &amp;quot;Назначить прогоны тестов для плана тестирования &amp;quot;;&lt;br /&gt;
$TLS_user                       = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_user_bulk_assignment       = &amp;quot;Массовое назначение ответственных пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/testSetNavigator.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/userInfo.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_change_passwd        = &amp;quot;Сменить пароль&amp;quot;;&lt;br /&gt;
$TLS_btn_upd_user_data        = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd            = &amp;quot;Новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd_again      = &amp;quot;Повторите новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_old_passwd            = &amp;quot;Старый пароль&amp;quot;;&lt;br /&gt;
$TLS_title_account_settings   = &amp;quot;Настройки профиля&amp;quot;;&lt;br /&gt;
$TLS_title_change_your_passwd = &amp;quot;Сменить ваш пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_different_pwd    = &amp;quot;Пожалуйста, повторите еще раз ваш новый пароль. Введенные пароли не совпадают.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd        = &amp;quot;Пароль должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_your_password_is_external = &amp;quot;Ваш пароль ведётся во внешней системе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersassign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestProject          = &amp;quot;проект&amp;quot;;&lt;br /&gt;
$TLS_User                 = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_btn_change           = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testplan_user_roles = &amp;quot;Назначить роли плана тестирования пользователям&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testproject_user_roles = &amp;quot;Назначить роли проекта пользователям&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testproject_roles = &amp;quot;Назначить роли проекта&amp;quot;;&lt;br /&gt;
$TLS_th_roles = &amp;quot;Роли&amp;quot;;&lt;br /&gt;
$TLS_title_assign_roles = &amp;quot;Назначить роли&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_reset_password = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
$TLS_caption_user_details = &amp;quot;Свойства пользователя&amp;quot;;&lt;br /&gt;
$TLS_th_password = &amp;quot;Пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_first_name = &amp;quot;Пожалуста, введите имя&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_last_name = &amp;quot;Пожалуйста, введите фамилию&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_login = &amp;quot;Пожалуйста, введите логин&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentupload.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachment_upload_ok=&amp;quot;Файл загружен.&amp;quot;;&lt;br /&gt;
$TLS_enter_attachment_title = &amp;quot;Введите заголовок для этого вложения.&amp;quot;;&lt;br /&gt;
$TLS_import_was_ok = &amp;quot;Импорт прошел успешно.&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file = &amp;quot;Максимальный размер файла:&amp;quot;;&lt;br /&gt;
$TLS_title_upload_attachment = &amp;quot;Загрузить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_N_A                          = &amp;quot;N/A&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_role              = &amp;quot;Удалить роль&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_role                = &amp;quot;Править роль&amp;quot;;&lt;br /&gt;
$TLS_btn_confirm_delete           = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_no_roles                     = &amp;quot;Нет ролей&amp;quot;;&lt;br /&gt;
$TLS_title_roles                  = &amp;quot;Доступные роли&amp;quot;;&lt;br /&gt;
$TLS_warning_users_will_be_reset  = &amp;quot;'Задетым пользователям' будет назначена гостевая роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_export_with_keywords = &amp;quot;Экспортировать с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_active_build     = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_build       = &amp;quot;Редактировать эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_open_build       = &amp;quot;Открыть сборку&amp;quot;;&lt;br /&gt;
$TLS_btn_build_create     = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_no_builds            = &amp;quot;В этот плане тестирования сборок не определено.&amp;quot;;&lt;br /&gt;
$TLS_th_description       = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_open              = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_title_build_list     = &amp;quot;Список существующих сборок&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_build = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Вы действительно хотите уничтожить эту сборку? &amp;lt;p&amp;gt;&lt;br /&gt;
Все связанные данные (в частности, результаты тестов) будут также удалены!&amp;quot;;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_alt_delete_tp   = &amp;quot;Удалить этот план тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_alt_edit_tp     = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_msg_delete_confirm = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Вы уверены, что хотите удалить план тестирования? &amp;lt;p&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать не удаляя.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_testplan_th_delete     = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_list    = &amp;quot;Список планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_empty_list = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 Ни одного плана тестирования не определено! &amp;lt;p&amp;gt;&lt;br /&gt;
 Чтобы воспользоваться функциональностью прогонов тестов, нужно &lt;br /&gt;
 создать хотя бы один.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_alt_active_testplan = &amp;quot;Активный план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==gui/templates/mainPage_left.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_href_assign_user_roles = &amp;quot;Назначить пользовательские роли&amp;quot;;&lt;br /&gt;
$TLS_href_browse_tc = &amp;quot;Просмотр тестов&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_tproject_assign = &amp;quot;Привязка пользовательских полей&amp;quot;;&lt;br /&gt;
$TLS_href_create_product = &amp;quot;Создать новый проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_product = &amp;quot;Править/Удалить проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_tc = &amp;quot;Редактировать тесты&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_assign = &amp;quot;Привязать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_manage = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_view = &amp;quot;Просмотр ключевых слов&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc = &amp;quot;Печать тестов&amp;quot;;&lt;br /&gt;
$TLS_href_req_assign = &amp;quot;Привязать требования&amp;quot;;&lt;br /&gt;
$TLS_href_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_href_roles_management = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_href_search_tc = &amp;quot;Искать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_user_management = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_title_requirements = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_title_test_spec = &amp;quot;Спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_product_mgmt = &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage_right.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_filter_tp_by_product   = &amp;quot;Фильтровать план тестирования по проектам&amp;quot;;&lt;br /&gt;
$TLS_href_add_test_case     = &amp;quot;Добавить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_build_new         = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_href_execute_test      = &amp;quot;Выполнить тесты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_assign_priority = &amp;quot;Установить приоритеты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_define_priority = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_href_plan_management   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_plan_mstones      = &amp;quot;Управление вехами&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc_suite    = &amp;quot;Печать плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_remove_test_case  = &amp;quot;Удалить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_rep_and_metrics   = &amp;quot;Отчеты и метрики&amp;quot;;&lt;br /&gt;
$TLS_href_tc_exec_assignment = &amp;quot;Поручить прогон тестов&amp;quot;;&lt;br /&gt;
$TLS_href_upd_mod_tc        = &amp;quot;Сохранить измененные тесты&amp;quot;;&lt;br /&gt;
$TLS_msg_no_rights_for_tp   = &amp;quot;- недоступен (У вас нет доступа ни для одного плана тестирования)&amp;quot;;&lt;br /&gt;
$TLS_testplan_role          = &amp;quot;Роль плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_suite  = &amp;quot;Содержание плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_execution   = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan_mgmt   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_newest_tcversions = &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_add.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bug_added                = &amp;quot;Баг добавлен&amp;quot;;&lt;br /&gt;
$TLS_error_bug_does_not_exist_on_bts=&amp;quot;Бага с таким ID не зарегистрировано в BTS!&amp;quot;;&lt;br /&gt;
$TLS_error_wrong_BugID_format = &amp;quot;Неверный формат BugID!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_delete.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugdeleting_was_ok = &amp;quot;Баг успешно удален.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/doAuthorize.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_ldap_auth_failed = &amp;quot;LDAP-аутентификация не удалась&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_bind_failed = &amp;quot;Не удалось выполнить LDAP-binding&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_server_connect_failed = &amp;quot;Не удалось соединится с LDAP-сервером&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_update_failed = &amp;quot;Обновление LDAP не удалось&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_user_not_found = &amp;quot;LDAP-пользователь не найден&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/product.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_product_delete_fails = &amp;quot;При удалении этого проекта произошла ошибка&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/results.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_trep_failing = &amp;quot;Провалены&amp;quot;;&lt;br /&gt;
$TLS_trep_passing = &amp;quot;Прошли&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_build = &amp;quot;Состояние для сборки&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_ts = &amp;quot;Состояние для группы тестов&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;Не назначены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/resultsMoreBuilds.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugs                 = &amp;quot;Связанные Баги&amp;quot;;&lt;br /&gt;
$TLS_builds_selected      = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_case_not_run_warning = &amp;quot;Тест не запущен&amp;quot;;&lt;br /&gt;
$TLS_category_header      = &amp;quot;Группа тестов =&amp;quot;;&lt;br /&gt;
$TLS_daterun              = &amp;quot;Дата запуска&amp;quot;;&lt;br /&gt;
$TLS_last_status          = &amp;quot;Последнее состояние&amp;quot;;&lt;br /&gt;
$TLS_number_blocked       = &amp;quot;# блокированных&amp;quot;;&lt;br /&gt;
$TLS_number_cases         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_number_executions    = &amp;quot;# тест-пусков&amp;quot;;&lt;br /&gt;
$TLS_number_failed        = &amp;quot;# тест-сбоев&amp;quot;;&lt;br /&gt;
$TLS_number_not_run       = &amp;quot;# не запущено&amp;quot;;&lt;br /&gt;
$TLS_number_passed        = &amp;quot;# пройденных&amp;quot;;&lt;br /&gt;
$TLS_owner                = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_owner_header         = &amp;quot;Tester =&amp;quot;;&lt;br /&gt;
$TLS_runby                = &amp;quot;Запущен тестировщиком &amp;quot;;&lt;br /&gt;
$TLS_test_plan_name       = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/roles.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_desc_cfield_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_desc_cfield_view       = &amp;quot;Просмотр пользовательских полей (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_key    = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_product= &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_req    = &amp;quot;Управление требованиями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_tc     = &amp;quot;Создание/правка тестов&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_users  = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_key      = &amp;quot;Просмотр ключевых слов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_req      = &amp;quot;Просмотр требований (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_tc       = &amp;quot;Просмотр тестов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_role_management   = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_create_build = &amp;quot;Создание/редактирование сборки&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_execute  = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_metrics  = &amp;quot;Метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_planning = &amp;quot;Составление плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_user_role_assignment = &amp;quot;Назначение ролей&amp;quot;;&lt;br /&gt;
$TLS_error_duplicate_rolename = &amp;quot;Роль с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rights     = &amp;quot;Вы не можете создать роль без каких-либо прав!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rolename   = &amp;quot;Вам нужно ввести имя для этой роли.&amp;quot;;&lt;br /&gt;
$TLS_mgt_testplan_create      = &amp;quot;Создать/править план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testproject.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_creating_req_spec    = &amp;quot;Ошибка при создании спецификации требования&amp;quot;;&lt;br /&gt;
$TLS_info_product_name_empty    = &amp;quot;Нельзя давать пустое имя.&amp;quot;;&lt;br /&gt;
$TLS_keyword_already_exists     = &amp;quot;Такое ключевое слово уже есть&amp;quot;;&lt;br /&gt;
$TLS_string_contains_bad_chars  = &amp;quot;Введенная строка содержит недопустимые символы.&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_req_title= &amp;quot;Требование с таким заголовком уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/requirements.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_conflict               = &amp;quot;Конфликт&amp;quot;;&lt;br /&gt;
$TLS_error_deleting_req     = &amp;quot;Ошибка при удалении требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_inserting_req    = &amp;quot;Ошибка при вставке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_req     = &amp;quot;Ошибка при правке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_reqspec = &amp;quot;Ошибка при правке спецификаций требований.&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_xml = &amp;quot;Файл не распознан как корректный XML, и не может быть использован.&amp;quot;;&lt;br /&gt;
$TLS_ok = &amp;quot;OK&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description1 = &amp;quot; - тип CSV требует три поля на каждую запись: 'req_doc_id','title','description'&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description2 = &amp;quot; - CSV, экспортированный из DOORS требует запись-заголовок.&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_overwritten  = &amp;quot;перезаписано!&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_skipped      = &amp;quot;пропущено&amp;quot;;&lt;br /&gt;
$TLS_req_state_not_testable         = &amp;quot;не тестируемо&amp;quot;;&lt;br /&gt;
$TLS_req_state_valid                = &amp;quot;актуально&amp;quot;;&lt;br /&gt;
$TLS_the_format_req_xml_import      = &amp;quot;Неверный XML-формат для импорта требований&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_reqdoc_id    = &amp;quot;Не уникальный (дублирующий) id документа&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testsuite.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component_name_already_exists = &amp;quot;Группа тестов с таким именем уже зарегистрирована&amp;quot;;&lt;br /&gt;
$TLS_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/exec.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_results_submitted = &amp;quot;Результаты тестов отправлены.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/print.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_printed_by_TestLink_on = &amp;quot;Распечатано TestLink'ом &amp;quot;;&lt;br /&gt;
$TLS_title_toc = &amp;quot;Содержание&amp;quot;;&lt;br /&gt;
$TLS_passfail = &amp;quot;Пройден / Провален&amp;quot;;&lt;br /&gt;
$TLS_testnotes = &amp;quot;Заметки к тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testcase.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testcase_name_already_exists = &amp;quot;Тест с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_the_format_tc_xml_import = &amp;quot;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/info.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_email_sent_message = &amp;quot;Ваше письмо отослано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/users.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Unknown = &amp;quot;Неизвестно&amp;quot;;&lt;br /&gt;
$TLS_duplicate_login = &amp;quot;Пользователь с таким логином уже есть!&amp;quot;;&lt;br /&gt;
$TLS_login_must_not_be_empty = &amp;quot;Логин не должен быть пустым!&amp;quot;;&lt;br /&gt;
$TLS_wrong_old_password = &amp;quot;Старый пароль неверен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/email_api.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_stmp_host_unconfigured = &amp;quot;Некорректно указан SMTP host!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/common.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/configCheck.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachments_dir = &amp;quot;каталог для вложений:&amp;quot;;&lt;br /&gt;
$TLS_bts_connection_problems = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Не удалось соединиться с вашей Bug Tracking System.&amp;lt;p&amp;gt;&lt;br /&gt;
Пожалуйста, проверьте настройки.&amp;lt;p&amp;gt;&lt;br /&gt;
Будьте внимательны, эта проблема &lt;br /&gt;
снижает производительность TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_but_directory_is_not_writable = &amp;quot;Каталог закрыт для записи!&amp;quot;;&lt;br /&gt;
$TLS_directory_is_writable = &amp;quot;Каталог открыт для записи.&amp;quot;;&lt;br /&gt;
$TLS_does_not_exist = &amp;quot;не существует&amp;quot;;&lt;br /&gt;
$TLS_exists = &amp;quot;существует&amp;quot;;&lt;br /&gt;
$TLS_ldap_extension_not_loaded=&amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Метод аутентификации указан как LDAP &amp;lt;/br&amp;gt;&lt;br /&gt;
однако PHP/LDAP extension не загружено =&amp;gt; &lt;br /&gt;
Вам не удастся войти в систему. &lt;br /&gt;
Пожалуйста, свяжитесь с администратором TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_sec_note_admin_default_pwd = &amp;quot;Вам необходимо сменить пароль по умолчанию у пользователя 'admin'!&amp;quot;;&lt;br /&gt;
$TLS_sec_note_remove_install_dir = &amp;quot;Инсталляционный каталог должен быть удален!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/frmWorkArea.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_create_a_build = &amp;quot;Создать новую сборку&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part1 = &amp;quot;Ни одной сборки для этого тест плана не создано.&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part2 = &amp;quot;Создайте их или попросите об этом свое руководство.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/myTPInfo.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testplans_available = &amp;quot;К сожалению, ни одного плана тестирования не доступно&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/tlsmarty.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywords.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_empty_keyword_no = &amp;quot;Ключевое слово должно быть непустым!&amp;quot;;&lt;br /&gt;
$TLS_keywords_char_not_allowed = &amp;quot;Запятые и кавычки недопустимы в ключевых словах!&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails2 = &amp;quot; дал сбой &amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_csv_import = &amp;quot;keyword;notes&amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_xml_import = &amp;quot;&amp;amp;lt;keywords&amp;gt;&amp;amp;lt;keyword name=\&amp;quot;name\&amp;quot;&amp;gt;Notes&amp;amp;lt;/keyword&amp;gt;&amp;amp;lt;/keywords&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_kw_delete_fails = &amp;quot;Не удалось удаление ключевого слова!&amp;quot;;&lt;br /&gt;
$TLS_kw_update_fails = &amp;quot;Не удалась правка ключевого слова!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assigned_kword  = &amp;quot;Связанные ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_available_kword = &amp;quot;Доступные ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/buildNew.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cannot_add_build     = &amp;quot;Невозможно добавить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_delete_build  = &amp;quot;Невозможно удалить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_update_build  = &amp;quot;Ошибка при правке сборки!&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_build = &amp;quot;Сборка с таким идентификатором уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/plan.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_warning_empty_milestone_name = &amp;quot;Обязательно введите имя для вехи!&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_valid_date = &amp;quot;Введенная дата некорректна!&amp;quot;;&lt;br /&gt;
$TLS_warning_invalid_percentage_value = &amp;quot;Значения-проценты должны быть от 0 to 100 (%)&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'!&amp;quot;;&lt;br /&gt;
$TLS_warning_percentage_value_higher_than_100 = &amp;quot;Сумма всех значений-процентов не должна быть больше 100!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planMilestones.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_milestone_delete_fails         = &amp;quot;Не удалось удалить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_add_failed   = &amp;quot;Не удалось добавить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_update_failed = &amp;quot;Не удалось править веху!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planOwner.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_imp_high     = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_low      = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_medium   = &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_assign_tp    = &amp;quot;Поручить планы тестирования пользователю: &amp;quot;;&lt;br /&gt;
$TLS_title_assign_users = &amp;quot;Назначить пользователей на план тестирования: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_nav_test_plan = &amp;quot;Навигатор - Планы тестирования&amp;quot;;&lt;br /&gt;
$TLS_nav_users = &amp;quot;Навигатор - Пользователи&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planUpdateTC.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_category_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_component_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_deleted = &amp;quot;удалена&amp;quot;;&lt;br /&gt;
$TLS_different_versions = &amp;quot;Различные версии&amp;quot;;&lt;br /&gt;
$TLS_plan_update_no_tc_updated = &amp;quot;Ни один тест не изменен&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted2 = &amp;quot;был удален.&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated2 = &amp;quot;был изменен.&amp;quot;;&lt;br /&gt;
$TLS_tcorder_has_changed = &amp;quot;Порядок тестов был изменен&amp;quot;;&lt;br /&gt;
$TLS_updated = &amp;quot;изменен&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_plan_navigator = &amp;quot;Навигация по планам тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetRemove.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tcase_removed_from_tplan=&amp;quot;тест удален из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_multiple_tcase_removed_from_tplan=&amp;quot;Тесты удалены из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_created_ok = &amp;quot;План тестирования был создан&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed1 = &amp;quot;Правка плана тестирования '&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed2 = &amp;quot;' не удалась&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_tplan_name = &amp;quot;План тестирования с таким именем уже есть. Выберите другое имя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/print/selectData.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_show_doc_header = &amp;quot;Показать заголовок документа&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_body = &amp;quot;Показать тело теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_summary = &amp;quot;Показать резюме теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_toc = &amp;quot;Показать Содержание&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_author = &amp;quot;Показать автора теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_passfail = &amp;quot;Показать статус &amp;amp;laquo;пройден/провален&amp;amp;raquo; и заметки&amp;quot;;&lt;br /&gt;
$TLS_title_tc_print_navigator = &amp;quot;Навигация - Печать спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tp_print_navigator = &amp;quot;Навигация - Печать плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/project/projectedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_product_name_duplicate = &amp;quot;Уже есть проект с именем %s. &amp;lt;br&amp;gt;Пожалуйста, выберите другое имя&amp;quot;;&lt;br /&gt;
$TLS_info_no_more_prods = &amp;quot;проектов больше нет.&amp;quot;;&lt;br /&gt;
$TLS_info_product_activated = &amp;quot;проект активирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_inactivated = &amp;quot;проект деактивирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_not_deleted_check_log = &amp;quot;Не удалось удалить проект. Проверьте лог TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_info_product_was_deleted = &amp;quot;проект успешно удален.&amp;quot;;&lt;br /&gt;
$TLS_refer_to_log = &amp;quot; Пожалуйста, изучите лог TestLink'а для дополнительной информации.&amp;quot;;&lt;br /&gt;
$TLS_test_project_activated = &amp;quot;проект %s успешно активирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_created = &amp;quot;проект %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_test_project_deleted = &amp;quot;проект %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_test_project_inactivated = &amp;quot;проект %s успешно деактивирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_updated = &amp;quot;проект %s успешно отредактирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_update_failed = &amp;quot;Правка проекта %s не удалась!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/charts.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_maani_copyright = &amp;quot;flash technology предоставлена http://www.maani.us&amp;quot;;&lt;br /&gt;
$TLS_graphical_reports = &amp;quot;Графические отчеты&amp;quot;;&lt;br /&gt;
$TLS_overall_metrics = &amp;quot;Общие метрики&amp;quot;;&lt;br /&gt;
$TLS_results_by_keyword = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_results_by_tester = &amp;quot;Рузультаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_results_top_level_suites = &amp;quot;Результаты по топ группам тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_file_is_not_ok_for_import_type = &amp;quot;Кажется тип файла не совпадает с выбранным для импорта типом&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_text = &amp;quot;Это не текстовый файл. Использовать нельзя.&amp;quot;;&lt;br /&gt;
$TLS_please_choose_req_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_req_import_finished = &amp;quot;Импорт завершен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqSpecView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_tc_from_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_req_created = &amp;quot;Требование %s успешно создано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqTcAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_msg_noselect = &amp;quot;Ничего не выбрано&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notupdated_coverage = &amp;quot;Покрытие не обновлено для Требований: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsBugs.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_report_all_builds = &amp;quot;Отчет: Результаты тестов для всех сборок&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsAllBuilds.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_metrics_x_build = &amp;quot; - Результаты тестов. Метрики X Сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsByStatus.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_list_of_blocked = &amp;quot;Список блокированных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_failed = &amp;quot;Список проваленных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_not_run = &amp;quot;Список незапущенных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsTC.php==&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_link_charts=&amp;quot;Диаграммы&amp;quot;;&lt;br /&gt;
$TLS_link_report_blocked_tcs = &amp;quot;Блокированные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_failed = &amp;quot;Проваленные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_general_tp_metrics = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_active_build = &amp;quot;Метрики активной сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_more_builds = &amp;quot;Запрос метрик&amp;quot;;&lt;br /&gt;
$TLS_link_report_not_run=&amp;quot;Не запущенные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_overall_build = &amp;quot;Общий статус всех сборок&amp;quot;;&lt;br /&gt;
$TLS_link_report_reqs_coverage = &amp;quot;Отчет о выполнении требований&amp;quot;;&lt;br /&gt;
$TLS_link_report_test = &amp;quot;Отчет о прогоне тестов&amp;quot;;&lt;br /&gt;
$TLS_link_report_total_bugs = &amp;quot;Всего багов по каждому тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsSend.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_to_empty_email_warning = &amp;quot;Пожалуйста, введите правильный email.&amp;quot;;&lt;br /&gt;
$TLS_warning_create_build_first = &amp;quot;Сначала Вы должны создать или импортировать сборки.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/displayMgr.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_sendreport_no_email_credentials = &amp;quot;Email для этого пользователя не указан, пожалуйста, укажите его в настройках своего профиля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/archive.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/listTestCases.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_file_to_import = &amp;quot;Пожалуйста, выберите файл для импорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_import_to = &amp;quot;Импорт тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_import_to = &amp;quot;Импорт группы тестов&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tcase_file = &amp;quot;Некорректный XML в файле с тестами&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tsuite_file = &amp;quot;Некорректный XML в файле с группой тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcexport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testcases_to_export = &amp;quot;Нет тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_no_testsuites_to_export = &amp;quot;Нет группы тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export = &amp;quot;Экспорт теста&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export_all = &amp;quot;Экспортировать все тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export_all = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/containerEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_delete = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_delete_notice = &amp;quot;Внимание: Все связанные результаты прогонов будут удалены&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_com_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_current = &amp;quot;текущий&amp;quot;;&lt;br /&gt;
$TLS_delete_linked = &amp;quot;Ссылки на планы тестирования будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_delete_linked_and_exec = &amp;quot;Ссылки на планы тестирования и результаты выполнения будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_error_tc_add = &amp;quot;При добавлении теста произошла ошибка&amp;quot;;&lt;br /&gt;
$TLS_title_del_tc = &amp;quot;Удалить тест &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesview.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_deletion = &amp;quot;Не удалось удалить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersassign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_test_projects = &amp;quot;Не заведено ни одного проекта&amp;quot;;&lt;br /&gt;
$TLS_no_test_plans = &amp;quot;Для этого проекта не заведено ни одного плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_project_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
$TLS_test_plan_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_user_created=&amp;quot;Пользователь %s был успешно создан&amp;quot;;&lt;br /&gt;
$TLS_user_deleted=&amp;quot;Пользователь %s был успешно удален&amp;quot;;&lt;br /&gt;
$TLS_user_not_added = &amp;quot;Не удалось добавить пользователя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_creation = &amp;quot;Не удалось создать роль!&amp;quot;;&lt;br /&gt;
$TLS_error_role_update = &amp;quot;Не удалось исправить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/cfields/cfields_edit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cf_name_exists = &amp;quot;Пользовательское поле с таким именем уже существует. Пожалуста, выберите другое имя.&amp;quot;;&lt;br /&gt;
$TLS_error_creating_cf = &amp;quot;Не удалось создать пользовательское поле!&amp;quot;;&lt;br /&gt;
$TLS_do_update = &amp;quot;исправлено&amp;quot;;&lt;br /&gt;
$TLS_do_delete = &amp;quot;удалено&amp;quot;;&lt;br /&gt;
$TLS_do_add = &amp;quot;добавлено&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Open=&amp;quot;Открыто&amp;quot;;&lt;br /&gt;
$TLS_Resolved=&amp;quot;Исправленных&amp;quot;;&lt;br /&gt;
$TLS_Total=&amp;quot;Всего&amp;quot;;&lt;br /&gt;
$TLS_TCs_with_Bugs=&amp;quot;Тестов с багами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9466</id>
		<title>Strings.txt (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9466"/>
				<updated>2007-10-07T13:15:00Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* lib/results/resultsNavigator.php */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
Статьяz с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «[[#Скачать|скачать]]» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скачать=&lt;br /&gt;
[{{SERVER}}{{localurl:Special:CisGetPHPPage|pagetitle={{PAGENAMEE}}}} Получить PHP-код]&lt;br /&gt;
&lt;br /&gt;
= Оригинал (наиболее полный английский перевод) =&lt;br /&gt;
* http://testlink.cvs.sourceforge.net/testlink/testlink/locale/en_GB/&lt;br /&gt;
&lt;br /&gt;
=Разделы файла strings.txt (ru_RU)=&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * TestLink Open Source Project - http://testlink.sourceforge.net/ &lt;br /&gt;
 *&lt;br /&gt;
 * Filename $RCSfile: strings.txt,v $&lt;br /&gt;
 *&lt;br /&gt;
 * @version  $Revision$&lt;br /&gt;
 * @modified $Date$ $Author$&lt;br /&gt;
 *&lt;br /&gt;
 * @author Vadim Ivanchenko, Stas Fomin, and russian Testlink community.&lt;br /&gt;
 * http://lib.custis.ru/index.php/TestLink:_strings.txt_%28RU%29&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
**/&lt;br /&gt;
&lt;br /&gt;
$TLS_STRINGFILE_CHARSET = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_asc    = &amp;quot;по возрастанию&amp;quot;;&lt;br /&gt;
$TLS_btn_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_desc = &amp;quot;по убыванию&amp;quot;;&lt;br /&gt;
$TLS_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan = $TLS_test_plan;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_SRS = &amp;quot;SRS&amp;quot;;&lt;br /&gt;
$TLS_Role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_Keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_Milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_testsuite_created = &amp;quot;Группа тестов создана&amp;quot;;&lt;br /&gt;
$TLS_requirement = &amp;quot;Требование&amp;quot;;&lt;br /&gt;
$TLS_assigned = &amp;quot;назначен&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;свободен&amp;quot;;&lt;br /&gt;
$TLS_import_file_type = &amp;quot;Тип импортируемого файла&amp;quot;;&lt;br /&gt;
$TLS_max_file_size_is = &amp;quot;Макс. размер файла&amp;quot;;&lt;br /&gt;
$TLS_supported_file_formats = &amp;quot;Поддерживаемые форматы файлов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==firstLogin.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_user = &amp;quot;К сожалению, не удалось создать ваш логин. Пожалуйста, свяжитесь с администратором!&amp;quot;;&lt;br /&gt;
$TLS_empty_email_address = &amp;quot; Пожалуйста, укажите  e-mail!&amp;quot;;&lt;br /&gt;
$TLS_empty_first_name = &amp;quot; Пожалуйста, укажите имя пользователя.&amp;quot;;&lt;br /&gt;
$TLS_empty_last_name = &amp;quot; Пожалуйста, укажите фамилию.&amp;quot;;&lt;br /&gt;
$TLS_fatal_page_title = &amp;quot;TestLink ::: Fatal Error&amp;quot;;&lt;br /&gt;
$TLS_invalid_user_name = &amp;quot;Некорректный логин пользователя. Пожалуйста, придумайте другой.&amp;quot;;&lt;br /&gt;
$TLS_passwd_dont_match = &amp;quot;Два введенных пароля не совпадают. Учтите, что пароли чувствительны к регистру, и попробуйте ещё раз.&amp;quot;;&lt;br /&gt;
$TLS_user_cant_be_created_because = &amp;quot;Не удалось создать ваш аккаунт. Причина:&amp;quot;;&lt;br /&gt;
$TLS_user_name_exists = &amp;quot;Этот логин пользователя уже используется. Пожалуйста, выберите другой.&amp;quot;;&lt;br /&gt;
$TLS_valid_user_name_format = &amp;quot;Логин пользователя может состоять только из алфавитно-цифровых символов, пробелов, дефисов и подчеркиваний.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd = &amp;quot;Пожалуйста, укажите пароль. Пароль не может быть пустым.&amp;quot;;&lt;br /&gt;
$TLS_your_info_please = &amp;quot;Введите информацию о пользователе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==index.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_main_page_title = &amp;quot;TestLink::Главная страница&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==keywordsimport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_keywords_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_keywords_file = &amp;quot;Файл с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lostPassword.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user = &amp;quot;Пользователь не найден, попробуйте еще&amp;quot;;&lt;br /&gt;
$TLS_contact_admin = &amp;quot;&amp;lt;br&amp;gt; Если проблемы будут продолжаться, пожалуйста, свяжитесь с администратором системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_empty_address = &amp;quot;Вы не указали email-адреса в вашем профиле!  Теперь, чтобы сбросить пароль вам нужно связаться с администратором TestLink-системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_passwd_subject = &amp;quot;Ваш новый пароль к TestLink'у.&amp;quot;;&lt;br /&gt;
$TLS_mail_problems = &amp;quot;Ошибка в почтовых настройках, пожалуйста, свяжитесь с администратором.&amp;quot;;&lt;br /&gt;
$TLS_page_title_lost_passwd = &amp;quot;TestLink - Утерян пароль&amp;quot;;&lt;br /&gt;
$TLS_your_info_for_passwd = &amp;quot;Заполните информацию о вашем пользователе, и пароль будет вам выслан по почте.&amp;quot;;&lt;br /&gt;
$TLS_your_password_is = &amp;quot;Ваш пароль к TestLink'у: &amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==login.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user_passwd = &amp;quot;Логин или пароль неверен. Попробуйте ещё!&amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists1 = &amp;quot;Ваша сессия в этом броузере ещё активна. Пожалуйста, используйте &amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists2 = &amp;quot; если вы хотите обновить вашу сессию.&amp;quot;;&lt;br /&gt;
$TLS_logout_link = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_passwd_lost = &amp;quot;Ваш пароль выслан вам по email на адрес, который вы указали при регистрации. Проверьте вашу почту. В случае проблем, обратитесь к администратору вашего TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_password_reseted=&amp;quot;Новый пароль выслан вам по почте&amp;quot;;&lt;br /&gt;
$TLS_please_login = &amp;quot;Пожалуйста, войдите в систему...&amp;quot;;&lt;br /&gt;
$TLS_session_expired = &amp;quot;Время ваша сессии окончилось. Пожалуйста, войдите в систему заново.&amp;quot;;&lt;br /&gt;
$TLS_your_first_login = &amp;quot;Добро пожаловать в TestLink! Сейчас у вас только гостевой доступ. Для большего, нужно войти в систему.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==planPriority.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_high_priority    = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_priority     = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_priority  = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_risk        = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_risk         = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_risk      = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_importance  = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_low_importance   = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_medium_importance= &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tc_created = &amp;quot;Тест %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_tc_deleted = &amp;quot;Тест %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_tc_updated = &amp;quot;Тест %s отредактирован успешно&amp;quot;;&lt;br /&gt;
$TLS_tc_update_failed = &amp;quot;Не удалась правка теста %s!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachment404.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_close = &amp;quot;Закрыть&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_not_found = &amp;quot;Ошибка: Вложение не найдено!&amp;quot;;&lt;br /&gt;
$TLS_title_downloading_attachment = &amp;quot;Загружаем вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentdelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_deleting_was_ok = &amp;quot;Вложение удалено.&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_delete = &amp;quot;При удалении вложения произошла ошибка!&amp;quot;;&lt;br /&gt;
$TLS_title_delete_attachment = &amp;quot;Удалить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_del_comp = &amp;quot;Да, удалить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_container_title_testsuite =$TLS_test_suite;&lt;br /&gt;
$TLS_linked_but_not_executed=&amp;quot;Связан с одним или более планом тестирования, но не выполнялась&amp;quot;;&lt;br /&gt;
$TLS_question_del = &amp;quot;Действительно удалить&amp;quot;;&lt;br /&gt;
$TLS_th_link_exec_status = &amp;quot;Статус исполнения и связей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_testsuite = &amp;quot;Создать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_tc_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_title_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_testsuite_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_add.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_bug = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_bug_id = &amp;quot;Bug id&amp;quot;;&lt;br /&gt;
$TLS_button_enter_bug = &amp;quot;Создать новый баг&amp;quot;;&lt;br /&gt;
$TLS_title_bug_add = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_link_bts_create_bug = &amp;quot;Доступ к системе регистрации багов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_delete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_delete_bug = &amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cp               = &amp;quot;Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_move             = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_target        = &amp;quot;Выберите куда&amp;quot;;&lt;br /&gt;
$TLS_cont_move_first      = &amp;quot;Переместить это&amp;quot;;&lt;br /&gt;
$TLS_cont_move_second     = &amp;quot;в другое&amp;quot;;&lt;br /&gt;
$TLS_copy_keywords        = &amp;quot;Копировать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_defined_exclam       = &amp;quot;определен !&amp;quot;;&lt;br /&gt;
$TLS_include_nested       = &amp;quot;Включая вложенные данные (только для копирования).&amp;quot;;&lt;br /&gt;
$TLS_sorry_further        = &amp;quot;К сожалению, больше ничего нет &amp;quot;;&lt;br /&gt;
$TLS_title_move_cp        = &amp;quot;Переместить/Скопировать&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_btn_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_help = &amp;quot;Помощь&amp;quot;;&lt;br /&gt;
$TLS_req_create = &amp;quot;Создать требование&amp;quot;;&lt;br /&gt;
$TLS_req_doc_id = &amp;quot;DOC-ID&amp;quot;;&lt;br /&gt;
$TLS_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_reqs = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_req_title = &amp;quot;Заголовок требования должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_reqdoc_id = &amp;quot;ID документа-требования не должен быть пуст!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerOrder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_no_nodes_to_reorder = &amp;quot;К сожалению, тут нечего упорядочивать.&amp;quot;;&lt;br /&gt;
$TLS_node = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_th_node_type = &amp;quot;Тест / Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_order = &amp;quot;Порядок&amp;quot;;&lt;br /&gt;
$TLS_title_change_node_order = &amp;quot;Изменить порядок 'потомков'&amp;quot;;&lt;br /&gt;
$TLS_node_type_dbtable_testsuites=$TLS_test_suite;&lt;br /&gt;
$TLS_node_type_dbtable_testcases=$TLS_testcase;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_del_com    = &amp;quot;Удалить эту группу тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_com   = &amp;quot;Править дату и заголовок для этой группы тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_move_cp_com = &amp;quot;Переместить или скопировать эту группу тестов в другой проект&amp;quot;;&lt;br /&gt;
$TLS_btn_del_com = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_com = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_export_all_testsuites = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_export_tc = &amp;quot;Экспортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_export_testsuite = &amp;quot;Экспортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_import_tc = &amp;quot;Импортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_import_testsuite = &amp;quot;Импортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_move_cp_com = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_cat = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_com = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_tc = &amp;quot;Создать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_reorder_cat = &amp;quot;Переупорядочить потомков&amp;quot;;&lt;br /&gt;
$TLS_edit_testproject_basic_data = &amp;quot;Править основные данные проекта&amp;quot;;&lt;br /&gt;
$TLS_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_product_name = &amp;quot;Имя проекта&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_edit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_available_on = &amp;quot;Доступно для&amp;quot;;&lt;br /&gt;
$TLS_btn_add = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_btn_delete = &amp;quot;Удалить&amp;quot;; &lt;br /&gt;
$TLS_btn_ok = &amp;quot;Ok&amp;quot;;&lt;br /&gt;
$TLS_custom_field = &amp;quot;Пользовательское поле&amp;quot;;&lt;br /&gt;
$TLS_enable_on_design = &amp;quot;Разрешить при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_enable_on_exec = &amp;quot;Разрешить при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_label = &amp;quot;Метка&amp;quot;;&lt;br /&gt;
$TLS_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_custom_field = &amp;quot;Вы уверены, что хотите удалить пользовательское поле?&amp;quot;;&lt;br /&gt;
$TLS_possible_values = &amp;quot;Возможные значения&amp;quot;;&lt;br /&gt;
$TLS_show_on_design = &amp;quot;Показывать при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_show_on_exec = &amp;quot;Показывать при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_title_cfields_mgmt = &amp;quot;Пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_type = &amp;quot;Тип&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_label = &amp;quot;Пожалуйста, введите метку для этого пользовательского поля.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_name = &amp;quot;Пожалуйста, введите имя этого пользовательского поля.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_update.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_failed_db_upd = &amp;quot;Не удалось обновить базу данных!&amp;quot;;&lt;br /&gt;
$TLS_info_failed_db_upd_details = &amp;quot;Не удалось обновить базу данных! - Подробности:&amp;quot;;&lt;br /&gt;
$TLS_invalid_query = &amp;quot;Ошибка:&amp;quot;;&lt;br /&gt;
$TLS_warning = &amp;quot;Предупреждение!!&amp;quot;;&lt;br /&gt;
$TLS_was_success = &amp;quot; был(и) успешно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestPlan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_btn_apply_filter = &amp;quot;Применить фильтр&amp;quot;;&lt;br /&gt;
$TLS_btn_update_menu = &amp;quot;Обновить меню&amp;quot;;&lt;br /&gt;
$TLS_caption_nav_filter_settings = &amp;quot;Параметры выборки&amp;quot;;&lt;br /&gt;
$TLS_current_build = &amp;quot;Текущая сборка&amp;quot;;&lt;br /&gt;
$TLS_filter_owner = &amp;quot;Ответственный&amp;quot;;&lt;br /&gt;
$TLS_filter_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_filter_tcID = &amp;quot;Фильтр: ID теста&amp;quot;;&lt;br /&gt;
$TLS_keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_test_status_all_status=&amp;quot;Все&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_th_my_perc_completed = &amp;quot;У меня выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_perc_completed = &amp;quot;Выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_title_your_tp_metrics = &amp;quot;Ваши метрики для плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/newest_tcversions.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_linked_version = &amp;quot;Связанная версия&amp;quot;;&lt;br /&gt;
$TLS_newest_version = &amp;quot;Самая новая из доступных активных версий&amp;quot;;&lt;br /&gt;
$TLS_title_newest_tcversions = &amp;quot;Самые новые версии связанных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/emailSent.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_test_report = &amp;quot;- Послать тест-отчёт&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_Title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_btn_back2srs = &amp;quot;Назад, к спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_btn_import = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_btn_upload_file = &amp;quot;Загрузить файл&amp;quot;;&lt;br /&gt;
$TLS_check_req_file_structure = &amp;quot;Пожалуйста, проверьте формат файла. Не получается получить из этого файла требования&amp;quot;;&lt;br /&gt;
$TLS_local_file = &amp;quot;Файл:&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file1 = &amp;quot;Максимальный размер для этого файла&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file2 = &amp;quot;kB&amp;quot;;&lt;br /&gt;
$TLS_req_import_check_note = &amp;quot;Пожалуйста, разрешите возможные конфликты и запустите процесс импорта.&amp;quot;;&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Не импортируйте элементы с пустой Сферой&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_double = &amp;quot;Добавить ещё с тем же заголовком&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_header = &amp;quot;Разрешить конфликт&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_overwrite = &amp;quot;Обновить существующий&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_skip = &amp;quot;Пропускать импорт дублирующих требований&amp;quot;;&lt;br /&gt;
$TLS_req_import_type = &amp;quot;Тип:&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement = &amp;quot;Нет требований&amp;quot;;&lt;br /&gt;
$TLS_required_cvs_format = &amp;quot;Формат файла с требованиями:&amp;quot;;&lt;br /&gt;
$TLS_title_choose_file_type = &amp;quot;Выберите тип файла&amp;quot;;&lt;br /&gt;
$TLS_title_choose_local_file = &amp;quot;Выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_title_req_import = &amp;quot;Загрузка требований&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_check_input = &amp;quot;Проверьте импортируемые данные&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_build = &amp;quot;Удалить эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_attachment = &amp;quot;Удалить это вложение&amp;quot;;&lt;br /&gt;
$TLS_attached_files = &amp;quot;Вложенные файлы&amp;quot;;&lt;br /&gt;
$TLS_attachment_feature_disabled = &amp;quot;вложения отключены&amp;quot;;&lt;br /&gt;
$TLS_button_upload = &amp;quot;Загрузить&amp;quot;;&lt;br /&gt;
$TLS_upload_file_new_file = &amp;quot;Загрузить новый файл&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_attachment = &amp;quot;Действительно удалить вложение?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_print = &amp;quot;Печать&amp;quot;;&lt;br /&gt;
$TLS_note_email_sent_t = &amp;quot;Примечание: email format послан на email пользователя&amp;quot;;&lt;br /&gt;
$TLS_send_results = &amp;quot;Послать отчеты&amp;quot;;&lt;br /&gt;
$TLS_send_to = &amp;quot;To:&amp;quot;;&lt;br /&gt;
$TLS_subject = &amp;quot;Subject:&amp;quot;;&lt;br /&gt;
$TLS_title_active_build = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_title_report_type = &amp;quot;Формат отчета&amp;quot;;&lt;br /&gt;
$TLS_via_email = &amp;quot;через eMail&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments_upload.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_view.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cfields_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_manage_cfield = &amp;quot;Управлять пользовательскими полями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_ro_m0.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_category = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_configuration = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_not_defined = &amp;quot;Не определено.&amp;quot;;&lt;br /&gt;
$TLS_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_alt_name = &amp;quot;Обязательно заполнить имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_cat_config = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_cat_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_cat_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_cat_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_by = &amp;quot;by&amp;quot;;&lt;br /&gt;
$TLS_coverage = &amp;quot;Покрытие&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_req = &amp;quot;Удалить это требование, Вы уверены?&amp;quot;;&lt;br /&gt;
$TLS_req_edit = &amp;quot;Править требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notestcase = &amp;quot;Связанных тестов нет.&amp;quot;;&lt;br /&gt;
$TLS_requirement_spec = &amp;quot;Спецификация требования&amp;quot;;&lt;br /&gt;
$TLS_test_case_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_title_created = &amp;quot;Создано:&amp;quot;;&lt;br /&gt;
$TLS_title_last_mod = &amp;quot;Последняя правка:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_active = &amp;quot;Активная&amp;quot;;&lt;br /&gt;
$TLS_enter_build = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_enter_build_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_msg_build = &amp;quot;Замечание: Каждая сборка относится к активному плану тестирования. Описание должно включать: список развертываемых пакетов, утверждений, состояние, и т.п.&amp;quot;;&lt;br /&gt;
$TLS_open = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_build_2 = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_title_build_create = &amp;quot;Создать новую Сборку&amp;quot;;&lt;br /&gt;
$TLS_title_build_update = &amp;quot;Править Сборку&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_build_name = &amp;quot;Пожалуйста, введите имя для этой Сборки!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_introduction = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_limitations = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_methodology = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_references = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_comp_alt_name = &amp;quot;Обязательно введите имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_comp_intro = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_comp_lim = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_comp_method = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_comp_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_comp_ref = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_analyse = &amp;quot;Анализировать&amp;quot;;&lt;br /&gt;
$TLS_btn_check_all = &amp;quot;Проверить все&amp;quot;;&lt;br /&gt;
$TLS_btn_delete_spec = &amp;quot;Удалить спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_spec = &amp;quot;Править спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_export_reqs = &amp;quot;Экспортировать требования&amp;quot;;&lt;br /&gt;
$TLS_btn_req_create = &amp;quot;Создать новое требование&amp;quot;;&lt;br /&gt;
$TLS_btn_spec_list = &amp;quot;Список спецификаций&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck_all = &amp;quot;Убрать все отметки&amp;quot;;&lt;br /&gt;
$TLS_cant_delete_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_popup_sure_delete = &amp;quot;Вы уверены удалить эту спецификацию требования?&amp;quot;;&lt;br /&gt;
$TLS_req_select_create_tc = &amp;quot;Создать тесты&amp;quot;;&lt;br /&gt;
$TLS_req_select_delete = &amp;quot;Удалить требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_list = &amp;quot;Список требований&amp;quot;;&lt;br /&gt;
$TLS_req_total = &amp;quot;Всего треб.&amp;quot;;&lt;br /&gt;
$TLS_req_reorder = &amp;quot;Переупорядочить требования?&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_requirements = &amp;quot;Вы уверены удалить выбранные требования?&amp;quot;;&lt;br /&gt;
$TLS_title_change_req_order = &amp;quot;Переупорядочивание требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_copyrightnotice.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_gnu_gpl = &amp;quot;GNU GPL&amp;quot;;&lt;br /&gt;
$TLS_lic_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_lic_product = &amp;quot;TestLink project&amp;quot;;&lt;br /&gt;
$TLS_licensed_under = &amp;quot;TestLink лицензируется согласно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update_testsuite = &amp;quot;Обновить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_title_edit_level = &amp;quot;Править&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecAnalyse.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_none = &amp;quot;Пусто &amp;quot;;&lt;br /&gt;
$TLS_req = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_req_spec_change = &amp;quot;Изменить спецификацию требований на &amp;quot;;&lt;br /&gt;
$TLS_req_title_analyse = &amp;quot;Анализировать спецификацию требований &amp;quot;;&lt;br /&gt;
$TLS_req_title_covered = &amp;quot;Покрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_in_tl = &amp;quot;Требований, зарегистрированных в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_title_nottestable = &amp;quot;Нетестируемые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_uncovered = &amp;quot;Непокрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_not_in_tl = &amp;quot;Требований, отсутствующих в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_total_count = &amp;quot;Всего требований&amp;quot;;&lt;br /&gt;
$TLS_testcases = &amp;quot;Тесты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_action_create_srs = &amp;quot;Создать спецификацию требований&amp;quot;;&lt;br /&gt;
$TLS_testproject = &amp;quot;проект&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_reqView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_last_edit = &amp;quot;Последняя правка: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_comp.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_top_level_suites = &amp;quot;Результаты топовых групп тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_blocked = &amp;quot;Блокировано&amp;quot;;&lt;br /&gt;
$TLS_trep_comp = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_comp_perc = &amp;quot;Выполнена [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_failed = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_trep_not_run = &amp;quot;Не запускали&amp;quot;;&lt;br /&gt;
$TLS_trep_passed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_trep_total = &amp;quot;Всего&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_keyw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_kw = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_trep_kw = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_owner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_owner = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_owner = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_tester = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_tester = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_prio.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tit_end_date = &amp;quot;Дата окончания&amp;quot;;&lt;br /&gt;
$TLS_tit_milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_prio = &amp;quot;Результаты по приоритету&amp;quot;;&lt;br /&gt;
$TLS_trep_milestone_goal = &amp;quot;Цель вехи [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_prio = &amp;quot;Приоритет&amp;quot;;&lt;br /&gt;
$TLS_trep_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_ts.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_ts = &amp;quot;Результаты по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_imp = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_trep_risk = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_trep_ts = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecEdit.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_show_bug_table.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_build = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_caption_bugtable = &amp;quot;Связанные баги&amp;quot;;&lt;br /&gt;
$TLS_delete_bug=&amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
$TLS_del_bug_warning_msg = &amp;quot;Действительно удалить этот баг?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecList.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign_tc = &amp;quot;Указать тест&amp;quot;;&lt;br /&gt;
$TLS_no_docs = &amp;quot;Нет доступных документов.&amp;quot;;&lt;br /&gt;
$TLS_req_list_docs = &amp;quot;Спецификации требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_New_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_add_tc_name = &amp;quot;Обязательно укажите имя теста.&amp;quot;;&lt;br /&gt;
$TLS_expected_results = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_tc_title = &amp;quot;Заголовок тест-кейса&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/show_exec_notes.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_execution_notes = &amp;quot;Замечания по выполнению&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_role = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_role = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_caption_define_role = &amp;quot;Определить роль&amp;quot;;&lt;br /&gt;
$TLS_caption_possible_affected_users = &amp;quot;Возможно влияет на следующих пользователей&amp;quot;;&lt;br /&gt;
$TLS_enter_role_notes = &amp;quot;Введите описание роли&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_product_roles = &amp;quot;Укажите роли проекта&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testplan_roles = &amp;quot;Укажите роли для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_menu_define_roles = &amp;quot;Новая роль&amp;quot;;&lt;br /&gt;
$TLS_menu_mod_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_new_user = &amp;quot;Новый пользователь&amp;quot;;&lt;br /&gt;
$TLS_menu_edit_user = &amp;quot;Редактировать пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_view_users = &amp;quot;Список пользователей&amp;quot;;&lt;br /&gt;
$TLS_menu_view_roles = &amp;quot;Просмотр ролей&amp;quot;;&lt;br /&gt;
$TLS_th_cf_rights = &amp;quot;Права на пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_th_kw_rights = &amp;quot;Права на ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_th_mgttc_rights = &amp;quot;Права на управление тест-кейсами&amp;quot;;&lt;br /&gt;
$TLS_th_product_rights = &amp;quot;Права на проект&amp;quot;;&lt;br /&gt;
$TLS_th_req_rights = &amp;quot;Права на требование&amp;quot;;&lt;br /&gt;
$TLS_th_rights = &amp;quot;Разрешения&amp;quot;;&lt;br /&gt;
$TLS_th_rolename = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_th_tp_rights = &amp;quot;Права на план тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_user_rights = &amp;quot;Права пользователей&amp;quot;;&lt;br /&gt;
$TLS_title_user_mgmt = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_warning_modify_role = &amp;quot;Действительно исправить роль?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcSearchForm.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_find             = &amp;quot;Найти&amp;quot;;&lt;br /&gt;
$TLS_caption_search_form  = &amp;quot;Искать тесты&amp;quot;;&lt;br /&gt;
$TLS_not_applied          = &amp;quot;Не применимо&amp;quot;;&lt;br /&gt;
$TLS_th_tcid              = &amp;quot;ID теста&amp;quot;;&lt;br /&gt;
$TLS_th_tcversion         = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
$TLS_th_title             = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_title_search_tcs     = &amp;quot;Поиск&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/infoWindow.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_iw2del = &amp;quot;Да, удалите тест!&amp;quot;;&lt;br /&gt;
$TLS_question_del_tc = &amp;quot;Действительно удалить тест?&amp;quot;;&lt;br /&gt;
$TLS_th_executed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_th_linked_to_tplan = &amp;quot;Связан с планом тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_new_tc = &amp;quot;Создать тест&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_tc_title = &amp;quot;Пожалуйста, задайте заголовок для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_imp_tc_data = &amp;quot;Импорт данных для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsimport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_keyword_import_to = &amp;quot;Импортировать ключевые слова в &amp;quot;;&lt;br /&gt;
$TLS_title_keyword_import = &amp;quot;Импорт ключевых слов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_export = &amp;quot;Экспорт&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_to = &amp;quot;Импортировать требования в документ:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_tproject_assign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign = &amp;quot;Привязать&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_active_mgmt = &amp;quot;Обновить активное состояние&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_display_order = &amp;quot;Сохранить порядок показа&amp;quot;;&lt;br /&gt;
$TLS_btn_unassign = &amp;quot;Освободить от&amp;quot;;&lt;br /&gt;
$TLS_cfields_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_cfields_tproject_assign = &amp;quot;Привязать пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_display_order = &amp;quot;Порядок показа&amp;quot;;&lt;br /&gt;
$TLS_title_assigned_cfields = &amp;quot;Привязанные пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_title_available_cfields = &amp;quot;Доступные пользовательские поля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_No = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_Yes = &amp;quot;Да&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_order_by_login = &amp;quot;По порядку логинов&amp;quot;;&lt;br /&gt;
$TLS_order_by_role_descr = &amp;quot;По порядку описания ролей&amp;quot;;&lt;br /&gt;
$TLS_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_th_delete = &amp;quot;Удалить?&amp;quot;;&lt;br /&gt;
$TLS_th_email = &amp;quot;Email&amp;quot;;&lt;br /&gt;
$TLS_th_first_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_last_name = &amp;quot;Фамилия&amp;quot;;&lt;br /&gt;
$TLS_th_locale = &amp;quot;Локализация&amp;quot;;&lt;br /&gt;
$TLS_th_login = &amp;quot;Логин&amp;quot;;&lt;br /&gt;
$TLS_th_role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/login.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_login = &amp;quot;Войти&amp;quot;;&lt;br /&gt;
$TLS_login_name = &amp;quot;Логин:&amp;quot;;&lt;br /&gt;
$TLS_lost_password_q = &amp;quot;Забыли пароль?&amp;quot;;&lt;br /&gt;
$TLS_new_user_q = &amp;quot;Новый пользователь?&amp;quot;;&lt;br /&gt;
$TLS_password = &amp;quot;Пароль:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginFirst.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_user_data = &amp;quot;Добавить пользовательские данные&amp;quot;;&lt;br /&gt;
$TLS_e_mail = &amp;quot;E-mail (нужен, чтобы получить новый пароль):&amp;quot;;&lt;br /&gt;
$TLS_first_name = &amp;quot;Имя:&amp;quot;;&lt;br /&gt;
$TLS_last_name = &amp;quot;Фамилия:&amp;quot;;&lt;br /&gt;
$TLS_link_back_to_login = &amp;quot;Войти еще раз&amp;quot;;&lt;br /&gt;
$TLS_password_again = &amp;quot;Повторите пароль:&amp;quot;;&lt;br /&gt;
$TLS_password_mgmt_is_external = &amp;quot;Используется внешнее управление паролями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_mv = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_cat = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_inst_move = &amp;quot;Переместить этот тест в другую группу тестов (внутри того же плана тестирования).&amp;quot;;&lt;br /&gt;
$TLS_title_mv_cp_tc = &amp;quot;Переместить/Копировать тест&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginLost.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send = &amp;quot;Выслать пароль&amp;quot;;&lt;br /&gt;
$TLS_password_reset = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_records_found = &amp;quot;Ничего не найдено.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execSetResults.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_alt_notes = &amp;quot;заметки&amp;quot;;&lt;br /&gt;
$TLS_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_btn_history_off = &amp;quot;Показывать только последний прогон&amp;quot;;&lt;br /&gt;
$TLS_btn_history_on = &amp;quot;Показывать полную историю прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_all_tests_results = &amp;quot;Сохранить все результаты прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_tc_exec_results = &amp;quot;Сохранить результат прогона&amp;quot;;&lt;br /&gt;
$TLS_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_build_is_closed = &amp;quot;Сборка закрыта&amp;quot;;&lt;br /&gt;
$TLS_builds_notes = &amp;quot;Описание сборки&amp;quot;;&lt;br /&gt;
$TLS_bulk_tc_status_management = &amp;quot;Массовое управление состоянием тестов&amp;quot;;&lt;br /&gt;
$TLS_date_time_run = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_details = &amp;quot;Подробности&amp;quot;;&lt;br /&gt;
$TLS_exec_notes = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
$TLS_exec_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_execution_history = &amp;quot;История прогонов&amp;quot;;&lt;br /&gt;
$TLS_img_title_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_img_title_delete_execution= &amp;quot;Удалить прогон&amp;quot;;&lt;br /&gt;
$TLS_just_last_execution_for_this_build = &amp;quot;Последний прогон для этой сборки&amp;quot;;&lt;br /&gt;
$TLS_no_data_available = &amp;quot;Данные отсутствуют&amp;quot;;&lt;br /&gt;
$TLS_set_all_tc_to = &amp;quot;Установить всем состояние &amp;quot;;&lt;br /&gt;
$TLS_show_hide = &amp;quot;Показать / скрыть&amp;quot;;&lt;br /&gt;
$TLS_tc_not_tested_yet = &amp;quot;Еще не протестировано:&amp;quot;;&lt;br /&gt;
$TLS_test_cases_cannot_be_executed = &amp;quot;Тесты не могут быть выполнены&amp;quot;;&lt;br /&gt;
$TLS_test_exec_by = &amp;quot;Протестировано: &amp;quot;;&lt;br /&gt;
$TLS_test_exec_expected_r = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_test_exec_last_run_date = &amp;quot;Самые последние запуски:&amp;quot;;&lt;br /&gt;
$TLS_test_exec_notes = &amp;quot;Заметки / Описание&amp;quot;;&lt;br /&gt;
$TLS_test_exec_on_build = &amp;quot; в Сборке&amp;quot;;&lt;br /&gt;
$TLS_test_exec_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_test_exec_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_test_exec_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_test_plan_notes = &amp;quot;Заметки по плану тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_status_not_run = &amp;quot;Не запущен&amp;quot;;&lt;br /&gt;
$TLS_th_test_case_id = &amp;quot;ID &amp;quot;;&lt;br /&gt;
$TLS_th_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_on_build = &amp;quot;Результы тестов по Сборке&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_owner = &amp;quot; Ответственный:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/navBar.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_link_logout = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_product = &amp;quot;Проект&amp;quot;;&lt;br /&gt;
$TLS_product_role = &amp;quot;Роль проекта&amp;quot;;&lt;br /&gt;
$TLS_title_edit_personal_data = &amp;quot;Мой профиль&amp;quot;;&lt;br /&gt;
$TLS_title_execute = &amp;quot;Выполнить&amp;quot;;&lt;br /&gt;
$TLS_title_results = &amp;quot;Отчеты&amp;quot;;&lt;br /&gt;
$TLS_title_specification = &amp;quot;Спецификация&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_rw.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_add_tc = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_add_remove_selected_tc_hint = &amp;quot;Операция будет выполнена над ВСЕМИ группами тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_add_remove_selected_tc = &amp;quot;Добавить / Удалить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_add_selected_tc = &amp;quot;Добавить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_check = &amp;quot;Отметить&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck = &amp;quot;Снять отметки&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_tc = &amp;quot;Все тесты в этой группе тестов.&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_all_checkboxes=&amp;quot;отметить все/снять все отметки&amp;quot;;&lt;br /&gt;
$TLS_has_been_executed = &amp;quot;были выполнены&amp;quot;;&lt;br /&gt;
$TLS_inactive_testcase = &amp;quot;неактивны&amp;quot;;&lt;br /&gt;
$TLS_no_testcase_available = &amp;quot;Тестов нет&amp;quot;;&lt;br /&gt;
$TLS_note_keyword_filter = &amp;quot;Тесты фильтруются по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_remove_tc = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_th_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_title_add_remove_test_to_plan = &amp;quot;Добавить/Удалить тест(ы) в/из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_add_test_to_plan = &amp;quot;Добавить тесты в план тестирования&amp;quot;;&lt;br /&gt;
$TLS_warning_add_remove_selected_tc = &amp;quot;Вы уверены удалить выбранные тесты из этого плана тестирования?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTCNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_navigator = &amp;quot;Навигатор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planPriority.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_prio   = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_title_priority = &amp;quot;Определить приоритеты для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tr_th_importance = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_tr_th_prio_cba = &amp;quot;Приоритет (C/B/A)&amp;quot;;&lt;br /&gt;
$TLS_tr_th_risk = &amp;quot;Риск/Важность&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_testplan_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_opt_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_testplan_question_create_tp_from = &amp;quot;Создать из существующего плана тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_create = &amp;quot;Создать новый план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_edit = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_for_project = &amp;quot;для проекта: &amp;quot;;&lt;br /&gt;
$TLS_testplan_title_tp_management = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_notes = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
План тестирования должен содержать ясно определенные задачи, включая временные границы. &lt;br /&gt;
Он может содержать тест-активность для выпускаемой версии продукта (включая патчи) &lt;br /&gt;
или просто единственный запрос от пользователя.&amp;lt;br/&amp;gt;&lt;br /&gt;
В описании можно ссылаться на план и другую документацию по проекту.&lt;br /&gt;
Разумно перечислить тестируемые возможности, риски и т.п.&amp;lt;br/&amp;gt;&lt;br /&gt;
Можно создать новый план тестирования из существующего (&amp;quot;клонировать&amp;quot;). &lt;br /&gt;
Будут скопированы следующие элементы: сборки, тесты, приоритеты, &lt;br /&gt;
Вехи и роли пользователей.&amp;lt;br/&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать/заморозить: т.е. запретить любое изменение &lt;br /&gt;
атрибутов или вложенных элементов плана тестирования. &lt;br /&gt;
Такие планы тестирования будут видны только на странице отчетов и на этой странице.&lt;br /&gt;
END;&lt;br /&gt;
 &lt;br /&gt;
$TLS_warning_empty_tp_name = &amp;quot;Пожалуйста, введите имя плана тестирования.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_btn_edit = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_testplan_btn_new = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_list = &amp;quot;Список&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planMilestones.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_milestone = &amp;quot;Удалить веху?&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_milestone = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_new_milestone = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_info_milestones_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'&amp;quot;;&lt;br /&gt;
$TLS_no_milestones = &amp;quot;Для этого плана тестирования вехи не определены.&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_milestones = &amp;quot;Вы уверены удалить веху %NAME% ?&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_milestone_name=&amp;quot;Укажите имя вехи!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$TLS_th_date_format = &amp;quot;Целевая Дата&amp;quot;;&lt;br /&gt;
$TLS_th_perc_a_prio = &amp;quot;% A-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_b_prio = &amp;quot;% B-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_c_prio = &amp;quot;% C-приоритет&amp;quot;;&lt;br /&gt;
$TLS_title_existing_milestones = &amp;quot;Существующие вехи&amp;quot;;&lt;br /&gt;
$TLS_title_milestones = &amp;quot;Вехи для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_new_milestone = &amp;quot;Новая Веха&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/projectedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_activate         = &amp;quot;Активировать&amp;quot;;&lt;br /&gt;
$TLS_btn_del              = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_del         = &amp;quot;Править / Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_inactivate       = &amp;quot;Деактивировать&amp;quot;;&lt;br /&gt;
$TLS_caption_edit_product = &amp;quot;Править проект&amp;quot;;&lt;br /&gt;
$TLS_caption_new_product  = &amp;quot;Создать проект&amp;quot;;&lt;br /&gt;
$TLS_color                = &amp;quot;Цвет&amp;quot;;&lt;br /&gt;
$TLS_enable_requirements  = &amp;quot;Включить функциональность Требований&amp;quot;;&lt;br /&gt;
$TLS_info_failed_loc_prod = &amp;quot;Не удалось локализовать проект.&amp;quot;;&lt;br /&gt;
$TLS_notes                = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
// Warning!!! - if JS string you must use \\n to get \n                                       &lt;br /&gt;
$TLS_popup_product_delete = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Внимание! Вы собираетесь необратимо удалить все данные связанные проектом:&lt;br /&gt;
результаты тестов, планы тестирования, тесты и т.п. \\n&lt;br /&gt;
Вместо удаления вы можете деактивировать проект. \\n&lt;br /&gt;
Если вы всё-таки настроены удалить проект, рекомендуем вам сначала &lt;br /&gt;
сделать бэкап базы данных. \\n&lt;br /&gt;
Итак, вы по прежнему уверены удалить проект? &lt;br /&gt;
END;&lt;br /&gt;
$TLS_warning_empty_tproject_name = &amp;quot;Обязательно задайте имя проекта!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_select_a_req        = &amp;quot;Пожалуйста, выберите требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement66    = &amp;quot;Требования нет&amp;quot;;&lt;br /&gt;
$TLS_req_title_assign           = &amp;quot;Привяжите требования к тесту&amp;quot;;&lt;br /&gt;
$TLS_req_title_assigned         = &amp;quot;Привязанные требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_unassigned       = &amp;quot;Доступные требования&amp;quot;;&lt;br /&gt;
$TLS_warning_req_tc_assignment_impossible = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Вы &amp;lt;b&amp;gt;не можете&amp;lt;/b&amp;gt; делать привязку по одной из следующих причин:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Не определено ни одной спецификации требования;&lt;br /&gt;
  &amp;lt;li&amp;gt;Спецификации требований пусты.&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_edit_tc = &amp;quot;Править тест&amp;quot;;&lt;br /&gt;
$TLS_warning_editing_executed_tc = &amp;quot;Внимание: Этот версия теста уже выполнялась&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planOwner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assign_ownership     = &amp;quot;Назначить ответственного&amp;quot;;&lt;br /&gt;
$TLS_def_prio_rules       = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_opt_label_none       = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_th_imp               = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_th_owner             = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_risk              = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_th_test_suite        = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_plan_ownership = &amp;quot;Владелец плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_activate_this_tcversion  = &amp;quot;Активировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_Requirements             = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_btn_del_this_version     = &amp;quot;Удалить эту версию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit                 = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_mv_cp                = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_version          = &amp;quot;Создать новую версию&amp;quot;;&lt;br /&gt;
$TLS_can_not_edit_tc = &amp;quot;Вы не можете редактировать эту версию, т.к. она уже выполнялась&amp;quot;;&lt;br /&gt;
$TLS_deactivate_this_tcversion = &amp;quot;Деактивировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_tcversion_is_inactive_msg = &amp;quot;Эта версия &amp;lt;b&amp;gt;неактивна&amp;lt;/b&amp;gt;, и не будет доступна для включения в план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planRemoveTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_remove_selected_tc = &amp;quot;Удалить выбранные тесты tcs&amp;quot;;&lt;br /&gt;
$TLS_remove_ok = &amp;quot;Удаление прошло успешно ok&amp;quot;;&lt;br /&gt;
$TLS_title_remove_test_from_plan = &amp;quot;Удалить тест из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTesters.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_save = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keyword_assignment_empty_tsuite = &amp;quot;В этой группе тестов нет тестов =&amp;gt; ключевое слово привязать нельзя&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_kw_to_tc = &amp;quot;Привязать к  тестам&amp;quot;;&lt;br /&gt;
$TLS_menu_manage_keywords = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_title_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTestersNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_label_list_of = &amp;quot;Список &amp;quot;;&lt;br /&gt;
$TLS_opt_test_plans = &amp;quot;планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_opt_users = &amp;quot;пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planUpdateTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_ck_tc        = &amp;quot;Изменить выбранные тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_info_all_tc_uptodate = &amp;quot;Все тесты актуальны.&amp;quot;;&lt;br /&gt;
$TLS_th_category          = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_component         = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_id_tc = &amp;quot;[ID] теста&amp;quot;;&lt;br /&gt;
$TLS_th_reason = &amp;quot;Причина правки&amp;quot;;&lt;br /&gt;
$TLS_th_spec_version = &amp;quot;Специальная версия&amp;quot;;&lt;br /&gt;
$TLS_th_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_th_suite_version = &amp;quot;Версия группы тестов&amp;quot;;&lt;br /&gt;
$TLS_th_update = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_title_upd_mod_tc = &amp;quot;Изменить исправленные тесты в &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_keyword   = &amp;quot;Удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_btn_create_keyword   = &amp;quot;Создать ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_keyword     = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_import_keywords  = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_th_keyword           = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_keyword = &amp;quot;Вы уверены удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least1 = &amp;quot;Пожалуйста, введите хотя бы  &amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less1 = &amp;quot;Пожалуйста, используйте не больше чем&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_req_export_to = &amp;quot;Экспорт требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsAllBuilds.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_status_blocked  = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_test_status_failed   = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_test_status_passed   = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_th_build             = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_th_tc_total          = &amp;quot;Всего тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_date                   = &amp;quot;Дата:&amp;quot;;&lt;br /&gt;
$TLS_printed_by             = &amp;quot;Напечатано:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_bugs   = &amp;quot;Баги по тесту&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_timestamp = &amp;quot;Временная метка теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_title = &amp;quot;Заголовок теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_suite_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBuild.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_met_of_build = &amp;quot;Метрики сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsByStatus.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_test_results = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Показываются результаты только последнего теста.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
В частности, тесты скрыты, если результаты тестов для следующей сборки &lt;br /&gt;
имеют статус отличный от &amp;quot;в процессе&amp;quot;. &lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_th_bugs = &amp;quot;Баги&amp;quot;;&lt;br /&gt;
$TLS_th_date = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_th_run_by = &amp;quot;Запустил:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsGeneral.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_gen_test_rep = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_query_form.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_excel_format             = &amp;quot;MS Excel&amp;quot;;&lt;br /&gt;
$TLS_html_format              = &amp;quot;HTML&amp;quot;;&lt;br /&gt;
$TLS_last_status_any          = &amp;quot;Любой&amp;quot;;&lt;br /&gt;
$TLS_last_status_blocked      = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_last_status_failed       = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_last_status_not_run      = &amp;quot;Не стартовал&amp;quot;;&lt;br /&gt;
$TLS_last_status_passed       = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_select_builds_header     = &amp;quot;Выберите сборку(и)&amp;quot;;&lt;br /&gt;
$TLS_select_components_header = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_select_keyword_header    = &amp;quot;Выберите ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_select_last_result_header = &amp;quot;Выберите последний результат&amp;quot;;&lt;br /&gt;
$TLS_select_owner_header      = &amp;quot;Выберите владельца&amp;quot;;&lt;br /&gt;
$TLS_select_report_format_header = &amp;quot;Выберите формат отчета&amp;quot;;&lt;br /&gt;
$TLS_submit_query             = &amp;quot;Выполнить запрос&amp;quot;;&lt;br /&gt;
$TLS_test_plan_header         = &amp;quot;План тестирования: &amp;quot;;&lt;br /&gt;
$TLS_query_metrics_report     = &amp;quot;Запросить отчет по метрикам&amp;quot;;&lt;br /&gt;
$TLS_enter_start_time         = &amp;quot;Введите начальное время&amp;quot;;&lt;br /&gt;
$TLS_enter_end_time           = &amp;quot;Введите конечное время&amp;quot;;&lt;br /&gt;
$TLS_year                     = &amp;quot;год&amp;quot;;&lt;br /&gt;
$TLS_month                    = &amp;quot;месяц&amp;quot;;&lt;br /&gt;
$TLS_day                      = &amp;quot;день&amp;quot;;&lt;br /&gt;
$TLS_hour                     = &amp;quot;час&amp;quot;;&lt;br /&gt;
$TLS_search_in_notes          = &amp;quot;поиск строки в заметках&amp;quot;;&lt;br /&gt;
$TLS_executor                 = &amp;quot;исполнитель&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_report.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_show_collapse                  = &amp;quot;Показать/Свернуть&amp;quot;;&lt;br /&gt;
$TLS_caption_user_selected_query_parameters = &amp;quot;Параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_not_yet_executed                       = &amp;quot;Еще не выполнялся&amp;quot;;&lt;br /&gt;
$TLS_show_hide_all                          = &amp;quot;Показать/Скрыть все&amp;quot;;&lt;br /&gt;
$TLS_th_builds                              = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_th_execution_ts                        = &amp;quot;Время&amp;quot;;&lt;br /&gt;
$TLS_th_last_result                         = &amp;quot;Последний результат&amp;quot;;&lt;br /&gt;
$TLS_th_report_format                       = &amp;quot;Тип отчета&amp;quot;;&lt;br /&gt;
$TLS_th_test_plan                           = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_test_suites                         = &amp;quot;Группа(ы) тестов&amp;quot;;&lt;br /&gt;
$TLS_th_tester_id                           = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_total_block                         = &amp;quot;# блокированных &amp;quot;;&lt;br /&gt;
$TLS_th_total_cases                         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_th_total_fail                          = &amp;quot;# сбоев&amp;quot;;&lt;br /&gt;
$TLS_th_total_not_run                       = &amp;quot;# не стартовавших&amp;quot;;&lt;br /&gt;
$TLS_th_total_pass                          = &amp;quot;# выполненных&amp;quot;;&lt;br /&gt;
$TLS_th_start_time      = &amp;quot;Время начала&amp;quot;;&lt;br /&gt;
$TLS_th_end_time        = &amp;quot;Время окончания&amp;quot;;&lt;br /&gt;
$TLS_th_executor        = &amp;quot;Исполнитель&amp;quot;;&lt;br /&gt;
$TLS_th_search_notes_string = &amp;quot;в заметках искать строку&amp;quot;;&lt;br /&gt;
$TLS_true               = &amp;quot;да&amp;quot;;&lt;br /&gt;
$TLS_false              = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_display_suite_summaries = &amp;quot;Показать итоги по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_display_query_params    = &amp;quot;Показать параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_display_totals          = &amp;quot;Показать суммарную информацию&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsReqs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_title_blocked  = &amp;quot;Заблокировано требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_failed   = &amp;quot;Нарушено требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_notrun   = &amp;quot;Непроверенных требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_passed   = &amp;quot;Выполнено требований&amp;quot;;&lt;br /&gt;
$TLS_title_result_req_testplan = &amp;quot;Результаты тестов основанных на спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan    = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsSend.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send_report        = &amp;quot;Послать отчет&amp;quot;;&lt;br /&gt;
$TLS_check_send_to_me       = &amp;quot;Послать отчет самому себе&amp;quot;;&lt;br /&gt;
$TLS_mail_body              = &amp;quot;Тело письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_report            = &amp;quot;Отчет:&amp;quot;;&lt;br /&gt;
$TLS_mail_subject           = &amp;quot;Тема письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_to                = &amp;quot;Кому:&amp;quot;;&lt;br /&gt;
$TLS_status_for_build       = &amp;quot;Состояние сборки&amp;quot;;&lt;br /&gt;
$TLS_tp_status              = &amp;quot;Общее состояние плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tp_status_for_build    = &amp;quot;Состояние плана тестирования для сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_generated_by_TestLink_on=&amp;quot;Сформировано системой TestLink,  &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_m2.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcPrintNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_print_opt  = &amp;quot;Настройки печати&amp;quot;;&lt;br /&gt;
$TLS_tr_td_show_as      = &amp;quot;Показать как&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcReorder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_tc_to_reorder       = &amp;quot;Нет тестов для переупорядочивания.&amp;quot;;&lt;br /&gt;
$TLS_title_change_tc_order  = &amp;quot;Изменить порядок тестов в этой группе тестов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcTree.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_refresh       = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_button_update_tree   = &amp;quot;Обновить дерево&amp;quot;;&lt;br /&gt;
$TLS_do_auto_update       = &amp;quot;Обновлять дерево после каждой операции&amp;quot;;&lt;br /&gt;
$TLS_no_tc_spec_av        = &amp;quot;Нет тест-спецификаций.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tc_exec_assignment.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_do                     = &amp;quot;Пуск&amp;quot;;&lt;br /&gt;
$TLS_btn_update_selected_tc     = &amp;quot;Изменить выбранные тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tc_exec_assignment   = &amp;quot;Назначить прогоны тестов для плана тестирования &amp;quot;;&lt;br /&gt;
$TLS_user                       = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_user_bulk_assignment       = &amp;quot;Массовое назначение ответственных пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/testSetNavigator.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/userInfo.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_change_passwd        = &amp;quot;Сменить пароль&amp;quot;;&lt;br /&gt;
$TLS_btn_upd_user_data        = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd            = &amp;quot;Новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd_again      = &amp;quot;Повторите новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_old_passwd            = &amp;quot;Старый пароль&amp;quot;;&lt;br /&gt;
$TLS_title_account_settings   = &amp;quot;Настройки профиля&amp;quot;;&lt;br /&gt;
$TLS_title_change_your_passwd = &amp;quot;Сменить ваш пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_different_pwd    = &amp;quot;Пожалуйста, повторите еще раз ваш новый пароль. Введенные пароли не совпадают.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd        = &amp;quot;Пароль должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_your_password_is_external = &amp;quot;Ваш пароль ведётся во внешней системе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersassign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestProject          = &amp;quot;проект&amp;quot;;&lt;br /&gt;
$TLS_User                 = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_btn_change           = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testplan_user_roles = &amp;quot;Назначить роли плана тестирования пользователям&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testproject_user_roles = &amp;quot;Назначить роли проекта пользователям&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testproject_roles = &amp;quot;Назначить роли проекта&amp;quot;;&lt;br /&gt;
$TLS_th_roles = &amp;quot;Роли&amp;quot;;&lt;br /&gt;
$TLS_title_assign_roles = &amp;quot;Назначить роли&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_reset_password = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
$TLS_caption_user_details = &amp;quot;Свойства пользователя&amp;quot;;&lt;br /&gt;
$TLS_th_password = &amp;quot;Пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_first_name = &amp;quot;Пожалуста, введите имя&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_last_name = &amp;quot;Пожалуйста, введите фамилию&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_login = &amp;quot;Пожалуйста, введите логин&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentupload.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachment_upload_ok=&amp;quot;Файл загружен.&amp;quot;;&lt;br /&gt;
$TLS_enter_attachment_title = &amp;quot;Введите заголовок для этого вложения.&amp;quot;;&lt;br /&gt;
$TLS_import_was_ok = &amp;quot;Импорт прошел успешно.&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file = &amp;quot;Максимальный размер файла:&amp;quot;;&lt;br /&gt;
$TLS_title_upload_attachment = &amp;quot;Загрузить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_N_A                          = &amp;quot;N/A&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_role              = &amp;quot;Удалить роль&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_role                = &amp;quot;Править роль&amp;quot;;&lt;br /&gt;
$TLS_btn_confirm_delete           = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_no_roles                     = &amp;quot;Нет ролей&amp;quot;;&lt;br /&gt;
$TLS_title_roles                  = &amp;quot;Доступные роли&amp;quot;;&lt;br /&gt;
$TLS_warning_users_will_be_reset  = &amp;quot;'Задетым пользователям' будет назначена гостевая роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_export_with_keywords = &amp;quot;Экспортировать с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_active_build     = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_build       = &amp;quot;Редактировать эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_open_build       = &amp;quot;Открыть сборку&amp;quot;;&lt;br /&gt;
$TLS_btn_build_create     = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_no_builds            = &amp;quot;В этот плане тестирования сборок не определено.&amp;quot;;&lt;br /&gt;
$TLS_th_description       = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_open              = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_title_build_list     = &amp;quot;Список существующих сборок&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_build = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Вы действительно хотите уничтожить эту сборку? &amp;lt;p&amp;gt;&lt;br /&gt;
Все связанные данные (в частности, результаты тестов) будут также удалены!&amp;quot;;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_alt_delete_tp   = &amp;quot;Удалить этот план тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_alt_edit_tp     = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_msg_delete_confirm = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Вы уверены, что хотите удалить план тестирования? &amp;lt;p&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать не удаляя.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_testplan_th_delete     = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_list    = &amp;quot;Список планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_empty_list = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 Ни одного плана тестирования не определено! &amp;lt;p&amp;gt;&lt;br /&gt;
 Чтобы воспользоваться функциональностью прогонов тестов, нужно &lt;br /&gt;
 создать хотя бы один.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_alt_active_testplan = &amp;quot;Активный план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==gui/templates/mainPage_left.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_href_assign_user_roles = &amp;quot;Назначить пользовательские роли&amp;quot;;&lt;br /&gt;
$TLS_href_browse_tc = &amp;quot;Просмотр тестов&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_tproject_assign = &amp;quot;Привязка пользовательских полей&amp;quot;;&lt;br /&gt;
$TLS_href_create_product = &amp;quot;Создать новый проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_product = &amp;quot;Править/Удалить проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_tc = &amp;quot;Редактировать тесты&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_assign = &amp;quot;Привязать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_manage = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_view = &amp;quot;Просмотр ключевых слов&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc = &amp;quot;Печать тестов&amp;quot;;&lt;br /&gt;
$TLS_href_req_assign = &amp;quot;Привязать требования&amp;quot;;&lt;br /&gt;
$TLS_href_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_href_roles_management = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_href_search_tc = &amp;quot;Искать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_user_management = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_title_requirements = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_title_test_spec = &amp;quot;Спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_product_mgmt = &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage_right.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_filter_tp_by_product   = &amp;quot;Фильтровать план тестирования по проектам&amp;quot;;&lt;br /&gt;
$TLS_href_add_test_case     = &amp;quot;Добавить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_build_new         = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_href_execute_test      = &amp;quot;Выполнить тесты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_assign_priority = &amp;quot;Установить приоритеты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_define_priority = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_href_plan_management   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_plan_mstones      = &amp;quot;Управление вехами&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc_suite    = &amp;quot;Печать плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_remove_test_case  = &amp;quot;Удалить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_rep_and_metrics   = &amp;quot;Отчеты и метрики&amp;quot;;&lt;br /&gt;
$TLS_href_tc_exec_assignment = &amp;quot;Поручить прогон тестов&amp;quot;;&lt;br /&gt;
$TLS_href_upd_mod_tc        = &amp;quot;Сохранить измененные тесты&amp;quot;;&lt;br /&gt;
$TLS_msg_no_rights_for_tp   = &amp;quot;- недоступен (У вас нет доступа ни для одного плана тестирования)&amp;quot;;&lt;br /&gt;
$TLS_testplan_role          = &amp;quot;Роль плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_suite  = &amp;quot;Содержание плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_execution   = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan_mgmt   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_newest_tcversions = &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_add.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bug_added                = &amp;quot;Баг добавлен&amp;quot;;&lt;br /&gt;
$TLS_error_bug_does_not_exist_on_bts=&amp;quot;Бага с таким ID не зарегистрировано в BTS!&amp;quot;;&lt;br /&gt;
$TLS_error_wrong_BugID_format = &amp;quot;Неверный формат BugID!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_delete.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugdeleting_was_ok = &amp;quot;Баг успешно удален.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/doAuthorize.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_ldap_auth_failed = &amp;quot;LDAP-аутентификация не удалась&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_bind_failed = &amp;quot;Не удалось выполнить LDAP-binding&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_server_connect_failed = &amp;quot;Не удалось соединится с LDAP-сервером&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_update_failed = &amp;quot;Обновление LDAP не удалось&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_user_not_found = &amp;quot;LDAP-пользователь не найден&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/product.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_product_delete_fails = &amp;quot;При удалении этого проекта произошла ошибка&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/results.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_trep_failing = &amp;quot;Провалены&amp;quot;;&lt;br /&gt;
$TLS_trep_passing = &amp;quot;Прошли&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_build = &amp;quot;Состояние для сборки&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_ts = &amp;quot;Состояние для группы тестов&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;Не назначены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/resultsMoreBuilds.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugs                 = &amp;quot;Связанные Баги&amp;quot;;&lt;br /&gt;
$TLS_builds_selected      = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_case_not_run_warning = &amp;quot;Тест не запущен&amp;quot;;&lt;br /&gt;
$TLS_category_header      = &amp;quot;Группа тестов =&amp;quot;;&lt;br /&gt;
$TLS_daterun              = &amp;quot;Дата запуска&amp;quot;;&lt;br /&gt;
$TLS_last_status          = &amp;quot;Последнее состояние&amp;quot;;&lt;br /&gt;
$TLS_number_blocked       = &amp;quot;# блокированных&amp;quot;;&lt;br /&gt;
$TLS_number_cases         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_number_executions    = &amp;quot;# тест-пусков&amp;quot;;&lt;br /&gt;
$TLS_number_failed        = &amp;quot;# тест-сбоев&amp;quot;;&lt;br /&gt;
$TLS_number_not_run       = &amp;quot;# не запущено&amp;quot;;&lt;br /&gt;
$TLS_number_passed        = &amp;quot;# пройденных&amp;quot;;&lt;br /&gt;
$TLS_owner                = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_owner_header         = &amp;quot;Tester =&amp;quot;;&lt;br /&gt;
$TLS_runby                = &amp;quot;Запущен тестировщиком &amp;quot;;&lt;br /&gt;
$TLS_test_plan_name       = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/roles.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_desc_cfield_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_desc_cfield_view       = &amp;quot;Просмотр пользовательских полей (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_key    = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_product= &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_req    = &amp;quot;Управление требованиями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_tc     = &amp;quot;Создание/правка тестов&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_users  = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_key      = &amp;quot;Просмотр ключевых слов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_req      = &amp;quot;Просмотр требований (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_tc       = &amp;quot;Просмотр тестов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_role_management   = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_create_build = &amp;quot;Создание/редактирование сборки&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_execute  = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_metrics  = &amp;quot;Метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_planning = &amp;quot;Составление плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_user_role_assignment = &amp;quot;Назначение ролей&amp;quot;;&lt;br /&gt;
$TLS_error_duplicate_rolename = &amp;quot;Роль с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rights     = &amp;quot;Вы не можете создать роль без каких-либо прав!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rolename   = &amp;quot;Вам нужно ввести имя для этой роли.&amp;quot;;&lt;br /&gt;
$TLS_mgt_testplan_create      = &amp;quot;Создать/править план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testproject.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_creating_req_spec    = &amp;quot;Ошибка при создании спецификации требования&amp;quot;;&lt;br /&gt;
$TLS_info_product_name_empty    = &amp;quot;Нельзя давать пустое имя.&amp;quot;;&lt;br /&gt;
$TLS_keyword_already_exists     = &amp;quot;Такое ключевое слово уже есть&amp;quot;;&lt;br /&gt;
$TLS_string_contains_bad_chars  = &amp;quot;Введенная строка содержит недопустимые символы.&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_req_title= &amp;quot;Требование с таким заголовком уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/requirements.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_conflict               = &amp;quot;Конфликт&amp;quot;;&lt;br /&gt;
$TLS_error_deleting_req     = &amp;quot;Ошибка при удалении требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_inserting_req    = &amp;quot;Ошибка при вставке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_req     = &amp;quot;Ошибка при правке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_reqspec = &amp;quot;Ошибка при правке спецификаций требований.&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_xml = &amp;quot;Файл не распознан как корректный XML, и не может быть использован.&amp;quot;;&lt;br /&gt;
$TLS_ok = &amp;quot;OK&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description1 = &amp;quot; - тип CSV требует три поля на каждую запись: 'req_doc_id','title','description'&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description2 = &amp;quot; - CSV, экспортированный из DOORS требует запись-заголовок.&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_overwritten  = &amp;quot;перезаписано!&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_skipped      = &amp;quot;пропущено&amp;quot;;&lt;br /&gt;
$TLS_req_state_not_testable         = &amp;quot;не тестируемо&amp;quot;;&lt;br /&gt;
$TLS_req_state_valid                = &amp;quot;актуально&amp;quot;;&lt;br /&gt;
$TLS_the_format_req_xml_import      = &amp;quot;Неверный XML-формат для импорта требований&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_reqdoc_id    = &amp;quot;Не уникальный (дублирующий) id документа&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testsuite.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component_name_already_exists = &amp;quot;Группа тестов с таким именем уже зарегистрирована&amp;quot;;&lt;br /&gt;
$TLS_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/exec.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_results_submitted = &amp;quot;Результаты тестов отправлены.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/print.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_printed_by_TestLink_on = &amp;quot;Распечатано TestLink'ом &amp;quot;;&lt;br /&gt;
$TLS_title_toc = &amp;quot;Содержание&amp;quot;;&lt;br /&gt;
$TLS_passfail = &amp;quot;Пройден / Провален&amp;quot;;&lt;br /&gt;
$TLS_testnotes = &amp;quot;Заметки к тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testcase.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testcase_name_already_exists = &amp;quot;Тест с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_the_format_tc_xml_import = &amp;quot;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/info.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_email_sent_message = &amp;quot;Ваше письмо отослано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/users.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Unknown = &amp;quot;Неизвестно&amp;quot;;&lt;br /&gt;
$TLS_duplicate_login = &amp;quot;Пользователь с таким логином уже есть!&amp;quot;;&lt;br /&gt;
$TLS_login_must_not_be_empty = &amp;quot;Логин не должен быть пустым!&amp;quot;;&lt;br /&gt;
$TLS_wrong_old_password = &amp;quot;Старый пароль неверен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/email_api.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_stmp_host_unconfigured = &amp;quot;Некорректно указан SMTP host!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/common.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/configCheck.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachments_dir = &amp;quot;каталог для вложений:&amp;quot;;&lt;br /&gt;
$TLS_bts_connection_problems = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Не удалось соединиться с вашей Bug Tracking System.&amp;lt;p&amp;gt;&lt;br /&gt;
Пожалуйста, проверьте настройки.&amp;lt;p&amp;gt;&lt;br /&gt;
Будьте внимательны, эта проблема &lt;br /&gt;
снижает производительность TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_but_directory_is_not_writable = &amp;quot;Каталог закрыт для записи!&amp;quot;;&lt;br /&gt;
$TLS_directory_is_writable = &amp;quot;Каталог открыт для записи.&amp;quot;;&lt;br /&gt;
$TLS_does_not_exist = &amp;quot;не существует&amp;quot;;&lt;br /&gt;
$TLS_exists = &amp;quot;существует&amp;quot;;&lt;br /&gt;
$TLS_ldap_extension_not_loaded=&amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Метод аутентификации указан как LDAP &amp;lt;/br&amp;gt;&lt;br /&gt;
однако PHP/LDAP extension не загружено =&amp;gt; &lt;br /&gt;
Вам не удастся войти в систему. &lt;br /&gt;
Пожалуйста, свяжитесь с администратором TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_sec_note_admin_default_pwd = &amp;quot;Вам необходимо сменить пароль по умолчанию у пользователя 'admin'!&amp;quot;;&lt;br /&gt;
$TLS_sec_note_remove_install_dir = &amp;quot;Инсталляционный каталог должен быть удален!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/frmWorkArea.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_create_a_build = &amp;quot;Создать новую сборку&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part1 = &amp;quot;Ни одной сборки для этого тест плана не создано.&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part2 = &amp;quot;Создайте их или попросите об этом свое руководство.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/myTPInfo.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testplans_available = &amp;quot;К сожалению, ни одного плана тестирования не доступно&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/tlsmarty.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywords.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_empty_keyword_no = &amp;quot;Ключевое слово должно быть непустым!&amp;quot;;&lt;br /&gt;
$TLS_keywords_char_not_allowed = &amp;quot;Запятые и кавычки недопустимы в ключевых словах!&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails2 = &amp;quot; дал сбой &amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_csv_import = &amp;quot;keyword;notes&amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_xml_import = &amp;quot;&amp;amp;lt;keywords&amp;gt;&amp;amp;lt;keyword name=\&amp;quot;name\&amp;quot;&amp;gt;Notes&amp;amp;lt;/keyword&amp;gt;&amp;amp;lt;/keywords&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_kw_delete_fails = &amp;quot;Не удалось удаление ключевого слова!&amp;quot;;&lt;br /&gt;
$TLS_kw_update_fails = &amp;quot;Не удалась правка ключевого слова!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assigned_kword  = &amp;quot;Связанные ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_available_kword = &amp;quot;Доступные ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/buildNew.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cannot_add_build     = &amp;quot;Невозможно добавить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_delete_build  = &amp;quot;Невозможно удалить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_update_build  = &amp;quot;Ошибка при правке сборки!&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_build = &amp;quot;Сборка с таким идентификатором уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/plan.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_warning_empty_milestone_name = &amp;quot;Обязательно введите имя для вехи!&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_valid_date = &amp;quot;Введенная дата некорректна!&amp;quot;;&lt;br /&gt;
$TLS_warning_invalid_percentage_value = &amp;quot;Значения-проценты должны быть от 0 to 100 (%)&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'!&amp;quot;;&lt;br /&gt;
$TLS_warning_percentage_value_higher_than_100 = &amp;quot;Сумма всех значений-процентов не должна быть больше 100!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planMilestones.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_milestone_delete_fails         = &amp;quot;Не удалось удалить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_add_failed   = &amp;quot;Не удалось добавить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_update_failed = &amp;quot;Не удалось править веху!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planOwner.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_imp_high     = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_low      = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_medium   = &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_assign_tp    = &amp;quot;Поручить планы тестирования пользователю: &amp;quot;;&lt;br /&gt;
$TLS_title_assign_users = &amp;quot;Назначить пользователей на план тестирования: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_nav_test_plan = &amp;quot;Навигатор - Планы тестирования&amp;quot;;&lt;br /&gt;
$TLS_nav_users = &amp;quot;Навигатор - Пользователи&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planUpdateTC.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_category_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_component_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_deleted = &amp;quot;удалена&amp;quot;;&lt;br /&gt;
$TLS_different_versions = &amp;quot;Различные версии&amp;quot;;&lt;br /&gt;
$TLS_plan_update_no_tc_updated = &amp;quot;Ни один тест не изменен&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted2 = &amp;quot;был удален.&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated2 = &amp;quot;был изменен.&amp;quot;;&lt;br /&gt;
$TLS_tcorder_has_changed = &amp;quot;Порядок тестов был изменен&amp;quot;;&lt;br /&gt;
$TLS_updated = &amp;quot;изменен&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_plan_navigator = &amp;quot;Навигация по планам тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetRemove.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tcase_removed_from_tplan=&amp;quot;тест удален из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_multiple_tcase_removed_from_tplan=&amp;quot;Тесты удалены из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_created_ok = &amp;quot;План тестирования был создан&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed1 = &amp;quot;Правка плана тестирования '&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed2 = &amp;quot;' не удалась&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_tplan_name = &amp;quot;План тестирования с таким именем уже есть. Выберите другое имя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/print/selectData.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_show_doc_header = &amp;quot;Показать заголовок документа&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_body = &amp;quot;Показать тело теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_summary = &amp;quot;Показать резюме теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_toc = &amp;quot;Показать Содержание&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_author = &amp;quot;Показать автора теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_passfail = &amp;quot;Показать статус &amp;amp;laquo;пройден/провален&amp;amp;raquo; и заметки&amp;quot;;&lt;br /&gt;
$TLS_title_tc_print_navigator = &amp;quot;Навигация - Печать спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tp_print_navigator = &amp;quot;Навигация - Печать плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/project/projectedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_product_name_duplicate = &amp;quot;Уже есть проект с именем %s. &amp;lt;br&amp;gt;Пожалуйста, выберите другое имя&amp;quot;;&lt;br /&gt;
$TLS_info_no_more_prods = &amp;quot;проектов больше нет.&amp;quot;;&lt;br /&gt;
$TLS_info_product_activated = &amp;quot;проект активирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_inactivated = &amp;quot;проект деактивирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_not_deleted_check_log = &amp;quot;Не удалось удалить проект. Проверьте лог TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_info_product_was_deleted = &amp;quot;проект успешно удален.&amp;quot;;&lt;br /&gt;
$TLS_refer_to_log = &amp;quot; Пожалуйста, изучите лог TestLink'а для дополнительной информации.&amp;quot;;&lt;br /&gt;
$TLS_test_project_activated = &amp;quot;проект %s успешно активирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_created = &amp;quot;проект %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_test_project_deleted = &amp;quot;проект %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_test_project_inactivated = &amp;quot;проект %s успешно деактивирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_updated = &amp;quot;проект %s успешно отредактирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_update_failed = &amp;quot;Правка проекта %s не удалась!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/charts.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_maani_copyright = &amp;quot;flash technology предоставлена http://www.maani.us&amp;quot;;&lt;br /&gt;
$TLS_graphical_reports = &amp;quot;Графические отчеты&amp;quot;;&lt;br /&gt;
$TLS_overall_metrics = &amp;quot;Общие метрики&amp;quot;;&lt;br /&gt;
$TLS_results_by_keyword = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_results_by_tester = &amp;quot;Рузультаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_results_top_level_suites = &amp;quot;Результаты по топ группам тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_file_is_not_ok_for_import_type = &amp;quot;Кажется тип файла не совпадает с выбранным для импорта типом&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_text = &amp;quot;Это не текстовый файл. Использовать нельзя.&amp;quot;;&lt;br /&gt;
$TLS_please_choose_req_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_req_import_finished = &amp;quot;Импорт завершен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqSpecView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_tc_from_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_req_created = &amp;quot;Требование %s успешно создано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqTcAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_msg_noselect = &amp;quot;Ничего не выбрано&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notupdated_coverage = &amp;quot;Покрытие не обновлено для Требований: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsBugs.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_report_all_builds = &amp;quot;Отчет: Результаты тестов для всех сборок&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsAllBuilds.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_metrics_x_build = &amp;quot; - Результаты тестов. Метрики X Сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsByStatus.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_list_of_blocked = &amp;quot;Список блокированных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_failed = &amp;quot;Список проваленных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_not_run = &amp;quot;Список незапущенных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsTC.php==&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_link_charts=&amp;quot;Диаграммы&amp;quot;;&lt;br /&gt;
$TLS_link_report_blocked_tcs = &amp;quot;Блокированные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_failed = &amp;quot;Проваленные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_general_tp_metrics = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_active_build = &amp;quot;Метрики активной сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_more_builds = &amp;quot;Запрос метрик&amp;quot;;&lt;br /&gt;
$TLS_link_report_not_run=&amp;quot;Не запущенные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_overall_build = &amp;quot;Общий статус всех сборок&amp;quot;;&lt;br /&gt;
$TLS_link_report_reqs_coverage = &amp;quot;Отчет о выполнении требований&amp;quot;;&lt;br /&gt;
$TLS_link_report_test = &amp;quot;Отчет по тестам&amp;quot;;&lt;br /&gt;
$TLS_link_report_total_bugs = &amp;quot;Всего багов по каждому тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsSend.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_to_empty_email_warning = &amp;quot;Пожалуйста, введите правильный email.&amp;quot;;&lt;br /&gt;
$TLS_warning_create_build_first = &amp;quot;Сначала Вы должны создать или импортировать сборки.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/displayMgr.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_sendreport_no_email_credentials = &amp;quot;Email для этого пользователя не указан, пожалуйста, укажите его в настройках своего профиля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/archive.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/listTestCases.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_file_to_import = &amp;quot;Пожалуйста, выберите файл для импорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_import_to = &amp;quot;Импорт тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_import_to = &amp;quot;Импорт группы тестов&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tcase_file = &amp;quot;Некорректный XML в файле с тестами&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tsuite_file = &amp;quot;Некорректный XML в файле с группой тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcexport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testcases_to_export = &amp;quot;Нет тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_no_testsuites_to_export = &amp;quot;Нет группы тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export = &amp;quot;Экспорт теста&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export_all = &amp;quot;Экспортировать все тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export_all = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/containerEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_delete = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_delete_notice = &amp;quot;Внимание: Все связанные результаты прогонов будут удалены&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_com_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_current = &amp;quot;текущий&amp;quot;;&lt;br /&gt;
$TLS_delete_linked = &amp;quot;Ссылки на планы тестирования будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_delete_linked_and_exec = &amp;quot;Ссылки на планы тестирования и результаты выполнения будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_error_tc_add = &amp;quot;При добавлении теста произошла ошибка&amp;quot;;&lt;br /&gt;
$TLS_title_del_tc = &amp;quot;Удалить тест &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesview.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_deletion = &amp;quot;Не удалось удалить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersassign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_test_projects = &amp;quot;Не заведено ни одного проекта&amp;quot;;&lt;br /&gt;
$TLS_no_test_plans = &amp;quot;Для этого проекта не заведено ни одного плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_project_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
$TLS_test_plan_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_user_created=&amp;quot;Пользователь %s был успешно создан&amp;quot;;&lt;br /&gt;
$TLS_user_deleted=&amp;quot;Пользователь %s был успешно удален&amp;quot;;&lt;br /&gt;
$TLS_user_not_added = &amp;quot;Не удалось добавить пользователя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_creation = &amp;quot;Не удалось создать роль!&amp;quot;;&lt;br /&gt;
$TLS_error_role_update = &amp;quot;Не удалось исправить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/cfields/cfields_edit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cf_name_exists = &amp;quot;Пользовательское поле с таким именем уже существует. Пожалуста, выберите другое имя.&amp;quot;;&lt;br /&gt;
$TLS_error_creating_cf = &amp;quot;Не удалось создать пользовательское поле!&amp;quot;;&lt;br /&gt;
$TLS_do_update = &amp;quot;исправлено&amp;quot;;&lt;br /&gt;
$TLS_do_delete = &amp;quot;удалено&amp;quot;;&lt;br /&gt;
$TLS_do_add = &amp;quot;добавлено&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Open=&amp;quot;Открыто&amp;quot;;&lt;br /&gt;
$TLS_Resolved=&amp;quot;Исправленных&amp;quot;;&lt;br /&gt;
$TLS_Total=&amp;quot;Всего&amp;quot;;&lt;br /&gt;
$TLS_TCs_with_Bugs=&amp;quot;Тестов с багами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=3131</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=3131"/>
				<updated>2007-10-05T13:12:26Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Основные понятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Проект&amp;quot;]; &lt;br /&gt;
 TestSpec [label=&amp;quot;Спецификация тестирования&amp;quot;];&lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 /*Group2 [label=&amp;quot;...&amp;quot;];*/&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
 Build [label=&amp;quot;Сборка&amp;quot;];&lt;br /&gt;
 TestLog [label=&amp;quot;Результат теста&amp;quot;];&lt;br /&gt;
 Bug [label=&amp;quot;Отчет об ошибке&amp;quot; fillcolor=&amp;quot;green&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;TestSpec [arrowhead=&amp;quot;&amp;quot;];&lt;br /&gt;
 TestSpec-&amp;gt;Group1-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 Product-&amp;gt;RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 TestPlan-&amp;gt;Build;&lt;br /&gt;
 TestCase-&amp;gt;TestLog;&lt;br /&gt;
 Build-&amp;gt;TestLog;&lt;br /&gt;
 TestLog-&amp;gt;Bug;&lt;br /&gt;
 TestPlan-&amp;gt;Keyword;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов. Это дерево можно фильтровать по ключевому слову, результам выполнения, ответственному. &lt;br /&gt;
&lt;br /&gt;
Выбор сборки хоть и находиться в той же форме, но несет другой смысл, не фильтра. В данном случае выбирается сборка с которой будут связаны результаты выполнения.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке. Соответственно, все результаты проведенных им тестов будут привязаны к этой сборке. И в отчетах они будут показаны для сборки 2.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал свой логин в поле «ответственный» в этом случае будут показаны только те тесты которые были ему назначены (таких может и не быть). &lt;br /&gt;
{{note}} Заметим, что для сохранения результатов выполнения тестов не обязательно быть ответственным за тест, нужно только иметь соответствующий права.&lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9462</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9462"/>
				<updated>2007-10-05T13:10:03Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Основные понятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Проект&amp;quot;]; &lt;br /&gt;
 TestSpec [label=&amp;quot;Спецификация тестирования&amp;quot;];&lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
 Build [label=&amp;quot;Сборка&amp;quot;];&lt;br /&gt;
 TestLog [label=&amp;quot;Результат теста&amp;quot;];&lt;br /&gt;
 Bug [label=&amp;quot;Отчет об ошибке&amp;quot; fillcolor=&amp;quot;green&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;TestSpec [arrowhead=&amp;quot;&amp;quot;];&lt;br /&gt;
 TestSpec-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 Product-&amp;gt;RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 TestPlan-&amp;gt;Build;&lt;br /&gt;
 TestCase-&amp;gt;TestLog;&lt;br /&gt;
 Build-&amp;gt;TestLog;&lt;br /&gt;
 TestLog-&amp;gt;Bug;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов. Это дерево можно фильтровать по ключевому слову, результам выполнения, ответственному. &lt;br /&gt;
&lt;br /&gt;
Выбор сборки хоть и находиться в той же форме, но несет другой смысл, не фильтра. В данном случае выбирается сборка с которой будут связаны результаты выполнения.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке. Соответственно, все результаты проведенных им тестов будут привязаны к этой сборке. И в отчетах они будут показаны для сборки 2.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал свой логин в поле «ответственный» в этом случае будут показаны только те тесты которые были ему назначены (таких может и не быть). &lt;br /&gt;
{{note}} Заметим, что для сохранения результатов выполнения тестов не обязательно быть ответственным за тест, нужно только иметь соответствующий права.&lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9460</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9460"/>
				<updated>2007-10-05T13:08:47Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Основные понятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Проект&amp;quot;]; &lt;br /&gt;
 TestSpec [label=&amp;quot;Спецификация тестирования&amp;quot;];&lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
 Build [label=&amp;quot;Сборка&amp;quot;];&lt;br /&gt;
 TestLog [label=&amp;quot;Результат теста&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;TestSpec [arrowhead=&amp;quot;&amp;quot;];&lt;br /&gt;
 TestSpec-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 Product-&amp;gt;RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 TestPlan-&amp;gt;Build;&lt;br /&gt;
 TestCase-&amp;gt;TestLog;&lt;br /&gt;
 Build-&amp;gt;TestLog;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов. Это дерево можно фильтровать по ключевому слову, результам выполнения, ответственному. &lt;br /&gt;
&lt;br /&gt;
Выбор сборки хоть и находиться в той же форме, но несет другой смысл, не фильтра. В данном случае выбирается сборка с которой будут связаны результаты выполнения.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке. Соответственно, все результаты проведенных им тестов будут привязаны к этой сборке. И в отчетах они будут показаны для сборки 2.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал свой логин в поле «ответственный» в этом случае будут показаны только те тесты которые были ему назначены (таких может и не быть). &lt;br /&gt;
{{note}} Заметим, что для сохранения результатов выполнения тестов не обязательно быть ответственным за тест, нужно только иметь соответствующий права.&lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9458</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9458"/>
				<updated>2007-10-05T12:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Основные понятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Проект&amp;quot;]; &lt;br /&gt;
 TestSpec [label=&amp;quot;Спецификация тестирования&amp;quot;];&lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;TestSpec [arrowhead=&amp;quot;&amp;quot;];&lt;br /&gt;
 TestSpec-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 Product-&amp;gt;RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов. Это дерево можно фильтровать по ключевому слову, результам выполнения, ответственному. &lt;br /&gt;
&lt;br /&gt;
Выбор сборки хоть и находиться в той же форме, но несет другой смысл, не фильтра. В данном случае выбирается сборка с которой будут связаны результаты выполнения.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке. Соответственно, все результаты проведенных им тестов будут привязаны к этой сборке. И в отчетах они будут показаны для сборки 2.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал свой логин в поле «ответственный» в этом случае будут показаны только те тесты которые были ему назначены (таких может и не быть). &lt;br /&gt;
{{note}} Заметим, что для сохранения результатов выполнения тестов не обязательно быть ответственным за тест, нужно только иметь соответствующий права.&lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9456</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9456"/>
				<updated>2007-09-20T14:19:22Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Основные понятия */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Проект&amp;quot;]; &lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов. Это дерево можно фильтровать по ключевому слову, результам выполнения, ответственному. &lt;br /&gt;
&lt;br /&gt;
Выбор сборки хоть и находиться в той же форме, но несет другой смысл, не фильтра. В данном случае выбирается сборка с которой будут связаны результаты выполнения.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке. Соответственно, все результаты проведенных им тестов будут привязаны к этой сборке. И в отчетах они будут показаны для сборки 2.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал свой логин в поле «ответственный» в этом случае будут показаны только те тесты которые были ему назначены (таких может и не быть). &lt;br /&gt;
{{note}} Заметим, что для сохранения результатов выполнения тестов не обязательно быть ответственным за тест, нужно только иметь соответствующий права.&lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9450</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9450"/>
				<updated>2007-09-17T14:23:53Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Иерархия групп тестов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Продукт/Проект&amp;quot;]; &lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов. Это дерево можно фильтровать по ключевому слову, результам выполнения, ответственному. &lt;br /&gt;
&lt;br /&gt;
Выбор сборки хоть и находиться в той же форме, но несет другой смысл, не фильтра. В данном случае выбирается сборка с которой будут связаны результаты выполнения.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке. Соответственно, все результаты проведенных им тестов будут привязаны к этой сборке. И в отчетах они будут показаны для сборки 2.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал свой логин в поле «ответственный» в этом случае будут показаны только те тесты которые были ему назначены (таких может и не быть). &lt;br /&gt;
{{note}} Заметим, что для сохранения результатов выполнения тестов не обязательно быть ответственным за тест, нужно только иметь соответствующий права.&lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9448</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9448"/>
				<updated>2007-09-17T14:04:34Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Общая информация */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Продукт/Проект&amp;quot;]; &lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Есть (создана) сборка в статусе &amp;quot;активная&amp;quot;.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки.&lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9446</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9446"/>
				<updated>2007-09-17T13:39:19Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Создание тестов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Продукт/Проект&amp;quot;]; &lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его. Подробнее о ключевых словах написано в [[#Ключевые_слова|этом разделе]]&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9444</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9444"/>
				<updated>2007-09-17T13:36:39Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Создание тестов */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Продукт/Проект&amp;quot;]; &lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
Дополнительно можно привязать тест к нескольким ключевым словам. Если у вас достаточно прав, вы так же можете перейти к списку ключевых слов и редактированить его.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9442</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9442"/>
				<updated>2007-09-17T13:27:34Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: Схема&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;graph&amp;gt;&lt;br /&gt;
digraph G{&lt;br /&gt;
 node[shape=&amp;quot;box&amp;quot;, style=&amp;quot;filled&amp;quot;, fillcolor=&amp;quot;yellow&amp;quot;]; &lt;br /&gt;
 edge[arrowhead=&amp;quot;crow&amp;quot;]; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Product [label=&amp;quot;Продукт/Проект&amp;quot;]; &lt;br /&gt;
 Group1 [label=&amp;quot;Группа тестов&amp;quot;];&lt;br /&gt;
 Group2 [label=&amp;quot;...&amp;quot;];&lt;br /&gt;
 Group3 [label=&amp;quot;Группа тестов&amp;quot;];  &lt;br /&gt;
 TestCase [label=&amp;quot;Тест кейс&amp;quot;]; &lt;br /&gt;
 TestPlan [label=&amp;quot;План тестирования&amp;quot;]; &lt;br /&gt;
 RequirementSpecification [label=&amp;quot;Спецификация требований&amp;quot;]; &lt;br /&gt;
 Requirement [label=&amp;quot;Требование&amp;quot;]; &lt;br /&gt;
 Keyword     [label=&amp;quot;Тэг (ключевое слово)&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
 Product-&amp;gt;Group1-&amp;gt;Group2-&amp;gt;Group3-&amp;gt;TestCase;&lt;br /&gt;
 Product-&amp;gt;TestPlan-&amp;gt;TestCase;&lt;br /&gt;
 Keyword-&amp;gt;TestCase [arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
 RequirementSpecification-&amp;gt;Requirement;&lt;br /&gt;
 Requirement-&amp;gt;TestCase[arrowtail=&amp;quot;crow&amp;quot;];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/graph&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9464</id>
		<title>Strings.txt (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9464"/>
				<updated>2007-08-30T08:35:20Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: Сменил &amp;quot;Тест&amp;quot; на &amp;quot;тест&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
Статьяz с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «[[#Скачать|скачать]]» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скачать=&lt;br /&gt;
[{{SERVER}}{{localurl:Special:CisGetPHPPage|pagetitle={{PAGENAMEE}}}} Получить PHP-код]&lt;br /&gt;
&lt;br /&gt;
= Оригинал (наиболее полный английский перевод) =&lt;br /&gt;
* http://testlink.cvs.sourceforge.net/testlink/testlink/locale/en_GB/&lt;br /&gt;
&lt;br /&gt;
=Разделы файла strings.txt (ru_RU)=&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * TestLink Open Source Project - http://testlink.sourceforge.net/ &lt;br /&gt;
 *&lt;br /&gt;
 * Filename $RCSfile: strings.txt,v $&lt;br /&gt;
 *&lt;br /&gt;
 * @version  $Revision$&lt;br /&gt;
 * @modified $Date$ $Author$&lt;br /&gt;
 *&lt;br /&gt;
 * @author Vadim Ivanchenko, Stas Fomin, and russian Testlink community.&lt;br /&gt;
 * http://lib.custis.ru/index.php/TestLink:_strings.txt_%28RU%29&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
**/&lt;br /&gt;
&lt;br /&gt;
$TLS_STRINGFILE_CHARSET = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_asc    = &amp;quot;по возрастанию&amp;quot;;&lt;br /&gt;
$TLS_btn_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_desc = &amp;quot;по убыванию&amp;quot;;&lt;br /&gt;
$TLS_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan = $TLS_test_plan;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_SRS = &amp;quot;SRS&amp;quot;;&lt;br /&gt;
$TLS_Role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_Keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_Milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_testsuite_created = &amp;quot;Группа тестов создана&amp;quot;;&lt;br /&gt;
$TLS_requirement = &amp;quot;Требование&amp;quot;;&lt;br /&gt;
$TLS_assigned = &amp;quot;назначен&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;свободен&amp;quot;;&lt;br /&gt;
$TLS_import_file_type = &amp;quot;Тип импортируемого файла&amp;quot;;&lt;br /&gt;
$TLS_max_file_size_is = &amp;quot;Макс. размер файла&amp;quot;;&lt;br /&gt;
$TLS_supported_file_formats = &amp;quot;Поддерживаемые форматы файлов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==firstLogin.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_user = &amp;quot;К сожалению, не удалось создать ваш логин. Пожалуйста, свяжитесь с администратором!&amp;quot;;&lt;br /&gt;
$TLS_empty_email_address = &amp;quot; Пожалуйста, укажите  e-mail!&amp;quot;;&lt;br /&gt;
$TLS_empty_first_name = &amp;quot; Пожалуйста, укажите имя пользователя.&amp;quot;;&lt;br /&gt;
$TLS_empty_last_name = &amp;quot; Пожалуйста, укажите фамилию.&amp;quot;;&lt;br /&gt;
$TLS_fatal_page_title = &amp;quot;TestLink ::: Fatal Error&amp;quot;;&lt;br /&gt;
$TLS_invalid_user_name = &amp;quot;Некорректный логин пользователя. Пожалуйста, придумайте другой.&amp;quot;;&lt;br /&gt;
$TLS_passwd_dont_match = &amp;quot;Два введенных пароля не совпадают. Учтите, что пароли чувствительны к регистру, и попробуйте ещё раз.&amp;quot;;&lt;br /&gt;
$TLS_user_cant_be_created_because = &amp;quot;Не удалось создать ваш аккаунт. Причина:&amp;quot;;&lt;br /&gt;
$TLS_user_name_exists = &amp;quot;Этот логин пользователя уже используется. Пожалуйста, выберите другой.&amp;quot;;&lt;br /&gt;
$TLS_valid_user_name_format = &amp;quot;Логин пользователя может состоять только из алфавитно-цифровых символов, пробелов, дефисов и подчеркиваний.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd = &amp;quot;Пожалуйста, укажите пароль. Пароль не может быть пустым.&amp;quot;;&lt;br /&gt;
$TLS_your_info_please = &amp;quot;Введите информацию о пользователе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==index.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_main_page_title = &amp;quot;TestLink::Главная страница&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==keywordsimport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_keywords_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_keywords_file = &amp;quot;Файл с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lostPassword.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user = &amp;quot;Пользователь не найден, попробуйте еще&amp;quot;;&lt;br /&gt;
$TLS_contact_admin = &amp;quot;&amp;lt;br&amp;gt; Если проблемы будут продолжаться, пожалуйста, свяжитесь с администратором системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_empty_address = &amp;quot;Вы не указали email-адреса в вашем профиле!  Теперь, чтобы сбросить пароль вам нужно связаться с администратором TestLink-системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_passwd_subject = &amp;quot;Ваш новый пароль к TestLink'у.&amp;quot;;&lt;br /&gt;
$TLS_mail_problems = &amp;quot;Ошибка в почтовых настройках, пожалуйста, свяжитесь с администратором.&amp;quot;;&lt;br /&gt;
$TLS_page_title_lost_passwd = &amp;quot;TestLink - Утерян пароль&amp;quot;;&lt;br /&gt;
$TLS_your_info_for_passwd = &amp;quot;Заполните информацию о вашем пользователе, и пароль будет вам выслан по почте.&amp;quot;;&lt;br /&gt;
$TLS_your_password_is = &amp;quot;Ваш пароль к TestLink'у: &amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==login.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user_passwd = &amp;quot;Логин или пароль неверен. Попробуйте ещё!&amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists1 = &amp;quot;Ваша сессия в этом броузере ещё активна. Пожалуйста, используйте &amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists2 = &amp;quot; если вы хотите обновить вашу сессию.&amp;quot;;&lt;br /&gt;
$TLS_logout_link = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_passwd_lost = &amp;quot;Ваш пароль выслан вам по email на адрес, который вы указали при регистрации. Проверьте вашу почту. В случае проблем, обратитесь к администратору вашего TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_password_reseted=&amp;quot;Новый пароль выслан вам по почте&amp;quot;;&lt;br /&gt;
$TLS_please_login = &amp;quot;Пожалуйста, войдите в систему...&amp;quot;;&lt;br /&gt;
$TLS_session_expired = &amp;quot;Время ваша сессии окончилось. Пожалуйста, войдите в систему заново.&amp;quot;;&lt;br /&gt;
$TLS_your_first_login = &amp;quot;Добро пожаловать в TestLink! Сейчас у вас только гостевой доступ. Для большего, нужно войти в систему.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==planPriority.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_high_priority    = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_priority     = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_priority  = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_risk        = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_risk         = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_risk      = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_importance  = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_low_importance   = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_medium_importance= &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tc_created = &amp;quot;Тест %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_tc_deleted = &amp;quot;Тест %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_tc_updated = &amp;quot;Тест %s отредактирован успешно&amp;quot;;&lt;br /&gt;
$TLS_tc_update_failed = &amp;quot;Не удалась правка теста %s!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachment404.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_close = &amp;quot;Закрыть&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_not_found = &amp;quot;Ошибка: Вложение не найдено!&amp;quot;;&lt;br /&gt;
$TLS_title_downloading_attachment = &amp;quot;Загружаем вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentdelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_deleting_was_ok = &amp;quot;Вложение удалено.&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_delete = &amp;quot;При удалении вложения произошла ошибка!&amp;quot;;&lt;br /&gt;
$TLS_title_delete_attachment = &amp;quot;Удалить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_del_comp = &amp;quot;Да, удалить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_container_title_testsuite =$TLS_test_suite;&lt;br /&gt;
$TLS_linked_but_not_executed=&amp;quot;Связан с одним или более планом тестирования, но не выполнялась&amp;quot;;&lt;br /&gt;
$TLS_question_del = &amp;quot;Действительно удалить&amp;quot;;&lt;br /&gt;
$TLS_th_link_exec_status = &amp;quot;Статус исполнения и связей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_testsuite = &amp;quot;Создать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_tc_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_title_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_testsuite_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_add.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_bug = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_bug_id = &amp;quot;Bug id&amp;quot;;&lt;br /&gt;
$TLS_button_enter_bug = &amp;quot;Создать новый баг&amp;quot;;&lt;br /&gt;
$TLS_title_bug_add = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_link_bts_create_bug = &amp;quot;Доступ к системе регистрации багов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_delete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_delete_bug = &amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cp               = &amp;quot;Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_move             = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_target        = &amp;quot;Выберите куда&amp;quot;;&lt;br /&gt;
$TLS_cont_move_first      = &amp;quot;Переместить это&amp;quot;;&lt;br /&gt;
$TLS_cont_move_second     = &amp;quot;в другое&amp;quot;;&lt;br /&gt;
$TLS_copy_keywords        = &amp;quot;Копировать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_defined_exclam       = &amp;quot;определен !&amp;quot;;&lt;br /&gt;
$TLS_include_nested       = &amp;quot;Включая вложенные данные (только для копирования).&amp;quot;;&lt;br /&gt;
$TLS_sorry_further        = &amp;quot;К сожалению, больше ничего нет &amp;quot;;&lt;br /&gt;
$TLS_title_move_cp        = &amp;quot;Переместить/Скопировать&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_btn_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_help = &amp;quot;Помощь&amp;quot;;&lt;br /&gt;
$TLS_req_create = &amp;quot;Создать требование&amp;quot;;&lt;br /&gt;
$TLS_req_doc_id = &amp;quot;DOC-ID&amp;quot;;&lt;br /&gt;
$TLS_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_reqs = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_req_title = &amp;quot;Заголовок требования должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_reqdoc_id = &amp;quot;ID документа-требования не должен быть пуст!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerOrder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_no_nodes_to_reorder = &amp;quot;К сожалению, тут нечего упорядочивать.&amp;quot;;&lt;br /&gt;
$TLS_node = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_th_node_type = &amp;quot;Тест / Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_order = &amp;quot;Порядок&amp;quot;;&lt;br /&gt;
$TLS_title_change_node_order = &amp;quot;Изменить порядок 'потомков'&amp;quot;;&lt;br /&gt;
$TLS_node_type_dbtable_testsuites=$TLS_test_suite;&lt;br /&gt;
$TLS_node_type_dbtable_testcases=$TLS_testcase;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_del_com    = &amp;quot;Удалить эту группу тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_com   = &amp;quot;Править дату и заголовок для этой группы тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_move_cp_com = &amp;quot;Переместить или скопировать эту группу тестов в другой проект&amp;quot;;&lt;br /&gt;
$TLS_btn_del_com = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_com = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_export_all_testsuites = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_export_tc = &amp;quot;Экспортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_export_testsuite = &amp;quot;Экспортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_import_tc = &amp;quot;Импортировать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_import_testsuite = &amp;quot;Импортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_move_cp_com = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_cat = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_com = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_tc = &amp;quot;Создать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_reorder_cat = &amp;quot;Переупорядочить потомков&amp;quot;;&lt;br /&gt;
$TLS_edit_testproject_basic_data = &amp;quot;Править основные данные проекта&amp;quot;;&lt;br /&gt;
$TLS_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_product_name = &amp;quot;Имя проекта&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_edit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_available_on = &amp;quot;Доступно для&amp;quot;;&lt;br /&gt;
$TLS_btn_add = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_btn_delete = &amp;quot;Удалить&amp;quot;; &lt;br /&gt;
$TLS_btn_ok = &amp;quot;Ok&amp;quot;;&lt;br /&gt;
$TLS_custom_field = &amp;quot;Пользовательское поле&amp;quot;;&lt;br /&gt;
$TLS_enable_on_design = &amp;quot;Разрешить при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_enable_on_exec = &amp;quot;Разрешить при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_label = &amp;quot;Метка&amp;quot;;&lt;br /&gt;
$TLS_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_custom_field = &amp;quot;Вы уверены, что хотите удалить пользовательское поле?&amp;quot;;&lt;br /&gt;
$TLS_possible_values = &amp;quot;Возможные значения&amp;quot;;&lt;br /&gt;
$TLS_show_on_design = &amp;quot;Показывать при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_show_on_exec = &amp;quot;Показывать при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_title_cfields_mgmt = &amp;quot;Пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_type = &amp;quot;Тип&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_label = &amp;quot;Пожалуйста, введите метку для этого пользовательского поля.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_name = &amp;quot;Пожалуйста, введите имя этого пользовательского поля.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_update.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_failed_db_upd = &amp;quot;Не удалось обновить базу данных!&amp;quot;;&lt;br /&gt;
$TLS_info_failed_db_upd_details = &amp;quot;Не удалось обновить базу данных! - Подробности:&amp;quot;;&lt;br /&gt;
$TLS_invalid_query = &amp;quot;Ошибка:&amp;quot;;&lt;br /&gt;
$TLS_warning = &amp;quot;Предупреждение!!&amp;quot;;&lt;br /&gt;
$TLS_was_success = &amp;quot; был(и) успешно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestPlan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_btn_apply_filter = &amp;quot;Применить фильтр&amp;quot;;&lt;br /&gt;
$TLS_btn_update_menu = &amp;quot;Обновить меню&amp;quot;;&lt;br /&gt;
$TLS_caption_nav_filter_settings = &amp;quot;Параметры выборки&amp;quot;;&lt;br /&gt;
$TLS_current_build = &amp;quot;Текущая сборка&amp;quot;;&lt;br /&gt;
$TLS_filter_owner = &amp;quot;Ответственный&amp;quot;;&lt;br /&gt;
$TLS_filter_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_filter_tcID = &amp;quot;Фильтр: ID теста&amp;quot;;&lt;br /&gt;
$TLS_keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_test_status_all_status=&amp;quot;Все&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_th_my_perc_completed = &amp;quot;У меня выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_perc_completed = &amp;quot;Выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_title_your_tp_metrics = &amp;quot;Ваши метрики для плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/newest_tcversions.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_linked_version = &amp;quot;Связанная версия&amp;quot;;&lt;br /&gt;
$TLS_newest_version = &amp;quot;Самая новая из доступных активных версий&amp;quot;;&lt;br /&gt;
$TLS_title_newest_tcversions = &amp;quot;Самые новые версии связанных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/emailSent.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_test_report = &amp;quot;- Послать тест-отчёт&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_Title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_btn_back2srs = &amp;quot;Назад, к спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_btn_import = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_btn_upload_file = &amp;quot;Загрузить файл&amp;quot;;&lt;br /&gt;
$TLS_check_req_file_structure = &amp;quot;Пожалуйста, проверьте формат файла. Не получается получить из этого файла требования&amp;quot;;&lt;br /&gt;
$TLS_local_file = &amp;quot;Файл:&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file1 = &amp;quot;Максимальный размер для этого файла&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file2 = &amp;quot;kB&amp;quot;;&lt;br /&gt;
$TLS_req_import_check_note = &amp;quot;Пожалуйста, разрешите возможные конфликты и запустите процесс импорта.&amp;quot;;&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Не импортируйте элементы с пустой Сферой&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_double = &amp;quot;Добавить ещё с тем же заголовком&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_header = &amp;quot;Разрешить конфликт&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_overwrite = &amp;quot;Обновить существующий&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_skip = &amp;quot;Пропускать импорт дублирующих требований&amp;quot;;&lt;br /&gt;
$TLS_req_import_type = &amp;quot;Тип:&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement = &amp;quot;Нет требований&amp;quot;;&lt;br /&gt;
$TLS_required_cvs_format = &amp;quot;Формат файла с требованиями:&amp;quot;;&lt;br /&gt;
$TLS_title_choose_file_type = &amp;quot;Выберите тип файла&amp;quot;;&lt;br /&gt;
$TLS_title_choose_local_file = &amp;quot;Выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_title_req_import = &amp;quot;Загрузка требований&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_check_input = &amp;quot;Проверьте импортируемые данные&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_build = &amp;quot;Удалить эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_attachment = &amp;quot;Удалить это вложение&amp;quot;;&lt;br /&gt;
$TLS_attached_files = &amp;quot;Вложенные файлы&amp;quot;;&lt;br /&gt;
$TLS_attachment_feature_disabled = &amp;quot;вложения отключены&amp;quot;;&lt;br /&gt;
$TLS_button_upload = &amp;quot;Загрузить&amp;quot;;&lt;br /&gt;
$TLS_upload_file_new_file = &amp;quot;Загрузить новый файл&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_attachment = &amp;quot;Действительно удалить вложение?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_print = &amp;quot;Печать&amp;quot;;&lt;br /&gt;
$TLS_note_email_sent_t = &amp;quot;Примечание: email format послан на email пользователя&amp;quot;;&lt;br /&gt;
$TLS_send_results = &amp;quot;Послать отчеты&amp;quot;;&lt;br /&gt;
$TLS_send_to = &amp;quot;To:&amp;quot;;&lt;br /&gt;
$TLS_subject = &amp;quot;Subject:&amp;quot;;&lt;br /&gt;
$TLS_title_active_build = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_title_report_type = &amp;quot;Формат отчета&amp;quot;;&lt;br /&gt;
$TLS_via_email = &amp;quot;через eMail&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments_upload.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_view.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cfields_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_manage_cfield = &amp;quot;Управлять пользовательскими полями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_ro_m0.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_category = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_configuration = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_not_defined = &amp;quot;Не определено.&amp;quot;;&lt;br /&gt;
$TLS_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_alt_name = &amp;quot;Обязательно заполнить имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_cat_config = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_cat_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_cat_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_cat_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_by = &amp;quot;by&amp;quot;;&lt;br /&gt;
$TLS_coverage = &amp;quot;Покрытие&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_req = &amp;quot;Удалить это требование, Вы уверены?&amp;quot;;&lt;br /&gt;
$TLS_req_edit = &amp;quot;Править требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notestcase = &amp;quot;Связанных тестов нет.&amp;quot;;&lt;br /&gt;
$TLS_requirement_spec = &amp;quot;Спецификация требования&amp;quot;;&lt;br /&gt;
$TLS_test_case_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_title_created = &amp;quot;Создано:&amp;quot;;&lt;br /&gt;
$TLS_title_last_mod = &amp;quot;Последняя правка:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_active = &amp;quot;Активная&amp;quot;;&lt;br /&gt;
$TLS_enter_build = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_enter_build_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_msg_build = &amp;quot;Замечание: Каждая сборка относится к активному плану тестирования. Описание должно включать: список развертываемых пакетов, утверждений, состояние, и т.п.&amp;quot;;&lt;br /&gt;
$TLS_open = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_build_2 = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_title_build_create = &amp;quot;Создать новую Сборку&amp;quot;;&lt;br /&gt;
$TLS_title_build_update = &amp;quot;Править Сборку&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_build_name = &amp;quot;Пожалуйста, введите имя для этой Сборки!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_introduction = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_limitations = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_methodology = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_references = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_comp_alt_name = &amp;quot;Обязательно введите имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_comp_intro = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_comp_lim = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_comp_method = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_comp_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_comp_ref = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_analyse = &amp;quot;Анализировать&amp;quot;;&lt;br /&gt;
$TLS_btn_check_all = &amp;quot;Проверить все&amp;quot;;&lt;br /&gt;
$TLS_btn_delete_spec = &amp;quot;Удалить спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_spec = &amp;quot;Править спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_export_reqs = &amp;quot;Экспортировать требования&amp;quot;;&lt;br /&gt;
$TLS_btn_req_create = &amp;quot;Создать новое требование&amp;quot;;&lt;br /&gt;
$TLS_btn_spec_list = &amp;quot;Список спецификаций&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck_all = &amp;quot;Убрать все отметки&amp;quot;;&lt;br /&gt;
$TLS_cant_delete_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_popup_sure_delete = &amp;quot;Вы уверены удалить эту спецификацию требования?&amp;quot;;&lt;br /&gt;
$TLS_req_select_create_tc = &amp;quot;Создать тесты&amp;quot;;&lt;br /&gt;
$TLS_req_select_delete = &amp;quot;Удалить требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_list = &amp;quot;Список требований&amp;quot;;&lt;br /&gt;
$TLS_req_total = &amp;quot;Всего треб.&amp;quot;;&lt;br /&gt;
$TLS_req_reorder = &amp;quot;Переупорядочить требования?&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_requirements = &amp;quot;Вы уверены удалить выбранные требования?&amp;quot;;&lt;br /&gt;
$TLS_title_change_req_order = &amp;quot;Переупорядочивание требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_copyrightnotice.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_gnu_gpl = &amp;quot;GNU GPL&amp;quot;;&lt;br /&gt;
$TLS_lic_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_lic_product = &amp;quot;TestLink project&amp;quot;;&lt;br /&gt;
$TLS_licensed_under = &amp;quot;TestLink лицензируется согласно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update_testsuite = &amp;quot;Обновить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_title_edit_level = &amp;quot;Править&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecAnalyse.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_none = &amp;quot;Пусто &amp;quot;;&lt;br /&gt;
$TLS_req = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_req_spec_change = &amp;quot;Изменить спецификацию требований на &amp;quot;;&lt;br /&gt;
$TLS_req_title_analyse = &amp;quot;Анализировать спецификацию требований &amp;quot;;&lt;br /&gt;
$TLS_req_title_covered = &amp;quot;Покрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_in_tl = &amp;quot;Требований, зарегистрированных в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_title_nottestable = &amp;quot;Нетестируемые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_uncovered = &amp;quot;Непокрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_not_in_tl = &amp;quot;Требований, отсутствующих в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_total_count = &amp;quot;Всего требований&amp;quot;;&lt;br /&gt;
$TLS_testcases = &amp;quot;Тесты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_action_create_srs = &amp;quot;Создать спецификацию требований&amp;quot;;&lt;br /&gt;
$TLS_testproject = &amp;quot;проект&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_reqView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_last_edit = &amp;quot;Последняя правка: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_comp.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_top_level_suites = &amp;quot;Результаты топовых групп тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_blocked = &amp;quot;Блокировано&amp;quot;;&lt;br /&gt;
$TLS_trep_comp = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_comp_perc = &amp;quot;Выполнена [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_failed = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_trep_not_run = &amp;quot;Не запускали&amp;quot;;&lt;br /&gt;
$TLS_trep_passed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_trep_total = &amp;quot;Всего&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_keyw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_kw = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_trep_kw = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_owner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_owner = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_owner = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_tester = &amp;quot;Результаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_tester = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_prio.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tit_end_date = &amp;quot;Дата окончания&amp;quot;;&lt;br /&gt;
$TLS_tit_milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_prio = &amp;quot;Результаты по приоритету&amp;quot;;&lt;br /&gt;
$TLS_trep_milestone_goal = &amp;quot;Цель вехи [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_prio = &amp;quot;Приоритет&amp;quot;;&lt;br /&gt;
$TLS_trep_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_ts.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_ts = &amp;quot;Результаты по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_imp = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_trep_risk = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_trep_ts = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecEdit.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_show_bug_table.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_build = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_caption_bugtable = &amp;quot;Связанные баги&amp;quot;;&lt;br /&gt;
$TLS_delete_bug=&amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
$TLS_del_bug_warning_msg = &amp;quot;Действительно удалить этот баг?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecList.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign_tc = &amp;quot;Указать тест&amp;quot;;&lt;br /&gt;
$TLS_no_docs = &amp;quot;Нет доступных документов.&amp;quot;;&lt;br /&gt;
$TLS_req_list_docs = &amp;quot;Спецификации требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_New_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_add_tc_name = &amp;quot;Обязательно укажите имя теста.&amp;quot;;&lt;br /&gt;
$TLS_expected_results = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_tc_title = &amp;quot;Заголовок тест-кейса&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/show_exec_notes.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_execution_notes = &amp;quot;Замечания по выполнению&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_role = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_role = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_caption_define_role = &amp;quot;Определить роль&amp;quot;;&lt;br /&gt;
$TLS_caption_possible_affected_users = &amp;quot;Возможно влияет на следующих пользователей&amp;quot;;&lt;br /&gt;
$TLS_enter_role_notes = &amp;quot;Введите описание роли&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_product_roles = &amp;quot;Укажите роли проекта&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testplan_roles = &amp;quot;Укажите роли для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_menu_define_roles = &amp;quot;Новая роль&amp;quot;;&lt;br /&gt;
$TLS_menu_mod_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_new_user = &amp;quot;Новый пользователь&amp;quot;;&lt;br /&gt;
$TLS_menu_edit_user = &amp;quot;Редактировать пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_view_users = &amp;quot;Список пользователей&amp;quot;;&lt;br /&gt;
$TLS_menu_view_roles = &amp;quot;Просмотр ролей&amp;quot;;&lt;br /&gt;
$TLS_th_cf_rights = &amp;quot;Права на пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_th_kw_rights = &amp;quot;Права на ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_th_mgttc_rights = &amp;quot;Права на управление тест-кейсами&amp;quot;;&lt;br /&gt;
$TLS_th_product_rights = &amp;quot;Права на проект&amp;quot;;&lt;br /&gt;
$TLS_th_req_rights = &amp;quot;Права на требование&amp;quot;;&lt;br /&gt;
$TLS_th_rights = &amp;quot;Разрешения&amp;quot;;&lt;br /&gt;
$TLS_th_rolename = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_th_tp_rights = &amp;quot;Права на план тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_user_rights = &amp;quot;Права пользователей&amp;quot;;&lt;br /&gt;
$TLS_title_user_mgmt = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_warning_modify_role = &amp;quot;Действительно исправить роль?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcSearchForm.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_find             = &amp;quot;Найти&amp;quot;;&lt;br /&gt;
$TLS_caption_search_form  = &amp;quot;Искать тесты&amp;quot;;&lt;br /&gt;
$TLS_not_applied          = &amp;quot;Не применимо&amp;quot;;&lt;br /&gt;
$TLS_th_tcid              = &amp;quot;ID теста&amp;quot;;&lt;br /&gt;
$TLS_th_tcversion         = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
$TLS_th_title             = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_title_search_tcs     = &amp;quot;Поиск&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/infoWindow.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_iw2del = &amp;quot;Да, удалите тест!&amp;quot;;&lt;br /&gt;
$TLS_question_del_tc = &amp;quot;Действительно удалить тест?&amp;quot;;&lt;br /&gt;
$TLS_th_executed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_th_linked_to_tplan = &amp;quot;Связан с планом тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_new_tc = &amp;quot;Создать тест&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_tc_title = &amp;quot;Пожалуйста, задайте заголовок для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_imp_tc_data = &amp;quot;Импорт данных для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsimport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_keyword_import_to = &amp;quot;Импортировать ключевые слова в &amp;quot;;&lt;br /&gt;
$TLS_title_keyword_import = &amp;quot;Импорт ключевых слов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_export = &amp;quot;Экспорт&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_to = &amp;quot;Импортировать требования в документ:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_tproject_assign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign = &amp;quot;Привязать&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_active_mgmt = &amp;quot;Обновить активное состояние&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_display_order = &amp;quot;Сохранить порядок показа&amp;quot;;&lt;br /&gt;
$TLS_btn_unassign = &amp;quot;Освободить от&amp;quot;;&lt;br /&gt;
$TLS_cfields_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_cfields_tproject_assign = &amp;quot;Привязать пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_display_order = &amp;quot;Порядок показа&amp;quot;;&lt;br /&gt;
$TLS_title_assigned_cfields = &amp;quot;Привязанные пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_title_available_cfields = &amp;quot;Доступные пользовательские поля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_No = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_Yes = &amp;quot;Да&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_order_by_login = &amp;quot;По порядку логинов&amp;quot;;&lt;br /&gt;
$TLS_order_by_role_descr = &amp;quot;По порядку описания ролей&amp;quot;;&lt;br /&gt;
$TLS_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_th_delete = &amp;quot;Удалить?&amp;quot;;&lt;br /&gt;
$TLS_th_email = &amp;quot;Email&amp;quot;;&lt;br /&gt;
$TLS_th_first_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_last_name = &amp;quot;Фамилия&amp;quot;;&lt;br /&gt;
$TLS_th_locale = &amp;quot;Локализация&amp;quot;;&lt;br /&gt;
$TLS_th_login = &amp;quot;Логин&amp;quot;;&lt;br /&gt;
$TLS_th_role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/login.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_login = &amp;quot;Войти&amp;quot;;&lt;br /&gt;
$TLS_login_name = &amp;quot;Логин:&amp;quot;;&lt;br /&gt;
$TLS_lost_password_q = &amp;quot;Забыли пароль?&amp;quot;;&lt;br /&gt;
$TLS_new_user_q = &amp;quot;Новый пользователь?&amp;quot;;&lt;br /&gt;
$TLS_password = &amp;quot;Пароль:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginFirst.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_user_data = &amp;quot;Добавить пользовательские данные&amp;quot;;&lt;br /&gt;
$TLS_e_mail = &amp;quot;E-mail (нужен, чтобы получить новый пароль):&amp;quot;;&lt;br /&gt;
$TLS_first_name = &amp;quot;Имя:&amp;quot;;&lt;br /&gt;
$TLS_last_name = &amp;quot;Фамилия:&amp;quot;;&lt;br /&gt;
$TLS_link_back_to_login = &amp;quot;Войти еще раз&amp;quot;;&lt;br /&gt;
$TLS_password_again = &amp;quot;Повторите пароль:&amp;quot;;&lt;br /&gt;
$TLS_password_mgmt_is_external = &amp;quot;Используется внешнее управление паролями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_mv = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_cat = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_inst_move = &amp;quot;Переместить этот тест в другую группу тестов (внутри того же плана тестирования).&amp;quot;;&lt;br /&gt;
$TLS_title_mv_cp_tc = &amp;quot;Переместить/Копировать тест&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginLost.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send = &amp;quot;Выслать пароль&amp;quot;;&lt;br /&gt;
$TLS_password_reset = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_records_found = &amp;quot;Ничего не найдено.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execSetResults.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_alt_notes = &amp;quot;заметки&amp;quot;;&lt;br /&gt;
$TLS_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_btn_history_off = &amp;quot;Показывать только последний прогон&amp;quot;;&lt;br /&gt;
$TLS_btn_history_on = &amp;quot;Показывать полную историю прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_all_tests_results = &amp;quot;Сохранить все результаты прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_tc_exec_results = &amp;quot;Сохранить результат прогона&amp;quot;;&lt;br /&gt;
$TLS_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_build_is_closed = &amp;quot;Сборка закрыта&amp;quot;;&lt;br /&gt;
$TLS_builds_notes = &amp;quot;Описание сборки&amp;quot;;&lt;br /&gt;
$TLS_bulk_tc_status_management = &amp;quot;Массовое управление состоянием тестов&amp;quot;;&lt;br /&gt;
$TLS_date_time_run = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_details = &amp;quot;Подробности&amp;quot;;&lt;br /&gt;
$TLS_exec_notes = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
$TLS_exec_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_execution_history = &amp;quot;История прогонов&amp;quot;;&lt;br /&gt;
$TLS_img_title_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_img_title_delete_execution= &amp;quot;Удалить прогон&amp;quot;;&lt;br /&gt;
$TLS_just_last_execution_for_this_build = &amp;quot;Последний прогон для этой сборки&amp;quot;;&lt;br /&gt;
$TLS_no_data_available = &amp;quot;Данные отсутствуют&amp;quot;;&lt;br /&gt;
$TLS_set_all_tc_to = &amp;quot;Установить всем состояние &amp;quot;;&lt;br /&gt;
$TLS_show_hide = &amp;quot;Показать / скрыть&amp;quot;;&lt;br /&gt;
$TLS_tc_not_tested_yet = &amp;quot;Еще не протестировано:&amp;quot;;&lt;br /&gt;
$TLS_test_cases_cannot_be_executed = &amp;quot;Тесты не могут быть выполнены&amp;quot;;&lt;br /&gt;
$TLS_test_exec_by = &amp;quot;Протестировано: &amp;quot;;&lt;br /&gt;
$TLS_test_exec_expected_r = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_test_exec_last_run_date = &amp;quot;Самые последние запуски:&amp;quot;;&lt;br /&gt;
$TLS_test_exec_notes = &amp;quot;Заметки / Описание&amp;quot;;&lt;br /&gt;
$TLS_test_exec_on_build = &amp;quot; в Сборке&amp;quot;;&lt;br /&gt;
$TLS_test_exec_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_test_exec_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_test_exec_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_test_plan_notes = &amp;quot;Заметки по плану тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_status_not_run = &amp;quot;Не запущен&amp;quot;;&lt;br /&gt;
$TLS_th_test_case_id = &amp;quot;ID &amp;quot;;&lt;br /&gt;
$TLS_th_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_on_build = &amp;quot;Результы тестов по Сборке&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_owner = &amp;quot; Ответственный:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/navBar.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_link_logout = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_product = &amp;quot;Проект&amp;quot;;&lt;br /&gt;
$TLS_product_role = &amp;quot;Роль проекта&amp;quot;;&lt;br /&gt;
$TLS_title_edit_personal_data = &amp;quot;Мой профиль&amp;quot;;&lt;br /&gt;
$TLS_title_execute = &amp;quot;Выполнить&amp;quot;;&lt;br /&gt;
$TLS_title_results = &amp;quot;Отчеты&amp;quot;;&lt;br /&gt;
$TLS_title_specification = &amp;quot;Спецификация&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_rw.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_add_tc = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_add_remove_selected_tc_hint = &amp;quot;Операция будет выполнена над ВСЕМИ группами тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_add_remove_selected_tc = &amp;quot;Добавить / Удалить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_add_selected_tc = &amp;quot;Добавить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_check = &amp;quot;Отметить&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck = &amp;quot;Снять отметки&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_tc = &amp;quot;Все тесты в этой группе тестов.&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_all_checkboxes=&amp;quot;отметить все/снять все отметки&amp;quot;;&lt;br /&gt;
$TLS_has_been_executed = &amp;quot;были выполнены&amp;quot;;&lt;br /&gt;
$TLS_inactive_testcase = &amp;quot;неактивны&amp;quot;;&lt;br /&gt;
$TLS_no_testcase_available = &amp;quot;Тестов нет&amp;quot;;&lt;br /&gt;
$TLS_note_keyword_filter = &amp;quot;Тесты фильтруются по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_remove_tc = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_th_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_title_add_remove_test_to_plan = &amp;quot;Добавить/Удалить тест(ы) в/из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_add_test_to_plan = &amp;quot;Добавить тесты в план тестирования&amp;quot;;&lt;br /&gt;
$TLS_warning_add_remove_selected_tc = &amp;quot;Вы уверены удалить выбранные тесты из этого плана тестирования?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTCNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_navigator = &amp;quot;Навигатор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planPriority.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_prio   = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_title_priority = &amp;quot;Определить приоритеты для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tr_th_importance = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_tr_th_prio_cba = &amp;quot;Приоритет (C/B/A)&amp;quot;;&lt;br /&gt;
$TLS_tr_th_risk = &amp;quot;Риск/Важность&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_testplan_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_opt_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_testplan_question_create_tp_from = &amp;quot;Создать из существующего плана тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_create = &amp;quot;Создать новый план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_edit = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_for_project = &amp;quot;для проекта: &amp;quot;;&lt;br /&gt;
$TLS_testplan_title_tp_management = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_notes = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
План тестирования должен содержать ясно определенные задачи, включая временные границы. &lt;br /&gt;
Он может содержать тест-активность для выпускаемой версии продукта (включая патчи) &lt;br /&gt;
или просто единственный запрос от пользователя.&amp;lt;br/&amp;gt;&lt;br /&gt;
В описании можно ссылаться на план и другую документацию по проекту.&lt;br /&gt;
Разумно перечислить тестируемые возможности, риски и т.п.&amp;lt;br/&amp;gt;&lt;br /&gt;
Можно создать новый план тестирования из существующего (&amp;quot;клонировать&amp;quot;). &lt;br /&gt;
Будут скопированы следующие элементы: сборки, тесты, приоритеты, &lt;br /&gt;
Вехи и роли пользователей.&amp;lt;br/&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать/заморозить: т.е. запретить любое изменение &lt;br /&gt;
атрибутов или вложенных элементов плана тестирования. &lt;br /&gt;
Такие планы тестирования будут видны только на странице отчетов и на этой странице.&lt;br /&gt;
END;&lt;br /&gt;
 &lt;br /&gt;
$TLS_warning_empty_tp_name = &amp;quot;Пожалуйста, введите имя плана тестирования.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_btn_edit = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_testplan_btn_new = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_list = &amp;quot;Список&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planMilestones.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_milestone = &amp;quot;Удалить веху?&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_milestone = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_new_milestone = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_info_milestones_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'&amp;quot;;&lt;br /&gt;
$TLS_no_milestones = &amp;quot;Для этого плана тестирования вехи не определены.&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_milestones = &amp;quot;Вы уверены удалить веху %NAME% ?&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_milestone_name=&amp;quot;Укажите имя вехи!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$TLS_th_date_format = &amp;quot;Целевая Дата&amp;quot;;&lt;br /&gt;
$TLS_th_perc_a_prio = &amp;quot;% A-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_b_prio = &amp;quot;% B-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_c_prio = &amp;quot;% C-приоритет&amp;quot;;&lt;br /&gt;
$TLS_title_existing_milestones = &amp;quot;Существующие вехи&amp;quot;;&lt;br /&gt;
$TLS_title_milestones = &amp;quot;Вехи для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_new_milestone = &amp;quot;Новая Веха&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/projectedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_activate         = &amp;quot;Активировать&amp;quot;;&lt;br /&gt;
$TLS_btn_del              = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_del         = &amp;quot;Править / Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_inactivate       = &amp;quot;Деактивировать&amp;quot;;&lt;br /&gt;
$TLS_caption_edit_product = &amp;quot;Править проект&amp;quot;;&lt;br /&gt;
$TLS_caption_new_product  = &amp;quot;Создать проект&amp;quot;;&lt;br /&gt;
$TLS_color                = &amp;quot;Цвет&amp;quot;;&lt;br /&gt;
$TLS_enable_requirements  = &amp;quot;Включить функциональность Требований&amp;quot;;&lt;br /&gt;
$TLS_info_failed_loc_prod = &amp;quot;Не удалось локализовать проект.&amp;quot;;&lt;br /&gt;
$TLS_notes                = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
// Warning!!! - if JS string you must use \\n to get \n                                       &lt;br /&gt;
$TLS_popup_product_delete = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Внимание! Вы собираетесь необратимо удалить все данные связанные проектом:&lt;br /&gt;
результаты тестов, планы тестирования, тесты и т.п. \\n&lt;br /&gt;
Вместо удаления вы можете деактивировать проект. \\n&lt;br /&gt;
Если вы всё-таки настроены удалить проект, рекомендуем вам сначала &lt;br /&gt;
сделать бэкап базы данных. \\n&lt;br /&gt;
Итак, вы по прежнему уверены удалить проект? &lt;br /&gt;
END;&lt;br /&gt;
$TLS_warning_empty_tproject_name = &amp;quot;Обязательно задайте имя проекта!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_select_a_req        = &amp;quot;Пожалуйста, выберите требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement66    = &amp;quot;Требования нет&amp;quot;;&lt;br /&gt;
$TLS_req_title_assign           = &amp;quot;Привяжите требования к тесту&amp;quot;;&lt;br /&gt;
$TLS_req_title_assigned         = &amp;quot;Привязанные требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_unassigned       = &amp;quot;Доступные требования&amp;quot;;&lt;br /&gt;
$TLS_warning_req_tc_assignment_impossible = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Вы &amp;lt;b&amp;gt;не можете&amp;lt;/b&amp;gt; делать привязку по одной из следующих причин:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Не определено ни одной спецификации требования;&lt;br /&gt;
  &amp;lt;li&amp;gt;Спецификации требований пусты.&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_edit_tc = &amp;quot;Править тест&amp;quot;;&lt;br /&gt;
$TLS_warning_editing_executed_tc = &amp;quot;Внимание: Этот версия теста уже выполнялась&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planOwner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assign_ownership     = &amp;quot;Назначить ответственного&amp;quot;;&lt;br /&gt;
$TLS_def_prio_rules       = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_opt_label_none       = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_th_imp               = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_th_owner             = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_risk              = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_th_test_suite        = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_plan_ownership = &amp;quot;Владелец плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_activate_this_tcversion  = &amp;quot;Активировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_Requirements             = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_btn_del_this_version     = &amp;quot;Удалить эту версию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit                 = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_mv_cp                = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_version          = &amp;quot;Создать новую версию&amp;quot;;&lt;br /&gt;
$TLS_can_not_edit_tc = &amp;quot;Вы не можете редактировать эту версию, т.к. она уже выполнялась&amp;quot;;&lt;br /&gt;
$TLS_deactivate_this_tcversion = &amp;quot;Деактивировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_tcversion_is_inactive_msg = &amp;quot;Эта версия &amp;lt;b&amp;gt;неактивна&amp;lt;/b&amp;gt;, и не будет доступна для включения в план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planRemoveTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_remove_selected_tc = &amp;quot;Удалить выбранные тесты tcs&amp;quot;;&lt;br /&gt;
$TLS_remove_ok = &amp;quot;Удаление прошло успешно ok&amp;quot;;&lt;br /&gt;
$TLS_title_remove_test_from_plan = &amp;quot;Удалить тест из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTesters.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_save = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keyword_assignment_empty_tsuite = &amp;quot;В этой группе тестов нет тестов =&amp;gt; ключевое слово привязать нельзя&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_kw_to_tc = &amp;quot;Привязать к  тестам&amp;quot;;&lt;br /&gt;
$TLS_menu_manage_keywords = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_title_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTestersNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_label_list_of = &amp;quot;Список &amp;quot;;&lt;br /&gt;
$TLS_opt_test_plans = &amp;quot;планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_opt_users = &amp;quot;пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planUpdateTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_ck_tc        = &amp;quot;Изменить выбранные тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_info_all_tc_uptodate = &amp;quot;Все тесты актуальны.&amp;quot;;&lt;br /&gt;
$TLS_th_category          = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_component         = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_id_tc = &amp;quot;[ID] теста&amp;quot;;&lt;br /&gt;
$TLS_th_reason = &amp;quot;Причина правки&amp;quot;;&lt;br /&gt;
$TLS_th_spec_version = &amp;quot;Специальная версия&amp;quot;;&lt;br /&gt;
$TLS_th_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_th_suite_version = &amp;quot;Версия группы тестов&amp;quot;;&lt;br /&gt;
$TLS_th_update = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_title_upd_mod_tc = &amp;quot;Изменить исправленные тесты в &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_keyword   = &amp;quot;Удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_btn_create_keyword   = &amp;quot;Создать ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_keyword     = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_import_keywords  = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_th_keyword           = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_keyword = &amp;quot;Вы уверены удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least1 = &amp;quot;Пожалуйста, введите хотя бы  &amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less1 = &amp;quot;Пожалуйста, используйте не больше чем&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_req_export_to = &amp;quot;Экспорт требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsAllBuilds.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_status_blocked  = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_test_status_failed   = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_test_status_passed   = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_th_build             = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_th_tc_total          = &amp;quot;Всего тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_date                   = &amp;quot;Дата:&amp;quot;;&lt;br /&gt;
$TLS_printed_by             = &amp;quot;Напечатано:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_bugs   = &amp;quot;Баги по тесту&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_timestamp = &amp;quot;Временная метка теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_title = &amp;quot;Заголовок теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_suite_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBuild.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_met_of_build = &amp;quot;Метрики сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsByStatus.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_test_results = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Показываются результаты только последнего теста.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
В частности, тесты скрыты, если результаты тестов для следующей сборки &lt;br /&gt;
имеют статус отличный от &amp;quot;в процессе&amp;quot;. &lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_th_bugs = &amp;quot;Баги&amp;quot;;&lt;br /&gt;
$TLS_th_date = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_th_run_by = &amp;quot;Запустил:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsGeneral.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_gen_test_rep = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_query_form.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_excel_format             = &amp;quot;MS Excel&amp;quot;;&lt;br /&gt;
$TLS_html_format              = &amp;quot;HTML&amp;quot;;&lt;br /&gt;
$TLS_last_status_any          = &amp;quot;Любой&amp;quot;;&lt;br /&gt;
$TLS_last_status_blocked      = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_last_status_failed       = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_last_status_not_run      = &amp;quot;Не стартовал&amp;quot;;&lt;br /&gt;
$TLS_last_status_passed       = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_select_builds_header     = &amp;quot;Выберите сборку(и)&amp;quot;;&lt;br /&gt;
$TLS_select_components_header = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_select_keyword_header    = &amp;quot;Выберите ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_select_last_result_header = &amp;quot;Выберите последний результат&amp;quot;;&lt;br /&gt;
$TLS_select_owner_header      = &amp;quot;Выберите владельца&amp;quot;;&lt;br /&gt;
$TLS_select_report_format_header = &amp;quot;Выберите формат отчета&amp;quot;;&lt;br /&gt;
$TLS_submit_query             = &amp;quot;Выполнить запрос&amp;quot;;&lt;br /&gt;
$TLS_test_plan_header         = &amp;quot;План тестирования: &amp;quot;;&lt;br /&gt;
$TLS_query_metrics_report     = &amp;quot;Запросить отчет по метрикам&amp;quot;;&lt;br /&gt;
$TLS_enter_start_time         = &amp;quot;Введите начальное время&amp;quot;;&lt;br /&gt;
$TLS_enter_end_time           = &amp;quot;Введите конечное время&amp;quot;;&lt;br /&gt;
$TLS_year                     = &amp;quot;год&amp;quot;;&lt;br /&gt;
$TLS_month                    = &amp;quot;месяц&amp;quot;;&lt;br /&gt;
$TLS_day                      = &amp;quot;день&amp;quot;;&lt;br /&gt;
$TLS_hour                     = &amp;quot;час&amp;quot;;&lt;br /&gt;
$TLS_search_in_notes          = &amp;quot;поиск строки в заметках&amp;quot;;&lt;br /&gt;
$TLS_executor                 = &amp;quot;исполнитель&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_report.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_show_collapse                  = &amp;quot;Показать/Свернуть&amp;quot;;&lt;br /&gt;
$TLS_caption_user_selected_query_parameters = &amp;quot;Параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_not_yet_executed                       = &amp;quot;Еще не выполнялся&amp;quot;;&lt;br /&gt;
$TLS_show_hide_all                          = &amp;quot;Показать/Скрыть все&amp;quot;;&lt;br /&gt;
$TLS_th_builds                              = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_th_execution_ts                        = &amp;quot;Время&amp;quot;;&lt;br /&gt;
$TLS_th_last_result                         = &amp;quot;Последний результат&amp;quot;;&lt;br /&gt;
$TLS_th_report_format                       = &amp;quot;Тип отчета&amp;quot;;&lt;br /&gt;
$TLS_th_test_plan                           = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_test_suites                         = &amp;quot;Группа(ы) тестов&amp;quot;;&lt;br /&gt;
$TLS_th_tester_id                           = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_total_block                         = &amp;quot;# блокированных &amp;quot;;&lt;br /&gt;
$TLS_th_total_cases                         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_th_total_fail                          = &amp;quot;# сбоев&amp;quot;;&lt;br /&gt;
$TLS_th_total_not_run                       = &amp;quot;# не стартовавших&amp;quot;;&lt;br /&gt;
$TLS_th_total_pass                          = &amp;quot;# выполненных&amp;quot;;&lt;br /&gt;
$TLS_th_start_time      = &amp;quot;Время начала&amp;quot;;&lt;br /&gt;
$TLS_th_end_time        = &amp;quot;Время окончания&amp;quot;;&lt;br /&gt;
$TLS_th_executor        = &amp;quot;Исполнитель&amp;quot;;&lt;br /&gt;
$TLS_th_search_notes_string = &amp;quot;в заметках искать строку&amp;quot;;&lt;br /&gt;
$TLS_true               = &amp;quot;да&amp;quot;;&lt;br /&gt;
$TLS_false              = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_display_suite_summaries = &amp;quot;Показать итоги по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_display_query_params    = &amp;quot;Показать параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_display_totals          = &amp;quot;Показать суммарную информацию&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsReqs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_title_blocked  = &amp;quot;Заблокировано требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_failed   = &amp;quot;Нарушено требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_notrun   = &amp;quot;Непроверенных требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_passed   = &amp;quot;Выполнено требований&amp;quot;;&lt;br /&gt;
$TLS_title_result_req_testplan = &amp;quot;Результаты тестов основанных на спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan    = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsSend.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send_report        = &amp;quot;Послать отчет&amp;quot;;&lt;br /&gt;
$TLS_check_send_to_me       = &amp;quot;Послать отчет самому себе&amp;quot;;&lt;br /&gt;
$TLS_mail_body              = &amp;quot;Тело письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_report            = &amp;quot;Отчет:&amp;quot;;&lt;br /&gt;
$TLS_mail_subject           = &amp;quot;Тема письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_to                = &amp;quot;Кому:&amp;quot;;&lt;br /&gt;
$TLS_status_for_build       = &amp;quot;Состояние сборки&amp;quot;;&lt;br /&gt;
$TLS_tp_status              = &amp;quot;Общее состояние плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tp_status_for_build    = &amp;quot;Состояние плана тестирования для сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_generated_by_TestLink_on=&amp;quot;Сформировано системой TestLink,  &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_m2.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcPrintNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_print_opt  = &amp;quot;Настройки печати&amp;quot;;&lt;br /&gt;
$TLS_tr_td_show_as      = &amp;quot;Показать как&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcReorder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_tc_to_reorder       = &amp;quot;Нет тестов для переупорядочивания.&amp;quot;;&lt;br /&gt;
$TLS_title_change_tc_order  = &amp;quot;Изменить порядок тестов в этой группе тестов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcTree.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_refresh       = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_button_update_tree   = &amp;quot;Обновить дерево&amp;quot;;&lt;br /&gt;
$TLS_do_auto_update       = &amp;quot;Обновлять дерево после каждой операции&amp;quot;;&lt;br /&gt;
$TLS_no_tc_spec_av        = &amp;quot;Нет тест-спецификаций.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tc_exec_assignment.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_do                     = &amp;quot;Пуск&amp;quot;;&lt;br /&gt;
$TLS_btn_update_selected_tc     = &amp;quot;Изменить выбранные тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tc_exec_assignment   = &amp;quot;Назначить прогоны тестов для плана тестирования &amp;quot;;&lt;br /&gt;
$TLS_user                       = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_user_bulk_assignment       = &amp;quot;Массовое назначение ответственных пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/testSetNavigator.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/userInfo.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_change_passwd        = &amp;quot;Сменить пароль&amp;quot;;&lt;br /&gt;
$TLS_btn_upd_user_data        = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd            = &amp;quot;Новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd_again      = &amp;quot;Повторите новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_old_passwd            = &amp;quot;Старый пароль&amp;quot;;&lt;br /&gt;
$TLS_title_account_settings   = &amp;quot;Настройки профиля&amp;quot;;&lt;br /&gt;
$TLS_title_change_your_passwd = &amp;quot;Сменить ваш пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_different_pwd    = &amp;quot;Пожалуйста, повторите еще раз ваш новый пароль. Введенные пароли не совпадают.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd        = &amp;quot;Пароль должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_your_password_is_external = &amp;quot;Ваш пароль ведётся во внешней системе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersassign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestProject          = &amp;quot;проект&amp;quot;;&lt;br /&gt;
$TLS_User                 = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_btn_change           = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testplan_user_roles = &amp;quot;Назначить роли плана тестирования пользователям&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testproject_user_roles = &amp;quot;Назначить роли проекта пользователям&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testproject_roles = &amp;quot;Назначить роли проекта&amp;quot;;&lt;br /&gt;
$TLS_th_roles = &amp;quot;Роли&amp;quot;;&lt;br /&gt;
$TLS_title_assign_roles = &amp;quot;Назначить роли&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_reset_password = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
$TLS_caption_user_details = &amp;quot;Свойства пользователя&amp;quot;;&lt;br /&gt;
$TLS_th_password = &amp;quot;Пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_first_name = &amp;quot;Пожалуста, введите имя&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_last_name = &amp;quot;Пожалуйста, введите фамилию&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_login = &amp;quot;Пожалуйста, введите логин&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentupload.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachment_upload_ok=&amp;quot;Файл загружен.&amp;quot;;&lt;br /&gt;
$TLS_enter_attachment_title = &amp;quot;Введите заголовок для этого вложения.&amp;quot;;&lt;br /&gt;
$TLS_import_was_ok = &amp;quot;Импорт прошел успешно.&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file = &amp;quot;Максимальный размер файла:&amp;quot;;&lt;br /&gt;
$TLS_title_upload_attachment = &amp;quot;Загрузить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_N_A                          = &amp;quot;N/A&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_role              = &amp;quot;Удалить роль&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_role                = &amp;quot;Править роль&amp;quot;;&lt;br /&gt;
$TLS_btn_confirm_delete           = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_no_roles                     = &amp;quot;Нет ролей&amp;quot;;&lt;br /&gt;
$TLS_title_roles                  = &amp;quot;Доступные роли&amp;quot;;&lt;br /&gt;
$TLS_warning_users_will_be_reset  = &amp;quot;'Задетым пользователям' будет назначена гостевая роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_export_with_keywords = &amp;quot;Экспортировать с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_active_build     = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_build       = &amp;quot;Редактировать эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_open_build       = &amp;quot;Открыть сборку&amp;quot;;&lt;br /&gt;
$TLS_btn_build_create     = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_no_builds            = &amp;quot;В этот плане тестирования сборок не определено.&amp;quot;;&lt;br /&gt;
$TLS_th_description       = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_open              = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_title_build_list     = &amp;quot;Список существующих сборок&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_build = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Вы действительно хотите уничтожить эту сборку? &amp;lt;p&amp;gt;&lt;br /&gt;
Все связанные данные (в частности, результаты тестов) будут также удалены!&amp;quot;;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_alt_delete_tp   = &amp;quot;Удалить этот план тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_alt_edit_tp     = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_msg_delete_confirm = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Вы уверены, что хотите удалить план тестирования? &amp;lt;p&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать не удаляя.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_testplan_th_delete     = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_list    = &amp;quot;Список планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_empty_list = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 Ни одного плана тестирования не определено! &amp;lt;p&amp;gt;&lt;br /&gt;
 Чтобы воспользоваться функциональностью прогонов тестов, нужно &lt;br /&gt;
 создать хотя бы один.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_alt_active_testplan = &amp;quot;Активный план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==gui/templates/mainPage_left.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_href_assign_user_roles = &amp;quot;Назначить пользовательские роли&amp;quot;;&lt;br /&gt;
$TLS_href_browse_tc = &amp;quot;Просмотр тестов&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_tproject_assign = &amp;quot;Привязка пользовательских полей&amp;quot;;&lt;br /&gt;
$TLS_href_create_product = &amp;quot;Создать новый проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_product = &amp;quot;Править/Удалить проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_tc = &amp;quot;Редактировать тесты&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_assign = &amp;quot;Привязать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_manage = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_view = &amp;quot;Просмотр ключевых слов&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc = &amp;quot;Печать тестов&amp;quot;;&lt;br /&gt;
$TLS_href_req_assign = &amp;quot;Привязать требования&amp;quot;;&lt;br /&gt;
$TLS_href_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_href_roles_management = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_href_search_tc = &amp;quot;Искать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_user_management = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_title_requirements = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_title_test_spec = &amp;quot;Спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_product_mgmt = &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage_right.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_filter_tp_by_product   = &amp;quot;Фильтровать план тестирования по проектам&amp;quot;;&lt;br /&gt;
$TLS_href_add_test_case     = &amp;quot;Добавить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_build_new         = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_href_execute_test      = &amp;quot;Выполнить тесты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_assign_priority = &amp;quot;Установить приоритеты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_define_priority = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_href_plan_management   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_plan_mstones      = &amp;quot;Управление вехами&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc_suite    = &amp;quot;Печать плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_remove_test_case  = &amp;quot;Удалить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_rep_and_metrics   = &amp;quot;Отчеты и метрики&amp;quot;;&lt;br /&gt;
$TLS_href_tc_exec_assignment = &amp;quot;Поручить прогон тестов&amp;quot;;&lt;br /&gt;
$TLS_href_upd_mod_tc        = &amp;quot;Сохранить измененные тесты&amp;quot;;&lt;br /&gt;
$TLS_msg_no_rights_for_tp   = &amp;quot;- недоступен (У вас нет доступа ни для одного плана тестирования)&amp;quot;;&lt;br /&gt;
$TLS_testplan_role          = &amp;quot;Роль плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_suite  = &amp;quot;Содержание плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_execution   = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan_mgmt   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_newest_tcversions = &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_add.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bug_added                = &amp;quot;Баг добавлен&amp;quot;;&lt;br /&gt;
$TLS_error_bug_does_not_exist_on_bts=&amp;quot;Бага с таким ID не зарегистрировано в BTS!&amp;quot;;&lt;br /&gt;
$TLS_error_wrong_BugID_format = &amp;quot;Неверный формат BugID!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_delete.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugdeleting_was_ok = &amp;quot;Баг успешно удален.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/doAuthorize.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_ldap_auth_failed = &amp;quot;LDAP-аутентификация не удалась&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_bind_failed = &amp;quot;Не удалось выполнить LDAP-binding&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_server_connect_failed = &amp;quot;Не удалось соединится с LDAP-сервером&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_update_failed = &amp;quot;Обновление LDAP не удалось&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_user_not_found = &amp;quot;LDAP-пользователь не найден&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/product.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_product_delete_fails = &amp;quot;При удалении этого проекта произошла ошибка&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/results.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_trep_failing = &amp;quot;Провалены&amp;quot;;&lt;br /&gt;
$TLS_trep_passing = &amp;quot;Прошли&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_build = &amp;quot;Состояние для сборки&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_ts = &amp;quot;Состояние для группы тестов&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;Не назначены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/resultsMoreBuilds.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugs                 = &amp;quot;Связанные Баги&amp;quot;;&lt;br /&gt;
$TLS_builds_selected      = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_case_not_run_warning = &amp;quot;Тест не запущен&amp;quot;;&lt;br /&gt;
$TLS_category_header      = &amp;quot;Группа тестов =&amp;quot;;&lt;br /&gt;
$TLS_daterun              = &amp;quot;Дата запуска&amp;quot;;&lt;br /&gt;
$TLS_last_status          = &amp;quot;Последнее состояние&amp;quot;;&lt;br /&gt;
$TLS_number_blocked       = &amp;quot;# блокированных&amp;quot;;&lt;br /&gt;
$TLS_number_cases         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_number_executions    = &amp;quot;# тест-пусков&amp;quot;;&lt;br /&gt;
$TLS_number_failed        = &amp;quot;# тест-сбоев&amp;quot;;&lt;br /&gt;
$TLS_number_not_run       = &amp;quot;# не запущено&amp;quot;;&lt;br /&gt;
$TLS_number_passed        = &amp;quot;# пройденных&amp;quot;;&lt;br /&gt;
$TLS_owner                = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_owner_header         = &amp;quot;Tester =&amp;quot;;&lt;br /&gt;
$TLS_runby                = &amp;quot;Запущен тестировщиком &amp;quot;;&lt;br /&gt;
$TLS_test_plan_name       = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/roles.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_desc_cfield_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_desc_cfield_view       = &amp;quot;Просмотр пользовательских полей (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_key    = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_product= &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_req    = &amp;quot;Управление требованиями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_tc     = &amp;quot;Создание/правка тестов&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_users  = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_key      = &amp;quot;Просмотр ключевых слов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_req      = &amp;quot;Просмотр требований (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_tc       = &amp;quot;Просмотр тестов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_role_management   = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_create_build = &amp;quot;Создание/редактирование сборки&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_execute  = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_metrics  = &amp;quot;Метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_planning = &amp;quot;Составление плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_user_role_assignment = &amp;quot;Назначение ролей&amp;quot;;&lt;br /&gt;
$TLS_error_duplicate_rolename = &amp;quot;Роль с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rights     = &amp;quot;Вы не можете создать роль без каких-либо прав!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rolename   = &amp;quot;Вам нужно ввести имя для этой роли.&amp;quot;;&lt;br /&gt;
$TLS_mgt_testplan_create      = &amp;quot;Создать/править план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testproject.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_creating_req_spec    = &amp;quot;Ошибка при создании спецификации требования&amp;quot;;&lt;br /&gt;
$TLS_info_product_name_empty    = &amp;quot;Нельзя давать пустое имя.&amp;quot;;&lt;br /&gt;
$TLS_keyword_already_exists     = &amp;quot;Такое ключевое слово уже есть&amp;quot;;&lt;br /&gt;
$TLS_string_contains_bad_chars  = &amp;quot;Введенная строка содержит недопустимые символы.&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_req_title= &amp;quot;Требование с таким заголовком уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/requirements.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_conflict               = &amp;quot;Конфликт&amp;quot;;&lt;br /&gt;
$TLS_error_deleting_req     = &amp;quot;Ошибка при удалении требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_inserting_req    = &amp;quot;Ошибка при вставке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_req     = &amp;quot;Ошибка при правке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_reqspec = &amp;quot;Ошибка при правке спецификаций требований.&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_xml = &amp;quot;Файл не распознан как корректный XML, и не может быть использован.&amp;quot;;&lt;br /&gt;
$TLS_ok = &amp;quot;OK&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description1 = &amp;quot; - тип CSV требует три поля на каждую запись: 'req_doc_id','title','description'&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description2 = &amp;quot; - CSV, экспортированный из DOORS требует запись-заголовок.&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_overwritten  = &amp;quot;перезаписано!&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_skipped      = &amp;quot;пропущено&amp;quot;;&lt;br /&gt;
$TLS_req_state_not_testable         = &amp;quot;не тестируемо&amp;quot;;&lt;br /&gt;
$TLS_req_state_valid                = &amp;quot;актуально&amp;quot;;&lt;br /&gt;
$TLS_the_format_req_xml_import      = &amp;quot;Неверный XML-формат для импорта требований&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_reqdoc_id    = &amp;quot;Не уникальный (дублирующий) id документа&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testsuite.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component_name_already_exists = &amp;quot;Группа тестов с таким именем уже зарегистрирована&amp;quot;;&lt;br /&gt;
$TLS_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/exec.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_results_submitted = &amp;quot;Результаты тестов отправлены.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/print.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_printed_by_TestLink_on = &amp;quot;Распечатано TestLink'ом &amp;quot;;&lt;br /&gt;
$TLS_title_toc = &amp;quot;Содержание&amp;quot;;&lt;br /&gt;
$TLS_passfail = &amp;quot;Пройден / Провален&amp;quot;;&lt;br /&gt;
$TLS_testnotes = &amp;quot;Заметки к тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testcase.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testcase_name_already_exists = &amp;quot;Тест с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_the_format_tc_xml_import = &amp;quot;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/info.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_email_sent_message = &amp;quot;Ваше письмо отослано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/users.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Unknown = &amp;quot;Неизвестно&amp;quot;;&lt;br /&gt;
$TLS_duplicate_login = &amp;quot;Пользователь с таким логином уже есть!&amp;quot;;&lt;br /&gt;
$TLS_login_must_not_be_empty = &amp;quot;Логин не должен быть пустым!&amp;quot;;&lt;br /&gt;
$TLS_wrong_old_password = &amp;quot;Старый пароль неверен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/email_api.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_stmp_host_unconfigured = &amp;quot;Некорректно указан SMTP host!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/common.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/configCheck.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachments_dir = &amp;quot;каталог для вложений:&amp;quot;;&lt;br /&gt;
$TLS_bts_connection_problems = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Не удалось соединиться с вашей Bug Tracking System.&amp;lt;p&amp;gt;&lt;br /&gt;
Пожалуйста, проверьте настройки.&amp;lt;p&amp;gt;&lt;br /&gt;
Будьте внимательны, эта проблема &lt;br /&gt;
снижает производительность TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_but_directory_is_not_writable = &amp;quot;Каталог закрыт для записи!&amp;quot;;&lt;br /&gt;
$TLS_directory_is_writable = &amp;quot;Каталог открыт для записи.&amp;quot;;&lt;br /&gt;
$TLS_does_not_exist = &amp;quot;не существует&amp;quot;;&lt;br /&gt;
$TLS_exists = &amp;quot;существует&amp;quot;;&lt;br /&gt;
$TLS_ldap_extension_not_loaded=&amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Метод аутентификации указан как LDAP &amp;lt;/br&amp;gt;&lt;br /&gt;
однако PHP/LDAP extension не загружено =&amp;gt; &lt;br /&gt;
Вам не удастся войти в систему. &lt;br /&gt;
Пожалуйста, свяжитесь с администратором TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_sec_note_admin_default_pwd = &amp;quot;Вам необходимо сменить пароль по умолчанию у пользователя 'admin'!&amp;quot;;&lt;br /&gt;
$TLS_sec_note_remove_install_dir = &amp;quot;Инсталляционный каталог должен быть удален!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/frmWorkArea.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_create_a_build = &amp;quot;Создать новую сборку&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part1 = &amp;quot;Ни одной сборки для этого тест плана не создано.&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part2 = &amp;quot;Создайте их или попросите об этом свое руководство.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/myTPInfo.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testplans_available = &amp;quot;К сожалению, ни одного плана тестирования не доступно&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/tlsmarty.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywords.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_empty_keyword_no = &amp;quot;Ключевое слово должно быть непустым!&amp;quot;;&lt;br /&gt;
$TLS_keywords_char_not_allowed = &amp;quot;Запятые и кавычки недопустимы в ключевых словах!&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails2 = &amp;quot; дал сбой &amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_csv_import = &amp;quot;keyword;notes&amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_xml_import = &amp;quot;&amp;amp;lt;keywords&amp;gt;&amp;amp;lt;keyword name=\&amp;quot;name\&amp;quot;&amp;gt;Notes&amp;amp;lt;/keyword&amp;gt;&amp;amp;lt;/keywords&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_kw_delete_fails = &amp;quot;Не удалось удаление ключевого слова!&amp;quot;;&lt;br /&gt;
$TLS_kw_update_fails = &amp;quot;Не удалась правка ключевого слова!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assigned_kword  = &amp;quot;Связанные ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_available_kword = &amp;quot;Доступные ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/buildNew.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cannot_add_build     = &amp;quot;Невозможно добавить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_delete_build  = &amp;quot;Невозможно удалить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_update_build  = &amp;quot;Ошибка при правке сборки!&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_build = &amp;quot;Сборка с таким идентификатором уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/plan.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_warning_empty_milestone_name = &amp;quot;Обязательно введите имя для вехи!&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_valid_date = &amp;quot;Введенная дата некорректна!&amp;quot;;&lt;br /&gt;
$TLS_warning_invalid_percentage_value = &amp;quot;Значения-проценты должны быть от 0 to 100 (%)&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'!&amp;quot;;&lt;br /&gt;
$TLS_warning_percentage_value_higher_than_100 = &amp;quot;Сумма всех значений-процентов не должна быть больше 100!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planMilestones.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_milestone_delete_fails         = &amp;quot;Не удалось удалить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_add_failed   = &amp;quot;Не удалось добавить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_update_failed = &amp;quot;Не удалось править веху!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planOwner.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_imp_high     = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_low      = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_medium   = &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_assign_tp    = &amp;quot;Поручить планы тестирования пользователю: &amp;quot;;&lt;br /&gt;
$TLS_title_assign_users = &amp;quot;Назначить пользователей на план тестирования: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_nav_test_plan = &amp;quot;Навигатор - Планы тестирования&amp;quot;;&lt;br /&gt;
$TLS_nav_users = &amp;quot;Навигатор - Пользователи&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planUpdateTC.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_category_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_component_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_deleted = &amp;quot;удалена&amp;quot;;&lt;br /&gt;
$TLS_different_versions = &amp;quot;Различные версии&amp;quot;;&lt;br /&gt;
$TLS_plan_update_no_tc_updated = &amp;quot;Ни один тест не изменен&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted2 = &amp;quot;был удален.&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated2 = &amp;quot;был изменен.&amp;quot;;&lt;br /&gt;
$TLS_tcorder_has_changed = &amp;quot;Порядок тестов был изменен&amp;quot;;&lt;br /&gt;
$TLS_updated = &amp;quot;изменен&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_plan_navigator = &amp;quot;Навигация по планам тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetRemove.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tcase_removed_from_tplan=&amp;quot;тест удален из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_multiple_tcase_removed_from_tplan=&amp;quot;Тесты удалены из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_created_ok = &amp;quot;План тестирования был создан&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed1 = &amp;quot;Правка плана тестирования '&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed2 = &amp;quot;' не удалась&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_tplan_name = &amp;quot;План тестирования с таким именем уже есть. Выберите другое имя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/print/selectData.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_show_doc_header = &amp;quot;Показать заголовок документа&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_body = &amp;quot;Показать тело теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_summary = &amp;quot;Показать резюме теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_toc = &amp;quot;Показать Содержание&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_author = &amp;quot;Показать автора теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_passfail = &amp;quot;Показать статус &amp;amp;laquo;пройден/провален&amp;amp;raquo; и заметки&amp;quot;;&lt;br /&gt;
$TLS_title_tc_print_navigator = &amp;quot;Навигация - Печать спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tp_print_navigator = &amp;quot;Навигация - Печать плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/project/projectedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_product_name_duplicate = &amp;quot;Уже есть проект с именем %s. &amp;lt;br&amp;gt;Пожалуйста, выберите другое имя&amp;quot;;&lt;br /&gt;
$TLS_info_no_more_prods = &amp;quot;проектов больше нет.&amp;quot;;&lt;br /&gt;
$TLS_info_product_activated = &amp;quot;проект активирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_inactivated = &amp;quot;проект деактивирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_not_deleted_check_log = &amp;quot;Не удалось удалить проект. Проверьте лог TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_info_product_was_deleted = &amp;quot;проект успешно удален.&amp;quot;;&lt;br /&gt;
$TLS_refer_to_log = &amp;quot; Пожалуйста, изучите лог TestLink'а для дополнительной информации.&amp;quot;;&lt;br /&gt;
$TLS_test_project_activated = &amp;quot;проект %s успешно активирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_created = &amp;quot;проект %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_test_project_deleted = &amp;quot;проект %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_test_project_inactivated = &amp;quot;проект %s успешно деактивирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_updated = &amp;quot;проект %s успешно отредактирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_update_failed = &amp;quot;Правка проекта %s не удалась!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/charts.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_maani_copyright = &amp;quot;flash technology предоставлена http://www.maani.us&amp;quot;;&lt;br /&gt;
$TLS_graphical_reports = &amp;quot;Графические отчеты&amp;quot;;&lt;br /&gt;
$TLS_overall_metrics = &amp;quot;Общие метрики&amp;quot;;&lt;br /&gt;
$TLS_results_by_keyword = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_results_by_tester = &amp;quot;Рузультаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_results_top_level_suites = &amp;quot;Результаты по топ группам тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_file_is_not_ok_for_import_type = &amp;quot;Кажется тип файла не совпадает с выбранным для импорта типом&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_text = &amp;quot;Это не текстовый файл. Использовать нельзя.&amp;quot;;&lt;br /&gt;
$TLS_please_choose_req_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_req_import_finished = &amp;quot;Импорт завершен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqSpecView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_tc_from_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_req_created = &amp;quot;Требование %s успешно создано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqTcAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_msg_noselect = &amp;quot;Ничего не выбрано&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notupdated_coverage = &amp;quot;Покрытие не обновлено для Требований: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsBugs.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_report_all_builds = &amp;quot;Отчет: Результаты тестов для всех сборок&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsAllBuilds.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_metrics_x_build = &amp;quot; - Результаты тестов. Метрики X Сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsByStatus.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_list_of_blocked = &amp;quot;Список блокированных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_failed = &amp;quot;Список проваленных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_not_run = &amp;quot;Список незапущенных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsTC.php==&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_link_charts=&amp;quot;Диаграммы&amp;quot;;&lt;br /&gt;
$TLS_link_report_blocked_tcs = &amp;quot;Блокированные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_failed = &amp;quot;Проваленные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_general_tp_metrics = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_active_build = &amp;quot;Метрики активной сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_more_builds = &amp;quot;Запрос метрик&amp;quot;;&lt;br /&gt;
$TLS_link_report_not_run=&amp;quot;Не запущенные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_overall_build = &amp;quot;Общий статус сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_reqs_coverage = &amp;quot;Отчет о выполнении требований&amp;quot;;&lt;br /&gt;
$TLS_link_report_test = &amp;quot;Отчет по тестам&amp;quot;;&lt;br /&gt;
$TLS_link_report_total_bugs = &amp;quot;Всего багов по каждому тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsSend.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_to_empty_email_warning = &amp;quot;Пожалуйста, введите правильный email.&amp;quot;;&lt;br /&gt;
$TLS_warning_create_build_first = &amp;quot;Сначала Вы должны создать или импортировать сборки.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/displayMgr.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_sendreport_no_email_credentials = &amp;quot;Email для этого пользователя не указан, пожалуйста, укажите его в настройках своего профиля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/archive.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/listTestCases.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_file_to_import = &amp;quot;Пожалуйста, выберите файл для импорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_import_to = &amp;quot;Импорт тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_import_to = &amp;quot;Импорт группы тестов&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tcase_file = &amp;quot;Некорректный XML в файле с тестами&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tsuite_file = &amp;quot;Некорректный XML в файле с группой тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcexport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testcases_to_export = &amp;quot;Нет тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_no_testsuites_to_export = &amp;quot;Нет группы тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export = &amp;quot;Экспорт теста&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export_all = &amp;quot;Экспортировать все тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export_all = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/containerEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_delete = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_delete_notice = &amp;quot;Внимание: Все связанные результаты прогонов будут удалены&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_com_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_current = &amp;quot;текущий&amp;quot;;&lt;br /&gt;
$TLS_delete_linked = &amp;quot;Ссылки на планы тестирования будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_delete_linked_and_exec = &amp;quot;Ссылки на планы тестирования и результаты выполнения будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_error_tc_add = &amp;quot;При добавлении теста произошла ошибка&amp;quot;;&lt;br /&gt;
$TLS_title_del_tc = &amp;quot;Удалить тест &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesview.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_deletion = &amp;quot;Не удалось удалить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersassign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_test_projects = &amp;quot;Не заведено ни одного проекта&amp;quot;;&lt;br /&gt;
$TLS_no_test_plans = &amp;quot;Для этого проекта не заведено ни одного плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_project_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
$TLS_test_plan_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_user_created=&amp;quot;Пользователь %s был успешно создан&amp;quot;;&lt;br /&gt;
$TLS_user_deleted=&amp;quot;Пользователь %s был успешно удален&amp;quot;;&lt;br /&gt;
$TLS_user_not_added = &amp;quot;Не удалось добавить пользователя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_creation = &amp;quot;Не удалось создать роль!&amp;quot;;&lt;br /&gt;
$TLS_error_role_update = &amp;quot;Не удалось исправить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/cfields/cfields_edit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cf_name_exists = &amp;quot;Пользовательское поле с таким именем уже существует. Пожалуста, выберите другое имя.&amp;quot;;&lt;br /&gt;
$TLS_error_creating_cf = &amp;quot;Не удалось создать пользовательское поле!&amp;quot;;&lt;br /&gt;
$TLS_do_update = &amp;quot;исправлено&amp;quot;;&lt;br /&gt;
$TLS_do_delete = &amp;quot;удалено&amp;quot;;&lt;br /&gt;
$TLS_do_add = &amp;quot;добавлено&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Open=&amp;quot;Открыто&amp;quot;;&lt;br /&gt;
$TLS_Resolved=&amp;quot;Исправленных&amp;quot;;&lt;br /&gt;
$TLS_Total=&amp;quot;Всего&amp;quot;;&lt;br /&gt;
$TLS_TCs_with_Bugs=&amp;quot;Тестов с багами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9440</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9440"/>
				<updated>2007-08-29T14:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Отчет о выполнении требований */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;br /&gt;
Данный отчет для каждой спецификации требований показывает статус требований, на основе данных о результатах выполнения тестов связанных с ними.&lt;br /&gt;
Возможны следующие статусы требований:&lt;br /&gt;
; Требование выполнено: это означает что все тесты связанные с данным требование выполнены на активной (выбранной с менб справа) сборке выполнены успешно.&lt;br /&gt;
: Требование нарушено: есть тесты связанные с требованием и выполненые с результатом «провален».&lt;br /&gt;
: Требование заблокировано: есть тесты связанные с требованием и выполненые с результатом «блокирован».&lt;br /&gt;
: Требование непроверено: либо нет тестов с вязанных с требование либо все они в статусе «не выполнен».&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9404</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9404"/>
				<updated>2007-08-29T14:08:44Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Всего багов по каждому тесту */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой управления ошибками (bug tracking system), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9402</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9402"/>
				<updated>2007-08-29T13:45:08Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Прогон */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Сбой», «Пройден») для некоторых выбранных тестов и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе или выполнение теста невозможно из-за того что не пройден другой тест и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. &lt;br /&gt;
На этой странице изображены:&lt;br /&gt;
* Заметки по плану тестирования;&lt;br /&gt;
* Описание сборки;&lt;br /&gt;
* Панель массового управления состоянием тестов;&lt;br /&gt;
: служит для массового присвоения одинаковых результатов выполнения всем тестам в наборе(группе)&lt;br /&gt;
* История выполнения теста или результаты последнего выполнения;&lt;br /&gt;
* Описание теста:&lt;br /&gt;
** резюме;&lt;br /&gt;
** шаги выполнения;&lt;br /&gt;
** ожидаемые результаты.&lt;br /&gt;
* Настраиваемые поля;&lt;br /&gt;
* Поле для заметок;&lt;br /&gt;
* Радиокнопка для выбора результата теста.&lt;br /&gt;
&lt;br /&gt;
Посде того как вы ввели результат выполнения теста, заполнили все пользовательские поля, если это необходимо, и заметки, можно ввести привязку результатов к описанию ошибки (багу) в системе управления ошибками (''bug tracking system''). Привязку результата к багу можно осуществить не только для теста который не прошел, но и для теста в состоянии &amp;quot;Блокирован&amp;quot; или даже &amp;quot;Пройден&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Так же после регистрации результата по выполнению теста, можно сделать вложения для каждого факта выполнения.&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9400</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9400"/>
				<updated>2007-08-29T12:42:01Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Параметры выборки */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за их выполнение тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно выбирать сборку, к которой привязываются результаты выполненых тестов. Одновременно более одной ''активной'' сборки (смотрите )может проходить тестирование, т.о. разные тестировщики могут одновременно тестировать разные сборки.&lt;br /&gt;
&lt;br /&gt;
{{note}} Заметим, что в предыдущей версии TestLink 1.6 такая возможность отстутствовала и создание новой сборки автоматически означало прекращение тестирования предыдущей. Т.е. регистрировать результаты в TestLink для «устаревшей» сборки становилось невозможно.&lt;br /&gt;
&lt;br /&gt;
Для каждой сборки можно зарегистрировать неограниченное число результатов выполнения одного и того же теста, но в отчетах по результатам сборки, покрытия требований и других будет фигурировать только последний результат.&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9398</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9398"/>
				<updated>2007-08-29T12:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Назначение тестов для прогона */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На странице отчетов и метрик есть отчет, который показывает прогресс тестировщиков по выполнению тестов: сколько тестов выполнено, и сколько осталось прогнать.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9396</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9396"/>
				<updated>2007-08-29T11:29:25Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Планы тестирования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, о рисках, о том что тестируется и что находится вне тестирования, описывать подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик и отчетов. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «leader».&lt;br /&gt;
Сборки можно &lt;br /&gt;
; редактировать: Можно изменить название и описание сборки.&lt;br /&gt;
; активировать: Если сборка не активирована, невозможно выполнять тест с привязкой результатов к этой сборке. Т.е. TestLink считает, что все тестирование по данной сборке проведено и дальнейшего тестирования не требуется.&lt;br /&gt;
; открыть:&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
&lt;br /&gt;
Тесты попадают в план тестирования проекта из спецификации тестов (''Test Specification'').  Включение тестов в проект происходит на &lt;br /&gt;
&lt;br /&gt;
Для того чтобы включить тест в план, необходимо перейти по ссылке &amp;quot;Добавить тест(ы)&amp;quot; из меню &amp;quot;Содержание плана тестирования&amp;quot; на главной странице.&lt;br /&gt;
При добавлении тестов спецификация тестов может быть отфильтрована по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован. &lt;br /&gt;
&lt;br /&gt;
Стоит отметить, что в план тестирования попадает определенная версия теста. И если описание теста изменилось, то при необходимости нужно провести обновление теста в плане. Для этого можно воспользоваться двумя ссылками:&lt;br /&gt;
; &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;: покажет вам есть ли изменения в версиях тестов включенных в данный план.&lt;br /&gt;
; &amp;quot;Добавить тест(ы)&amp;quot;: при помощи нее можно не только добавить, но и обновить тесты в плане.&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Так же риски и важность можно задавать на уровне групп тестов. Риски имеют уровни «Низкий», «Средний», «Высокий» (обозначаются соответственно L, M, H), а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) на конкретного пользователя влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику.&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9406</id>
		<title>Strings.txt (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9406"/>
				<updated>2007-08-29T10:33:48Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* gui/templates/tcDelete.tpl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
Статья с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «[[#Скачать|скачать]]» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скачать=&lt;br /&gt;
[{{SERVER}}{{localurl:Special:CisGetPHPPage|pagetitle={{PAGENAMEE}}}} Получить PHP-код]&lt;br /&gt;
&lt;br /&gt;
= Оригинал (наиболее полный английский перевод) =&lt;br /&gt;
* http://testlink.cvs.sourceforge.net/testlink/testlink/locale/en_GB/&lt;br /&gt;
&lt;br /&gt;
=Разделы файла strings.txt (ru_RU)=&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * TestLink Open Source Project - http://testlink.sourceforge.net/ &lt;br /&gt;
 *&lt;br /&gt;
 * Filename $RCSfile: strings.txt,v $&lt;br /&gt;
 *&lt;br /&gt;
 * @version  $Revision$&lt;br /&gt;
 * @modified $Date$ $Author$&lt;br /&gt;
 *&lt;br /&gt;
 * @author Vadim Ivanchenko, Stas Fomin, and russian Testlink community.&lt;br /&gt;
 * http://lib.custis.ru/index.php/TestLink:_strings.txt_%28RU%29&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
**/&lt;br /&gt;
&lt;br /&gt;
$TLS_STRINGFILE_CHARSET = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_asc    = &amp;quot;по возрастанию&amp;quot;;&lt;br /&gt;
$TLS_btn_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_desc = &amp;quot;по убыванию&amp;quot;;&lt;br /&gt;
$TLS_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan = $TLS_test_plan;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_SRS = &amp;quot;SRS&amp;quot;;&lt;br /&gt;
$TLS_Role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_Keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_Milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_testsuite_created = &amp;quot;Группа тестов создана&amp;quot;;&lt;br /&gt;
$TLS_requirement = &amp;quot;Требование&amp;quot;;&lt;br /&gt;
$TLS_assigned = &amp;quot;назначен&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;свободен&amp;quot;;&lt;br /&gt;
$TLS_import_file_type = &amp;quot;Тип импортируемого файла&amp;quot;;&lt;br /&gt;
$TLS_max_file_size_is = &amp;quot;Макс. размер файла&amp;quot;;&lt;br /&gt;
$TLS_supported_file_formats = &amp;quot;Поддерживаемые форматы файлов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==firstLogin.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_user = &amp;quot;К сожалению, не удалось создать ваш логин. Пожалуйста, свяжитесь с администратором!&amp;quot;;&lt;br /&gt;
$TLS_empty_email_address = &amp;quot; Пожалуйста, укажите  e-mail!&amp;quot;;&lt;br /&gt;
$TLS_empty_first_name = &amp;quot; Пожалуйста, укажите имя пользователя.&amp;quot;;&lt;br /&gt;
$TLS_empty_last_name = &amp;quot; Пожалуйста, укажите фамилию.&amp;quot;;&lt;br /&gt;
$TLS_fatal_page_title = &amp;quot;TestLink ::: Fatal Error&amp;quot;;&lt;br /&gt;
$TLS_invalid_user_name = &amp;quot;Некорректный логин пользователя. Пожалуйста, придумайте другой.&amp;quot;;&lt;br /&gt;
$TLS_passwd_dont_match = &amp;quot;Два введенных пароля не совпадают. Учтите, что пароли чувствительны к регистру, и попробуйте ещё раз.&amp;quot;;&lt;br /&gt;
$TLS_user_cant_be_created_because = &amp;quot;Не удалось создать ваш аккаунт. Причина:&amp;quot;;&lt;br /&gt;
$TLS_user_name_exists = &amp;quot;Этот логин пользователя уже используется. Пожалуйста, выберите другой.&amp;quot;;&lt;br /&gt;
$TLS_valid_user_name_format = &amp;quot;Логин пользователя может состоять только из алфавитно-цифровых символов, пробелов, дефисов и подчеркиваний.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd = &amp;quot;Пожалуйста, укажите пароль. Пароль не может быть пустым.&amp;quot;;&lt;br /&gt;
$TLS_your_info_please = &amp;quot;Введите информацию о пользователе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==index.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_main_page_title = &amp;quot;TestLink::Главная страница&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==keywordsimport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_keywords_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_keywords_file = &amp;quot;Файл с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lostPassword.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user = &amp;quot;Пользователь не найден, попробуйте еще&amp;quot;;&lt;br /&gt;
$TLS_contact_admin = &amp;quot;&amp;lt;br&amp;gt; Если проблемы будут продолжаться, пожалуйста, свяжитесь с администратором системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_empty_address = &amp;quot;Вы не указали email-адреса в вашем профиле!  Теперь, чтобы сбросить пароль вам нужно связаться с администратором TestLink-системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_passwd_subject = &amp;quot;Ваш новый пароль к TestLink'у.&amp;quot;;&lt;br /&gt;
$TLS_mail_problems = &amp;quot;Ошибка в почтовых настройках, пожалуйста, свяжитесь с администратором.&amp;quot;;&lt;br /&gt;
$TLS_page_title_lost_passwd = &amp;quot;TestLink - Утерян пароль&amp;quot;;&lt;br /&gt;
$TLS_your_info_for_passwd = &amp;quot;Заполните информацию о вашем пользователе, и пароль будет вам выслан по почте.&amp;quot;;&lt;br /&gt;
$TLS_your_password_is = &amp;quot;Ваш пароль к TestLink'у: &amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==login.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user_passwd = &amp;quot;Логин или пароль неверен. Попробуйте ещё!&amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists1 = &amp;quot;Ваша сессия в этом броузере ещё активна. Пожалуйста, используйте &amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists2 = &amp;quot; если вы хотите обновить вашу сессию.&amp;quot;;&lt;br /&gt;
$TLS_logout_link = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_passwd_lost = &amp;quot;Ваш пароль выслан вам по email на адрес, который вы указали при регистрации. Проверьте вашу почту. В случае проблем, обратитесь к администратору вашего TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_password_reseted=&amp;quot;Новый пароль выслан вам по почте&amp;quot;;&lt;br /&gt;
$TLS_please_login = &amp;quot;Пожалуйста, войдите в систему...&amp;quot;;&lt;br /&gt;
$TLS_session_expired = &amp;quot;Время ваша сессии окончилось. Пожалуйста, войдите в систему заново.&amp;quot;;&lt;br /&gt;
$TLS_your_first_login = &amp;quot;Добро пожаловать в TestLink! Сейчас у вас только гостевой доступ. Для большего, нужно войти в систему.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==planPriority.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_high_priority    = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_priority     = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_priority  = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_risk        = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_risk         = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_risk      = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_importance  = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_low_importance   = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_medium_importance= &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tc_created = &amp;quot;Тест %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_tc_deleted = &amp;quot;Тест %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_tc_updated = &amp;quot;Тест %s отредактирован успешно&amp;quot;;&lt;br /&gt;
$TLS_tc_update_failed = &amp;quot;Не удалась правка теста %s!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachment404.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_close = &amp;quot;Закрыть&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_not_found = &amp;quot;Ошибка: Вложение не найдено!&amp;quot;;&lt;br /&gt;
$TLS_title_downloading_attachment = &amp;quot;Загружаем вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentdelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_deleting_was_ok = &amp;quot;Вложение удалено.&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_delete = &amp;quot;При удалении вложения произошла ошибка!&amp;quot;;&lt;br /&gt;
$TLS_title_delete_attachment = &amp;quot;Удалить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_del_comp = &amp;quot;Да, удалить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_container_title_testsuite =$TLS_test_suite;&lt;br /&gt;
$TLS_linked_but_not_executed=&amp;quot;Связан с одним или более планом тестирования, но не выполнялась&amp;quot;;&lt;br /&gt;
$TLS_question_del = &amp;quot;Действительно удалить&amp;quot;;&lt;br /&gt;
$TLS_th_link_exec_status = &amp;quot;Статус исполнения и связей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_testsuite = &amp;quot;Создать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_tc_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_title_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_testsuite_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_add.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_bug = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_bug_id = &amp;quot;Bug id&amp;quot;;&lt;br /&gt;
$TLS_button_enter_bug = &amp;quot;Создать новый баг&amp;quot;;&lt;br /&gt;
$TLS_title_bug_add = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_link_bts_create_bug = &amp;quot;Доступ к системе регистрации багов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_delete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_delete_bug = &amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cp               = &amp;quot;Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_move             = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_target        = &amp;quot;Выберите куда&amp;quot;;&lt;br /&gt;
$TLS_cont_move_first      = &amp;quot;Переместить это&amp;quot;;&lt;br /&gt;
$TLS_cont_move_second     = &amp;quot;в другое&amp;quot;;&lt;br /&gt;
$TLS_copy_keywords        = &amp;quot;Копировать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_defined_exclam       = &amp;quot;определен !&amp;quot;;&lt;br /&gt;
$TLS_include_nested       = &amp;quot;Включая вложенные данные (только для копирования).&amp;quot;;&lt;br /&gt;
$TLS_sorry_further        = &amp;quot;К сожалению, больше ничего нет &amp;quot;;&lt;br /&gt;
$TLS_title_move_cp        = &amp;quot;Переместить/Скопировать&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_btn_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_help = &amp;quot;Помощь&amp;quot;;&lt;br /&gt;
$TLS_req_create = &amp;quot;Создать требование&amp;quot;;&lt;br /&gt;
$TLS_req_doc_id = &amp;quot;DOC-ID&amp;quot;;&lt;br /&gt;
$TLS_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_reqs = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_req_title = &amp;quot;Заголовок требования должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_reqdoc_id = &amp;quot;ID документа-требования не должен быть пуст!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerOrder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_no_nodes_to_reorder = &amp;quot;К сожалению, тут нечего упорядочивать.&amp;quot;;&lt;br /&gt;
$TLS_node = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_th_node_type = &amp;quot;Тест / Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_order = &amp;quot;Порядок&amp;quot;;&lt;br /&gt;
$TLS_title_change_node_order = &amp;quot;Изменить порядок 'потомков'&amp;quot;;&lt;br /&gt;
$TLS_node_type_dbtable_testsuites=$TLS_test_suite;&lt;br /&gt;
$TLS_node_type_dbtable_testcases=$TLS_testcase;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_del_com    = &amp;quot;Удалить эту группу тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_com   = &amp;quot;Править дату и заголовок для этой группы тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_move_cp_com = &amp;quot;Переместить или скопировать эту группу тестов в другой проект&amp;quot;;&lt;br /&gt;
$TLS_btn_del_com = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_com = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_export_all_testsuites = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_export_tc = &amp;quot;Экспортировать Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_export_testsuite = &amp;quot;Экспортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_import_tc = &amp;quot;Импортировать Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_import_testsuite = &amp;quot;Импортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_move_cp_com = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_cat = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_com = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_tc = &amp;quot;Создать Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_reorder_cat = &amp;quot;Переупорядочить потомков&amp;quot;;&lt;br /&gt;
$TLS_edit_testproject_basic_data = &amp;quot;Править основные данные проекта&amp;quot;;&lt;br /&gt;
$TLS_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_product_name = &amp;quot;Имя проекта&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_edit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_available_on = &amp;quot;Доступно для&amp;quot;;&lt;br /&gt;
$TLS_btn_add = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_btn_delete = &amp;quot;Удалить&amp;quot;; &lt;br /&gt;
$TLS_btn_ok = &amp;quot;Ok&amp;quot;;&lt;br /&gt;
$TLS_custom_field = &amp;quot;Пользовательское поле&amp;quot;;&lt;br /&gt;
$TLS_enable_on_design = &amp;quot;Разрешить при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_enable_on_exec = &amp;quot;Разрешить при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_label = &amp;quot;Метка&amp;quot;;&lt;br /&gt;
$TLS_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_custom_field = &amp;quot;Вы уверены, что хотите удалить пользовательское поле?&amp;quot;;&lt;br /&gt;
$TLS_possible_values = &amp;quot;Возможные значения&amp;quot;;&lt;br /&gt;
$TLS_show_on_design = &amp;quot;Показывать при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_show_on_exec = &amp;quot;Показывать при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_title_cfields_mgmt = &amp;quot;Пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_type = &amp;quot;Тип&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_label = &amp;quot;Пожалуйста, введите метку для этого пользовательского поля.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_name = &amp;quot;Пожалуйста, введите имя этого пользовательского поля.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_update.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_failed_db_upd = &amp;quot;Не удалось обновить базу данных!&amp;quot;;&lt;br /&gt;
$TLS_info_failed_db_upd_details = &amp;quot;Не удалось обновить базу данных! - Подробности:&amp;quot;;&lt;br /&gt;
$TLS_invalid_query = &amp;quot;Ошибка:&amp;quot;;&lt;br /&gt;
$TLS_warning = &amp;quot;Предупреждение!!&amp;quot;;&lt;br /&gt;
$TLS_was_success = &amp;quot; был(и) успешно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestPlan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_btn_apply_filter = &amp;quot;Применить фильтр&amp;quot;;&lt;br /&gt;
$TLS_btn_update_menu = &amp;quot;Обновить меню&amp;quot;;&lt;br /&gt;
$TLS_caption_nav_filter_settings = &amp;quot;Параметры выборки&amp;quot;;&lt;br /&gt;
$TLS_current_build = &amp;quot;Текущая сборка&amp;quot;;&lt;br /&gt;
$TLS_filter_owner = &amp;quot;Ответственный&amp;quot;;&lt;br /&gt;
$TLS_filter_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_filter_tcID = &amp;quot;Фильтр: ID Теста&amp;quot;;&lt;br /&gt;
$TLS_keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_test_status_all_status=&amp;quot;Все&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_th_my_perc_completed = &amp;quot;У меня выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_perc_completed = &amp;quot;Выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_title_your_tp_metrics = &amp;quot;Ваши метрики для плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/newest_tcversions.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_linked_version = &amp;quot;Связанная версия&amp;quot;;&lt;br /&gt;
$TLS_newest_version = &amp;quot;Самая новая из доступных активных версий&amp;quot;;&lt;br /&gt;
$TLS_title_newest_tcversions = &amp;quot;Самые новые версии связанных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/emailSent.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_test_report = &amp;quot;- Послать Тест-отчёт&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_Title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_btn_back2srs = &amp;quot;Назад, к спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_btn_import = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_btn_upload_file = &amp;quot;Загрузить файл&amp;quot;;&lt;br /&gt;
$TLS_check_req_file_structure = &amp;quot;Пожалуйста, проверьте формат файла. Не получается получить из этого файла требования&amp;quot;;&lt;br /&gt;
$TLS_local_file = &amp;quot;Файл:&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file1 = &amp;quot;Максимальный размер для этого файла&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file2 = &amp;quot;kB&amp;quot;;&lt;br /&gt;
$TLS_req_import_check_note = &amp;quot;Пожалуйста, разрешите возможные конфликты и запустите процесс импорта.&amp;quot;;&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Не импортируйте элементы с пустой Сферой&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_double = &amp;quot;Добавить ещё с тем же заголовком&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_header = &amp;quot;Разрешить конфликт&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_overwrite = &amp;quot;Обновить существующий&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_skip = &amp;quot;Пропускать импорт дублирующих требований&amp;quot;;&lt;br /&gt;
$TLS_req_import_type = &amp;quot;Тип:&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement = &amp;quot;Нет требований&amp;quot;;&lt;br /&gt;
$TLS_required_cvs_format = &amp;quot;Формат файла с требованиями:&amp;quot;;&lt;br /&gt;
$TLS_title_choose_file_type = &amp;quot;Выберите тип файла&amp;quot;;&lt;br /&gt;
$TLS_title_choose_local_file = &amp;quot;Выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_title_req_import = &amp;quot;Загрузка требований&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_check_input = &amp;quot;Проверьте импортируемые данные&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_build = &amp;quot;Удалить эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_attachment = &amp;quot;Удалить это вложение&amp;quot;;&lt;br /&gt;
$TLS_attached_files = &amp;quot;Вложенные файлы&amp;quot;;&lt;br /&gt;
$TLS_attachment_feature_disabled = &amp;quot;вложения отключены&amp;quot;;&lt;br /&gt;
$TLS_button_upload = &amp;quot;Загрузить&amp;quot;;&lt;br /&gt;
$TLS_upload_file_new_file = &amp;quot;Загрузить новый файл&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_attachment = &amp;quot;Действительно удалить вложение?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_print = &amp;quot;Печать&amp;quot;;&lt;br /&gt;
$TLS_note_email_sent_t = &amp;quot;Примечание: email format послан на email пользователя&amp;quot;;&lt;br /&gt;
$TLS_send_results = &amp;quot;Послать отчеты&amp;quot;;&lt;br /&gt;
$TLS_send_to = &amp;quot;To:&amp;quot;;&lt;br /&gt;
$TLS_subject = &amp;quot;Subject:&amp;quot;;&lt;br /&gt;
$TLS_title_active_build = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_title_report_type = &amp;quot;Формат отчета&amp;quot;;&lt;br /&gt;
$TLS_via_email = &amp;quot;через eMail&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments_upload.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_view.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cfields_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_manage_cfield = &amp;quot;Управлять пользовательскими полями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_ro_m0.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_category = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_configuration = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_not_defined = &amp;quot;Не определено.&amp;quot;;&lt;br /&gt;
$TLS_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_alt_name = &amp;quot;Обязательно заполнить имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_cat_config = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_cat_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_cat_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_cat_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_by = &amp;quot;by&amp;quot;;&lt;br /&gt;
$TLS_coverage = &amp;quot;Покрытие&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_req = &amp;quot;Удалить это требование, Вы уверены?&amp;quot;;&lt;br /&gt;
$TLS_req_edit = &amp;quot;Править требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notestcase = &amp;quot;Связанных Тестов нет.&amp;quot;;&lt;br /&gt;
$TLS_requirement_spec = &amp;quot;Спецификация требования&amp;quot;;&lt;br /&gt;
$TLS_test_case_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_title_created = &amp;quot;Создано:&amp;quot;;&lt;br /&gt;
$TLS_title_last_mod = &amp;quot;Последняя правка:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_active = &amp;quot;Активная&amp;quot;;&lt;br /&gt;
$TLS_enter_build = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_enter_build_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_msg_build = &amp;quot;Замечание: Каждая сборка относится к активному плану тестирования. Описание должно включать: список развертываемых пакетов, утверждений, состояние, и т.п.&amp;quot;;&lt;br /&gt;
$TLS_open = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_build_2 = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_title_build_create = &amp;quot;Создать новую Сборку&amp;quot;;&lt;br /&gt;
$TLS_title_build_update = &amp;quot;Править Сборку&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_build_name = &amp;quot;Пожалуйста, введите имя для этой Сборки!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_introduction = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_limitations = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_methodology = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_references = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_comp_alt_name = &amp;quot;Обязательно введите имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_comp_intro = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_comp_lim = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_comp_method = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_comp_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_comp_ref = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_analyse = &amp;quot;Анализировать&amp;quot;;&lt;br /&gt;
$TLS_btn_check_all = &amp;quot;Проверить все&amp;quot;;&lt;br /&gt;
$TLS_btn_delete_spec = &amp;quot;Удалить спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_spec = &amp;quot;Править спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_export_reqs = &amp;quot;Экспортировать требования&amp;quot;;&lt;br /&gt;
$TLS_btn_req_create = &amp;quot;Создать новое требование&amp;quot;;&lt;br /&gt;
$TLS_btn_spec_list = &amp;quot;Список спецификаций&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck_all = &amp;quot;Убрать все отметки&amp;quot;;&lt;br /&gt;
$TLS_cant_delete_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_popup_sure_delete = &amp;quot;Вы уверены удалить эту спецификацию требования?&amp;quot;;&lt;br /&gt;
$TLS_req_select_create_tc = &amp;quot;Создать Тесты&amp;quot;;&lt;br /&gt;
$TLS_req_select_delete = &amp;quot;Удалить требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_list = &amp;quot;Список требований&amp;quot;;&lt;br /&gt;
$TLS_req_total = &amp;quot;Всего треб.&amp;quot;;&lt;br /&gt;
$TLS_req_reorder = &amp;quot;Переупорядочить требования?&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_requirements = &amp;quot;Вы уверены удалить выбранные требования?&amp;quot;;&lt;br /&gt;
$TLS_title_change_req_order = &amp;quot;Переупорядочивание требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_copyrightnotice.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_gnu_gpl = &amp;quot;GNU GPL&amp;quot;;&lt;br /&gt;
$TLS_lic_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_lic_product = &amp;quot;TestLink project&amp;quot;;&lt;br /&gt;
$TLS_licensed_under = &amp;quot;TestLink лицензируется согласно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update_testsuite = &amp;quot;Обновить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_title_edit_level = &amp;quot;Править&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecAnalyse.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_none = &amp;quot;Пусто &amp;quot;;&lt;br /&gt;
$TLS_req = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_req_spec_change = &amp;quot;Изменить спецификацию требований на &amp;quot;;&lt;br /&gt;
$TLS_req_title_analyse = &amp;quot;Анализировать спецификацию требований &amp;quot;;&lt;br /&gt;
$TLS_req_title_covered = &amp;quot;Покрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_in_tl = &amp;quot;Требований, зарегистрированных в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_title_nottestable = &amp;quot;Нетестируемые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_uncovered = &amp;quot;Непокрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_not_in_tl = &amp;quot;Требований, отсутствующих в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_total_count = &amp;quot;Всего требований&amp;quot;;&lt;br /&gt;
$TLS_testcases = &amp;quot;Тесты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_action_create_srs = &amp;quot;Создать спецификацию требований&amp;quot;;&lt;br /&gt;
$TLS_testproject = &amp;quot;проект&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_reqView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_last_edit = &amp;quot;Последняя правка: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_comp.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_top_level_suites = &amp;quot;Результаты топовых групп тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_blocked = &amp;quot;Блокировано&amp;quot;;&lt;br /&gt;
$TLS_trep_comp = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_comp_perc = &amp;quot;Выполнена [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_failed = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_trep_not_run = &amp;quot;Не запускали&amp;quot;;&lt;br /&gt;
$TLS_trep_passed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_trep_total = &amp;quot;Всего&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_keyw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_kw = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_trep_kw = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_owner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_owner = &amp;quot;Результаты по Тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_owner = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_tester = &amp;quot;Результаты по Тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_tester = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_prio.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tit_end_date = &amp;quot;Дата окончания&amp;quot;;&lt;br /&gt;
$TLS_tit_milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_prio = &amp;quot;Результаты по приоритету&amp;quot;;&lt;br /&gt;
$TLS_trep_milestone_goal = &amp;quot;Цель вехи [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_prio = &amp;quot;Приоритет&amp;quot;;&lt;br /&gt;
$TLS_trep_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_ts.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_ts = &amp;quot;Результаты по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_imp = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_trep_risk = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_trep_ts = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecEdit.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_show_bug_table.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_build = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_caption_bugtable = &amp;quot;Связанные баги&amp;quot;;&lt;br /&gt;
$TLS_delete_bug=&amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
$TLS_del_bug_warning_msg = &amp;quot;Действительно удалить этот баг?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecList.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign_tc = &amp;quot;Указать Тест&amp;quot;;&lt;br /&gt;
$TLS_no_docs = &amp;quot;Нет доступных документов.&amp;quot;;&lt;br /&gt;
$TLS_req_list_docs = &amp;quot;Спецификации требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_New_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_add_tc_name = &amp;quot;Обязательно укажите имя Теста.&amp;quot;;&lt;br /&gt;
$TLS_expected_results = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_tc_title = &amp;quot;Заголовок Тест-Кейса&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/show_exec_notes.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_execution_notes = &amp;quot;Замечания по выполнению&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_role = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_role = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_caption_define_role = &amp;quot;Определить роль&amp;quot;;&lt;br /&gt;
$TLS_caption_possible_affected_users = &amp;quot;Возможно влияет на следующих пользователей&amp;quot;;&lt;br /&gt;
$TLS_enter_role_notes = &amp;quot;Введите описание роли&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_product_roles = &amp;quot;Укажите роли проекта&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testplan_roles = &amp;quot;Укажите роли для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_menu_define_roles = &amp;quot;Новая роль&amp;quot;;&lt;br /&gt;
$TLS_menu_mod_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_new_user = &amp;quot;Новый пользователь&amp;quot;;&lt;br /&gt;
$TLS_menu_edit_user = &amp;quot;Редактировать пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_view_users = &amp;quot;Список пользователей&amp;quot;;&lt;br /&gt;
$TLS_menu_view_roles = &amp;quot;Просмотр ролей&amp;quot;;&lt;br /&gt;
$TLS_th_cf_rights = &amp;quot;Права на пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_th_kw_rights = &amp;quot;Права на ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_th_mgttc_rights = &amp;quot;Права на управление Тест-Кейсами&amp;quot;;&lt;br /&gt;
$TLS_th_product_rights = &amp;quot;Права на проект&amp;quot;;&lt;br /&gt;
$TLS_th_req_rights = &amp;quot;Права на требование&amp;quot;;&lt;br /&gt;
$TLS_th_rights = &amp;quot;Разрешения&amp;quot;;&lt;br /&gt;
$TLS_th_rolename = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_th_tp_rights = &amp;quot;Права на план тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_user_rights = &amp;quot;Права пользователей&amp;quot;;&lt;br /&gt;
$TLS_title_user_mgmt = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_warning_modify_role = &amp;quot;Действительно исправить роль?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcSearchForm.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_find             = &amp;quot;Найти&amp;quot;;&lt;br /&gt;
$TLS_caption_search_form  = &amp;quot;Искать тесты&amp;quot;;&lt;br /&gt;
$TLS_not_applied          = &amp;quot;Не применимо&amp;quot;;&lt;br /&gt;
$TLS_th_tcid              = &amp;quot;ID теста&amp;quot;;&lt;br /&gt;
$TLS_th_tcversion         = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
$TLS_th_title             = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_title_search_tcs     = &amp;quot;Поиск&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/infoWindow.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_iw2del = &amp;quot;Да, удалите тест!&amp;quot;;&lt;br /&gt;
$TLS_question_del_tc = &amp;quot;Действительно удалить тест?&amp;quot;;&lt;br /&gt;
$TLS_th_executed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_th_linked_to_tplan = &amp;quot;Связан с планом тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_new_tc = &amp;quot;Создать Тест&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_tc_title = &amp;quot;Пожалуйста, задайте заголовок для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_imp_tc_data = &amp;quot;Импорт данных для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsimport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_keyword_import_to = &amp;quot;Импортировать ключевые слова в &amp;quot;;&lt;br /&gt;
$TLS_title_keyword_import = &amp;quot;Импорт ключевых слов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_export = &amp;quot;Экспорт&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_to = &amp;quot;Импортировать требования в документ:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_tproject_assign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign = &amp;quot;Привязать&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_active_mgmt = &amp;quot;Обновить активное состояние&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_display_order = &amp;quot;Сохранить порядок показа&amp;quot;;&lt;br /&gt;
$TLS_btn_unassign = &amp;quot;Освободить от&amp;quot;;&lt;br /&gt;
$TLS_cfields_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_cfields_tproject_assign = &amp;quot;Привязать пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_display_order = &amp;quot;Порядок показа&amp;quot;;&lt;br /&gt;
$TLS_title_assigned_cfields = &amp;quot;Привязанные пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_title_available_cfields = &amp;quot;Доступные пользовательские поля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_No = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_Yes = &amp;quot;Да&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_order_by_login = &amp;quot;По порядку логинов&amp;quot;;&lt;br /&gt;
$TLS_order_by_role_descr = &amp;quot;По порядку описания ролей&amp;quot;;&lt;br /&gt;
$TLS_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_th_delete = &amp;quot;Удалить?&amp;quot;;&lt;br /&gt;
$TLS_th_email = &amp;quot;Email&amp;quot;;&lt;br /&gt;
$TLS_th_first_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_last_name = &amp;quot;Фамилия&amp;quot;;&lt;br /&gt;
$TLS_th_locale = &amp;quot;Локализация&amp;quot;;&lt;br /&gt;
$TLS_th_login = &amp;quot;Логин&amp;quot;;&lt;br /&gt;
$TLS_th_role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/login.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_login = &amp;quot;Войти&amp;quot;;&lt;br /&gt;
$TLS_login_name = &amp;quot;Логин:&amp;quot;;&lt;br /&gt;
$TLS_lost_password_q = &amp;quot;Забыли пароль?&amp;quot;;&lt;br /&gt;
$TLS_new_user_q = &amp;quot;Новый пользователь?&amp;quot;;&lt;br /&gt;
$TLS_password = &amp;quot;Пароль:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginFirst.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_user_data = &amp;quot;Добавить пользовательские данные&amp;quot;;&lt;br /&gt;
$TLS_e_mail = &amp;quot;E-mail (нужен, чтобы получить новый пароль):&amp;quot;;&lt;br /&gt;
$TLS_first_name = &amp;quot;Имя:&amp;quot;;&lt;br /&gt;
$TLS_last_name = &amp;quot;Фамилия:&amp;quot;;&lt;br /&gt;
$TLS_link_back_to_login = &amp;quot;Войти еще раз&amp;quot;;&lt;br /&gt;
$TLS_password_again = &amp;quot;Повторите пароль:&amp;quot;;&lt;br /&gt;
$TLS_password_mgmt_is_external = &amp;quot;Используется внешнее управление паролями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_mv = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_cat = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_inst_move = &amp;quot;Переместить этот тест в другую группу тестов (внутри того же плана тестирования).&amp;quot;;&lt;br /&gt;
$TLS_title_mv_cp_tc = &amp;quot;Переместить/Копировать Тест&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginLost.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send = &amp;quot;Выслать пароль&amp;quot;;&lt;br /&gt;
$TLS_password_reset = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_records_found = &amp;quot;Ничего не найдено.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execSetResults.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_alt_notes = &amp;quot;заметки&amp;quot;;&lt;br /&gt;
$TLS_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_btn_history_off = &amp;quot;Показывать только последний прогон&amp;quot;;&lt;br /&gt;
$TLS_btn_history_on = &amp;quot;Показывать полную историю прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_all_tests_results = &amp;quot;Сохранить все результаты прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_tc_exec_results = &amp;quot;Сохранить результат прогона&amp;quot;;&lt;br /&gt;
$TLS_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_build_is_closed = &amp;quot;Сборка закрыта&amp;quot;;&lt;br /&gt;
$TLS_builds_notes = &amp;quot;Описание сборки&amp;quot;;&lt;br /&gt;
$TLS_bulk_tc_status_management = &amp;quot;Массовое управление состоянием Тестов&amp;quot;;&lt;br /&gt;
$TLS_date_time_run = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_details = &amp;quot;Подробности&amp;quot;;&lt;br /&gt;
$TLS_exec_notes = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
$TLS_exec_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_execution_history = &amp;quot;История прогонов&amp;quot;;&lt;br /&gt;
$TLS_img_title_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_img_title_delete_execution= &amp;quot;Удалить прогон&amp;quot;;&lt;br /&gt;
$TLS_just_last_execution_for_this_build = &amp;quot;Последний прогон для этой сборки&amp;quot;;&lt;br /&gt;
$TLS_no_data_available = &amp;quot;Данные отсутствуют&amp;quot;;&lt;br /&gt;
$TLS_set_all_tc_to = &amp;quot;Установить всем состояние &amp;quot;;&lt;br /&gt;
$TLS_show_hide = &amp;quot;Показать / скрыть&amp;quot;;&lt;br /&gt;
$TLS_tc_not_tested_yet = &amp;quot;Еще не протестировано:&amp;quot;;&lt;br /&gt;
$TLS_test_cases_cannot_be_executed = &amp;quot;Тесты не могут быть выполнены&amp;quot;;&lt;br /&gt;
$TLS_test_exec_by = &amp;quot;Протестировано: &amp;quot;;&lt;br /&gt;
$TLS_test_exec_expected_r = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_test_exec_last_run_date = &amp;quot;Самые последние запуски:&amp;quot;;&lt;br /&gt;
$TLS_test_exec_notes = &amp;quot;Заметки / Описание&amp;quot;;&lt;br /&gt;
$TLS_test_exec_on_build = &amp;quot; в Сборке&amp;quot;;&lt;br /&gt;
$TLS_test_exec_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_test_exec_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_test_exec_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_test_plan_notes = &amp;quot;Заметки по плану тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_status_not_run = &amp;quot;Не запущен&amp;quot;;&lt;br /&gt;
$TLS_th_test_case_id = &amp;quot;ID &amp;quot;;&lt;br /&gt;
$TLS_th_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_on_build = &amp;quot;Результы тестов по Сборке&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_owner = &amp;quot; Ответственный:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/navBar.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_link_logout = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_product = &amp;quot;Проект&amp;quot;;&lt;br /&gt;
$TLS_product_role = &amp;quot;Роль проекта&amp;quot;;&lt;br /&gt;
$TLS_title_edit_personal_data = &amp;quot;Мой профиль&amp;quot;;&lt;br /&gt;
$TLS_title_execute = &amp;quot;Выполнить&amp;quot;;&lt;br /&gt;
$TLS_title_results = &amp;quot;Отчеты&amp;quot;;&lt;br /&gt;
$TLS_title_specification = &amp;quot;Спецификация&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_rw.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_add_tc = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_add_remove_selected_tc_hint = &amp;quot;Операция будет выполнена над ВСЕМИ группами тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_add_remove_selected_tc = &amp;quot;Добавить / Удалить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_add_selected_tc = &amp;quot;Добавить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_check = &amp;quot;Отметить&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck = &amp;quot;Снять отметки&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_tc = &amp;quot;Все тесты в этой группе тестов.&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_all_checkboxes=&amp;quot;отметить все/снять все отметки&amp;quot;;&lt;br /&gt;
$TLS_has_been_executed = &amp;quot;были выполнены&amp;quot;;&lt;br /&gt;
$TLS_inactive_testcase = &amp;quot;неактивны&amp;quot;;&lt;br /&gt;
$TLS_no_testcase_available = &amp;quot;Тестов нет&amp;quot;;&lt;br /&gt;
$TLS_note_keyword_filter = &amp;quot;Тесты фильтруются по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_remove_tc = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_th_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_title_add_remove_test_to_plan = &amp;quot;Добавить/Удалить Тест(ы) в/из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_add_test_to_plan = &amp;quot;Добавить Тесты в план тестирования&amp;quot;;&lt;br /&gt;
$TLS_warning_add_remove_selected_tc = &amp;quot;Вы уверены удалить выбранные Тесты из этого плана тестирования?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTCNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_navigator = &amp;quot;Навигатор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planPriority.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_prio   = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_title_priority = &amp;quot;Определить приоритеты для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tr_th_importance = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_tr_th_prio_cba = &amp;quot;Приоритет (C/B/A)&amp;quot;;&lt;br /&gt;
$TLS_tr_th_risk = &amp;quot;Риск/Важность&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_testplan_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_opt_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_testplan_question_create_tp_from = &amp;quot;Создать из существующего плана тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_create = &amp;quot;Создать новый план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_edit = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_for_project = &amp;quot;для проекта: &amp;quot;;&lt;br /&gt;
$TLS_testplan_title_tp_management = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_notes = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
План тестирования должен содержать ясно определенные задачи, включая временные границы. &lt;br /&gt;
Он может содержать тест-активность для выпускаемой версии продукта (включая патчи) &lt;br /&gt;
или просто единственный запрос от пользователя.&amp;lt;br/&amp;gt;&lt;br /&gt;
В описании можно ссылаться на план и другую документацию по проекту.&lt;br /&gt;
Разумно перечислить тестируемые возможности, риски и т.п.&amp;lt;br/&amp;gt;&lt;br /&gt;
Можно создать новый план тестирования из существующего (&amp;quot;клонировать&amp;quot;). &lt;br /&gt;
Будут скопированы следующие элементы: Сборки, Тесты, Приоритеты, &lt;br /&gt;
Вехи и роли пользователей.&amp;lt;br/&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать/заморозить: т.е. запретить любое изменение &lt;br /&gt;
атрибутов или вложенных элементов плана тестирования. &lt;br /&gt;
Такие планы тестирования будут видны только на странице отчетов и на этой странице.&lt;br /&gt;
END;&lt;br /&gt;
 &lt;br /&gt;
$TLS_warning_empty_tp_name = &amp;quot;Пожалуйста, введите имя плана тестирования.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_btn_edit = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_testplan_btn_new = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_list = &amp;quot;Список&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planMilestones.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_milestone = &amp;quot;Удалить веху?&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_milestone = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_new_milestone = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_info_milestones_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'&amp;quot;;&lt;br /&gt;
$TLS_no_milestones = &amp;quot;Для этого плана тестирования вехи не определены.&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_milestones = &amp;quot;Вы уверены удалить веху %NAME% ?&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_milestone_name=&amp;quot;Укажите имя вехи!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$TLS_th_date_format = &amp;quot;Целевая Дата&amp;quot;;&lt;br /&gt;
$TLS_th_perc_a_prio = &amp;quot;% A-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_b_prio = &amp;quot;% B-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_c_prio = &amp;quot;% C-приоритет&amp;quot;;&lt;br /&gt;
$TLS_title_existing_milestones = &amp;quot;Существующие вехи&amp;quot;;&lt;br /&gt;
$TLS_title_milestones = &amp;quot;Вехи для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_new_milestone = &amp;quot;Новая Веха&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/projectedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_activate         = &amp;quot;Активировать&amp;quot;;&lt;br /&gt;
$TLS_btn_del              = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_del         = &amp;quot;Править / Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_inactivate       = &amp;quot;Деактивировать&amp;quot;;&lt;br /&gt;
$TLS_caption_edit_product = &amp;quot;Править проект&amp;quot;;&lt;br /&gt;
$TLS_caption_new_product  = &amp;quot;Создать проект&amp;quot;;&lt;br /&gt;
$TLS_color                = &amp;quot;Цвет&amp;quot;;&lt;br /&gt;
$TLS_enable_requirements  = &amp;quot;Включить функциональность Требований&amp;quot;;&lt;br /&gt;
$TLS_info_failed_loc_prod = &amp;quot;Не удалось локализовать проект.&amp;quot;;&lt;br /&gt;
$TLS_notes                = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
// Warning!!! - if JS string you must use \\n to get \n                                       &lt;br /&gt;
$TLS_popup_product_delete = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Внимание! Вы собираетесь необратимо удалить все данные связанные проектом:&lt;br /&gt;
результаты тестов, планы тестирования, тесты и т.п. \\n&lt;br /&gt;
Вместо удаления вы можете деактивировать проект. \\n&lt;br /&gt;
Если вы всё-таки настроены удалить проект, рекомендуем вам сначала &lt;br /&gt;
сделать бэкап базы данных. \\n&lt;br /&gt;
Итак, вы по прежнему уверены удалить проект? &lt;br /&gt;
END;&lt;br /&gt;
$TLS_warning_empty_tproject_name = &amp;quot;Обязательно задайте имя проекта!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_select_a_req        = &amp;quot;Пожалуйста, выберите требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement66    = &amp;quot;Требования нет&amp;quot;;&lt;br /&gt;
$TLS_req_title_assign           = &amp;quot;Привяжите требования к тесту&amp;quot;;&lt;br /&gt;
$TLS_req_title_assigned         = &amp;quot;Привязанные требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_unassigned       = &amp;quot;Доступные требования&amp;quot;;&lt;br /&gt;
$TLS_warning_req_tc_assignment_impossible = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Вы &amp;lt;b&amp;gt;не можете&amp;lt;/b&amp;gt; делать привязку по одной из следующих причин:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Не определено ни одной спецификации требования;&lt;br /&gt;
  &amp;lt;li&amp;gt;Спецификации требований пусты.&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_edit_tc = &amp;quot;Править Тест&amp;quot;;&lt;br /&gt;
$TLS_warning_editing_executed_tc = &amp;quot;Внимание: Этот версия теста уже выполнялась&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planOwner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assign_ownership     = &amp;quot;Назначить ответственного&amp;quot;;&lt;br /&gt;
$TLS_def_prio_rules       = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_opt_label_none       = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_th_imp               = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_th_owner             = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_risk              = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_th_test_suite        = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_plan_ownership = &amp;quot;Владелец плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_activate_this_tcversion  = &amp;quot;Активировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_Requirements             = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_btn_del_this_version     = &amp;quot;Удалить эту версию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit                 = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_mv_cp                = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_version          = &amp;quot;Создать новую версию&amp;quot;;&lt;br /&gt;
$TLS_can_not_edit_tc = &amp;quot;Вы не можете редактировать эту версию, т.к. она уже выполнялась&amp;quot;;&lt;br /&gt;
$TLS_deactivate_this_tcversion = &amp;quot;Деактивировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_tcversion_is_inactive_msg = &amp;quot;Эта версия &amp;lt;b&amp;gt;неактивна&amp;lt;/b&amp;gt;, и не будет доступна для включения в план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planRemoveTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_remove_selected_tc = &amp;quot;Удалить выбранные тесты tcs&amp;quot;;&lt;br /&gt;
$TLS_remove_ok = &amp;quot;Удаление прошло успешно ok&amp;quot;;&lt;br /&gt;
$TLS_title_remove_test_from_plan = &amp;quot;Удалить тест из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTesters.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_save = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keyword_assignment_empty_tsuite = &amp;quot;В этой группе тестов нет тестов =&amp;gt; ключевое слово привязать нельзя&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_kw_to_tc = &amp;quot;Привязать к  тестам&amp;quot;;&lt;br /&gt;
$TLS_menu_manage_keywords = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_title_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTestersNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_label_list_of = &amp;quot;Список &amp;quot;;&lt;br /&gt;
$TLS_opt_test_plans = &amp;quot;планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_opt_users = &amp;quot;пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planUpdateTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_ck_tc        = &amp;quot;Изменить выбранные тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_info_all_tc_uptodate = &amp;quot;Все тесты актуальны.&amp;quot;;&lt;br /&gt;
$TLS_th_category          = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_component         = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_id_tc = &amp;quot;[ID] Теста&amp;quot;;&lt;br /&gt;
$TLS_th_reason = &amp;quot;Причина правки&amp;quot;;&lt;br /&gt;
$TLS_th_spec_version = &amp;quot;Специальная версия&amp;quot;;&lt;br /&gt;
$TLS_th_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_th_suite_version = &amp;quot;Версия группы тестов&amp;quot;;&lt;br /&gt;
$TLS_th_update = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_title_upd_mod_tc = &amp;quot;Изменить исправленные тесты в &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_keyword   = &amp;quot;Удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_btn_create_keyword   = &amp;quot;Создать ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_keyword     = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_import_keywords  = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_th_keyword           = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_keyword = &amp;quot;Вы уверены удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least1 = &amp;quot;Пожалуйста, введите хотя бы  &amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less1 = &amp;quot;Пожалуйста, используйте не больше чем&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_req_export_to = &amp;quot;Экспорт требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsAllBuilds.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_status_blocked  = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_test_status_failed   = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_test_status_passed   = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_th_build             = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_th_tc_total          = &amp;quot;Всего тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_date                   = &amp;quot;Дата:&amp;quot;;&lt;br /&gt;
$TLS_printed_by             = &amp;quot;Напечатано:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_bugs   = &amp;quot;Баги по тесту&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_timestamp = &amp;quot;Временная метка теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_title = &amp;quot;Заголовок теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_suite_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBuild.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_met_of_build = &amp;quot;Метрики сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsByStatus.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_test_results = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Показываются результаты только последнего теста.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
В частности, тесты скрыты, если результаты тестов для следующей сборки &lt;br /&gt;
имеют статус отличный от &amp;quot;в процессе&amp;quot;. &lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_th_bugs = &amp;quot;Баги&amp;quot;;&lt;br /&gt;
$TLS_th_date = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_th_run_by = &amp;quot;Запустил:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsGeneral.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_gen_test_rep = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_query_form.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_excel_format             = &amp;quot;MS Excel&amp;quot;;&lt;br /&gt;
$TLS_html_format              = &amp;quot;HTML&amp;quot;;&lt;br /&gt;
$TLS_last_status_any          = &amp;quot;Любой&amp;quot;;&lt;br /&gt;
$TLS_last_status_blocked      = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_last_status_failed       = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_last_status_not_run      = &amp;quot;Не стартовал&amp;quot;;&lt;br /&gt;
$TLS_last_status_passed       = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_select_builds_header     = &amp;quot;Выберите сборку(и)&amp;quot;;&lt;br /&gt;
$TLS_select_components_header = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_select_keyword_header    = &amp;quot;Выберите ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_select_last_result_header = &amp;quot;Выберите последний результат&amp;quot;;&lt;br /&gt;
$TLS_select_owner_header      = &amp;quot;Выберите владельца&amp;quot;;&lt;br /&gt;
$TLS_select_report_format_header = &amp;quot;Выберите формат отчета&amp;quot;;&lt;br /&gt;
$TLS_submit_query             = &amp;quot;Выполнить запрос&amp;quot;;&lt;br /&gt;
$TLS_test_plan_header         = &amp;quot;План тестирования: &amp;quot;;&lt;br /&gt;
$TLS_query_metrics_report     = &amp;quot;Запросить отчет по метрикам&amp;quot;;&lt;br /&gt;
$TLS_enter_start_time         = &amp;quot;Введите начальное время&amp;quot;;&lt;br /&gt;
$TLS_enter_end_time           = &amp;quot;Введите конечное время&amp;quot;;&lt;br /&gt;
$TLS_year                     = &amp;quot;год&amp;quot;;&lt;br /&gt;
$TLS_month                    = &amp;quot;месяц&amp;quot;;&lt;br /&gt;
$TLS_day                      = &amp;quot;день&amp;quot;;&lt;br /&gt;
$TLS_hour                     = &amp;quot;час&amp;quot;;&lt;br /&gt;
$TLS_search_in_notes          = &amp;quot;поиск строки в заметках&amp;quot;;&lt;br /&gt;
$TLS_executor                 = &amp;quot;исполнитель&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_report.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_show_collapse                  = &amp;quot;Показать/Свернуть&amp;quot;;&lt;br /&gt;
$TLS_caption_user_selected_query_parameters = &amp;quot;Параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_not_yet_executed                       = &amp;quot;Еще не выполнялся&amp;quot;;&lt;br /&gt;
$TLS_show_hide_all                          = &amp;quot;Показать/Скрыть все&amp;quot;;&lt;br /&gt;
$TLS_th_builds                              = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_th_execution_ts                        = &amp;quot;Время&amp;quot;;&lt;br /&gt;
$TLS_th_last_result                         = &amp;quot;Последний результат&amp;quot;;&lt;br /&gt;
$TLS_th_report_format                       = &amp;quot;Тип отчета&amp;quot;;&lt;br /&gt;
$TLS_th_test_plan                           = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_test_suites                         = &amp;quot;Группа(ы) тестов&amp;quot;;&lt;br /&gt;
$TLS_th_tester_id                           = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_total_block                         = &amp;quot;# блокированных &amp;quot;;&lt;br /&gt;
$TLS_th_total_cases                         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_th_total_fail                          = &amp;quot;# сбоев&amp;quot;;&lt;br /&gt;
$TLS_th_total_not_run                       = &amp;quot;# не стартовавших&amp;quot;;&lt;br /&gt;
$TLS_th_total_pass                          = &amp;quot;# выполненных&amp;quot;;&lt;br /&gt;
$TLS_th_start_time      = &amp;quot;Время начала&amp;quot;;&lt;br /&gt;
$TLS_th_end_time        = &amp;quot;Время окончания&amp;quot;;&lt;br /&gt;
$TLS_th_executor        = &amp;quot;Исполнитель&amp;quot;;&lt;br /&gt;
$TLS_th_search_notes_string = &amp;quot;в заметках искать строку&amp;quot;;&lt;br /&gt;
$TLS_true               = &amp;quot;да&amp;quot;;&lt;br /&gt;
$TLS_false              = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_display_suite_summaries = &amp;quot;Показать итоги по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_display_query_params    = &amp;quot;Показать параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_display_totals          = &amp;quot;Показать суммарную информацию&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsReqs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_title_blocked  = &amp;quot;Заблокировано требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_failed   = &amp;quot;Нарушено требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_notrun   = &amp;quot;Непроверенных требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_passed   = &amp;quot;Выполнено требований&amp;quot;;&lt;br /&gt;
$TLS_title_result_req_testplan = &amp;quot;Результаты тестов основанных на спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan    = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsSend.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send_report        = &amp;quot;Послать отчет&amp;quot;;&lt;br /&gt;
$TLS_check_send_to_me       = &amp;quot;Послать отчет самому себе&amp;quot;;&lt;br /&gt;
$TLS_mail_body              = &amp;quot;Тело письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_report            = &amp;quot;Отчет:&amp;quot;;&lt;br /&gt;
$TLS_mail_subject           = &amp;quot;Тема письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_to                = &amp;quot;Кому:&amp;quot;;&lt;br /&gt;
$TLS_status_for_build       = &amp;quot;Состояние сборки&amp;quot;;&lt;br /&gt;
$TLS_tp_status              = &amp;quot;Общее состояние плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tp_status_for_build    = &amp;quot;Состояние плана тестирования для сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_generated_by_TestLink_on=&amp;quot;Сформировано системой TestLink,  &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_m2.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcPrintNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_print_opt  = &amp;quot;Настройки печати&amp;quot;;&lt;br /&gt;
$TLS_tr_td_show_as      = &amp;quot;Показать как&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcReorder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_tc_to_reorder       = &amp;quot;Нет тестов для переупорядочивания.&amp;quot;;&lt;br /&gt;
$TLS_title_change_tc_order  = &amp;quot;Изменить порядок тестов в этой группе тестов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcTree.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_refresh       = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_button_update_tree   = &amp;quot;Обновить дерево&amp;quot;;&lt;br /&gt;
$TLS_do_auto_update       = &amp;quot;Обновлять дерево после каждой операции&amp;quot;;&lt;br /&gt;
$TLS_no_tc_spec_av        = &amp;quot;Нет тест-спецификаций.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tc_exec_assignment.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_do                     = &amp;quot;Пуск&amp;quot;;&lt;br /&gt;
$TLS_btn_update_selected_tc     = &amp;quot;Изменить выбранные тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tc_exec_assignment   = &amp;quot;Назначить прогоны тестов для плана тестирования &amp;quot;;&lt;br /&gt;
$TLS_user                       = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_user_bulk_assignment       = &amp;quot;Массовое назначение ответственных пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/testSetNavigator.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/userInfo.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_change_passwd        = &amp;quot;Сменить пароль&amp;quot;;&lt;br /&gt;
$TLS_btn_upd_user_data        = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd            = &amp;quot;Новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd_again      = &amp;quot;Повторите новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_old_passwd            = &amp;quot;Старый пароль&amp;quot;;&lt;br /&gt;
$TLS_title_account_settings   = &amp;quot;Настройки профиля&amp;quot;;&lt;br /&gt;
$TLS_title_change_your_passwd = &amp;quot;Сменить ваш пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_different_pwd    = &amp;quot;Пожалуйста, повторите еще раз ваш новый пароль. Введенные пароли не совпадают.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd        = &amp;quot;Пароль должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_your_password_is_external = &amp;quot;Ваш пароль ведётся во внешней системе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersassign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestProject          = &amp;quot;проект&amp;quot;;&lt;br /&gt;
$TLS_User                 = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_btn_change           = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testplan_user_roles = &amp;quot;Назначить роли плана тестирования пользователям&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testproject_user_roles = &amp;quot;Назначить роли проекта пользователям&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testproject_roles = &amp;quot;Назначить роли проекта&amp;quot;;&lt;br /&gt;
$TLS_th_roles = &amp;quot;Роли&amp;quot;;&lt;br /&gt;
$TLS_title_assign_roles = &amp;quot;Назначить роли&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_reset_password = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
$TLS_caption_user_details = &amp;quot;Свойства пользователя&amp;quot;;&lt;br /&gt;
$TLS_th_password = &amp;quot;Пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_first_name = &amp;quot;Пожалуста, введите имя&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_last_name = &amp;quot;Пожалуйста, введите фамилию&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_login = &amp;quot;Пожалуйста, введите логин&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentupload.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachment_upload_ok=&amp;quot;Файл загружен.&amp;quot;;&lt;br /&gt;
$TLS_enter_attachment_title = &amp;quot;Введите заголовок для этого вложения.&amp;quot;;&lt;br /&gt;
$TLS_import_was_ok = &amp;quot;Импорт прошел успешно.&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file = &amp;quot;Максимальный размер файла:&amp;quot;;&lt;br /&gt;
$TLS_title_upload_attachment = &amp;quot;Загрузить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_N_A                          = &amp;quot;N/A&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_role              = &amp;quot;Удалить роль&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_role                = &amp;quot;Править роль&amp;quot;;&lt;br /&gt;
$TLS_btn_confirm_delete           = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_no_roles                     = &amp;quot;Нет ролей&amp;quot;;&lt;br /&gt;
$TLS_title_roles                  = &amp;quot;Доступные роли&amp;quot;;&lt;br /&gt;
$TLS_warning_users_will_be_reset  = &amp;quot;'Задетым пользователям' будет назначена гостевая роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_export_with_keywords = &amp;quot;Экспортировать с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_active_build     = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_build       = &amp;quot;Редактировать эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_open_build       = &amp;quot;Открыть сборку&amp;quot;;&lt;br /&gt;
$TLS_btn_build_create     = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_no_builds            = &amp;quot;В этот плане тестирования сборок не определено.&amp;quot;;&lt;br /&gt;
$TLS_th_description       = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_open              = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_title_build_list     = &amp;quot;Список существующих сборок&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_build = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Вы действительно хотите уничтожить эту сборку? &amp;lt;p&amp;gt;&lt;br /&gt;
Все связанные данные (в частности, результаты тестов) будут также удалены!&amp;quot;;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_alt_delete_tp   = &amp;quot;Удалить этот план тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_alt_edit_tp     = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_msg_delete_confirm = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Вы уверены, что хотите удалить план тестирования? &amp;lt;p&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать не удаляя.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_testplan_th_delete     = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_list    = &amp;quot;Список планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_empty_list = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 Ни одного плана тестирования не определено! &amp;lt;p&amp;gt;&lt;br /&gt;
 Чтобы воспользоваться функциональностью прогонов тестов, нужно &lt;br /&gt;
 создать хотя бы один.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_alt_active_testplan = &amp;quot;Активный план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==gui/templates/mainPage_left.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_href_assign_user_roles = &amp;quot;Назначить пользовательские роли&amp;quot;;&lt;br /&gt;
$TLS_href_browse_tc = &amp;quot;Просмотр тестов&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_tproject_assign = &amp;quot;Привязка пользовательских полей&amp;quot;;&lt;br /&gt;
$TLS_href_create_product = &amp;quot;Создать новый проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_product = &amp;quot;Править/Удалить проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_tc = &amp;quot;Редактировать тесты&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_assign = &amp;quot;Привязать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_manage = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_view = &amp;quot;Просмотр ключевых слов&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc = &amp;quot;Печать тестов&amp;quot;;&lt;br /&gt;
$TLS_href_req_assign = &amp;quot;Привязать требования&amp;quot;;&lt;br /&gt;
$TLS_href_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_href_roles_management = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_href_search_tc = &amp;quot;Искать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_user_management = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_title_requirements = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_title_test_spec = &amp;quot;Спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_product_mgmt = &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage_right.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_filter_tp_by_product   = &amp;quot;Фильтровать план тестирования по проектам&amp;quot;;&lt;br /&gt;
$TLS_href_add_test_case     = &amp;quot;Добавить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_build_new         = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_href_execute_test      = &amp;quot;Выполнить тесты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_assign_priority = &amp;quot;Установить приоритеты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_define_priority = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_href_plan_management   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_plan_mstones      = &amp;quot;Управление вехами&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc_suite    = &amp;quot;Печать плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_remove_test_case  = &amp;quot;Удалить Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_rep_and_metrics   = &amp;quot;Отчеты и метрики&amp;quot;;&lt;br /&gt;
$TLS_href_tc_exec_assignment = &amp;quot;Поручить прогон тестов&amp;quot;;&lt;br /&gt;
$TLS_href_upd_mod_tc        = &amp;quot;Сохранить измененные тесты&amp;quot;;&lt;br /&gt;
$TLS_msg_no_rights_for_tp   = &amp;quot;- недоступен (У вас нет доступа ни для одного плана тестирования)&amp;quot;;&lt;br /&gt;
$TLS_testplan_role          = &amp;quot;Роль плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_suite  = &amp;quot;Содержание плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_execution   = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan_mgmt   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_newest_tcversions = &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_add.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bug_added                = &amp;quot;Баг добавлен&amp;quot;;&lt;br /&gt;
$TLS_error_bug_does_not_exist_on_bts=&amp;quot;Бага с таким ID не зарегистрировано в BTS!&amp;quot;;&lt;br /&gt;
$TLS_error_wrong_BugID_format = &amp;quot;Неверный формат BugID!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_delete.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugdeleting_was_ok = &amp;quot;Баг успешно удален.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/doAuthorize.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_ldap_auth_failed = &amp;quot;LDAP-аутентификация не удалась&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_bind_failed = &amp;quot;Не удалось выполнить LDAP-binding&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_server_connect_failed = &amp;quot;Не удалось соединится с LDAP-сервером&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_update_failed = &amp;quot;Обновление LDAP не удалось&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_user_not_found = &amp;quot;LDAP-пользователь не найден&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/product.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_product_delete_fails = &amp;quot;При удалении этого проекта произошла ошибка&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/results.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_trep_failing = &amp;quot;Провалены&amp;quot;;&lt;br /&gt;
$TLS_trep_passing = &amp;quot;Прошли&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_build = &amp;quot;Состояние для сборки&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_ts = &amp;quot;Состояние для группы тестов&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;Не назначены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/resultsMoreBuilds.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugs                 = &amp;quot;Связанные Баги&amp;quot;;&lt;br /&gt;
$TLS_builds_selected      = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_case_not_run_warning = &amp;quot;Тест не запущен&amp;quot;;&lt;br /&gt;
$TLS_category_header      = &amp;quot;Группа тестов =&amp;quot;;&lt;br /&gt;
$TLS_daterun              = &amp;quot;Дата запуска&amp;quot;;&lt;br /&gt;
$TLS_last_status          = &amp;quot;Последнее состояние&amp;quot;;&lt;br /&gt;
$TLS_number_blocked       = &amp;quot;# блокированных&amp;quot;;&lt;br /&gt;
$TLS_number_cases         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_number_executions    = &amp;quot;# тест-пусков&amp;quot;;&lt;br /&gt;
$TLS_number_failed        = &amp;quot;# тест-сбоев&amp;quot;;&lt;br /&gt;
$TLS_number_not_run       = &amp;quot;# не запущено&amp;quot;;&lt;br /&gt;
$TLS_number_passed        = &amp;quot;# пройденных&amp;quot;;&lt;br /&gt;
$TLS_owner                = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_owner_header         = &amp;quot;Tester =&amp;quot;;&lt;br /&gt;
$TLS_runby                = &amp;quot;Запущен тестировщиком &amp;quot;;&lt;br /&gt;
$TLS_test_plan_name       = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/roles.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_desc_cfield_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_desc_cfield_view       = &amp;quot;Просмотр пользовательских полей (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_key    = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_product= &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_req    = &amp;quot;Управление требованиями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_tc     = &amp;quot;Создание/правка тестов&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_users  = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_key      = &amp;quot;Просмотр ключевых слов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_req      = &amp;quot;Просмотр требований (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_tc       = &amp;quot;Просмотр Тестов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_role_management   = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_create_build = &amp;quot;Создание/редактирование сборки&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_execute  = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_metrics  = &amp;quot;Метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_planning = &amp;quot;Составление плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_user_role_assignment = &amp;quot;Назначение ролей&amp;quot;;&lt;br /&gt;
$TLS_error_duplicate_rolename = &amp;quot;Роль с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rights     = &amp;quot;Вы не можете создать роль без каких-либо прав!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rolename   = &amp;quot;Вам нужно ввести имя для этой роли.&amp;quot;;&lt;br /&gt;
$TLS_mgt_testplan_create      = &amp;quot;Создать/править план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testproject.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_creating_req_spec    = &amp;quot;Ошибка при создании спецификации требования&amp;quot;;&lt;br /&gt;
$TLS_info_product_name_empty    = &amp;quot;Нельзя давать пустое имя.&amp;quot;;&lt;br /&gt;
$TLS_keyword_already_exists     = &amp;quot;Такое ключевое слово уже есть&amp;quot;;&lt;br /&gt;
$TLS_string_contains_bad_chars  = &amp;quot;Введенная строка содержит недопустимые символы.&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_req_title= &amp;quot;Требование с таким заголовком уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/requirements.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_conflict               = &amp;quot;Конфликт&amp;quot;;&lt;br /&gt;
$TLS_error_deleting_req     = &amp;quot;Ошибка при удалении требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_inserting_req    = &amp;quot;Ошибка при вставке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_req     = &amp;quot;Ошибка при правке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_reqspec = &amp;quot;Ошибка при правке спецификаций требований.&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_xml = &amp;quot;Файл не распознан как корректный XML, и не может быть использован.&amp;quot;;&lt;br /&gt;
$TLS_ok = &amp;quot;OK&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description1 = &amp;quot; - тип CSV требует три поля на каждую запись: 'req_doc_id','title','description'&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description2 = &amp;quot; - CSV, экспортированный из DOORS требует запись-заголовок.&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_overwritten  = &amp;quot;перезаписано!&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_skipped      = &amp;quot;пропущено&amp;quot;;&lt;br /&gt;
$TLS_req_state_not_testable         = &amp;quot;не тестируемо&amp;quot;;&lt;br /&gt;
$TLS_req_state_valid                = &amp;quot;актуально&amp;quot;;&lt;br /&gt;
$TLS_the_format_req_xml_import      = &amp;quot;Неверный XML-формат для импорта требований&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_reqdoc_id    = &amp;quot;Не уникальный (дублирующий) id документа&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testsuite.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component_name_already_exists = &amp;quot;Группа тестов с таким именем уже зарегистрирована&amp;quot;;&lt;br /&gt;
$TLS_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/exec.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_results_submitted = &amp;quot;Результаты тестов отправлены.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/print.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_printed_by_TestLink_on = &amp;quot;Распечатано TestLink'ом &amp;quot;;&lt;br /&gt;
$TLS_title_toc = &amp;quot;Содержание&amp;quot;;&lt;br /&gt;
$TLS_passfail = &amp;quot;Пройден / Провален&amp;quot;;&lt;br /&gt;
$TLS_testnotes = &amp;quot;Заметки к тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testcase.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testcase_name_already_exists = &amp;quot;Тест с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_the_format_tc_xml_import = &amp;quot;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/info.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_email_sent_message = &amp;quot;Ваше письмо отослано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/users.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Unknown = &amp;quot;Неизвестно&amp;quot;;&lt;br /&gt;
$TLS_duplicate_login = &amp;quot;Пользователь с таким логином уже есть!&amp;quot;;&lt;br /&gt;
$TLS_login_must_not_be_empty = &amp;quot;Логин не должен быть пустым!&amp;quot;;&lt;br /&gt;
$TLS_wrong_old_password = &amp;quot;Старый пароль неверен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/email_api.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_stmp_host_unconfigured = &amp;quot;Некорректно указан SMTP host!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/common.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/configCheck.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachments_dir = &amp;quot;каталог для вложений:&amp;quot;;&lt;br /&gt;
$TLS_bts_connection_problems = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Не удалось соединиться с вашей Bug Tracking System.&amp;lt;p&amp;gt;&lt;br /&gt;
Пожалуйста, проверьте настройки.&amp;lt;p&amp;gt;&lt;br /&gt;
Будьте внимательны, эта проблема &lt;br /&gt;
снижает производительность TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_but_directory_is_not_writable = &amp;quot;Каталог закрыт для записи!&amp;quot;;&lt;br /&gt;
$TLS_directory_is_writable = &amp;quot;Каталог открыт для записи.&amp;quot;;&lt;br /&gt;
$TLS_does_not_exist = &amp;quot;не существует&amp;quot;;&lt;br /&gt;
$TLS_exists = &amp;quot;существует&amp;quot;;&lt;br /&gt;
$TLS_ldap_extension_not_loaded=&amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Метод аутентификации указан как LDAP &amp;lt;/br&amp;gt;&lt;br /&gt;
однако PHP/LDAP extension не загружено =&amp;gt; &lt;br /&gt;
Вам не удастся войти в систему. &lt;br /&gt;
Пожалуйста, свяжитесь с администратором TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_sec_note_admin_default_pwd = &amp;quot;Вам необходимо сменить пароль по умолчанию у пользователя 'admin'!&amp;quot;;&lt;br /&gt;
$TLS_sec_note_remove_install_dir = &amp;quot;Инсталляционный каталог должен быть удален!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/frmWorkArea.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_create_a_build = &amp;quot;Создать новую сборку&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part1 = &amp;quot;Ни одной сборки для этого тест плана не создано.&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part2 = &amp;quot;Создайте их или попросите об этом свое руководство.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/myTPInfo.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testplans_available = &amp;quot;К сожалению, ни одного плана тестирования не доступно&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/tlsmarty.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywords.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_empty_keyword_no = &amp;quot;Ключевое слово должно быть непустым!&amp;quot;;&lt;br /&gt;
$TLS_keywords_char_not_allowed = &amp;quot;Запятые и кавычки недопустимы в ключевых словах!&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails2 = &amp;quot; дал сбой &amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_csv_import = &amp;quot;keyword;notes&amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_xml_import = &amp;quot;&amp;amp;lt;keywords&amp;gt;&amp;amp;lt;keyword name=\&amp;quot;name\&amp;quot;&amp;gt;Notes&amp;amp;lt;/keyword&amp;gt;&amp;amp;lt;/keywords&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_kw_delete_fails = &amp;quot;Не удалось удаление ключевого слова!&amp;quot;;&lt;br /&gt;
$TLS_kw_update_fails = &amp;quot;Не удалась правка ключевого слова!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assigned_kword  = &amp;quot;Связанные ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_available_kword = &amp;quot;Доступные ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/buildNew.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cannot_add_build     = &amp;quot;Невозможно добавить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_delete_build  = &amp;quot;Невозможно удалить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_update_build  = &amp;quot;Ошибка при правке сборки!&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_build = &amp;quot;Сборка с таким идентификатором уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/plan.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_warning_empty_milestone_name = &amp;quot;Обязательно введите имя для вехи!&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_valid_date = &amp;quot;Введенная дата некорректна!&amp;quot;;&lt;br /&gt;
$TLS_warning_invalid_percentage_value = &amp;quot;Значения-проценты должны быть от 0 to 100 (%)&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'!&amp;quot;;&lt;br /&gt;
$TLS_warning_percentage_value_higher_than_100 = &amp;quot;Сумма всех значений-процентов не должна быть больше 100!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planMilestones.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_milestone_delete_fails         = &amp;quot;Не удалось удалить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_add_failed   = &amp;quot;Не удалось добавить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_update_failed = &amp;quot;Не удалось править веху!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planOwner.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_imp_high     = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_low      = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_medium   = &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_assign_tp    = &amp;quot;Поручить планы тестирования пользователю: &amp;quot;;&lt;br /&gt;
$TLS_title_assign_users = &amp;quot;Назначить пользователей на план тестирования: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_nav_test_plan = &amp;quot;Навигатор - Планы тестирования&amp;quot;;&lt;br /&gt;
$TLS_nav_users = &amp;quot;Навигатор - Пользователи&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planUpdateTC.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_category_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_component_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_deleted = &amp;quot;удалена&amp;quot;;&lt;br /&gt;
$TLS_different_versions = &amp;quot;Различные версии&amp;quot;;&lt;br /&gt;
$TLS_plan_update_no_tc_updated = &amp;quot;Ни один тест не изменен&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted2 = &amp;quot;был удален.&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated2 = &amp;quot;был изменен.&amp;quot;;&lt;br /&gt;
$TLS_tcorder_has_changed = &amp;quot;Порядок тестов был изменен&amp;quot;;&lt;br /&gt;
$TLS_updated = &amp;quot;изменен&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_plan_navigator = &amp;quot;Навигация по планам тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetRemove.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tcase_removed_from_tplan=&amp;quot;тест удален из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_multiple_tcase_removed_from_tplan=&amp;quot;Тесты удалены из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_created_ok = &amp;quot;План тестирования был создан&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed1 = &amp;quot;Правка плана тестирования '&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed2 = &amp;quot;' не удалась&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_tplan_name = &amp;quot;План тестирования с таким именем уже есть. Выберите другое имя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/print/selectData.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_show_doc_header = &amp;quot;Показать заголовок документа&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_body = &amp;quot;Показать тело теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_summary = &amp;quot;Показать резюме теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_toc = &amp;quot;Показать Содержание&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_author = &amp;quot;Показать автора теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_passfail = &amp;quot;Показать статус &amp;amp;laquo;пройден/провален&amp;amp;raquo; и заметки&amp;quot;;&lt;br /&gt;
$TLS_title_tc_print_navigator = &amp;quot;Навигация - Печать спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tp_print_navigator = &amp;quot;Навигация - Печать плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/project/projectedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_product_name_duplicate = &amp;quot;Уже есть проект с именем %s. &amp;lt;br&amp;gt;Пожалуйста, выберите другое имя&amp;quot;;&lt;br /&gt;
$TLS_info_no_more_prods = &amp;quot;проектов больше нет.&amp;quot;;&lt;br /&gt;
$TLS_info_product_activated = &amp;quot;проект активирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_inactivated = &amp;quot;проект деактивирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_not_deleted_check_log = &amp;quot;Не удалось удалить проект. Проверьте лог TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_info_product_was_deleted = &amp;quot;проект успешно удален.&amp;quot;;&lt;br /&gt;
$TLS_refer_to_log = &amp;quot; Пожалуйста, изучите лог TestLink'а для дополнительной информации.&amp;quot;;&lt;br /&gt;
$TLS_test_project_activated = &amp;quot;проект %s успешно активирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_created = &amp;quot;проект %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_test_project_deleted = &amp;quot;проект %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_test_project_inactivated = &amp;quot;проект %s успешно деактивирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_updated = &amp;quot;проект %s успешно отредактирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_update_failed = &amp;quot;Правка проекта %s не удалась!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/charts.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_maani_copyright = &amp;quot;flash technology предоставлена http://www.maani.us&amp;quot;;&lt;br /&gt;
$TLS_graphical_reports = &amp;quot;Графические отчеты&amp;quot;;&lt;br /&gt;
$TLS_overall_metrics = &amp;quot;Общие метрики&amp;quot;;&lt;br /&gt;
$TLS_results_by_keyword = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_results_by_tester = &amp;quot;Рузультаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_results_top_level_suites = &amp;quot;Результаты по топ группам тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_file_is_not_ok_for_import_type = &amp;quot;Кажется тип файла не совпадает с выбранным для импорта типом&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_text = &amp;quot;Это не текстовый файл. Использовать нельзя.&amp;quot;;&lt;br /&gt;
$TLS_please_choose_req_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_req_import_finished = &amp;quot;Импорт завершен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqSpecView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_tc_from_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_req_created = &amp;quot;Требование %s успешно создано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqTcAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_msg_noselect = &amp;quot;Ничего не выбрано&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notupdated_coverage = &amp;quot;Покрытие не обновлено для Требований: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsBugs.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_report_all_builds = &amp;quot;Отчет: Результаты тестов для всех сборок&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsAllBuilds.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_metrics_x_build = &amp;quot; - Результаты тестов. Метрики X Сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsByStatus.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_list_of_blocked = &amp;quot;Список блокированных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_failed = &amp;quot;Список проваленных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_not_run = &amp;quot;Список незапущенных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsTC.php==&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_link_charts=&amp;quot;Диаграммы&amp;quot;;&lt;br /&gt;
$TLS_link_report_blocked_tcs = &amp;quot;Блокированные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_failed = &amp;quot;Проваленные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_general_tp_metrics = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_active_build = &amp;quot;Метрики активной сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_more_builds = &amp;quot;Запрос метрик&amp;quot;;&lt;br /&gt;
$TLS_link_report_not_run=&amp;quot;Не запущенные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_overall_build = &amp;quot;Общий статус сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_reqs_coverage = &amp;quot;Отчет о выполнении требований&amp;quot;;&lt;br /&gt;
$TLS_link_report_test = &amp;quot;Отчет по тестам&amp;quot;;&lt;br /&gt;
$TLS_link_report_total_bugs = &amp;quot;Всего багов по каждому тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsSend.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_to_empty_email_warning = &amp;quot;Пожалуйста, введите правильный email.&amp;quot;;&lt;br /&gt;
$TLS_warning_create_build_first = &amp;quot;Сначала Вы должны создать или импортировать сборки.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/displayMgr.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_sendreport_no_email_credentials = &amp;quot;Email для этого пользователя не указан, пожалуйста, укажите его в настройках своего профиля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/archive.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/listTestCases.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_file_to_import = &amp;quot;Пожалуйста, выберите файл для импорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_import_to = &amp;quot;Импорт Тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_import_to = &amp;quot;Импорт группы тестов&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tcase_file = &amp;quot;Некорректный XML в файле с тестами&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tsuite_file = &amp;quot;Некорректный XML в файле с группой тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcexport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testcases_to_export = &amp;quot;Нет тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_no_testsuites_to_export = &amp;quot;Нет группы тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export = &amp;quot;Экспорт теста&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export_all = &amp;quot;Экспортировать все тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export_all = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/containerEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_delete = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_delete_notice = &amp;quot;Внимание: Все связанные результаты прогонов будут удалены&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_com_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_current = &amp;quot;текущий&amp;quot;;&lt;br /&gt;
$TLS_delete_linked = &amp;quot;Ссылки на планы тестирования будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_delete_linked_and_exec = &amp;quot;Ссылки на планы тестирования и результаты выполнения будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_error_tc_add = &amp;quot;При добавлении теста произошла ошибка&amp;quot;;&lt;br /&gt;
$TLS_title_del_tc = &amp;quot;Удалить тест &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesview.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_deletion = &amp;quot;Не удалось удалить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersassign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_test_projects = &amp;quot;Не заведено ни одного проекта&amp;quot;;&lt;br /&gt;
$TLS_no_test_plans = &amp;quot;Для этого проекта не заведено ни одного плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_project_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
$TLS_test_plan_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_user_created=&amp;quot;Пользователь %s был успешно создан&amp;quot;;&lt;br /&gt;
$TLS_user_deleted=&amp;quot;Пользователь %s был успешно удален&amp;quot;;&lt;br /&gt;
$TLS_user_not_added = &amp;quot;Не удалось добавить пользователя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_creation = &amp;quot;Не удалось создать роль!&amp;quot;;&lt;br /&gt;
$TLS_error_role_update = &amp;quot;Не удалось исправить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/cfields/cfields_edit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cf_name_exists = &amp;quot;Пользовательское поле с таким именем уже существует. Пожалуста, выберите другое имя.&amp;quot;;&lt;br /&gt;
$TLS_error_creating_cf = &amp;quot;Не удалось создать пользовательское поле!&amp;quot;;&lt;br /&gt;
$TLS_do_update = &amp;quot;исправлено&amp;quot;;&lt;br /&gt;
$TLS_do_delete = &amp;quot;удалено&amp;quot;;&lt;br /&gt;
$TLS_do_add = &amp;quot;добавлено&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Open=&amp;quot;Открыто&amp;quot;;&lt;br /&gt;
$TLS_Resolved=&amp;quot;Исправленных&amp;quot;;&lt;br /&gt;
$TLS_Total=&amp;quot;Всего&amp;quot;;&lt;br /&gt;
$TLS_TCs_with_Bugs=&amp;quot;Тестов с багами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9392</id>
		<title>Strings.txt (TestLink-RU)</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=Strings.txt_(TestLink-RU)&amp;diff=9392"/>
				<updated>2007-08-29T10:33:23Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* gui/templates/tcDelete.tpl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
Статья с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «[[#Скачать|скачать]]» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Скачать=&lt;br /&gt;
[{{SERVER}}{{localurl:Special:CisGetPHPPage|pagetitle={{PAGENAMEE}}}} Получить PHP-код]&lt;br /&gt;
&lt;br /&gt;
= Оригинал (наиболее полный английский перевод) =&lt;br /&gt;
* http://testlink.cvs.sourceforge.net/testlink/testlink/locale/en_GB/&lt;br /&gt;
&lt;br /&gt;
=Разделы файла strings.txt (ru_RU)=&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * TestLink Open Source Project - http://testlink.sourceforge.net/ &lt;br /&gt;
 *&lt;br /&gt;
 * Filename $RCSfile: strings.txt,v $&lt;br /&gt;
 *&lt;br /&gt;
 * @version  $Revision$&lt;br /&gt;
 * @modified $Date$ $Author$&lt;br /&gt;
 *&lt;br /&gt;
 * @author Vadim Ivanchenko, Stas Fomin, and russian Testlink community.&lt;br /&gt;
 * http://lib.custis.ru/index.php/TestLink:_strings.txt_%28RU%29&lt;br /&gt;
 *&lt;br /&gt;
 *&lt;br /&gt;
**/&lt;br /&gt;
&lt;br /&gt;
$TLS_STRINGFILE_CHARSET = &amp;quot;UTF-8&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_asc    = &amp;quot;по возрастанию&amp;quot;;&lt;br /&gt;
$TLS_btn_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_desc = &amp;quot;по убыванию&amp;quot;;&lt;br /&gt;
$TLS_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan = $TLS_test_plan;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_SRS = &amp;quot;SRS&amp;quot;;&lt;br /&gt;
$TLS_Role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_Keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_Milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_testsuite_created = &amp;quot;Группа тестов создана&amp;quot;;&lt;br /&gt;
$TLS_requirement = &amp;quot;Требование&amp;quot;;&lt;br /&gt;
$TLS_assigned = &amp;quot;назначен&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;свободен&amp;quot;;&lt;br /&gt;
$TLS_import_file_type = &amp;quot;Тип импортируемого файла&amp;quot;;&lt;br /&gt;
$TLS_max_file_size_is = &amp;quot;Макс. размер файла&amp;quot;;&lt;br /&gt;
$TLS_supported_file_formats = &amp;quot;Поддерживаемые форматы файлов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==firstLogin.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_user = &amp;quot;К сожалению, не удалось создать ваш логин. Пожалуйста, свяжитесь с администратором!&amp;quot;;&lt;br /&gt;
$TLS_empty_email_address = &amp;quot; Пожалуйста, укажите  e-mail!&amp;quot;;&lt;br /&gt;
$TLS_empty_first_name = &amp;quot; Пожалуйста, укажите имя пользователя.&amp;quot;;&lt;br /&gt;
$TLS_empty_last_name = &amp;quot; Пожалуйста, укажите фамилию.&amp;quot;;&lt;br /&gt;
$TLS_fatal_page_title = &amp;quot;TestLink ::: Fatal Error&amp;quot;;&lt;br /&gt;
$TLS_invalid_user_name = &amp;quot;Некорректный логин пользователя. Пожалуйста, придумайте другой.&amp;quot;;&lt;br /&gt;
$TLS_passwd_dont_match = &amp;quot;Два введенных пароля не совпадают. Учтите, что пароли чувствительны к регистру, и попробуйте ещё раз.&amp;quot;;&lt;br /&gt;
$TLS_user_cant_be_created_because = &amp;quot;Не удалось создать ваш аккаунт. Причина:&amp;quot;;&lt;br /&gt;
$TLS_user_name_exists = &amp;quot;Этот логин пользователя уже используется. Пожалуйста, выберите другой.&amp;quot;;&lt;br /&gt;
$TLS_valid_user_name_format = &amp;quot;Логин пользователя может состоять только из алфавитно-цифровых символов, пробелов, дефисов и подчеркиваний.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd = &amp;quot;Пожалуйста, укажите пароль. Пароль не может быть пустым.&amp;quot;;&lt;br /&gt;
$TLS_your_info_please = &amp;quot;Введите информацию о пользователе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==index.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_main_page_title = &amp;quot;TestLink::Главная страница&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==keywordsimport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_keywords_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_keywords_file = &amp;quot;Файл с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lostPassword.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user = &amp;quot;Пользователь не найден, попробуйте еще&amp;quot;;&lt;br /&gt;
$TLS_contact_admin = &amp;quot;&amp;lt;br&amp;gt; Если проблемы будут продолжаться, пожалуйста, свяжитесь с администратором системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_empty_address = &amp;quot;Вы не указали email-адреса в вашем профиле!  Теперь, чтобы сбросить пароль вам нужно связаться с администратором TestLink-системы.&amp;quot;;&lt;br /&gt;
$TLS_mail_passwd_subject = &amp;quot;Ваш новый пароль к TestLink'у.&amp;quot;;&lt;br /&gt;
$TLS_mail_problems = &amp;quot;Ошибка в почтовых настройках, пожалуйста, свяжитесь с администратором.&amp;quot;;&lt;br /&gt;
$TLS_page_title_lost_passwd = &amp;quot;TestLink - Утерян пароль&amp;quot;;&lt;br /&gt;
$TLS_your_info_for_passwd = &amp;quot;Заполните информацию о вашем пользователе, и пароль будет вам выслан по почте.&amp;quot;;&lt;br /&gt;
$TLS_your_password_is = &amp;quot;Ваш пароль к TestLink'у: &amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==login.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bad_user_passwd = &amp;quot;Логин или пароль неверен. Попробуйте ещё!&amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists1 = &amp;quot;Ваша сессия в этом броузере ещё активна. Пожалуйста, используйте &amp;quot;;&lt;br /&gt;
$TLS_login_msg_session_exists2 = &amp;quot; если вы хотите обновить вашу сессию.&amp;quot;;&lt;br /&gt;
$TLS_logout_link = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_passwd_lost = &amp;quot;Ваш пароль выслан вам по email на адрес, который вы указали при регистрации. Проверьте вашу почту. В случае проблем, обратитесь к администратору вашего TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_password_reseted=&amp;quot;Новый пароль выслан вам по почте&amp;quot;;&lt;br /&gt;
$TLS_please_login = &amp;quot;Пожалуйста, войдите в систему...&amp;quot;;&lt;br /&gt;
$TLS_session_expired = &amp;quot;Время ваша сессии окончилось. Пожалуйста, войдите в систему заново.&amp;quot;;&lt;br /&gt;
$TLS_your_first_login = &amp;quot;Добро пожаловать в TestLink! Сейчас у вас только гостевой доступ. Для большего, нужно войти в систему.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==planPriority.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_high_priority    = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_priority     = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_priority  = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_risk        = &amp;quot;Высокий&amp;quot;;&lt;br /&gt;
$TLS_low_risk         = &amp;quot;Низкий&amp;quot;;&lt;br /&gt;
$TLS_medium_risk      = &amp;quot;Средний&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
$TLS_high_importance  = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_low_importance   = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_medium_importance= &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tc_created = &amp;quot;Тест %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_tc_deleted = &amp;quot;Тест %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_tc_updated = &amp;quot;Тест %s отредактирован успешно&amp;quot;;&lt;br /&gt;
$TLS_tc_update_failed = &amp;quot;Не удалась правка теста %s!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachment404.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_close = &amp;quot;Закрыть&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_not_found = &amp;quot;Ошибка: Вложение не найдено!&amp;quot;;&lt;br /&gt;
$TLS_title_downloading_attachment = &amp;quot;Загружаем вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentdelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_deleting_was_ok = &amp;quot;Вложение удалено.&amp;quot;;&lt;br /&gt;
$TLS_error_attachment_delete = &amp;quot;При удалении вложения произошла ошибка!&amp;quot;;&lt;br /&gt;
$TLS_title_delete_attachment = &amp;quot;Удалить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_del_comp = &amp;quot;Да, удалить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_container_title_testsuite =$TLS_test_suite;&lt;br /&gt;
$TLS_linked_but_not_executed=&amp;quot;Связан с одним или более планом тестирования, но не выполнялась&amp;quot;;&lt;br /&gt;
$TLS_question_del = &amp;quot;Действительно удалить&amp;quot;;&lt;br /&gt;
$TLS_th_link_exec_status = &amp;quot;Статус исполнения и связей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_testsuite = &amp;quot;Создать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_tc_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_title_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_testsuite_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_add.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_bug = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_bug_id = &amp;quot;Bug id&amp;quot;;&lt;br /&gt;
$TLS_button_enter_bug = &amp;quot;Создать новый баг&amp;quot;;&lt;br /&gt;
$TLS_title_bug_add = &amp;quot;Добавить баг&amp;quot;;&lt;br /&gt;
$TLS_link_bts_create_bug = &amp;quot;Доступ к системе регистрации багов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/bug_delete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_delete_bug = &amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cp               = &amp;quot;Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_move             = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_target        = &amp;quot;Выберите куда&amp;quot;;&lt;br /&gt;
$TLS_cont_move_first      = &amp;quot;Переместить это&amp;quot;;&lt;br /&gt;
$TLS_cont_move_second     = &amp;quot;в другое&amp;quot;;&lt;br /&gt;
$TLS_copy_keywords        = &amp;quot;Копировать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_defined_exclam       = &amp;quot;определен !&amp;quot;;&lt;br /&gt;
$TLS_include_nested       = &amp;quot;Включая вложенные данные (только для копирования).&amp;quot;;&lt;br /&gt;
$TLS_sorry_further        = &amp;quot;К сожалению, больше ничего нет &amp;quot;;&lt;br /&gt;
$TLS_title_move_cp        = &amp;quot;Переместить/Скопировать&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_btn_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_help = &amp;quot;Помощь&amp;quot;;&lt;br /&gt;
$TLS_req_create = &amp;quot;Создать требование&amp;quot;;&lt;br /&gt;
$TLS_req_doc_id = &amp;quot;DOC-ID&amp;quot;;&lt;br /&gt;
$TLS_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_reqs = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_req_title = &amp;quot;Заголовок требования должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_reqdoc_id = &amp;quot;ID документа-требования не должен быть пуст!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerOrder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_no_nodes_to_reorder = &amp;quot;К сожалению, тут нечего упорядочивать.&amp;quot;;&lt;br /&gt;
$TLS_node = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_th_node_type = &amp;quot;Тест / Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_order = &amp;quot;Порядок&amp;quot;;&lt;br /&gt;
$TLS_title_change_node_order = &amp;quot;Изменить порядок 'потомков'&amp;quot;;&lt;br /&gt;
$TLS_node_type_dbtable_testsuites=$TLS_test_suite;&lt;br /&gt;
$TLS_node_type_dbtable_testcases=$TLS_testcase;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_del_com    = &amp;quot;Удалить эту группу тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_com   = &amp;quot;Править дату и заголовок для этой группы тестов&amp;quot;;&lt;br /&gt;
$TLS_alt_move_cp_com = &amp;quot;Переместить или скопировать эту группу тестов в другой проект&amp;quot;;&lt;br /&gt;
$TLS_btn_del_com = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_com = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_export_all_testsuites = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_export_tc = &amp;quot;Экспортировать Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_export_testsuite = &amp;quot;Экспортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_import_tc = &amp;quot;Импортировать Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_import_testsuite = &amp;quot;Импортировать группу тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_move_cp_com = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_cat = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_com = &amp;quot;Новая группа тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_new_tc = &amp;quot;Создать Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_btn_reorder_cat = &amp;quot;Переупорядочить потомков&amp;quot;;&lt;br /&gt;
$TLS_edit_testproject_basic_data = &amp;quot;Править основные данные проекта&amp;quot;;&lt;br /&gt;
$TLS_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_product_name = &amp;quot;Имя проекта&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_edit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_available_on = &amp;quot;Доступно для&amp;quot;;&lt;br /&gt;
$TLS_btn_add = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_btn_delete = &amp;quot;Удалить&amp;quot;; &lt;br /&gt;
$TLS_btn_ok = &amp;quot;Ok&amp;quot;;&lt;br /&gt;
$TLS_custom_field = &amp;quot;Пользовательское поле&amp;quot;;&lt;br /&gt;
$TLS_enable_on_design = &amp;quot;Разрешить при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_enable_on_exec = &amp;quot;Разрешить при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_label = &amp;quot;Метка&amp;quot;;&lt;br /&gt;
$TLS_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_custom_field = &amp;quot;Вы уверены, что хотите удалить пользовательское поле?&amp;quot;;&lt;br /&gt;
$TLS_possible_values = &amp;quot;Возможные значения&amp;quot;;&lt;br /&gt;
$TLS_show_on_design = &amp;quot;Показывать при &amp;lt;br&amp;gt;спецификации теста&amp;quot;;&lt;br /&gt;
$TLS_show_on_exec = &amp;quot;Показывать при &amp;lt;br&amp;gt;прогоне теста&amp;quot;;&lt;br /&gt;
$TLS_testcase = $TLS_test_case;&lt;br /&gt;
$TLS_title_cfields_mgmt = &amp;quot;Пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_type = &amp;quot;Тип&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_label = &amp;quot;Пожалуйста, введите метку для этого пользовательского поля.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_cfield_name = &amp;quot;Пожалуйста, введите имя этого пользовательского поля.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_update.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_failed_db_upd = &amp;quot;Не удалось обновить базу данных!&amp;quot;;&lt;br /&gt;
$TLS_info_failed_db_upd_details = &amp;quot;Не удалось обновить базу данных! - Подробности:&amp;quot;;&lt;br /&gt;
$TLS_invalid_query = &amp;quot;Ошибка:&amp;quot;;&lt;br /&gt;
$TLS_warning = &amp;quot;Предупреждение!!&amp;quot;;&lt;br /&gt;
$TLS_was_success = &amp;quot; был(и) успешно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestPlan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_btn_apply_filter = &amp;quot;Применить фильтр&amp;quot;;&lt;br /&gt;
$TLS_btn_update_menu = &amp;quot;Обновить меню&amp;quot;;&lt;br /&gt;
$TLS_caption_nav_filter_settings = &amp;quot;Параметры выборки&amp;quot;;&lt;br /&gt;
$TLS_current_build = &amp;quot;Текущая сборка&amp;quot;;&lt;br /&gt;
$TLS_filter_owner = &amp;quot;Ответственный&amp;quot;;&lt;br /&gt;
$TLS_filter_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_filter_tcID = &amp;quot;Фильтр: ID Теста&amp;quot;;&lt;br /&gt;
$TLS_keyword = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_test_status_all_status=&amp;quot;Все&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_th_my_perc_completed = &amp;quot;У меня выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_perc_completed = &amp;quot;Выполнено [%]&amp;quot;;&lt;br /&gt;
$TLS_title_your_tp_metrics = &amp;quot;Ваши метрики для плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/newest_tcversions.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_linked_version = &amp;quot;Связанная версия&amp;quot;;&lt;br /&gt;
$TLS_newest_version = &amp;quot;Самая новая из доступных активных версий&amp;quot;;&lt;br /&gt;
$TLS_title_newest_tcversions = &amp;quot;Самые новые версии связанных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/emailSent.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_test_report = &amp;quot;- Послать Тест-отчёт&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_Title = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_btn_back2srs = &amp;quot;Назад, к спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_btn_import = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_btn_upload_file = &amp;quot;Загрузить файл&amp;quot;;&lt;br /&gt;
$TLS_check_req_file_structure = &amp;quot;Пожалуйста, проверьте формат файла. Не получается получить из этого файла требования&amp;quot;;&lt;br /&gt;
$TLS_local_file = &amp;quot;Файл:&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file1 = &amp;quot;Максимальный размер для этого файла&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file2 = &amp;quot;kB&amp;quot;;&lt;br /&gt;
$TLS_req_import_check_note = &amp;quot;Пожалуйста, разрешите возможные конфликты и запустите процесс импорта.&amp;quot;;&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Не импортируйте элементы с пустой Сферой&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_double = &amp;quot;Добавить ещё с тем же заголовком&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_header = &amp;quot;Разрешить конфликт&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_overwrite = &amp;quot;Обновить существующий&amp;quot;;&lt;br /&gt;
$TLS_req_import_option_skip = &amp;quot;Пропускать импорт дублирующих требований&amp;quot;;&lt;br /&gt;
$TLS_req_import_type = &amp;quot;Тип:&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement = &amp;quot;Нет требований&amp;quot;;&lt;br /&gt;
$TLS_required_cvs_format = &amp;quot;Формат файла с требованиями:&amp;quot;;&lt;br /&gt;
$TLS_title_choose_file_type = &amp;quot;Выберите тип файла&amp;quot;;&lt;br /&gt;
$TLS_title_choose_local_file = &amp;quot;Выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_title_req_import = &amp;quot;Загрузка требований&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_check_input = &amp;quot;Проверьте импортируемые данные&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_build = &amp;quot;Удалить эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_attachment = &amp;quot;Удалить это вложение&amp;quot;;&lt;br /&gt;
$TLS_attached_files = &amp;quot;Вложенные файлы&amp;quot;;&lt;br /&gt;
$TLS_attachment_feature_disabled = &amp;quot;вложения отключены&amp;quot;;&lt;br /&gt;
$TLS_button_upload = &amp;quot;Загрузить&amp;quot;;&lt;br /&gt;
$TLS_upload_file_new_file = &amp;quot;Загрузить новый файл&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_attachment = &amp;quot;Действительно удалить вложение?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_print = &amp;quot;Печать&amp;quot;;&lt;br /&gt;
$TLS_note_email_sent_t = &amp;quot;Примечание: email format послан на email пользователя&amp;quot;;&lt;br /&gt;
$TLS_send_results = &amp;quot;Послать отчеты&amp;quot;;&lt;br /&gt;
$TLS_send_to = &amp;quot;To:&amp;quot;;&lt;br /&gt;
$TLS_subject = &amp;quot;Subject:&amp;quot;;&lt;br /&gt;
$TLS_title_active_build = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_title_report_type = &amp;quot;Формат отчета&amp;quot;;&lt;br /&gt;
$TLS_via_email = &amp;quot;через eMail&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_attachments_upload.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_view.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_cfields_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_manage_cfield = &amp;quot;Управлять пользовательскими полями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_ro_m0.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_category = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_configuration = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_not_defined = &amp;quot;Не определено.&amp;quot;;&lt;br /&gt;
$TLS_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_cat_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cat_alt_name = &amp;quot;Обязательно заполнить имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_cat_config = &amp;quot;Конфигурация&amp;quot;;&lt;br /&gt;
$TLS_cat_data = &amp;quot;Данные&amp;quot;;&lt;br /&gt;
$TLS_cat_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_cat_tools = &amp;quot;Инструменты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_by = &amp;quot;by&amp;quot;;&lt;br /&gt;
$TLS_coverage = &amp;quot;Покрытие&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_req = &amp;quot;Удалить это требование, Вы уверены?&amp;quot;;&lt;br /&gt;
$TLS_req_edit = &amp;quot;Править требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notestcase = &amp;quot;Связанных Тестов нет.&amp;quot;;&lt;br /&gt;
$TLS_requirement_spec = &amp;quot;Спецификация требования&amp;quot;;&lt;br /&gt;
$TLS_test_case_id = &amp;quot;ID&amp;quot;;&lt;br /&gt;
$TLS_title_created = &amp;quot;Создано:&amp;quot;;&lt;br /&gt;
$TLS_title_last_mod = &amp;quot;Последняя правка:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_active = &amp;quot;Активная&amp;quot;;&lt;br /&gt;
$TLS_enter_build = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_enter_build_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_msg_build = &amp;quot;Замечание: Каждая сборка относится к активному плану тестирования. Описание должно включать: список развертываемых пакетов, утверждений, состояние, и т.п.&amp;quot;;&lt;br /&gt;
$TLS_open = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_test_plan = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_build_2 = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_title_build_create = &amp;quot;Создать новую Сборку&amp;quot;;&lt;br /&gt;
$TLS_title_build_update = &amp;quot;Править Сборку&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_build_name = &amp;quot;Пожалуйста, введите имя для этой Сборки!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_introduction = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_limitations = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_methodology = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_references = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_comp_viewer_rw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_comp_alt_name = &amp;quot;Обязательно введите имя группы тестов.&amp;quot;;&lt;br /&gt;
$TLS_comp_intro = &amp;quot;Введение&amp;quot;;&lt;br /&gt;
$TLS_comp_lim = &amp;quot;Ограничения&amp;quot;;&lt;br /&gt;
$TLS_comp_method = &amp;quot;Методология&amp;quot;;&lt;br /&gt;
$TLS_comp_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
$TLS_comp_ref = &amp;quot;Ссылки&amp;quot;;&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_analyse = &amp;quot;Анализировать&amp;quot;;&lt;br /&gt;
$TLS_btn_check_all = &amp;quot;Проверить все&amp;quot;;&lt;br /&gt;
$TLS_btn_delete_spec = &amp;quot;Удалить спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_spec = &amp;quot;Править спецификацию&amp;quot;;&lt;br /&gt;
$TLS_btn_export_reqs = &amp;quot;Экспортировать требования&amp;quot;;&lt;br /&gt;
$TLS_btn_req_create = &amp;quot;Создать новое требование&amp;quot;;&lt;br /&gt;
$TLS_btn_spec_list = &amp;quot;Список спецификаций&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck_all = &amp;quot;Убрать все отметки&amp;quot;;&lt;br /&gt;
$TLS_cant_delete_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_popup_sure_delete = &amp;quot;Вы уверены удалить эту спецификацию требования?&amp;quot;;&lt;br /&gt;
$TLS_req_select_create_tc = &amp;quot;Создать Тесты&amp;quot;;&lt;br /&gt;
$TLS_req_select_delete = &amp;quot;Удалить требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_list = &amp;quot;Список требований&amp;quot;;&lt;br /&gt;
$TLS_req_total = &amp;quot;Всего треб.&amp;quot;;&lt;br /&gt;
$TLS_req_reorder = &amp;quot;Переупорядочить требования?&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_requirements = &amp;quot;Вы уверены удалить выбранные требования?&amp;quot;;&lt;br /&gt;
$TLS_title_change_req_order = &amp;quot;Переупорядочивание требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_copyrightnotice.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_gnu_gpl = &amp;quot;GNU GPL&amp;quot;;&lt;br /&gt;
$TLS_lic_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_lic_product = &amp;quot;TestLink project&amp;quot;;&lt;br /&gt;
$TLS_licensed_under = &amp;quot;TestLink лицензируется согласно &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/containerEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_update_testsuite = &amp;quot;Обновить группу тестов&amp;quot;;&lt;br /&gt;
$TLS_title_edit_level = &amp;quot;Править&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecAnalyse.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_none = &amp;quot;Пусто &amp;quot;;&lt;br /&gt;
$TLS_req = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_req_spec_change = &amp;quot;Изменить спецификацию требований на &amp;quot;;&lt;br /&gt;
$TLS_req_title_analyse = &amp;quot;Анализировать спецификацию требований &amp;quot;;&lt;br /&gt;
$TLS_req_title_covered = &amp;quot;Покрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_in_tl = &amp;quot;Требований, зарегистрированных в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_title_nottestable = &amp;quot;Нетестируемые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_uncovered = &amp;quot;Непокрытые требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_not_in_tl = &amp;quot;Требований, отсутствующих в TestLink&amp;quot;;&lt;br /&gt;
$TLS_req_total_count = &amp;quot;Всего требований&amp;quot;;&lt;br /&gt;
$TLS_testcases = &amp;quot;Тесты&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecCreate.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_action_create_srs = &amp;quot;Создать спецификацию требований&amp;quot;;&lt;br /&gt;
$TLS_testproject = &amp;quot;проект&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_reqView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_last_edit = &amp;quot;Последняя правка: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_comp.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_top_level_suites = &amp;quot;Результаты топовых групп тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_blocked = &amp;quot;Блокировано&amp;quot;;&lt;br /&gt;
$TLS_trep_comp = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_comp_perc = &amp;quot;Выполнена [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_failed = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_trep_not_run = &amp;quot;Не запускали&amp;quot;;&lt;br /&gt;
$TLS_trep_passed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_trep_total = &amp;quot;Всего&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_keyw.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_kw = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_trep_kw = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_owner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_owner = &amp;quot;Результаты по Тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_owner = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_tester = &amp;quot;Результаты по Тестировщику&amp;quot;;&lt;br /&gt;
$TLS_trep_tester = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_prio.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tit_end_date = &amp;quot;Дата окончания&amp;quot;;&lt;br /&gt;
$TLS_tit_milestone = &amp;quot;Веха&amp;quot;;&lt;br /&gt;
$TLS_title_res_by_prio = &amp;quot;Результаты по приоритету&amp;quot;;&lt;br /&gt;
$TLS_trep_milestone_goal = &amp;quot;Цель вехи [%]&amp;quot;;&lt;br /&gt;
$TLS_trep_prio = &amp;quot;Приоритет&amp;quot;;&lt;br /&gt;
$TLS_trep_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_res_by_ts.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_res_by_ts = &amp;quot;Результаты по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_trep_imp = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_trep_risk = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_trep_ts = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecEdit.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_show_bug_table.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_build = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_caption_bugtable = &amp;quot;Связанные баги&amp;quot;;&lt;br /&gt;
$TLS_delete_bug=&amp;quot;Удалить баг&amp;quot;;&lt;br /&gt;
$TLS_del_bug_warning_msg = &amp;quot;Действительно удалить этот баг?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqSpecList.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign_tc = &amp;quot;Указать Тест&amp;quot;;&lt;br /&gt;
$TLS_no_docs = &amp;quot;Нет доступных документов.&amp;quot;;&lt;br /&gt;
$TLS_req_list_docs = &amp;quot;Спецификации требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_New_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_add_tc_name = &amp;quot;Обязательно укажите имя Теста.&amp;quot;;&lt;br /&gt;
$TLS_expected_results = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_tc_title = &amp;quot;Заголовок Тест-Кейса&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/show_exec_notes.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_execution_notes = &amp;quot;Замечания по выполнению&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_create_role = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_role = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_caption_define_role = &amp;quot;Определить роль&amp;quot;;&lt;br /&gt;
$TLS_caption_possible_affected_users = &amp;quot;Возможно влияет на следующих пользователей&amp;quot;;&lt;br /&gt;
$TLS_enter_role_notes = &amp;quot;Введите описание роли&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_product_roles = &amp;quot;Укажите роли проекта&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testplan_roles = &amp;quot;Укажите роли для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_menu_define_roles = &amp;quot;Новая роль&amp;quot;;&lt;br /&gt;
$TLS_menu_mod_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_new_user = &amp;quot;Новый пользователь&amp;quot;;&lt;br /&gt;
$TLS_menu_edit_user = &amp;quot;Редактировать пользователя&amp;quot;;&lt;br /&gt;
$TLS_menu_view_users = &amp;quot;Список пользователей&amp;quot;;&lt;br /&gt;
$TLS_menu_view_roles = &amp;quot;Просмотр ролей&amp;quot;;&lt;br /&gt;
$TLS_th_cf_rights = &amp;quot;Права на пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_th_kw_rights = &amp;quot;Права на ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_th_mgttc_rights = &amp;quot;Права на управление Тест-Кейсами&amp;quot;;&lt;br /&gt;
$TLS_th_product_rights = &amp;quot;Права на проект&amp;quot;;&lt;br /&gt;
$TLS_th_req_rights = &amp;quot;Права на требование&amp;quot;;&lt;br /&gt;
$TLS_th_rights = &amp;quot;Разрешения&amp;quot;;&lt;br /&gt;
$TLS_th_rolename = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_th_tp_rights = &amp;quot;Права на план тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_user_rights = &amp;quot;Права пользователей&amp;quot;;&lt;br /&gt;
$TLS_title_user_mgmt = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_warning_modify_role = &amp;quot;Действительно исправить роль?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcSearchForm.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_find             = &amp;quot;Найти&amp;quot;;&lt;br /&gt;
$TLS_caption_search_form  = &amp;quot;Искать тесты&amp;quot;;&lt;br /&gt;
$TLS_not_applied          = &amp;quot;Не применимо&amp;quot;;&lt;br /&gt;
$TLS_th_tcid              = &amp;quot;ID теста&amp;quot;;&lt;br /&gt;
$TLS_th_tcversion         = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
$TLS_th_title             = &amp;quot;Заголовок&amp;quot;;&lt;br /&gt;
$TLS_title_search_tcs     = &amp;quot;Поиск&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/infoWindow.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcDelete.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_yes_iw2del = &amp;quot;Да, удалите Тест!&amp;quot;;&lt;br /&gt;
$TLS_question_del_tc = &amp;quot;Действительно удалить тест?&amp;quot;;&lt;br /&gt;
$TLS_th_executed = &amp;quot;Выполнено&amp;quot;;&lt;br /&gt;
$TLS_th_linked_to_tplan = &amp;quot;Связан с планом тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_new_tc = &amp;quot;Создать Тест&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_tc_title = &amp;quot;Пожалуйста, задайте заголовок для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcImport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_imp_tc_data = &amp;quot;Импорт данных для теста&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsimport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_keyword_import_to = &amp;quot;Импортировать ключевые слова в &amp;quot;;&lt;br /&gt;
$TLS_title_keyword_import = &amp;quot;Импорт ключевых слов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_export = &amp;quot;Экспорт&amp;quot;;&lt;br /&gt;
$TLS_title_req_import_to = &amp;quot;Импортировать требования в документ:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/cfields_tproject_assign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_assign = &amp;quot;Привязать&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_active_mgmt = &amp;quot;Обновить активное состояние&amp;quot;;&lt;br /&gt;
$TLS_btn_cfields_display_order = &amp;quot;Сохранить порядок показа&amp;quot;;&lt;br /&gt;
$TLS_btn_unassign = &amp;quot;Освободить от&amp;quot;;&lt;br /&gt;
$TLS_cfields_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_cfields_tproject_assign = &amp;quot;Привязать пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_display_order = &amp;quot;Порядок показа&amp;quot;;&lt;br /&gt;
$TLS_title_assigned_cfields = &amp;quot;Привязанные пользовательские поля&amp;quot;;&lt;br /&gt;
$TLS_title_available_cfields = &amp;quot;Доступные пользовательские поля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_No = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_Yes = &amp;quot;Да&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_user = &amp;quot;Править пользователя&amp;quot;;&lt;br /&gt;
$TLS_order_by_login = &amp;quot;По порядку логинов&amp;quot;;&lt;br /&gt;
$TLS_order_by_role_descr = &amp;quot;По порядку описания ролей&amp;quot;;&lt;br /&gt;
$TLS_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_th_delete = &amp;quot;Удалить?&amp;quot;;&lt;br /&gt;
$TLS_th_email = &amp;quot;Email&amp;quot;;&lt;br /&gt;
$TLS_th_first_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_th_last_name = &amp;quot;Фамилия&amp;quot;;&lt;br /&gt;
$TLS_th_locale = &amp;quot;Локализация&amp;quot;;&lt;br /&gt;
$TLS_th_login = &amp;quot;Логин&amp;quot;;&lt;br /&gt;
$TLS_th_role = &amp;quot;Роль&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_user = &amp;quot;Действительно удалить выбранного пользователя?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/login.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_login = &amp;quot;Войти&amp;quot;;&lt;br /&gt;
$TLS_login_name = &amp;quot;Логин:&amp;quot;;&lt;br /&gt;
$TLS_lost_password_q = &amp;quot;Забыли пароль?&amp;quot;;&lt;br /&gt;
$TLS_new_user_q = &amp;quot;Новый пользователь?&amp;quot;;&lt;br /&gt;
$TLS_password = &amp;quot;Пароль:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginFirst.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_add_user_data = &amp;quot;Добавить пользовательские данные&amp;quot;;&lt;br /&gt;
$TLS_e_mail = &amp;quot;E-mail (нужен, чтобы получить новый пароль):&amp;quot;;&lt;br /&gt;
$TLS_first_name = &amp;quot;Имя:&amp;quot;;&lt;br /&gt;
$TLS_last_name = &amp;quot;Фамилия:&amp;quot;;&lt;br /&gt;
$TLS_link_back_to_login = &amp;quot;Войти еще раз&amp;quot;;&lt;br /&gt;
$TLS_password_again = &amp;quot;Повторите пароль:&amp;quot;;&lt;br /&gt;
$TLS_password_mgmt_is_external = &amp;quot;Используется внешнее управление паролями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcMove.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_mv = &amp;quot;Переместить&amp;quot;;&lt;br /&gt;
$TLS_choose_cat = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_inst_move = &amp;quot;Переместить этот тест в другую группу тестов (внутри того же плана тестирования).&amp;quot;;&lt;br /&gt;
$TLS_title_mv_cp_tc = &amp;quot;Переместить/Копировать Тест&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/loginLost.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send = &amp;quot;Выслать пароль&amp;quot;;&lt;br /&gt;
$TLS_password_reset = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_records_found = &amp;quot;Ничего не найдено.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/execSetResults.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_alt_notes = &amp;quot;заметки&amp;quot;;&lt;br /&gt;
$TLS_attachment_mgmt = &amp;quot;вложения&amp;quot;;&lt;br /&gt;
$TLS_btn_history_off = &amp;quot;Показывать только последний прогон&amp;quot;;&lt;br /&gt;
$TLS_btn_history_on = &amp;quot;Показывать полную историю прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_all_tests_results = &amp;quot;Сохранить все результаты прогонов&amp;quot;;&lt;br /&gt;
$TLS_btn_save_tc_exec_results = &amp;quot;Сохранить результат прогона&amp;quot;;&lt;br /&gt;
$TLS_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_build_is_closed = &amp;quot;Сборка закрыта&amp;quot;;&lt;br /&gt;
$TLS_builds_notes = &amp;quot;Описание сборки&amp;quot;;&lt;br /&gt;
$TLS_bulk_tc_status_management = &amp;quot;Массовое управление состоянием Тестов&amp;quot;;&lt;br /&gt;
$TLS_date_time_run = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_details = &amp;quot;Подробности&amp;quot;;&lt;br /&gt;
$TLS_exec_notes = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
$TLS_exec_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_execution_history = &amp;quot;История прогонов&amp;quot;;&lt;br /&gt;
$TLS_img_title_bug_mgmt = &amp;quot;Управление багами&amp;quot;;&lt;br /&gt;
$TLS_img_title_delete_execution= &amp;quot;Удалить прогон&amp;quot;;&lt;br /&gt;
$TLS_just_last_execution_for_this_build = &amp;quot;Последний прогон для этой сборки&amp;quot;;&lt;br /&gt;
$TLS_no_data_available = &amp;quot;Данные отсутствуют&amp;quot;;&lt;br /&gt;
$TLS_set_all_tc_to = &amp;quot;Установить всем состояние &amp;quot;;&lt;br /&gt;
$TLS_show_hide = &amp;quot;Показать / скрыть&amp;quot;;&lt;br /&gt;
$TLS_tc_not_tested_yet = &amp;quot;Еще не протестировано:&amp;quot;;&lt;br /&gt;
$TLS_test_cases_cannot_be_executed = &amp;quot;Тесты не могут быть выполнены&amp;quot;;&lt;br /&gt;
$TLS_test_exec_by = &amp;quot;Протестировано: &amp;quot;;&lt;br /&gt;
$TLS_test_exec_expected_r = &amp;quot;Ожидаемые результаты&amp;quot;;&lt;br /&gt;
$TLS_test_exec_last_run_date = &amp;quot;Самые последние запуски:&amp;quot;;&lt;br /&gt;
$TLS_test_exec_notes = &amp;quot;Заметки / Описание&amp;quot;;&lt;br /&gt;
$TLS_test_exec_on_build = &amp;quot; в Сборке&amp;quot;;&lt;br /&gt;
$TLS_test_exec_result = &amp;quot;Результат&amp;quot;;&lt;br /&gt;
$TLS_test_exec_steps = &amp;quot;Шаги&amp;quot;;&lt;br /&gt;
$TLS_test_exec_summary = &amp;quot;Резюме&amp;quot;;&lt;br /&gt;
$TLS_test_plan_notes = &amp;quot;Заметки по плану тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_status_not_run = &amp;quot;Не запущен&amp;quot;;&lt;br /&gt;
$TLS_th_test_case_id = &amp;quot;ID &amp;quot;;&lt;br /&gt;
$TLS_th_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_on_build = &amp;quot;Результы тестов по Сборке&amp;quot;;&lt;br /&gt;
$TLS_title_t_r_owner = &amp;quot; Ответственный:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_version = &amp;quot;Версия&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_ro.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_test_suite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/navBar.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_home = &amp;quot;Домой&amp;quot;;&lt;br /&gt;
$TLS_link_logout = &amp;quot;Выход&amp;quot;;&lt;br /&gt;
$TLS_product = &amp;quot;Проект&amp;quot;;&lt;br /&gt;
$TLS_product_role = &amp;quot;Роль проекта&amp;quot;;&lt;br /&gt;
$TLS_title_edit_personal_data = &amp;quot;Мой профиль&amp;quot;;&lt;br /&gt;
$TLS_title_execute = &amp;quot;Выполнить&amp;quot;;&lt;br /&gt;
$TLS_title_results = &amp;quot;Отчеты&amp;quot;;&lt;br /&gt;
$TLS_title_specification = &amp;quot;Спецификация&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/inc_testsuite_viewer_rw.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_add_tc = &amp;quot;Добавить&amp;quot;;&lt;br /&gt;
$TLS_add_remove_selected_tc_hint = &amp;quot;Операция будет выполнена над ВСЕМИ группами тестов&amp;quot;;&lt;br /&gt;
$TLS_btn_add_remove_selected_tc = &amp;quot;Добавить / Удалить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_add_selected_tc = &amp;quot;Добавить выбранное&amp;quot;;&lt;br /&gt;
$TLS_btn_check = &amp;quot;Отметить&amp;quot;;&lt;br /&gt;
$TLS_btn_uncheck = &amp;quot;Снять отметки&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_tc = &amp;quot;Все тесты в этой группе тестов.&amp;quot;;&lt;br /&gt;
$TLS_check_uncheck_all_checkboxes=&amp;quot;отметить все/снять все отметки&amp;quot;;&lt;br /&gt;
$TLS_has_been_executed = &amp;quot;были выполнены&amp;quot;;&lt;br /&gt;
$TLS_inactive_testcase = &amp;quot;неактивны&amp;quot;;&lt;br /&gt;
$TLS_no_testcase_available = &amp;quot;Тестов нет&amp;quot;;&lt;br /&gt;
$TLS_note_keyword_filter = &amp;quot;Тесты фильтруются по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_remove_tc = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_th_test_case = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_title_add_remove_test_to_plan = &amp;quot;Добавить/Удалить Тест(ы) в/из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_add_test_to_plan = &amp;quot;Добавить Тесты в план тестирования&amp;quot;;&lt;br /&gt;
$TLS_warning_add_remove_selected_tc = &amp;quot;Вы уверены удалить выбранные Тесты из этого плана тестирования?&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planAddTCNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_navigator = &amp;quot;Навигатор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planPriority.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_prio   = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_title_priority = &amp;quot;Определить приоритеты для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tr_th_importance = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_tr_th_prio_cba = &amp;quot;Приоритет (C/B/A)&amp;quot;;&lt;br /&gt;
$TLS_tr_th_risk = &amp;quot;Риск/Важность&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_testplan_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_cancel = &amp;quot;Отменить&amp;quot;;&lt;br /&gt;
$TLS_opt_no = &amp;quot;Нет&amp;quot;;&lt;br /&gt;
$TLS_testplan_question_create_tp_from = &amp;quot;Создать из существующего плана тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_active = &amp;quot;Активный&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_name = &amp;quot;Имя&amp;quot;;&lt;br /&gt;
$TLS_testplan_th_notes = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_create = &amp;quot;Создать новый план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_edit = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_for_project = &amp;quot;для проекта: &amp;quot;;&lt;br /&gt;
$TLS_testplan_title_tp_management = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_notes = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
План тестирования должен содержать ясно определенные задачи, включая временные границы. &lt;br /&gt;
Он может содержать тест-активность для выпускаемой версии продукта (включая патчи) &lt;br /&gt;
или просто единственный запрос от пользователя.&amp;lt;br/&amp;gt;&lt;br /&gt;
В описании можно ссылаться на план и другую документацию по проекту.&lt;br /&gt;
Разумно перечислить тестируемые возможности, риски и т.п.&amp;lt;br/&amp;gt;&lt;br /&gt;
Можно создать новый план тестирования из существующего (&amp;quot;клонировать&amp;quot;). &lt;br /&gt;
Будут скопированы следующие элементы: Сборки, Тесты, Приоритеты, &lt;br /&gt;
Вехи и роли пользователей.&amp;lt;br/&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать/заморозить: т.е. запретить любое изменение &lt;br /&gt;
атрибутов или вложенных элементов плана тестирования. &lt;br /&gt;
Такие планы тестирования будут видны только на странице отчетов и на этой странице.&lt;br /&gt;
END;&lt;br /&gt;
 &lt;br /&gt;
$TLS_warning_empty_tp_name = &amp;quot;Пожалуйста, введите имя плана тестирования.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planNew.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_btn_edit = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
$TLS_testplan_btn_new = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_create = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_edit = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_testplan_menu_list = &amp;quot;Список&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planMilestones.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_milestone = &amp;quot;Удалить веху?&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_milestone = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_new_milestone = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_info_milestones_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'&amp;quot;;&lt;br /&gt;
$TLS_no_milestones = &amp;quot;Для этого плана тестирования вехи не определены.&amp;quot;;&lt;br /&gt;
$TLS_popup_delete_milestones = &amp;quot;Вы уверены удалить веху %NAME% ?&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_milestone_name=&amp;quot;Укажите имя вехи!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$TLS_th_date_format = &amp;quot;Целевая Дата&amp;quot;;&lt;br /&gt;
$TLS_th_perc_a_prio = &amp;quot;% A-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_b_prio = &amp;quot;% B-приоритет&amp;quot;;&lt;br /&gt;
$TLS_th_perc_c_prio = &amp;quot;% C-приоритет&amp;quot;;&lt;br /&gt;
$TLS_title_existing_milestones = &amp;quot;Существующие вехи&amp;quot;;&lt;br /&gt;
$TLS_title_milestones = &amp;quot;Вехи для плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_new_milestone = &amp;quot;Новая Веха&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/projectedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_activate         = &amp;quot;Активировать&amp;quot;;&lt;br /&gt;
$TLS_btn_del              = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_del         = &amp;quot;Править / Удалить&amp;quot;;&lt;br /&gt;
$TLS_btn_inactivate       = &amp;quot;Деактивировать&amp;quot;;&lt;br /&gt;
$TLS_caption_edit_product = &amp;quot;Править проект&amp;quot;;&lt;br /&gt;
$TLS_caption_new_product  = &amp;quot;Создать проект&amp;quot;;&lt;br /&gt;
$TLS_color                = &amp;quot;Цвет&amp;quot;;&lt;br /&gt;
$TLS_enable_requirements  = &amp;quot;Включить функциональность Требований&amp;quot;;&lt;br /&gt;
$TLS_info_failed_loc_prod = &amp;quot;Не удалось локализовать проект.&amp;quot;;&lt;br /&gt;
$TLS_notes                = &amp;quot;Заметки&amp;quot;;&lt;br /&gt;
// Warning!!! - if JS string you must use \\n to get \n                                       &lt;br /&gt;
$TLS_popup_product_delete = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Внимание! Вы собираетесь необратимо удалить все данные связанные проектом:&lt;br /&gt;
результаты тестов, планы тестирования, тесты и т.п. \\n&lt;br /&gt;
Вместо удаления вы можете деактивировать проект. \\n&lt;br /&gt;
Если вы всё-таки настроены удалить проект, рекомендуем вам сначала &lt;br /&gt;
сделать бэкап базы данных. \\n&lt;br /&gt;
Итак, вы по прежнему уверены удалить проект? &lt;br /&gt;
END;&lt;br /&gt;
$TLS_warning_empty_tproject_name = &amp;quot;Обязательно задайте имя проекта!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_select_a_req        = &amp;quot;Пожалуйста, выберите требование&amp;quot;;&lt;br /&gt;
$TLS_req_msg_norequirement66    = &amp;quot;Требования нет&amp;quot;;&lt;br /&gt;
$TLS_req_title_assign           = &amp;quot;Привяжите требования к тесту&amp;quot;;&lt;br /&gt;
$TLS_req_title_assigned         = &amp;quot;Привязанные требования&amp;quot;;&lt;br /&gt;
$TLS_req_title_unassigned       = &amp;quot;Доступные требования&amp;quot;;&lt;br /&gt;
$TLS_warning_req_tc_assignment_impossible = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
  Вы &amp;lt;b&amp;gt;не можете&amp;lt;/b&amp;gt; делать привязку по одной из следующих причин:&lt;br /&gt;
  &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Не определено ни одной спецификации требования;&lt;br /&gt;
  &amp;lt;li&amp;gt;Спецификации требований пусты.&lt;br /&gt;
  &amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_edit_tc = &amp;quot;Править Тест&amp;quot;;&lt;br /&gt;
$TLS_warning_editing_executed_tc = &amp;quot;Внимание: Этот версия теста уже выполнялась&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planOwner.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assign_ownership     = &amp;quot;Назначить ответственного&amp;quot;;&lt;br /&gt;
$TLS_def_prio_rules       = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_opt_label_none       = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_th_imp               = &amp;quot;Важность&amp;quot;;&lt;br /&gt;
$TLS_th_owner             = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_risk              = &amp;quot;Риск&amp;quot;;&lt;br /&gt;
$TLS_th_test_suite        = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_title_plan_ownership = &amp;quot;Владелец плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcView_viewer.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_activate_this_tcversion  = &amp;quot;Активировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_Requirements             = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_btn_del_this_version     = &amp;quot;Удалить эту версию&amp;quot;;&lt;br /&gt;
$TLS_btn_edit                 = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_mv_cp                = &amp;quot;Переместить/Копировать&amp;quot;;&lt;br /&gt;
$TLS_btn_new_version          = &amp;quot;Создать новую версию&amp;quot;;&lt;br /&gt;
$TLS_can_not_edit_tc = &amp;quot;Вы не можете редактировать эту версию, т.к. она уже выполнялась&amp;quot;;&lt;br /&gt;
$TLS_deactivate_this_tcversion = &amp;quot;Деактивировать эту версию&amp;quot;;&lt;br /&gt;
$TLS_tcversion_is_inactive_msg = &amp;quot;Эта версия &amp;lt;b&amp;gt;неактивна&amp;lt;/b&amp;gt;, и не будет доступна для включения в план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planRemoveTC_m1.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_remove_selected_tc = &amp;quot;Удалить выбранные тесты tcs&amp;quot;;&lt;br /&gt;
$TLS_remove_ok = &amp;quot;Удаление прошло успешно ok&amp;quot;;&lt;br /&gt;
$TLS_title_remove_test_from_plan = &amp;quot;Удалить тест из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTesters.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_save = &amp;quot;Сохранить&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsAssign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_keyword_assignment_empty_tsuite = &amp;quot;В этой группе тестов нет тестов =&amp;gt; ключевое слово привязать нельзя&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_kw_to_tc = &amp;quot;Привязать к  тестам&amp;quot;;&lt;br /&gt;
$TLS_menu_manage_keywords = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_title_keywords = &amp;quot;Ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planTestersNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_label_list_of = &amp;quot;Список &amp;quot;;&lt;br /&gt;
$TLS_opt_test_plans = &amp;quot;планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_opt_users = &amp;quot;пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planUpdateTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_upd_ck_tc        = &amp;quot;Изменить выбранные тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_info_all_tc_uptodate = &amp;quot;Все тесты актуальны.&amp;quot;;&lt;br /&gt;
$TLS_th_category          = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_component         = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
$TLS_th_id_tc = &amp;quot;[ID] Теста&amp;quot;;&lt;br /&gt;
$TLS_th_reason = &amp;quot;Причина правки&amp;quot;;&lt;br /&gt;
$TLS_th_spec_version = &amp;quot;Специальная версия&amp;quot;;&lt;br /&gt;
$TLS_th_status = &amp;quot;Состояние&amp;quot;;&lt;br /&gt;
$TLS_th_suite_version = &amp;quot;Версия группы тестов&amp;quot;;&lt;br /&gt;
$TLS_th_update = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_title_upd_mod_tc = &amp;quot;Изменить исправленные тесты в &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/keywordsView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_delete_keyword   = &amp;quot;Удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_btn_create_keyword   = &amp;quot;Создать ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_btn_edit_keyword     = &amp;quot;Править&amp;quot;;&lt;br /&gt;
$TLS_btn_import_keywords  = &amp;quot;Импорт&amp;quot;;&lt;br /&gt;
$TLS_th_keyword           = &amp;quot;Ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_keyword = &amp;quot;Вы уверены удалить ключевое слово?&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least1 = &amp;quot;Пожалуйста, введите хотя бы  &amp;quot;;&lt;br /&gt;
$TLS_warning_enter_at_least2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less1 = &amp;quot;Пожалуйста, используйте не больше чем&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_less2 = &amp;quot; символов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/reqexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_req_export_to = &amp;quot;Экспорт требований&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsAllBuilds.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_status_blocked  = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_test_status_failed   = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_test_status_passed   = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_th_build             = &amp;quot;Сборка&amp;quot;;&lt;br /&gt;
$TLS_th_tc_total          = &amp;quot;Всего тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_date                   = &amp;quot;Дата:&amp;quot;;&lt;br /&gt;
$TLS_printed_by             = &amp;quot;Напечатано:&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_bugs   = &amp;quot;Баги по тесту&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_timestamp = &amp;quot;Временная метка теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_title = &amp;quot;Заголовок теста&amp;quot;;&lt;br /&gt;
$TLS_title_test_suite_name = &amp;quot;Имя группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsBuild.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_met_of_build = &amp;quot;Метрики сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsByStatus.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_test_results = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Показываются результаты только последнего теста.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
В частности, тесты скрыты, если результаты тестов для следующей сборки &lt;br /&gt;
имеют статус отличный от &amp;quot;в процессе&amp;quot;. &lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_th_bugs = &amp;quot;Баги&amp;quot;;&lt;br /&gt;
$TLS_th_date = &amp;quot;Дата&amp;quot;;&lt;br /&gt;
$TLS_th_run_by = &amp;quot;Запустил:&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsGeneral.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_gen_test_rep = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_query_form.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_excel_format             = &amp;quot;MS Excel&amp;quot;;&lt;br /&gt;
$TLS_html_format              = &amp;quot;HTML&amp;quot;;&lt;br /&gt;
$TLS_last_status_any          = &amp;quot;Любой&amp;quot;;&lt;br /&gt;
$TLS_last_status_blocked      = &amp;quot;Блокирован&amp;quot;;&lt;br /&gt;
$TLS_last_status_failed       = &amp;quot;Сбой&amp;quot;;&lt;br /&gt;
$TLS_last_status_not_run      = &amp;quot;Не стартовал&amp;quot;;&lt;br /&gt;
$TLS_last_status_passed       = &amp;quot;Пройден&amp;quot;;&lt;br /&gt;
$TLS_select_builds_header     = &amp;quot;Выберите сборку(и)&amp;quot;;&lt;br /&gt;
$TLS_select_components_header = &amp;quot;Выберите группу тестов&amp;quot;;&lt;br /&gt;
$TLS_select_keyword_header    = &amp;quot;Выберите ключевое слово&amp;quot;;&lt;br /&gt;
$TLS_select_last_result_header = &amp;quot;Выберите последний результат&amp;quot;;&lt;br /&gt;
$TLS_select_owner_header      = &amp;quot;Выберите владельца&amp;quot;;&lt;br /&gt;
$TLS_select_report_format_header = &amp;quot;Выберите формат отчета&amp;quot;;&lt;br /&gt;
$TLS_submit_query             = &amp;quot;Выполнить запрос&amp;quot;;&lt;br /&gt;
$TLS_test_plan_header         = &amp;quot;План тестирования: &amp;quot;;&lt;br /&gt;
$TLS_query_metrics_report     = &amp;quot;Запросить отчет по метрикам&amp;quot;;&lt;br /&gt;
$TLS_enter_start_time         = &amp;quot;Введите начальное время&amp;quot;;&lt;br /&gt;
$TLS_enter_end_time           = &amp;quot;Введите конечное время&amp;quot;;&lt;br /&gt;
$TLS_year                     = &amp;quot;год&amp;quot;;&lt;br /&gt;
$TLS_month                    = &amp;quot;месяц&amp;quot;;&lt;br /&gt;
$TLS_day                      = &amp;quot;день&amp;quot;;&lt;br /&gt;
$TLS_hour                     = &amp;quot;час&amp;quot;;&lt;br /&gt;
$TLS_search_in_notes          = &amp;quot;поиск строки в заметках&amp;quot;;&lt;br /&gt;
$TLS_executor                 = &amp;quot;исполнитель&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsMoreBuilds_report.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_show_collapse                  = &amp;quot;Показать/Свернуть&amp;quot;;&lt;br /&gt;
$TLS_caption_user_selected_query_parameters = &amp;quot;Параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_not_yet_executed                       = &amp;quot;Еще не выполнялся&amp;quot;;&lt;br /&gt;
$TLS_show_hide_all                          = &amp;quot;Показать/Скрыть все&amp;quot;;&lt;br /&gt;
$TLS_th_builds                              = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_th_execution_ts                        = &amp;quot;Время&amp;quot;;&lt;br /&gt;
$TLS_th_last_result                         = &amp;quot;Последний результат&amp;quot;;&lt;br /&gt;
$TLS_th_report_format                       = &amp;quot;Тип отчета&amp;quot;;&lt;br /&gt;
$TLS_th_test_plan                           = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
$TLS_th_test_suites                         = &amp;quot;Группа(ы) тестов&amp;quot;;&lt;br /&gt;
$TLS_th_tester_id                           = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_th_total_block                         = &amp;quot;# блокированных &amp;quot;;&lt;br /&gt;
$TLS_th_total_cases                         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_th_total_fail                          = &amp;quot;# сбоев&amp;quot;;&lt;br /&gt;
$TLS_th_total_not_run                       = &amp;quot;# не стартовавших&amp;quot;;&lt;br /&gt;
$TLS_th_total_pass                          = &amp;quot;# выполненных&amp;quot;;&lt;br /&gt;
$TLS_th_start_time      = &amp;quot;Время начала&amp;quot;;&lt;br /&gt;
$TLS_th_end_time        = &amp;quot;Время окончания&amp;quot;;&lt;br /&gt;
$TLS_th_executor        = &amp;quot;Исполнитель&amp;quot;;&lt;br /&gt;
$TLS_th_search_notes_string = &amp;quot;в заметках искать строку&amp;quot;;&lt;br /&gt;
$TLS_true               = &amp;quot;да&amp;quot;;&lt;br /&gt;
$TLS_false              = &amp;quot;нет&amp;quot;;&lt;br /&gt;
$TLS_display_suite_summaries = &amp;quot;Показать итоги по группе тестов&amp;quot;;&lt;br /&gt;
$TLS_display_query_params    = &amp;quot;Показать параметры запроса&amp;quot;;&lt;br /&gt;
$TLS_display_totals          = &amp;quot;Показать суммарную информацию&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsReqs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_title_blocked  = &amp;quot;Заблокировано требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_failed   = &amp;quot;Нарушено требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_notrun   = &amp;quot;Непроверенных требований&amp;quot;;&lt;br /&gt;
$TLS_req_title_passed   = &amp;quot;Выполнено требований&amp;quot;;&lt;br /&gt;
$TLS_title_result_req_testplan = &amp;quot;Результаты тестов основанных на спецификации требований&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan    = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsSend.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_send_report        = &amp;quot;Послать отчет&amp;quot;;&lt;br /&gt;
$TLS_check_send_to_me       = &amp;quot;Послать отчет самому себе&amp;quot;;&lt;br /&gt;
$TLS_mail_body              = &amp;quot;Тело письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_report            = &amp;quot;Отчет:&amp;quot;;&lt;br /&gt;
$TLS_mail_subject           = &amp;quot;Тема письма:&amp;quot;;&lt;br /&gt;
$TLS_mail_to                = &amp;quot;Кому:&amp;quot;;&lt;br /&gt;
$TLS_status_for_build       = &amp;quot;Состояние сборки&amp;quot;;&lt;br /&gt;
$TLS_tp_status              = &amp;quot;Общее состояние плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_tp_status_for_build    = &amp;quot;Состояние плана тестирования для сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/resultsTC.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_generated_by_TestLink_on=&amp;quot;Сформировано системой TestLink,  &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcEdit_m2.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcPrintNavigator.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_caption_print_opt  = &amp;quot;Настройки печати&amp;quot;;&lt;br /&gt;
$TLS_tr_td_show_as      = &amp;quot;Показать как&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcReorder.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_tc_to_reorder       = &amp;quot;Нет тестов для переупорядочивания.&amp;quot;;&lt;br /&gt;
$TLS_title_change_tc_order  = &amp;quot;Изменить порядок тестов в этой группе тестов.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcTree.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_refresh       = &amp;quot;Обновить&amp;quot;;&lt;br /&gt;
$TLS_button_update_tree   = &amp;quot;Обновить дерево&amp;quot;;&lt;br /&gt;
$TLS_do_auto_update       = &amp;quot;Обновлять дерево после каждой операции&amp;quot;;&lt;br /&gt;
$TLS_no_tc_spec_av        = &amp;quot;Нет тест-спецификаций.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tc_exec_assignment.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_do                     = &amp;quot;Пуск&amp;quot;;&lt;br /&gt;
$TLS_btn_update_selected_tc     = &amp;quot;Изменить выбранные тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tc_exec_assignment   = &amp;quot;Назначить прогоны тестов для плана тестирования &amp;quot;;&lt;br /&gt;
$TLS_user                       = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_user_bulk_assignment       = &amp;quot;Массовое назначение ответственных пользователей&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/testSetNavigator.tpl==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/userInfo.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_btn_change_passwd        = &amp;quot;Сменить пароль&amp;quot;;&lt;br /&gt;
$TLS_btn_upd_user_data        = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd            = &amp;quot;Новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_new_passwd_again      = &amp;quot;Повторите новый пароль&amp;quot;;&lt;br /&gt;
$TLS_th_old_passwd            = &amp;quot;Старый пароль&amp;quot;;&lt;br /&gt;
$TLS_title_account_settings   = &amp;quot;Настройки профиля&amp;quot;;&lt;br /&gt;
$TLS_title_change_your_passwd = &amp;quot;Сменить ваш пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_different_pwd    = &amp;quot;Пожалуйста, повторите еще раз ваш новый пароль. Введенные пароли не совпадают.&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_pwd        = &amp;quot;Пароль должен быть не пуст!&amp;quot;;&lt;br /&gt;
$TLS_your_password_is_external = &amp;quot;Ваш пароль ведётся во внешней системе&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersassign.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_TestProject          = &amp;quot;проект&amp;quot;;&lt;br /&gt;
$TLS_User                 = &amp;quot;Пользователь&amp;quot;;&lt;br /&gt;
$TLS_btn_change           = &amp;quot;Изменить&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testplan_user_roles = &amp;quot;Назначить роли плана тестирования пользователям&amp;quot;;&lt;br /&gt;
$TLS_caption_assign_testproject_user_roles = &amp;quot;Назначить роли проекта пользователям&amp;quot;;&lt;br /&gt;
$TLS_menu_assign_testproject_roles = &amp;quot;Назначить роли проекта&amp;quot;;&lt;br /&gt;
$TLS_th_roles = &amp;quot;Роли&amp;quot;;&lt;br /&gt;
$TLS_title_assign_roles = &amp;quot;Назначить роли&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/usersedit.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_button_reset_password = &amp;quot;Сбросить пароль&amp;quot;;&lt;br /&gt;
$TLS_caption_user_details = &amp;quot;Свойства пользователя&amp;quot;;&lt;br /&gt;
$TLS_th_password = &amp;quot;Пароль&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_first_name = &amp;quot;Пожалуста, введите имя&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_last_name = &amp;quot;Пожалуйста, введите фамилию&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_login = &amp;quot;Пожалуйста, введите логин&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/attachmentupload.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachment_upload_ok=&amp;quot;Файл загружен.&amp;quot;;&lt;br /&gt;
$TLS_enter_attachment_title = &amp;quot;Введите заголовок для этого вложения.&amp;quot;;&lt;br /&gt;
$TLS_import_was_ok = &amp;quot;Импорт прошел успешно.&amp;quot;;&lt;br /&gt;
$TLS_max_size_cvs_file = &amp;quot;Максимальный размер файла:&amp;quot;;&lt;br /&gt;
$TLS_title_upload_attachment = &amp;quot;Загрузить вложение&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/rolesview.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_N_A                          = &amp;quot;N/A&amp;quot;;&lt;br /&gt;
$TLS_alt_delete_role              = &amp;quot;Удалить роль&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_role                = &amp;quot;Править роль&amp;quot;;&lt;br /&gt;
$TLS_btn_confirm_delete           = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_no_roles                     = &amp;quot;Нет ролей&amp;quot;;&lt;br /&gt;
$TLS_title_roles                  = &amp;quot;Доступные роли&amp;quot;;&lt;br /&gt;
$TLS_warning_users_will_be_reset  = &amp;quot;'Задетым пользователям' будет назначена гостевая роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/tcexport.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_export_with_keywords = &amp;quot;Экспортировать с ключевыми словами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/buildView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_alt_active_build     = &amp;quot;Активная сборка&amp;quot;;&lt;br /&gt;
$TLS_alt_edit_build       = &amp;quot;Редактировать эту сборку&amp;quot;;&lt;br /&gt;
$TLS_alt_open_build       = &amp;quot;Открыть сборку&amp;quot;;&lt;br /&gt;
$TLS_btn_build_create     = &amp;quot;Создать&amp;quot;;&lt;br /&gt;
$TLS_no_builds            = &amp;quot;В этот плане тестирования сборок не определено.&amp;quot;;&lt;br /&gt;
$TLS_th_description       = &amp;quot;Описание&amp;quot;;&lt;br /&gt;
$TLS_th_open              = &amp;quot;Открыть&amp;quot;;&lt;br /&gt;
$TLS_title_build_list     = &amp;quot;Список существующих сборок&amp;quot;;&lt;br /&gt;
$TLS_warning_delete_build = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Вы действительно хотите уничтожить эту сборку? &amp;lt;p&amp;gt;&lt;br /&gt;
Все связанные данные (в частности, результаты тестов) будут также удалены!&amp;quot;;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==gui/templates/planView.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_alt_delete_tp   = &amp;quot;Удалить этот план тестирования?&amp;quot;;&lt;br /&gt;
$TLS_testplan_alt_edit_tp     = &amp;quot;Править план тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_msg_delete_confirm = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Вы уверены, что хотите удалить план тестирования? &amp;lt;p&amp;gt;&lt;br /&gt;
План тестирования можно деактивировать не удаляя.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_testplan_th_delete     = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_testplan_title_list    = &amp;quot;Список планов тестирования&amp;quot;;&lt;br /&gt;
$TLS_testplan_txt_empty_list = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 Ни одного плана тестирования не определено! &amp;lt;p&amp;gt;&lt;br /&gt;
 Чтобы воспользоваться функциональностью прогонов тестов, нужно &lt;br /&gt;
 создать хотя бы один.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_alt_active_testplan = &amp;quot;Активный план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
==gui/templates/mainPage_left.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_href_assign_user_roles = &amp;quot;Назначить пользовательские роли&amp;quot;;&lt;br /&gt;
$TLS_href_browse_tc = &amp;quot;Просмотр тестов&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_href_cfields_tproject_assign = &amp;quot;Привязка пользовательских полей&amp;quot;;&lt;br /&gt;
$TLS_href_create_product = &amp;quot;Создать новый проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_product = &amp;quot;Править/Удалить проект&amp;quot;;&lt;br /&gt;
$TLS_href_edit_tc = &amp;quot;Редактировать тесты&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_assign = &amp;quot;Привязать ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_manage = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_href_keywords_view = &amp;quot;Просмотр ключевых слов&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc = &amp;quot;Печать тестов&amp;quot;;&lt;br /&gt;
$TLS_href_req_assign = &amp;quot;Привязать требования&amp;quot;;&lt;br /&gt;
$TLS_href_req_spec = &amp;quot;Спецификация требований&amp;quot;;&lt;br /&gt;
$TLS_href_roles_management = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_href_search_tc = &amp;quot;Искать тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_user_management = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_title_requirements = &amp;quot;Требования&amp;quot;;&lt;br /&gt;
$TLS_title_test_spec = &amp;quot;Спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_product_mgmt = &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==gui/templates/mainPage_right.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_filter_tp_by_product   = &amp;quot;Фильтровать план тестирования по проектам&amp;quot;;&lt;br /&gt;
$TLS_href_add_test_case     = &amp;quot;Добавить тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_build_new         = &amp;quot;Управление сборками&amp;quot;;&lt;br /&gt;
$TLS_href_execute_test      = &amp;quot;Выполнить тесты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_assign_priority = &amp;quot;Установить приоритеты&amp;quot;;&lt;br /&gt;
$TLS_href_plan_define_priority = &amp;quot;Определить правила приоритетов&amp;quot;;&lt;br /&gt;
$TLS_href_plan_management   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_plan_mstones      = &amp;quot;Управление вехами&amp;quot;;&lt;br /&gt;
$TLS_href_print_tc_suite    = &amp;quot;Печать плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_remove_test_case  = &amp;quot;Удалить Тест(ы)&amp;quot;;&lt;br /&gt;
$TLS_href_rep_and_metrics   = &amp;quot;Отчеты и метрики&amp;quot;;&lt;br /&gt;
$TLS_href_tc_exec_assignment = &amp;quot;Поручить прогон тестов&amp;quot;;&lt;br /&gt;
$TLS_href_upd_mod_tc        = &amp;quot;Сохранить измененные тесты&amp;quot;;&lt;br /&gt;
$TLS_msg_no_rights_for_tp   = &amp;quot;- недоступен (У вас нет доступа ни для одного плана тестирования)&amp;quot;;&lt;br /&gt;
$TLS_testplan_role          = &amp;quot;Роль плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_case_suite  = &amp;quot;Содержание плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_execution   = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_title_test_plan_mgmt   = &amp;quot;Управление планами тестирования&amp;quot;;&lt;br /&gt;
$TLS_href_newest_tcversions = &amp;quot;Показать тесты с самыми свежими версиями&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_add.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bug_added                = &amp;quot;Баг добавлен&amp;quot;;&lt;br /&gt;
$TLS_error_bug_does_not_exist_on_bts=&amp;quot;Бага с таким ID не зарегистрировано в BTS!&amp;quot;;&lt;br /&gt;
$TLS_error_wrong_BugID_format = &amp;quot;Неверный формат BugID!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/execute/bug_delete.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugdeleting_was_ok = &amp;quot;Баг успешно удален.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/doAuthorize.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_ldap_auth_failed = &amp;quot;LDAP-аутентификация не удалась&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_bind_failed = &amp;quot;Не удалось выполнить LDAP-binding&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_server_connect_failed = &amp;quot;Не удалось соединится с LDAP-сервером&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_update_failed = &amp;quot;Обновление LDAP не удалось&amp;quot;;&lt;br /&gt;
$TLS_error_ldap_user_not_found = &amp;quot;LDAP-пользователь не найден&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/product.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_info_product_delete_fails = &amp;quot;При удалении этого проекта произошла ошибка&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/results.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_trep_failing = &amp;quot;Провалены&amp;quot;;&lt;br /&gt;
$TLS_trep_passing = &amp;quot;Прошли&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_build = &amp;quot;Состояние для сборки&amp;quot;;&lt;br /&gt;
$TLS_trep_status_for_ts = &amp;quot;Состояние для группы тестов&amp;quot;;&lt;br /&gt;
$TLS_unassigned = &amp;quot;Не назначены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/resultsMoreBuilds.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_bugs                 = &amp;quot;Связанные Баги&amp;quot;;&lt;br /&gt;
$TLS_builds_selected      = &amp;quot;Сборка(и)&amp;quot;;&lt;br /&gt;
$TLS_case_not_run_warning = &amp;quot;Тест не запущен&amp;quot;;&lt;br /&gt;
$TLS_category_header      = &amp;quot;Группа тестов =&amp;quot;;&lt;br /&gt;
$TLS_daterun              = &amp;quot;Дата запуска&amp;quot;;&lt;br /&gt;
$TLS_last_status          = &amp;quot;Последнее состояние&amp;quot;;&lt;br /&gt;
$TLS_number_blocked       = &amp;quot;# блокированных&amp;quot;;&lt;br /&gt;
$TLS_number_cases         = &amp;quot;# тестов&amp;quot;;&lt;br /&gt;
$TLS_number_executions    = &amp;quot;# тест-пусков&amp;quot;;&lt;br /&gt;
$TLS_number_failed        = &amp;quot;# тест-сбоев&amp;quot;;&lt;br /&gt;
$TLS_number_not_run       = &amp;quot;# не запущено&amp;quot;;&lt;br /&gt;
$TLS_number_passed        = &amp;quot;# пройденных&amp;quot;;&lt;br /&gt;
$TLS_owner                = &amp;quot;Тестировщик&amp;quot;;&lt;br /&gt;
$TLS_owner_header         = &amp;quot;Tester =&amp;quot;;&lt;br /&gt;
$TLS_runby                = &amp;quot;Запущен тестировщиком &amp;quot;;&lt;br /&gt;
$TLS_test_plan_name       = &amp;quot;План тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/roles.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_desc_cfield_management = &amp;quot;Управление пользовательскими полями&amp;quot;;&lt;br /&gt;
$TLS_desc_cfield_view       = &amp;quot;Просмотр пользовательских полей (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_key    = &amp;quot;Управление ключевыми словами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_product= &amp;quot;Управление проектами&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_req    = &amp;quot;Управление требованиями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_tc     = &amp;quot;Создание/правка тестов&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_modify_users  = &amp;quot;Управление пользователями&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_key      = &amp;quot;Просмотр ключевых слов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_req      = &amp;quot;Просмотр требований (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_mgt_view_tc       = &amp;quot;Просмотр Тестов (read-only)&amp;quot;;&lt;br /&gt;
$TLS_desc_role_management   = &amp;quot;Управление ролями&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_create_build = &amp;quot;Создание/редактирование сборки&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_execute  = &amp;quot;Выполнение плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_metrics  = &amp;quot;Метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_testplan_planning = &amp;quot;Составление плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_desc_user_role_assignment = &amp;quot;Назначение ролей&amp;quot;;&lt;br /&gt;
$TLS_error_duplicate_rolename = &amp;quot;Роль с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rights     = &amp;quot;Вы не можете создать роль без каких-либо прав!&amp;quot;;&lt;br /&gt;
$TLS_error_role_no_rolename   = &amp;quot;Вам нужно ввести имя для этой роли.&amp;quot;;&lt;br /&gt;
$TLS_mgt_testplan_create      = &amp;quot;Создать/править план тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testproject.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_creating_req_spec    = &amp;quot;Ошибка при создании спецификации требования&amp;quot;;&lt;br /&gt;
$TLS_info_product_name_empty    = &amp;quot;Нельзя давать пустое имя.&amp;quot;;&lt;br /&gt;
$TLS_keyword_already_exists     = &amp;quot;Такое ключевое слово уже есть&amp;quot;;&lt;br /&gt;
$TLS_string_contains_bad_chars  = &amp;quot;Введенная строка содержит недопустимые символы.&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_req_title= &amp;quot;Требование с таким заголовком уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/requirements.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_conflict               = &amp;quot;Конфликт&amp;quot;;&lt;br /&gt;
$TLS_error_deleting_req     = &amp;quot;Ошибка при удалении требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_inserting_req    = &amp;quot;Ошибка при вставке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_req     = &amp;quot;Ошибка при правке требования(й).&amp;quot;;&lt;br /&gt;
$TLS_error_updating_reqspec = &amp;quot;Ошибка при правке спецификаций требований.&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_xml = &amp;quot;Файл не распознан как корректный XML, и не может быть использован.&amp;quot;;&lt;br /&gt;
$TLS_ok = &amp;quot;OK&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description1 = &amp;quot; - тип CSV требует три поля на каждую запись: 'req_doc_id','title','description'&amp;quot;;&lt;br /&gt;
$TLS_req_import_format_description2 = &amp;quot; - CSV, экспортированный из DOORS требует запись-заголовок.&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_overwritten  = &amp;quot;перезаписано!&amp;quot;;&lt;br /&gt;
$TLS_req_import_result_skipped      = &amp;quot;пропущено&amp;quot;;&lt;br /&gt;
$TLS_req_state_not_testable         = &amp;quot;не тестируемо&amp;quot;;&lt;br /&gt;
$TLS_req_state_valid                = &amp;quot;актуально&amp;quot;;&lt;br /&gt;
$TLS_the_format_req_xml_import      = &amp;quot;Неверный XML-формат для импорта требований&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_reqdoc_id    = &amp;quot;Не уникальный (дублирующий) id документа&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testsuite.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_component_name_already_exists = &amp;quot;Группа тестов с таким именем уже зарегистрирована&amp;quot;;&lt;br /&gt;
$TLS_testsuite = &amp;quot;Группа тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/exec.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_test_results_submitted = &amp;quot;Результаты тестов отправлены.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/print.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_author = &amp;quot;Автор&amp;quot;;&lt;br /&gt;
$TLS_printed_by_TestLink_on = &amp;quot;Распечатано TestLink'ом &amp;quot;;&lt;br /&gt;
$TLS_title_toc = &amp;quot;Содержание&amp;quot;;&lt;br /&gt;
$TLS_passfail = &amp;quot;Пройден / Провален&amp;quot;;&lt;br /&gt;
$TLS_testnotes = &amp;quot;Заметки к тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/testcase.class.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testcase_name_already_exists = &amp;quot;Тест с таким именем уже есть!&amp;quot;;&lt;br /&gt;
$TLS_the_format_tc_xml_import = &amp;quot;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/info.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_email_sent_message = &amp;quot;Ваше письмо отослано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/users.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Unknown = &amp;quot;Неизвестно&amp;quot;;&lt;br /&gt;
$TLS_duplicate_login = &amp;quot;Пользователь с таким логином уже есть!&amp;quot;;&lt;br /&gt;
$TLS_login_must_not_be_empty = &amp;quot;Логин не должен быть пустым!&amp;quot;;&lt;br /&gt;
$TLS_wrong_old_password = &amp;quot;Старый пароль неверен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/email_api.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_stmp_host_unconfigured = &amp;quot;Некорректно указан SMTP host!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/common.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/functions/configCheck.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_attachments_dir = &amp;quot;каталог для вложений:&amp;quot;;&lt;br /&gt;
$TLS_bts_connection_problems = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Не удалось соединиться с вашей Bug Tracking System.&amp;lt;p&amp;gt;&lt;br /&gt;
Пожалуйста, проверьте настройки.&amp;lt;p&amp;gt;&lt;br /&gt;
Будьте внимательны, эта проблема &lt;br /&gt;
снижает производительность TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$TLS_but_directory_is_not_writable = &amp;quot;Каталог закрыт для записи!&amp;quot;;&lt;br /&gt;
$TLS_directory_is_writable = &amp;quot;Каталог открыт для записи.&amp;quot;;&lt;br /&gt;
$TLS_does_not_exist = &amp;quot;не существует&amp;quot;;&lt;br /&gt;
$TLS_exists = &amp;quot;существует&amp;quot;;&lt;br /&gt;
$TLS_ldap_extension_not_loaded=&amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
Метод аутентификации указан как LDAP &amp;lt;/br&amp;gt;&lt;br /&gt;
однако PHP/LDAP extension не загружено =&amp;gt; &lt;br /&gt;
Вам не удастся войти в систему. &lt;br /&gt;
Пожалуйста, свяжитесь с администратором TestLink'а.&lt;br /&gt;
END;&lt;br /&gt;
$TLS_sec_note_admin_default_pwd = &amp;quot;Вам необходимо сменить пароль по умолчанию у пользователя 'admin'!&amp;quot;;&lt;br /&gt;
$TLS_sec_note_remove_install_dir = &amp;quot;Инсталляционный каталог должен быть удален!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/frmWorkArea.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_create_a_build = &amp;quot;Создать новую сборку&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part1 = &amp;quot;Ни одной сборки для этого тест плана не создано.&amp;quot;;&lt;br /&gt;
$TLS_no_build_warning_part2 = &amp;quot;Создайте их или попросите об этом свое руководство.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/myTPInfo.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testplans_available = &amp;quot;К сожалению, ни одного плана тестирования не доступно&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/general/tlsmarty.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywords.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_empty_keyword_no = &amp;quot;Ключевое слово должно быть непустым!&amp;quot;;&lt;br /&gt;
$TLS_keywords_char_not_allowed = &amp;quot;Запятые и кавычки недопустимы в ключевых словах!&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_tc_kw_update_fails2 = &amp;quot; дал сбой &amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_csv_import = &amp;quot;keyword;notes&amp;quot;;&lt;br /&gt;
$TLS_the_format_keyword_xml_import = &amp;quot;&amp;amp;lt;keywords&amp;gt;&amp;amp;lt;keyword name=\&amp;quot;name\&amp;quot;&amp;gt;Notes&amp;amp;lt;/keyword&amp;gt;&amp;amp;lt;/keywords&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_kw_delete_fails = &amp;quot;Не удалось удаление ключевого слова!&amp;quot;;&lt;br /&gt;
$TLS_kw_update_fails = &amp;quot;Не удалась правка ключевого слова!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/keywords/keywordsAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_assigned_kword  = &amp;quot;Связанные ключевые слова&amp;quot;;&lt;br /&gt;
$TLS_available_kword = &amp;quot;Доступные ключевые слова&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/buildNew.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cannot_add_build     = &amp;quot;Невозможно добавить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_delete_build  = &amp;quot;Невозможно удалить сборку!&amp;quot;;&lt;br /&gt;
$TLS_cannot_update_build  = &amp;quot;Ошибка при правке сборки!&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_build = &amp;quot;Сборка с таким идентификатором уже есть.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/plan.inc.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_warning_empty_milestone_name = &amp;quot;Обязательно введите имя для вехи!&amp;quot;;&lt;br /&gt;
$TLS_warning_enter_valid_date = &amp;quot;Введенная дата некорректна!&amp;quot;;&lt;br /&gt;
$TLS_warning_invalid_percentage_value = &amp;quot;Значения-проценты должны быть от 0 to 100 (%)&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_date = &amp;quot;Веха не может иметь дату раньше чем 'сегодня'!&amp;quot;;&lt;br /&gt;
$TLS_warning_percentage_value_higher_than_100 = &amp;quot;Сумма всех значений-процентов не должна быть больше 100!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planMilestones.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_milestone_delete_fails         = &amp;quot;Не удалось удалить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_add_failed   = &amp;quot;Не удалось добавить веху!&amp;quot;;&lt;br /&gt;
$TLS_warning_milestone_update_failed = &amp;quot;Не удалось править веху!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planOwner.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_imp_high     = &amp;quot;Высокая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_low      = &amp;quot;Низкая&amp;quot;;&lt;br /&gt;
$TLS_opt_imp_medium   = &amp;quot;Средняя&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_assign_tp    = &amp;quot;Поручить планы тестирования пользователю: &amp;quot;;&lt;br /&gt;
$TLS_title_assign_users = &amp;quot;Назначить пользователей на план тестирования: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planTestersNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_nav_test_plan = &amp;quot;Навигатор - Планы тестирования&amp;quot;;&lt;br /&gt;
$TLS_nav_users = &amp;quot;Навигатор - Пользователи&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planUpdateTC.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_category_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_component_has_changed = &amp;quot;Группа тестов изменена&amp;quot;;&lt;br /&gt;
$TLS_deleted = &amp;quot;удалена&amp;quot;;&lt;br /&gt;
$TLS_different_versions = &amp;quot;Различные версии&amp;quot;;&lt;br /&gt;
$TLS_plan_update_no_tc_updated = &amp;quot;Ни один тест не изменен&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_deleted2 = &amp;quot;был удален.&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated1 = &amp;quot;Тест&amp;quot;;&lt;br /&gt;
$TLS_planupdate_tc_updated2 = &amp;quot;был изменен.&amp;quot;;&lt;br /&gt;
$TLS_tcorder_has_changed = &amp;quot;Порядок тестов был изменен&amp;quot;;&lt;br /&gt;
$TLS_updated = &amp;quot;изменен&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_plan_navigator = &amp;quot;Навигация по планам тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/plan/testSetRemove.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_tcase_removed_from_tplan=&amp;quot;тест удален из плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_multiple_tcase_removed_from_tplan=&amp;quot;Тесты удалены из плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/plan/planEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_testplan_created_ok = &amp;quot;План тестирования был создан&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed1 = &amp;quot;Правка плана тестирования '&amp;quot;;&lt;br /&gt;
$TLS_update_tp_failed2 = &amp;quot;' не удалась&amp;quot;;&lt;br /&gt;
$TLS_warning_duplicate_tplan_name = &amp;quot;План тестирования с таким именем уже есть. Выберите другое имя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/print/selectData.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_opt_show_doc_header = &amp;quot;Показать заголовок документа&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_body = &amp;quot;Показать тело теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_summary = &amp;quot;Показать резюме теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_toc = &amp;quot;Показать Содержание&amp;quot;;&lt;br /&gt;
$TLS_opt_show_tc_author = &amp;quot;Показать автора теста&amp;quot;;&lt;br /&gt;
$TLS_opt_show_passfail = &amp;quot;Показать статус &amp;amp;laquo;пройден/провален&amp;amp;raquo; и заметки&amp;quot;;&lt;br /&gt;
$TLS_title_tc_print_navigator = &amp;quot;Навигация - Печать спецификации тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tp_print_navigator = &amp;quot;Навигация - Печать плана тестирования&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/project/projectedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_product_name_duplicate = &amp;quot;Уже есть проект с именем %s. &amp;lt;br&amp;gt;Пожалуйста, выберите другое имя&amp;quot;;&lt;br /&gt;
$TLS_info_no_more_prods = &amp;quot;проектов больше нет.&amp;quot;;&lt;br /&gt;
$TLS_info_product_activated = &amp;quot;проект активирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_inactivated = &amp;quot;проект деактивирован.&amp;quot;;&lt;br /&gt;
$TLS_info_product_not_deleted_check_log = &amp;quot;Не удалось удалить проект. Проверьте лог TestLink'а.&amp;quot;;&lt;br /&gt;
$TLS_info_product_was_deleted = &amp;quot;проект успешно удален.&amp;quot;;&lt;br /&gt;
$TLS_refer_to_log = &amp;quot; Пожалуйста, изучите лог TestLink'а для дополнительной информации.&amp;quot;;&lt;br /&gt;
$TLS_test_project_activated = &amp;quot;проект %s успешно активирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_created = &amp;quot;проект %s успешно создан&amp;quot;;&lt;br /&gt;
$TLS_test_project_deleted = &amp;quot;проект %s успешно удален&amp;quot;;&lt;br /&gt;
$TLS_test_project_inactivated = &amp;quot;проект %s успешно деактивирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_updated = &amp;quot;проект %s успешно отредактирован&amp;quot;;&lt;br /&gt;
$TLS_test_project_update_failed = &amp;quot;Правка проекта %s не удалась!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/charts.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_maani_copyright = &amp;quot;flash technology предоставлена http://www.maani.us&amp;quot;;&lt;br /&gt;
$TLS_graphical_reports = &amp;quot;Графические отчеты&amp;quot;;&lt;br /&gt;
$TLS_overall_metrics = &amp;quot;Общие метрики&amp;quot;;&lt;br /&gt;
$TLS_results_by_keyword = &amp;quot;Результаты по ключевому слову&amp;quot;;&lt;br /&gt;
$TLS_results_by_tester = &amp;quot;Рузультаты по тестировщику&amp;quot;;&lt;br /&gt;
$TLS_results_top_level_suites = &amp;quot;Результаты по топ группам тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_file_is_not_ok_for_import_type = &amp;quot;Кажется тип файла не совпадает с выбранным для импорта типом&amp;quot;;&lt;br /&gt;
$TLS_file_is_not_text = &amp;quot;Это не текстовый файл. Использовать нельзя.&amp;quot;;&lt;br /&gt;
$TLS_please_choose_req_file = &amp;quot;Пожалуйста, выберите файл для загрузки&amp;quot;;&lt;br /&gt;
$TLS_req_import_finished = &amp;quot;Импорт завершен!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqSpecView.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cant_create_tc_from_req_nothing_sel = &amp;quot;Пожалуйста, выберите требование!&amp;quot;;&lt;br /&gt;
$TLS_req_created = &amp;quot;Требование %s успешно создано.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/req/reqTcAssign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_req_msg_noselect = &amp;quot;Ничего не выбрано&amp;quot;;&lt;br /&gt;
$TLS_req_msg_notupdated_coverage = &amp;quot;Покрытие не обновлено для Требований: &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsBugs.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_test_report_all_builds = &amp;quot;Отчет: Результаты тестов для всех сборок&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsAllBuilds.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_title_metrics_x_build = &amp;quot; - Результаты тестов. Метрики X Сборки&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsByStatus.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_list_of_blocked = &amp;quot;Список блокированных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_failed = &amp;quot;Список проваленных тестов&amp;quot;;&lt;br /&gt;
$TLS_list_of_not_run = &amp;quot;Список незапущенных тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsTC.php==&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsNavigator.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_link_charts=&amp;quot;Диаграммы&amp;quot;;&lt;br /&gt;
$TLS_link_report_blocked_tcs = &amp;quot;Блокированные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_failed = &amp;quot;Проваленные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_general_tp_metrics = &amp;quot;Общие метрики плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_active_build = &amp;quot;Метрики активной сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_metrics_more_builds = &amp;quot;Запрос метрик&amp;quot;;&lt;br /&gt;
$TLS_link_report_not_run=&amp;quot;Не запущенные тесты&amp;quot;;&lt;br /&gt;
$TLS_link_report_overall_build = &amp;quot;Общий статус сборки&amp;quot;;&lt;br /&gt;
$TLS_link_report_reqs_coverage = &amp;quot;Отчет о выполнении требований&amp;quot;;&lt;br /&gt;
$TLS_link_report_test = &amp;quot;Отчет по тестам&amp;quot;;&lt;br /&gt;
$TLS_link_report_total_bugs = &amp;quot;Всего багов по каждому тесту&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/results/resultsSend.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_send_to_empty_email_warning = &amp;quot;Пожалуйста, введите правильный email.&amp;quot;;&lt;br /&gt;
$TLS_warning_create_build_first = &amp;quot;Сначала Вы должны создать или импортировать сборки.&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/results/displayMgr.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_sendreport_no_email_credentials = &amp;quot;Email для этого пользователя не указан, пожалуйста, укажите его в настройках своего профиля&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/archive.inc.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/listTestCases.php==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcImport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_please_choose_file_to_import = &amp;quot;Пожалуйста, выберите файл для импорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_import_to = &amp;quot;Импорт Тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_import_to = &amp;quot;Импорт группы тестов&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tcase_file = &amp;quot;Некорректный XML в файле с тестами&amp;quot;;&lt;br /&gt;
$TLS_wrong_xml_tsuite_file = &amp;quot;Некорректный XML в файле с группой тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcexport.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_testcases_to_export = &amp;quot;Нет тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_no_testsuites_to_export = &amp;quot;Нет группы тестов для экспорта&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export = &amp;quot;Экспорт теста&amp;quot;;&lt;br /&gt;
$TLS_title_tc_export_all = &amp;quot;Экспортировать все тесты&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
$TLS_title_tsuite_export_all = &amp;quot;Экспортировать все группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/containerEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_delete = &amp;quot;Удалить&amp;quot;;&lt;br /&gt;
$TLS_delete_notice = &amp;quot;Внимание: Все связанные результаты прогонов будут удалены&amp;quot;;&lt;br /&gt;
$TLS_warning_empty_com_name = &amp;quot;Пожалуйста, задайте имя для группы тестов&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/testcases/tcEdit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_current = &amp;quot;текущий&amp;quot;;&lt;br /&gt;
$TLS_delete_linked = &amp;quot;Ссылки на планы тестирования будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_delete_linked_and_exec = &amp;quot;Ссылки на планы тестирования и результаты выполнения будут удалены.&amp;quot;;&lt;br /&gt;
$TLS_error_tc_add = &amp;quot;При добавлении теста произошла ошибка&amp;quot;;&lt;br /&gt;
$TLS_title_del_tc = &amp;quot;Удалить тест &amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesview.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_deletion = &amp;quot;Не удалось удалить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersassign.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_no_test_projects = &amp;quot;Не заведено ни одного проекта&amp;quot;;&lt;br /&gt;
$TLS_no_test_plans = &amp;quot;Для этого проекта не заведено ни одного плана тестирования&amp;quot;;&lt;br /&gt;
$TLS_test_project_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
$TLS_test_plan_user_roles_updated = &amp;quot;Пользовательские роли обновлены&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/usersedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_user_created=&amp;quot;Пользователь %s был успешно создан&amp;quot;;&lt;br /&gt;
$TLS_user_deleted=&amp;quot;Пользователь %s был успешно удален&amp;quot;;&lt;br /&gt;
$TLS_user_not_added = &amp;quot;Не удалось добавить пользователя!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/usermanagement/rolesedit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_error_role_creation = &amp;quot;Не удалось создать роль!&amp;quot;;&lt;br /&gt;
$TLS_error_role_update = &amp;quot;Не удалось исправить роль!&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==lib/cfields/cfields_edit.php==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_cf_name_exists = &amp;quot;Пользовательское поле с таким именем уже существует. Пожалуста, выберите другое имя.&amp;quot;;&lt;br /&gt;
$TLS_error_creating_cf = &amp;quot;Не удалось создать пользовательское поле!&amp;quot;;&lt;br /&gt;
$TLS_do_update = &amp;quot;исправлено&amp;quot;;&lt;br /&gt;
$TLS_do_delete = &amp;quot;удалено&amp;quot;;&lt;br /&gt;
$TLS_do_add = &amp;quot;добавлено&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==resultsBugs.tpl==&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
$TLS_Open=&amp;quot;Открыто&amp;quot;;&lt;br /&gt;
$TLS_Resolved=&amp;quot;Исправленных&amp;quot;;&lt;br /&gt;
$TLS_Total=&amp;quot;Всего&amp;quot;;&lt;br /&gt;
$TLS_TCs_with_Bugs=&amp;quot;Тестов с багами&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9394</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9394"/>
				<updated>2007-08-29T10:05:55Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Отчеты по требованиям */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «выполнено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9388</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9388"/>
				<updated>2007-08-29T10:04:55Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Требования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты», после этого выбрать «Отчет о выполнении требований». На этой странице будет представлен анализ требований в текущей спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9386</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9386"/>
				<updated>2007-08-29T09:55:59Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Как включить функциональность требований */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из CSV-файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты». На этой странице будет представлен анализ требований в текущих спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9384</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9384"/>
				<updated>2007-08-29T09:51:33Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Связь с требованиями */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». Эта функциональность позволит в дальнейшем получать отчет о выполнении требований, на основе результатов выполненных тестов.&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство ролей пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из CSV-файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты». На этой странице будет представлен анализ требований в текущих спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9382</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9382"/>
				<updated>2007-08-29T09:50:22Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Всего багов по каждому тесту */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим».&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство ролей пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из CSV-файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты». На этой странице будет представлен анализ требований в текущих спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;br /&gt;
&lt;br /&gt;
== Отчет о выполнении требований ==&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9380</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9380"/>
				<updated>2007-08-29T09:49:16Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Связь с требованиями */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим».&lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство ролей пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из CSV-файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты». На этой странице будет представлен анализ требований в текущих спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9378</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9378"/>
				<updated>2007-08-29T09:48:21Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: данные&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, вводимые данные, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте включить функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». &lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство ролей пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из CSV-файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты». На этой странице будет представлен анализ требований в текущих спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=TestLink&amp;diff=9376</id>
		<title>TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=TestLink&amp;diff=9376"/>
				<updated>2007-08-29T09:46:36Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: роли&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:TestLink]]&lt;br /&gt;
&lt;br /&gt;
[[TestLink]] — это система управления тестами с веб-интерфейсом. &lt;br /&gt;
&lt;br /&gt;
Вот типичный пример использования системы:&lt;br /&gt;
&lt;br /&gt;
# Администратор создает ''проект'' «Фаст-фуд» и двух пользователей: Адама, с правами «Leader» и Еву с правами «Senior tester».&lt;br /&gt;
# Адам импортирует список ''требований'' к программному обеспечению, и для некоторых из этих требований создает пустые ''тесты.'' Вообще, более корректно говорить о ''тест-''кейсах (т.е. тестах со сценарием тестирования), но так как других тестов (автоматических, модульных, юнит-тестов) в системе нет, то далее мы будем называть тест-кейсы просто тестами.&lt;br /&gt;
# Тестировщица Ева пишет ''тестовые сценарии'' для этих тестов, и группирует тесты в ''группы тестов''.&lt;br /&gt;
# Адам создает ''ключевое слово'' «Регрессия» и привязывает его к десятку тестов.&lt;br /&gt;
# Адам создает ''план тестирования'' «Рыба и Чипсы», ''сборку'' «Рыба 0.1» и включает в этот план тесты с ключевым словом «Регрессия».&lt;br /&gt;
# Адам и Бела выполняют тесты и записывают результат: 5 ''пройдено'', 1 ''провален'', и 4 ''заблокировано'' (нет возможности выполнить требуемые проверки).&lt;br /&gt;
# Разработчики формируют новую сборку «Рыба 0.2» и Бела тестирует только проваленные и заблокированные тесты. На удивление, все эти пять тестов успешно выполняются.&lt;br /&gt;
# Руководитель команды желает взглянуть на результаты. Он самостоятельно заводит для себя пользователя, с гостевыми правами. Далее он смотрит отчеты по результатам: общую информацию, что все тесты пройдены, и конкретные проблемы сборки «Рыба 0.1». Но что-либо редактировать он не может.&lt;br /&gt;
&lt;br /&gt;
= Общая структура =&lt;br /&gt;
Три основных ключевых понятия: ''Проект'', ''План тестирования'' и ''Пользователь''. Все остальные данные представляют собой комбинации, отношения и атрибуты этих трех сущностей. Сначала, определим пару терминов, из профессионального лексикона тестировщиков, используемых в этой документации.&lt;br /&gt;
&lt;br /&gt;
== Основные понятия ==&lt;br /&gt;
;Тест (Test Case): представляет собой элементарную задачу по тестированию, сформулированную для человека, в виде сценария, состоящего из последовательности шагов, и ожидаемых результатов. Тест являются фундаментальной сущностью TestLink'а.&lt;br /&gt;
&lt;br /&gt;
;Группа тестов (Test Case Suite): группирует тест-кейсы в более крупные блоки, и используются для логической структуризации спецификации теста (''Test Specification'').&lt;br /&gt;
&lt;br /&gt;
;План тестирования (Test Plan): создан для исполнения тест-кейсов. План тестирования состоит из тест-кейсов одного или нескольких проектов. План тестирования включает в себя ''Сборки ''(''Builds''), ''Вехи ''(''Milestones''), назначения тестов тестировщикам, и результы выполнения тестов.&lt;br /&gt;
&lt;br /&gt;
;Проект (Test Project): включает в себя тестовую спецификацию (Test Specification) с тест-кейсами, ''Требования''(''Requirements''), ''Ключевые слова''(''Keywords''). Будучи создан, проект более не удаляется, хотя может быть деактивирован. Поддерживается версионность проекта. Пользователи внутри проекта получают определенную позицию-роль.&lt;br /&gt;
&lt;br /&gt;
;Пользователь (User): каждый пользователь имеет глобальную роль, и так же роль в каждом проекте, которая определяет доступные для него функции системы. Глобальная роль может быть унаследована в проекте.&lt;br /&gt;
&lt;br /&gt;
= Спецификация тестов =&lt;br /&gt;
Как уже говорилось, тесты могут быть структурированы с помощью групп тестов, которые могут включать элементарные тесты или другие группы тестов.&lt;br /&gt;
&lt;br /&gt;
== Создание тестов ==&lt;br /&gt;
Минимальная структура, необходимая тестировщику: это одна группа тестов состоящая из одного теста. Поэтому в каждом новом проекте нужно создать по крайней мере одну группу тестов (при её создании желательно заполнить описание). Далее можно создавать другие группы тестов и включать их друг в друга. Тесты можно создавать, копировать и перемещать из одной группы в другую.&lt;br /&gt;
&lt;br /&gt;
Основные атрибуты теста:&lt;br /&gt;
&lt;br /&gt;
;Заголовок (Title): очень краткое описание или аббревиатура, например «TL-USER-LOGIN».&lt;br /&gt;
;Резюме (Summary): максимально краткая, обзорная аннотация.&lt;br /&gt;
;Шаги (Steps): пошаговое описание тестового сценария (какие «входные» действия нужно предпринять тестировщику), включая условия их выполнения, а также действия, которые нужно выполнить по окончании (успешном или нет) теста.&lt;br /&gt;
;Ожидаемые результаты (Expected results): описывают контрольные точки для проверки, и ожидаемое поведение тестируемой системы.&lt;br /&gt;
&lt;br /&gt;
== Удаление тестов ==&lt;br /&gt;
Тесты и группы тестов могут быть удалены из планов тестирования пользователями с правами «lead». Однако удаление тестов приедет к удалению всех связанных результатов их выполнения, поэтому очень рекомендуется никогда этого не делать, разве что сразу после ошибочного создания теста.&lt;br /&gt;
&lt;br /&gt;
== Связь с требованиями ==&lt;br /&gt;
Если включить в проекте включить функциональность требований, то тесты могут быть связаны с зарегистрированными требованиями к ПО отношением «многие ко многим». &lt;br /&gt;
&lt;br /&gt;
= Ключевые слова =&lt;br /&gt;
== Использование ключевых слов ==&lt;br /&gt;
Ключевые слова дают пользователям дополнительное «измерение с иерархией» при классификации тестов. С помощью ключевых слов удобно организовывать специфические коллекции тестов, например можно определить наборы:&lt;br /&gt;
* Регрессионных тестов;&lt;br /&gt;
* Тестов контроля стерильности; &lt;br /&gt;
* Тестов, определенных для конкретной платформы и т. п.&lt;br /&gt;
&lt;br /&gt;
== Создание ключевых слов ==&lt;br /&gt;
Ключевые слова могут быть созданы пользователями с правами «mgt_modify_key», которыми по умолчанию владеют только имеющие роль «Leaders». Как только ключевое слово или группировка ключевых слов создана, их можно привязывать к тестам.&lt;br /&gt;
&lt;br /&gt;
== Привязка ключевых слов ==&lt;br /&gt;
Ключевые слова можно массово привязывать к тестам через страницу привязки ключевых слов (ссылка «Привязать ключевые слова» с главной страницы) или индивидуально для каждого теста при управлении тестами.&lt;br /&gt;
&lt;br /&gt;
== Фильтрация по ключевому слову ==&lt;br /&gt;
Пользователи имеют возможность фильтрации (отбора) по ключевым словам:&lt;br /&gt;
&lt;br /&gt;
* При поиске тестов в спецификации тестов.&lt;br /&gt;
* При группировке тестов в группы тестов и в планы тестирования.&lt;br /&gt;
* На странице выполнения тестов.&lt;br /&gt;
* Тестирование основанное на требованиях&lt;br /&gt;
&lt;br /&gt;
=Требования =&lt;br /&gt;
Чтобы доказать, что программная система сделана как задумано, тестировщики используют тестирование основанное на требованиях. Для каждого требования, они проектируют один или более тестов. После выполнения тестов, руководитель тестирования может сформировать отчет, о том, какие требования покрыты тестированием, какие требования успешно проверены и выполнение каких требований провалено. Основываясь на этой информации, заказчик и остальные заинтересованные ЛПР (лица принимающие решения) решают, может ли система быть выпущена в эксплуатацию, или нужны дополнительные доработки и тестирование. При принятии решения, учитывается важность требований и учет требованиями технологических рисков проекта. Такой подход дает следующие преимущества: &lt;br /&gt;
&lt;br /&gt;
* Связывание рисков и требований выявляет плохо сформулированные или отстутствующие требования.&lt;br /&gt;
* Тестирование может быть сфокусировано на наиболее важных частях информационной системы, «атакуя» самые опасные технологические риски.&lt;br /&gt;
* Работа и коммуникация идет «на едином языке» заказчика и других заинтересованных лиц. Например, заказчику будут понятны отчеты о ходе тестирования проекта, и будет легче принимать решение, инвестировать ли ресурсы в дополнительное тестирование, или риск уже приемлим и можно запускать систему в эксплуатацию.&lt;br /&gt;
&lt;br /&gt;
== Как включить функциональность требований ==&lt;br /&gt;
Регистрировать или не регистрировать требования решается индивидуально для каждого проекта. Т.е. администратор должен специально включить эту функциональность для каждого проекта, где она необходима (Ссылка «Управление проектами» на главной странице). &lt;br /&gt;
&lt;br /&gt;
Относительно требований есть два уровня пользовательских прав. Большинство ролей пользовательских ролей могут видеть требования, но не могут их редактировать, а избранные роли могут их также и править (См. Раздел о пользователях).&lt;br /&gt;
&lt;br /&gt;
== Спецификации требований ==&lt;br /&gt;
Требования группируются в один или более системных/программных/пользовательских спецификаций требований.&lt;br /&gt;
&lt;br /&gt;
Создание документа с требованиями:&lt;br /&gt;
&lt;br /&gt;
# Выберите «спецификации требований» на главной странице. Будет показан список спецификаций требований.&lt;br /&gt;
# Заполните «Заголовок», «Область действий», и при необходимости параметр «Всего треб.». Последний параметр используется исключительно для статистики, и нужен в том случае, если уже имеется набор требований, которые еще не введены в TestLink, но их количество хотелось бы указать. Неопределенное значение ('n/a') по умолчанию означает, что используется текущее количество требований в спецификации.&lt;br /&gt;
# Нажмите кнопку «Создать» для создания документа. Спецификация будет создана и вам будет предложено создать еще одну спецификацию — вы окажитесь на странице создания спецификации требований. &lt;br /&gt;
# Если вы ввели все желаемые спецификации, нажмите кнопку «Отменить», чтобы окончить ввод спецификаций.&lt;br /&gt;
&lt;br /&gt;
Каждая спецификация требований имеет свою собственную статистику и отчет. Содержимое спецификаций — соответствующий набор требований, может быть отформатирован для печати, с помощью кнопки «Печать» (логотипы, копирайты, предупреждение о конфиденциальности — всё это настраивает администратор через конфигурационные файлы). &lt;br /&gt;
&lt;br /&gt;
== Требования ==&lt;br /&gt;
Каждое требование имеет:&lt;br /&gt;
&lt;br /&gt;
;Заголовок: уникальный и максимум 100 символов;&lt;br /&gt;
;Описание: текст в HTML-формате;&lt;br /&gt;
;Состояние: Может быть «актуально» или «не тестируемо» (в этом случае требование не учитывается в отчетах и метриках).&lt;br /&gt;
&lt;br /&gt;
Требования можно создавать/править/удалять вручную, через интерфейс TestLink'а, или импортировать из CSV-файла.&lt;br /&gt;
&lt;br /&gt;
=== Импорт требований ===&lt;br /&gt;
[[TestLink]] поддерживает два типа CSV-файлов:&lt;br /&gt;
&lt;br /&gt;
;простой: имеет формат строки-записи («заголовок», «описание»). &lt;br /&gt;
;экспорт из Doors: пытается найти заголовок и выбрать правильные поля.&lt;br /&gt;
&lt;br /&gt;
При импорте заголовки проверяются на уникальность, а конфликты предлагается разрешить тремя способами: обновление существующих требований, создание требований-дубликатов с таким же заголовком и игнорирование (пропуск) требований-дубликатов при импорте.&lt;br /&gt;
&lt;br /&gt;
=== Связь требований с тест-кейсами ===&lt;br /&gt;
Между тест-кейсами и требованиями можно устанавливать «многие ко многим». Т.е вы можете не связывать тест-кейс или требование вообще, связывать тест-кейс с одним или более требованиями, и связывать требование с одним или более тест-кейсами. Чтобы попасть на страницу связывания тест-кейсов с требованиями, нажмите ссылку «привязать требования» на главной странице.&lt;br /&gt;
&lt;br /&gt;
Отчет о покрытии спецификации можно получить кнопкой «Анализировать» на странице спецификации требований.&lt;br /&gt;
&lt;br /&gt;
=== Отчеты по требованиям ===&lt;br /&gt;
Чтобы попасть на страницу отчетов и метрик, нужно использовать меню «Отчеты». На этой странице будет представлен анализ требований в текущих спецификации требований и плане тестирования. Т.е. для каждого требования обрабатываются последние результаты тестов в актуальном плане тестирования, и для каждого требования выбирается наиболее важный результат, а результаты по убыванию важности таковы: «сбой», «заблокирован», «не проверяли», «проверено».&lt;br /&gt;
&lt;br /&gt;
Пример: Некоторое требование покрыто тремя тестами. Два из них включены в текущую группу тестов. Один тест проверен и один не проверялся для «сборки 1». Соответственно это требование — «не проверялось». В «сборке 2» наконец проверили второй тест с успешным результатом, и отчет для этого требования стал «проверено».&lt;br /&gt;
&lt;br /&gt;
= Проекты =&lt;br /&gt;
Как уже говорилось, проект — это ключевая сущность TestLink'а. Проекты — это те продукты и решения, которые выпускает ваша компания. Причем проекты желательно определить так, чтобы несмотря на эволюцию функциональности (и других свойств), основной массив свойств должен сохранять постоянство. Т.е. неправильно заводить слишком «широкие» проекты, такие как «Вся работа компании», или даже «веб-разработка». Проекты включают документированные требования, спецификации тестов, планы тестирования и ключевые слова.&lt;br /&gt;
&lt;br /&gt;
== Создание новых проектов ==&lt;br /&gt;
Для создания нового проекта требуются уровень прав «admin». Каждый проект должен иметь уникальное имя. Также, если соответствующая функциональность включена в конфигурационном файле, каждому проекту можно присвоить свой собственный цвет фона, чтобы надежно визуально отличать их друг от друга. Например, с помощью такой цветовой градации можно отличать важные проекты от некритичных.&lt;br /&gt;
&lt;br /&gt;
Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* Удаление проекта из системы не рекомендуется, т. к. это приведет либо к большому числу «тестов-сирот», либо к удалению тестов из системы. &lt;br /&gt;
* Каждый план тестирования, является совокупностью тестов и представляет тестирование в проекте в разные моменты времени.&lt;br /&gt;
* TestLink поддерживает импорт CSV-данных в проект (будет рассмотрено далее, в разделе про импорт данных). &lt;br /&gt;
&lt;br /&gt;
== Правка и удаление проектов ==&lt;br /&gt;
Для редактирования и удаления проекта требуются уровень прав «admin». Можно изменить имя проекта, цвет фона (если такая функциональность включена) и доступность функциональности требований. Если проект устарел, его можно ''деактивировать — ''при этом он для всех кроме администратора, пропадет из верхнего навигационного списка выбора (администратор будет видеть такие проекты помеченными астериском '*').&lt;br /&gt;
&lt;br /&gt;
Можно также удалить проект, с удалением всех связанных данных из БД. Но это действие необратимо и мы настоятельно рекомендуем использовать деактивацию вместо удаления.&lt;br /&gt;
&lt;br /&gt;
= Планы тестирования =&lt;br /&gt;
План тестирования имеет имя, описание, набор выбранных тестов, сборки, результаты тестирования, вехи, назначения тестировщикам и определения приоритетов.&lt;br /&gt;
&lt;br /&gt;
Разумно в описании плана, включать информацию о структуре команды тестировщиков, о видах тестирования, риски, что тестируется, что находится вне тестирования, подходы используемые при тестировании, и т. д. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Создание и удаление планов тестирования ==&lt;br /&gt;
Планы тестирования могут создать пользователи с уровнем привилегий «lead», на странице «Управление планами тестирования» (См. соответствующую ссылку на главной странице). &lt;br /&gt;
&lt;br /&gt;
Планы тестирования являются основой для выполнения/прогона тестов. Они состоят из некоторого «среза»-подмножества тестов проекта, выбранных в определенное время. Планы тестирования можно создавать добавляя каждый тест вручную, или копировать-клонировать существующий план тестирования, а далее уже вносить инкрементальные изменения. &lt;br /&gt;
&lt;br /&gt;
Права на просмотр планов тестирования выдаются пользователем с правами «lead» на странице «Управление пользователями/Назначить роли проекта». Важно об этом помнить, т. к. это главная причина жалоб тестировщиков, что они «не видят» тестов в проекте.&lt;br /&gt;
&lt;br /&gt;
Хотя планы тестирования может удалить пользователь с уровнем привилегий «lead», то так же как и в случае проектов, мы настоятельно не рекомендуем это делать, т. к. необратимо будут уничтожена вся информация о результатах тестирования. Вместо этого, можно деактивировать план тестирования и он также будет скрыт из интерфейса.&lt;br /&gt;
&lt;br /&gt;
== Сборки ==&lt;br /&gt;
Сборка это определенный выпуск программного обеспечения. Каждый проект в компании наверняка имеет множество релизов/выпусков/сборок. В TestLink'е, прогон (выполнение) тестов учитывается отдельно для каждой сборки, в частности, если ни одной сборки нет, выполнять тесты в проекте будет невозможно, и соответственно, будет пустой страница метрик. &lt;br /&gt;
&lt;br /&gt;
Управление сборками осуществляется на одноименной странице «Управление сборками», пользователями с правами «lead».&lt;br /&gt;
&lt;br /&gt;
Редактировать сборки нельзя, их можно только удалить, кликнув по иконке-&amp;quot;корзине&amp;quot; в таблице-списке зарегистрированных сборок.&lt;br /&gt;
&lt;br /&gt;
== Заполнение планов тестирования ==&lt;br /&gt;
=== Добавление новых тестов ===&lt;br /&gt;
При добавлении тестов определяют ''шаги тестирования'' и ''ожидаемые результаты''. &lt;br /&gt;
&lt;br /&gt;
Данные из нескольких проектов, могут быть добавлены в один план тестирования. Спецификации тестов могут быть отфильтрованы по ключевым словам (настраивается в навигационной панели). Как только тесты попадают в план тестирования, они определенным образом помечаются. Таким образом, если тест уже импортировался, то при следующем импорте он будет проигнорирован.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Удаление тестов из плана тестирования ===&lt;br /&gt;
Тесты и группы тестов могут быть убраны из плана тестирования только пользователями с полномочиями «Leader», на странице «Удалить тест(ы)». Но не рекомендуется, кроме как в крайних случаях, удалять тесты из плана тестирования, особенно, если тесты выполнялись, т. к. будет потеряна информация о результатах прогона этих тестов. поэтому &lt;br /&gt;
&lt;br /&gt;
=== Приоритеты ===&lt;br /&gt;
Пользователи с правами «Leader» могут для каждого теста назначить ответственного и приоритет, нумеруемый от «A» (наибольший) до «C» (наименьший). Вообще риски и важность задаются на уровне групп тестов. Риски имеют уровни «Низкий», «Высокий», «Средний», а уровни важность нумеруются цифрами «3» (наименьшая важность), «2», «1» (наибольшая важность). А далее, по рискам и важности определяются приоритеты, причем пользователи могут задать, по каким правилам их рассчитывать, т. е. какие комбинации риска и важности (например, «L1», «L2», «L3», «M1», «H2», «M3», «H1», «H2», «H3»), к какому приоритету («A», «B», «C») относятся. Если риски и важность не указывать специально, то по умолчанию используется приоритет «B».&lt;br /&gt;
&lt;br /&gt;
== Назначение тестов для прогона ==&lt;br /&gt;
Назначение тестов для прогона (выполнения) влияет и на само выполнение и на страницу отчетов. На странице прогона тестов пользователи имеют возможность упорядочить выполняемые тесты по ответственному за исполнение. На главной странице отчетов есть таблица, которая показывает сколько тестов выполнено, и осталось прогнать каждому тестировщику. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Прогон тестов = &lt;br /&gt;
== Общая информация ==&lt;br /&gt;
Прогон (выполнение) тестов становится возможным, когда:&lt;br /&gt;
&lt;br /&gt;
# Сформирована спецификация тестов.&lt;br /&gt;
# Создан план тестирования.&lt;br /&gt;
# Тесты добавлены в план тестирования.&lt;br /&gt;
# Создана сборка.&lt;br /&gt;
# План тестирования назначен тестировщикам (в противном случае, у них не будет даже доступа к этому плану тестирования).&lt;br /&gt;
&lt;br /&gt;
Выберите требуемый план тестирования на главной странице и перейдите по ссылке «выполнить тесты». Левая панель служит для навигации по группам тестов и их отбора, а также для определения тестируемой сборки. &lt;br /&gt;
&lt;br /&gt;
== Навигация ==&lt;br /&gt;
Навигационная панель состоит из блока «Параметры выборки» и иерархического дерева с группами тестов. &lt;br /&gt;
&lt;br /&gt;
=== Параметры выборки ===&lt;br /&gt;
Эта таблица позволяет пользователю отбирать тесты для удобства навигации по меньшему множеству перед их выполнением:&lt;br /&gt;
&lt;br /&gt;
;Ответственный: Можно отборать тесты по ответственному за них тестировщику. &lt;br /&gt;
;Ключевое слово: Пользователь может отбирать тесты по ключевому слову. &lt;br /&gt;
;Результат: Пользователи могут отбирать тесты по их результатам выполнения в конкретной сборке. Результаты могут быть «Блокирован», «Не запущен», «Сбой», «Пройден».&lt;br /&gt;
;Сборка: Можно отбирать тесты по сборкам. Сборки задают собой дискретность выполнения тестов, ведь каждый тест может быть запущен только один раз для каждой сборки, а сами сборки могут создавать только пользователи с правами «lead».&lt;br /&gt;
&lt;br /&gt;
=== Иерархия групп тестов ===&lt;br /&gt;
Иерархическое меню в навигационной панели состоит из иерархии групп тестов, раскрашенных в соответствии с результатами выполнения.&lt;br /&gt;
&lt;br /&gt;
Раскраска дерева: По умолчанию дерево сортируется по результатам выполнения для выбранной в пользователем сборки.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списке (не проверив, что она является самой свежей). Соответственно, все тесты будут показаны в состоянии, которое они получили для сборки «2». Например, если тест «1» был успешно пройден в сборке «2», он будет раскрашен в зеленый цвет.&lt;br /&gt;
&lt;br /&gt;
* Пользователь выбрал сборку «2» в выпадающем списк, но при этом выбрал отметку «текущая сборка». Соответственно, для всех тестов будет показано наиболее актуально состояние. &lt;br /&gt;
&lt;br /&gt;
== Прогон ==&lt;br /&gt;
=== Состояние теста ===&lt;br /&gt;
Прогон теста (выполнение) — это процесс присвоения результата («Блокирован», «Не запущен», «Сбой», «Пройден») для некоторых выбранных теста и сборки. Названия состояний-результатов, в общем, достаточно говорящие, разве что поясним, что «Блокирован» означает невозможность по любой причине пройти этот тест (например, тестируемый объект не доступен или не развернут на требуемой платформе и т. п.).&lt;br /&gt;
&lt;br /&gt;
=== Ввод результатов тестов ===&lt;br /&gt;
Страница результатов тестирования показывается справа при выборе в навигационной панели некоторого теста или группы тестов. Сначала показан заголовок теста, затем желтый блок с сценарием тестирования и цветной блок с результатом теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Настраиваемые поля = &lt;br /&gt;
Реализация настраиваемых (дополнительных, расширенных, и т. п.) полей, основана на моделях реализации настраиваемых полей в проектах «Mantis» (http://www.mantisbt.org/) и «Dotproject» (http://www.dotproject.net/).&lt;br /&gt;
&lt;br /&gt;
Каждое настраиваемое поле может быть привязано к объектам одного из следующих типов: тест, группа тестов, план тестирования.&lt;br /&gt;
Настраиваемые поля определяются для всей системы (а не для отдельного проекта). Поэтому вы не можете определить несколько настраиваемых полей с одинаковым именем. После определения дополнительного поля, можно привязать его к одному или более проектам, где предполагается его использование.&lt;br /&gt;
&lt;br /&gt;
{{note}} Число настраиваемых полей неограничено.&lt;br /&gt;
&lt;br /&gt;
Атрибуты поля: «Показывать при спецификации теста», «Показывать при выполнении теста» (смысл понятен из названий) и «Разрешить при спецификации теста», «Разрешить при выполнении теста» — можно менять значения в этом поле при спецификации или выполнении.&lt;br /&gt;
&lt;br /&gt;
Например, поле «Дополнительные заметки» нужно редактировать только при спецификации теста, и нельзя менять в процессе выполнения (хотя можно и показать), а поле «Проверено на операционной системе» нужно задавать только при выполнении теста, а на этапе спецификации теста совершенно бесполезно.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим остальные атрибуты настраиваемых полей:&lt;br /&gt;
;Имя: Должно быть уникально для в рамках TestLink-системы. &lt;br /&gt;
;Метка: Текстовое название поля, которое показывается в интерфейсе показа и редактирования поля.&lt;br /&gt;
;Тип поля: Перечисление: &lt;br /&gt;
:* string;&lt;br /&gt;
:* numeric;&lt;br /&gt;
:* float;&lt;br /&gt;
:* email;&lt;br /&gt;
:* checkbox;&lt;br /&gt;
:* list;&lt;br /&gt;
:* multiselection list;&lt;br /&gt;
:* date;&lt;br /&gt;
:* text area.&lt;br /&gt;
;Возможные значения: Атрибут показывается (и имеет смысл) для списков, и представляет собой перечисление возможных значений (например, «красный|желтый|зеленый»), т. е. различные значения разделяются символом '|'. Допустимым значением в перечислении может быть и пустая строка.&lt;br /&gt;
;Доступно для: Выбор, к какому типу объектов должно быть привязано поле: тест, группа тестов или план тестирования.&lt;br /&gt;
&lt;br /&gt;
= Отчеты и метрики = &lt;br /&gt;
На страницу отчетов можно перейти по очевидной ссылке «Отчеты». Показываться имеющиеся отчеты и метрики будут для текущего плана тестирования (в данный момент нет отчетов, которые агрегируют информацию из нескольких планов тестирования), поэтому нужно выбрать нужный план тестирования еще до перехода на страницу отчетов.&lt;br /&gt;
&lt;br /&gt;
Левая панель страницы предназначена для выбора типа отчета и его параметров, а на правой находится либо инструкция по формированию отчетов, либо сформированных отчет.&lt;br /&gt;
&lt;br /&gt;
Параметры отчетов следующие:&lt;br /&gt;
&lt;br /&gt;
;Активная сборка: Этот параметр действует только на отчет «Общий статус сборки», показывающий текущее состояние плана тестирования для выбранной сборки.&lt;br /&gt;
&lt;br /&gt;
Формат отчета: все отчеты (кроме диаграмм) могут быть сформированы:&lt;br /&gt;
&lt;br /&gt;
;normal: обычный отчет на веб-страничке.&lt;br /&gt;
;MS Excel: экспорт отчета в «Microsoft Excel».&lt;br /&gt;
;HTML Email: отчет отправляется HTML-письмом на email-пользователя.&lt;br /&gt;
&lt;br /&gt;
Далее, мы рассмотрим десяток доступных отчетов более подробно.&lt;br /&gt;
&lt;br /&gt;
== Общие метрики плана тестирования ==&lt;br /&gt;
Показывает наиболее актуальное состояние (в смысле последней выполненной сборки) плана тестирования в срезах по группам тестов, тестировщикам и ключевым словам. &lt;br /&gt;
&lt;br /&gt;
Вообще понятие «последнего результата теста» используется в нескольких отчетах и определяется следующим образом:&lt;br /&gt;
&lt;br /&gt;
# Какая сборка считается последней определяется порядком добавления сборок в план тестирования. Соответственно результаты последней сборки имеют преимущество над результатами тестов остальных сборок.&lt;br /&gt;
# Если тест выполняется несколько раз в одной сборке, то учитывается только последний прогон. Например если в сборке «3» с утра тестировщик Адам пометил тест как «пройден», а вечером тестировщик Ева пометила этот же тест как «провален», то тест будет показываться как проваленный.&lt;br /&gt;
# Тесты в состоянии «не запущен» для какой-либо сборки просто не принимаются во внимание. Например, если тест был помечен «пройден» для сборки «1», и не выполнялся для сборки «2», то он будет считаться успешно выполненным.&lt;br /&gt;
&lt;br /&gt;
== Общий статус сборки ==&lt;br /&gt;
Показывает результаты выполнения для каждой сборки: «Всего тестов», сколько пройдено, провалено, блокировано и не запущено в абсолютной величине и процентах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Запрос метрик ==&lt;br /&gt;
Этот отчет содержит поисково-запросную форму после заполнения параметров в которой, можно получить отчет по заданным срезам.&lt;br /&gt;
&lt;br /&gt;
=== Страница параметров запроса ===&lt;br /&gt;
&lt;br /&gt;
Можно задать следующие параметры, задающие условие-ограничение на выборку. Полное условие будет «логическое И» над всеми выбранными условиями, если некоторый параметр не задан/не выбран — то он не влияет на выборку, и выбираются тесты, вне зависимости от его значения.&lt;br /&gt;
&lt;br /&gt;
;Ключевое слово: можно выбрать только одно ключевое слово и или не выбрать ни одного.&lt;br /&gt;
&lt;br /&gt;
;Владелец: можно выбрать одного владельца-ответственного или не выбрать ни одного. В данный момент нет функциональности поиска по «неназначенным» тестам. &lt;br /&gt;
&lt;br /&gt;
;Группа тестов: можно выбрать любое количество групп (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Сборки: можно выбрать любое количество сборок (от нуля). &lt;br /&gt;
&lt;br /&gt;
;Последний результат: выбирается состояние последнего результата по тесту (можно выбрать любое число состояний от нуля). &lt;br /&gt;
&lt;br /&gt;
Нажмите кнопку «Выполнить запрос», для получения результата.&lt;br /&gt;
&lt;br /&gt;
На странице-отчете показаны:&lt;br /&gt;
&lt;br /&gt;
# Параметры запроса, если был выбран параметр «Показать параметры запроса».&lt;br /&gt;
# Сводная (агрегированная) информация по состояниям выбранных в отчет тестов, если был выбран параметр «Показать итоги по группе тестов».&lt;br /&gt;
# Детальная информация по выполнению каждого теста.&lt;br /&gt;
&lt;br /&gt;
== Отчеты «Тесты Проваленные/Блокированные/Не запущенные» ==&lt;br /&gt;
Выводятся соответствующие списки тестов, для проваленных — с информацией о последнем запуске, и (опционально) с информацией о зарегистрированных багах.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Отчет по тестам ==&lt;br /&gt;
Показывает результаты всех тестов для всех сборок. Отчет, как правило получается большим, поэтому рекомендуем выгружать его в Excel, для последующего анализа.&lt;br /&gt;
&lt;br /&gt;
== Диаграммы ==&lt;br /&gt;
Для просмотра диаграмм (технология предоставлена [http://www.maani.us/ http://www.maani.us]) требуется поддержка Flash в броузере. Анимированной графикой показываются следующие диаграммы:&lt;br /&gt;
&lt;br /&gt;
# Круговая диаграмма по всем тестам в разбивке по последнему состоянию выполнения.&lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по ключевым словам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по владельцам. &lt;br /&gt;
# Столбиковая диаграмма результатов в разбивке по топовым группам тестов. &lt;br /&gt;
&lt;br /&gt;
== Всего багов по каждому тесту ==&lt;br /&gt;
Если [[TestLink]] интегрирован с системой баг-контроля (системой управления ошибками), то появляется этот отчет, показывающий сводную информацию о зарегистрированных багах:&lt;br /&gt;
&lt;br /&gt;
«Открыто», «Исправленных», «Всего», «Тестов с багами», плюс детальная информация о каждом тесте с зарегистрированными багами, с ссылками на эти баги в системе управления ошибками.&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_TestLink&amp;diff=9414</id>
		<title>Русификация TestLink</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%A0%D1%83%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F_TestLink&amp;diff=9414"/>
				<updated>2007-08-29T08:43:44Z</updated>
		
		<summary type="html">&lt;p&gt;Andrew: /* Bug */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Регламент=&lt;br /&gt;
Предлагаются следующие правила обсуждения на вики-движке.&lt;br /&gt;
Замечание вставлять непосредственно в дискутируемое место, сделав абзац с большим количеством отступов с помощью двоеточий в начале абзаца. Также разумно представиться, для чего удобно вставить в текст &amp;lt;nowiki&amp;gt;~~~~&amp;lt;/nowiki&amp;gt;, что при записи будет преобразовано в ссылку на участника обсуждения. &lt;br /&gt;
&lt;br /&gt;
Представляться правильно '''в начале''' замечания, а не в конце, так как подпись визуально выделяется цветом и служит, таким образом, отправным пунктом при просмотре статьи. Ответы на замечания от других участников правильно оформлять аналогично. &lt;br /&gt;
&lt;br /&gt;
Еще можно использовать [[Help:Советы#Пиктограммы|пиктограммы]] для выделения замечаний, реплик и обсуждения из основного текста.&lt;br /&gt;
&lt;br /&gt;
Примеры.&lt;br /&gt;
&lt;br /&gt;
Мать грозит ему в окно.&lt;br /&gt;
:{{question}}[[Участник:StasFomin|Стас Фомин]] 20:48, 22 Aug 2007 (MSD): А кто грозит ему в окно?&lt;br /&gt;
::{{ok}}[[Участник:StasFomin|Стас Фомин]] 20:48, 22 Aug 2007 (MSD): Отец наверно, кто же еще.&lt;br /&gt;
:::{{no}}[[Участник:StasFomin|Стас Фомин]] 20:48, 22 Aug 2007 (MSD): Нет, несогласен. Наверно мать грозит в окно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если Вы видите орфографическую ошибку или хотите сделать стилистическое улучшение, то просто сделайте это.&lt;br /&gt;
&lt;br /&gt;
=Вопросы терминологии=&lt;br /&gt;
== Test Case ==&lt;br /&gt;
{{important}} Победил вариант «тест». &lt;br /&gt;
&lt;br /&gt;
Варианты:&lt;br /&gt;
=== Тест ===&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]] 20:51, 22 Aug 2007 (MSD): Выглядит проще, чем Тест-кейс, и т. к. никаких других тестов — автоматических, юнит-тестов, и т. п. в системе нет&lt;br /&gt;
:[[Участник:Ivanchenko|Ivanchenko]] 16:50, 23 Aug 2007 (MSD): Мне показалось, что ТЕСТ — оптимальный перевод на русский для test case, короче и удобнее, особенно в интерфейсе, как синоним я еще использовал «тестовый пример».&lt;br /&gt;
{{ok}}:[[Участник:Andrew|Andrew]] 11:26, 24 Aug 2007 (MSD) Мне казалось что тест кейс это принятый в России перевод термина, но я видимо ошибся. Провел небольшое исследование, оно показало , что широкого применения он не имеет, кроме видимо форума [http://it4business.ru/forum/ it4business.ru]. В результате остается тест.&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]] 18:02, 23 Aug 2007 (MSD): Лично я за «тест». Коротко и не вижу никаких поводов для путаницы (никаких других тестов, которые не тест-кейсы).&lt;br /&gt;
&lt;br /&gt;
=== Тест-кейс ===&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]] 20:51, 22 Aug 2007 (MSD): Утверждается, что это словосочетание уже [http://www.yandex.ru/yandsearch?text=%22%F2%E5%F1%F2+%EA%E5%E9%F1%22 прижилось] в РуНете.&lt;br /&gt;
:[[Участник:Ivanchenko|Ivanchenko]] 16:50, 23 Aug 2007 (MSD): я против тест-кейса ничего не имею, мы у себя его тоже употребляем, но мне кажется, что добавка «-кейс» не несет большой смысловой нагрузки для русского уха. А вот в литературе еще встречается термин «тест-прецедент» :-)&lt;br /&gt;
&lt;br /&gt;
== Test Suite ==&lt;br /&gt;
{{important}} Лидирующие варианты — «группа тестов» или «набор тестов». &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Группа тестов ===&lt;br /&gt;
{{ok}}[[Участник:StasFomin|Стас Фомин]] 20:51, 22 Aug 2007 (MSD): Выглядит разумно.&lt;br /&gt;
:{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 00:11, 24 Aug 2007 (MSD): авторы всяких книг чаcто используют test suite и как просто набор тестов и как план тестирования, авторы тестлинка — тоже, поэтому надо переводить из контекста, думаю «набор тестов» как синоним тоже иногда допустим.&lt;br /&gt;
:{{no}} [[Участник:Andrew|Andrew]] 11:09, 29 Aug 2007 (MSD) я бы использовал один вариант &amp;quot;Группа тестов&amp;quot; или &amp;quot;Набор тестов&amp;quot; чтоб не путаться (и не путать других) в синонимах. Термин &amp;quot;Набор тестов&amp;quot; мне кажется более удачным.&lt;br /&gt;
&lt;br /&gt;
=== Тест-сюита ===&lt;br /&gt;
{{question}}[[Участник:StasFomin|Стас Фомин]] 20:51, 22 Aug 2007 (MSD):Выглядит несколько дико, однако в оригинальной русскоязычной литературе именно так и говорят «исполнять сюиты тестов». Например: «Профессиональное программирование. Системный подход», стр.165. В Рунете тоже [http://www.yandex.ru/yandsearch?text=%F1%FE%E8%F2%FB+%F2%E5%F1%F2%EE%E2 ссылаются].&lt;br /&gt;
:{{no}}[[Участник:Ivanchenko|Ivanchenko]] 22:52, 23 Aug 2007 (MSD): тест-сьют еще говорят, а сюита — слишком музыкальное слово)))), но мне, например, режет слух. На литературу не всегда стоит ориентироваться, там такое иногда встретишь, типа «тест-прецедента», или use case, как только его не переводили… )))&lt;br /&gt;
:{{no}}[[Участник:Andrew|Andrew]] 11:07, 29 Aug 2007 (MSD) термин какой-то неудачный, нигде не встречал.&lt;br /&gt;
&lt;br /&gt;
=== Набор тестов ===&lt;br /&gt;
{{question}} [[Участник:Andrew|Andrew]] 11:32, 24 Aug 2007 (MSD) если верить Лингво, то test suite — «тестовый набор, тестовый комплект» в контексте перевода термина ''test case'' как тест, мне кажется лучше перевести как Набор тестов. Термин Группа тестов, тоже возможен, но мне кажется менее удачен. Так же товарищ [[Участник:Ivanchenko|Ivanchenko]] сам упомянул такой перевод выше.&lt;br /&gt;
:{{question}}[[Участник:StasFomin|Стас Фомин]] 19:34, 24 Aug 2007 (MSD): Я подумал, мне кажется, что «группа» более удачно чем «набор», т. к. здесь идет «группировка» и тестов и «групп». Как-то иерархическое представление test-suit легче представить по слову «группа», чем по слову набор.&lt;br /&gt;
::{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 11:26, 28 Aug 2007 (MSD): Согласен, там где надо подчеркнуть упорядоченность тестов лучше использовать &amp;quot;группа&amp;quot; (&amp;quot;подгруппа&amp;quot;). Предлагаю использовать его как основной термин, как синоним -- &amp;quot;набор&amp;quot;. Нужно еще помнить, что авторы тестлинка в некоторых местах (с ходу не помню где) использовали test-suite в смысле &amp;quot;Плана тестирования&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Test Plan ==&lt;br /&gt;
{{important}} Предлагается везде (документация, сообщения) использовать вариант «план тестирования», а в местах где нехватает места (надо только понять — где?) — использовать просто «план» или «тест-план». &lt;br /&gt;
=== План тестирования ===&lt;br /&gt;
{{ok}}[[Участник:StasFomin|Стас Фомин]] 20:57, 22 Aug 2007 (MSD):Выглядит по-русски.&lt;br /&gt;
:{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 22:53, 23 Aug 2007 (MSD): ок!&lt;br /&gt;
:{{ok}}[[Участник:Andrew|Andrew]] 12:01, 24 Aug 2007 (MSD) Да это по-русски. Как сокрашение использовать «План».&lt;br /&gt;
&lt;br /&gt;
=== Тест-план ===&lt;br /&gt;
{{no}}[[Участник:StasFomin|Стас Фомин]] 20:57, 22 Aug 2007 (MSD): Как-то неоправданно использовать достаточно корявую кальку, когда есть хорошо звучащий «План тестирования»&lt;br /&gt;
:{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 00:15, 24 Aug 2007 (MSD): думаю, для обыденной речи пригодное слово, не хуже тест-кейса )), «План тестирования» — это точно по-русски, но длинновато для пунктов меню. В тестлинке, там где места не хватает, мне кажется, можно использовать просто «план», разночтений не будет…&lt;br /&gt;
&lt;br /&gt;
== Test Project ==&lt;br /&gt;
=== Продукт ===&lt;br /&gt;
{{no}}[[Участник:StasFomin|Стас Фомин]] 20:58, 22 Aug 2007 (MSD): Видимо обусловлено переводом 1.6. версии. Теперь наверно лучше проект?&lt;br /&gt;
:{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 00:43, 24 Aug 2007 (MSD): Я намеренно не стал менять &amp;quot;Продукт&amp;quot; на &amp;quot;Проект&amp;quot;, см. ниже&lt;br /&gt;
:{{ok}} [[Участник:Andrew|Andrew]] 11:41, 24 Aug 2007 (MSD) Здесь вопрос филосовский, если тестируется коробочное решение, то скорее &amp;quot;Продукт&amp;quot;, если что-то уникальное, то это &amp;quot;Проект&amp;quot;. Выбрать первое или второе не могу.&lt;br /&gt;
&lt;br /&gt;
=== Проект ===&lt;br /&gt;
{{ok}}[[Участник:StasFomin|Стас Фомин]] 20:58, 22 Aug 2007 (MSD): Теперь наверно лучше проект.&lt;br /&gt;
:{{no}}[[Участник:Ivanchenko|Ivanchenko]] 00:43, 24 Aug 2007 (MSD): C изменением Product на Project был не согласен, но это я тихо ропщу на авторов тестлинка. Смотрю с точки зрения русского языка. Ведь не говорят «я тестирую проект». Проект в широком смысле это такой большой процесс, а в узком — некий промежуточный результат этого процесса — документация (эскизный проект, технический проект). Продукт — это как раз результат всего процесса. Поэтому логично, что тестируется именно продукт, а не проект, тем более часто бывает что в одном проекте несколько продуктов и скорее всего тесты для них будут разнесены в разные теперь уже Project.&lt;br /&gt;
::{{question}}:[[Участник:StasFomin|Стас Фомин]] 19:33, 27 Aug 2007 (MSD): Хм. наверно это специфика бизнеса. У нас вообще только заказные системы, коробок нет, продуктов нет — у нас только проекты ( и мы действительно «тестируем проект»). Т.е. проект более широкое понятие, и да, нам проект гораздо ближе продукта. Может  смириться с проектом? К тому же это не будет путать пользователей, когда они будут натыкаться на Project в URLах, в английской документации (если полезут в форумы), и может в каких-то концах, которые мы упустим при переводе.&lt;br /&gt;
:::{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 11:32, 28 Aug 2007 (MSD): Ок, согласен с &amp;quot;проект&amp;quot;.&lt;br /&gt;
:{{ok}} [[Участник:Andrew|Andrew]] 11:41, 24 Aug 2007 (MSD) Здесь вопрос филосовский, если тестируется коробочное решение, то скорее «Продукт», если что-то уникальное, то это «Проект». Выбрать первое или второе не могу.&lt;br /&gt;
&lt;br /&gt;
== Scope ==&lt;br /&gt;
{{important}} Победил вариант «Описание». &lt;br /&gt;
=== Обзор ===&lt;br /&gt;
&lt;br /&gt;
{{question}} [[Участник:StasFomin|Стас Фомин]]: Может рассмотреть варианты: «Аннотация», «описание», «область действий»… ?&lt;br /&gt;
:{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 22:42, 23 Aug 2007 (MSD): А где у нас там scope? если в требованиях, то лучше &amp;quot;Описание&amp;quot;... а как правило лучше &amp;quot;Аннотация&amp;quot;, а &amp;quot;Обзор&amp;quot; согласен -- не очень.&lt;br /&gt;
:::[[Участник:StasFomin|Стас Фомин]] 19:43, 24 Aug 2007 (MSD): В требованиях было (см. ниже вырезки из ваших strings). Т.е. вы не настаиваете?&lt;br /&gt;
&amp;lt;code-php&amp;gt;&lt;br /&gt;
// gui/templates/reqCreate.tpl&lt;br /&gt;
//ORIG: $TLS_scope = &amp;quot;Scope&amp;quot;; строка 249&lt;br /&gt;
$TLS_scope = &amp;quot;Обзор&amp;quot;;&lt;br /&gt;
//ORIG: $TLS_req_import_dont_empty = &amp;quot;Do not import items with empty Scope&amp;quot;; строка 436&lt;br /&gt;
$TLS_req_import_dont_empty = &amp;quot;Требования не могут быть импортированы с пустым полем Обзор (Scope)&amp;quot;;&lt;br /&gt;
//ORIG: $TLS_cat_scope = &amp;quot;Scope and Objective&amp;quot;; строка 513&lt;br /&gt;
$TLS_cat_scope = &amp;quot;Обзор и задачи&amp;quot;;&lt;br /&gt;
//ORIG: $TLS_comp_scope = &amp;quot;Scope&amp;quot;; строка 616&lt;br /&gt;
$TLS_comp_scope = &amp;quot;Обзор&amp;quot;;&lt;br /&gt;
&amp;lt;/code-php&amp;gt;&lt;br /&gt;
:::{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 13:26, 28 Aug 2007 (MSD): Не настаиваю.&lt;br /&gt;
&lt;br /&gt;
===Описание===&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 11:55, 24 Aug 2007 (MSD) Логично, что требование имеет описание.&lt;br /&gt;
&lt;br /&gt;
==Test Specification==&lt;br /&gt;
&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]] 16:41, 28 Aug 2007 (MSD): Пока не знаю, что лучше.&lt;br /&gt;
[[Участник:Andrew|Andrew]] 11:24, 29 Aug 2007 (MSD) Я вот тоже не знаю что тут выбрать&lt;br /&gt;
===Спецификация тестов===&lt;br /&gt;
===Описание тестов===&lt;br /&gt;
===Перечень (всех) тестов===&lt;br /&gt;
[[Участник:Andrew|Andrew]] 11:24, 29 Aug 2007 (MSD) предлагается такой вариант. Слово &amp;quot;всех&amp;quot; в середине опционально. Если кому-то покажется, что без него не ясно, что имеется ввиду, то добавить.&lt;br /&gt;
&lt;br /&gt;
== Test Execution ==&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]] 13:24, 28 Aug 2007 (MSD): Пока лидирует «прогон тестов». (но «выполнение плана тестирования»).&lt;br /&gt;
&lt;br /&gt;
=== Прогон тестов ===&lt;br /&gt;
{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 12:57, 28 Aug 2007 (MSD): «Прогон» — точный и очень конкретный термин. Посмотрел 4 переводные книжки по тестированию:&lt;br /&gt;
МакГрегор. Тестирование ОО ПО., &lt;br /&gt;
Калбертсон… Быстрое тестирование, &lt;br /&gt;
Канер… Тестирование ПО, &lt;br /&gt;
Тамре. Введение в тестирование ПО. &lt;br /&gt;
В двух первых употребляется «прогон».&lt;br /&gt;
:{{question}}[[Участник:StasFomin|Стас Фомин]] 14:26, 28 Aug 2007 (MSD): А во вторых двух книжках?&lt;br /&gt;
{{no}} [[Участник:Andrew|Andrew]] 11:46, 29 Aug 2007 (MSD) Не удачный термин. Здесь я бы доверял больше Канеру и Тамре хоть и в переводе. Хотя на [http://it4business.ru/forum/ it4business.ru/forum/] термин «прогон тестов» встречается часто, но это видимо жаргон.&lt;br /&gt;
&lt;br /&gt;
=== Выполнение тестов ===&lt;br /&gt;
{{ok}}[[Участник:StasFomin|Стас Фомин]] 20:49, 27 Aug 2007 (MSD): Меня как-то колет грубость термина «прогон». Хотя возможно? он используется в русскоязычном тестировании (убедите меня, плиз, если это так). Вообще:&lt;br /&gt;
:* [http://www.yandex.ru/yandsearch?text=%22%EF%F0%EE%E3%EE%ED+%F2%E5%F1%F2%EE%E2%22&amp;amp;rpt=rad Yandex:&amp;quot;прогон тестов&amp;quot;]: Результат поиска: страниц — 473, сайтов — не менее 168&lt;br /&gt;
:* [http://www.yandex.ru/yandsearch?text=%22%E2%FB%EF%EE%EB%ED%E5%ED%E8%E5+%F2%E5%F1%F2%EE%E2%22&amp;amp;rpt=rad Yandex:&amp;quot;выполнение тестов&amp;quot;]: Результат поиска: страниц — 7 223, сайтов — не менее 1 372&lt;br /&gt;
::{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 13:15, 28 Aug 2007 (MSD): Колет потому что термин узкий и точный (:-). Сравнение по частоте употребления некорректно, т. к. «выполнение тестов» — используется много где, например, в сфере образования… Я не против «выполнения», пусть будет синонимом, особенно в хелпах и мануале. Мне кажется, что для интерфейса «выполнение» лучше относить к плану («выполнение плана», но «прогон тестов»).&lt;br /&gt;
:::{{question}}[[Участник:StasFomin|Стас Фомин]] 13:50, 28 Aug 2007 (MSD): Хорошо, а можно говорить «тестировщик прогоняет тесты» и т.п?&lt;br /&gt;
::::{{ok}} [[Участник:Andrew|Andrew]] 11:46, 29 Aug 2007 (MSD) Видимо правильно говорить «тестировщик исполняет тесты(тест кейсы)». Если так хочется чтобы было «выполнение плана», то можно использовать термин «исполнение тестов», хотя и «выполнение тестов» подходит&lt;br /&gt;
&lt;br /&gt;
=== Исполнение тестов ===&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 11:46, 29 Aug 2007 (MSD) Это как выполнение только термин «выполнение» оставим для плана тестирования.&lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
=== Сборка ===&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 11:58, 29 Aug 2007 (MSD) сборка более частое событие, а версия это нечто близкое к релизу. Тестирование же происходит и до релиза, так что термин «сборка» подходит лучше.&lt;br /&gt;
=== Версия ===&lt;br /&gt;
{{ok}}[[Участник:Ivanchenko|Ivanchenko]] 13:17, 28 Aug 2007 (MSD): Думаю можно остановиться на версии.&lt;br /&gt;
:{{no}} [[Участник:Andrew|Andrew]] 11:58, 29 Aug 2007 (MSD) Версия это релиз, а тестировать надо до релиза на промежуточных сборках. Вот так я думаю.&lt;br /&gt;
&lt;br /&gt;
== Custom Fields ==&lt;br /&gt;
{{question}}:[[Участник:StasFomin|Стас Фомин]] 22:07, 27 Aug 2007 (MSD): Даже не знаю что выбрать. Я переводил «Пользовательские поля», но в принципе, остальные варианты не хуже. Не знаю.&lt;br /&gt;
&lt;br /&gt;
[[Участник:StasFomin|Стас Фомин]] 15:54, 28 Aug 2007 (MSD): Смотрел [http://www.yandex.ru/yandsearch?text=%22custom+fields%22+%EF%EE%EB%FF яндексом], переводят по разному. Вообще, после зрелого размышления (медитации), склоняюсь к «настраиваемым» полям (и разумней, и упоминаний больше).&lt;br /&gt;
&lt;br /&gt;
Варианты: «Пользовательские поля», «Произвольные поля», «Дополнительные поля», «Настраиваемые поля», «Расширенные поля».&lt;br /&gt;
&lt;br /&gt;
== Role&amp;amp;Permission ==&lt;br /&gt;
{{question}} [[Участник:Ivanchenko|Ivanchenko]] 01:01, 24 Aug 2007 (MSD): Над переводом Role больше всего голову ломал, — очень не нравилась ни «роль», ни «должность», ни «служебные обязанности» )). «Уровень доступа» — как мне кажется дает наиболее адекватное понимание этого термина в среде тестлинка. К тому же в русском Мантисе используется этот же термин для аналогичной функциональности.&lt;br /&gt;
=== Роль ===&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 11:58, 24 Aug 2007 (MSD) Такой перевод мне кажется самым простым и правильным. Для версии 1.6.х еще можно применять перевод «Уровень доступа». Но в 1.7 система прав гораздо более гибкая и там «Уровень доступа» выглядит странно. Как альтернативу могу предложить «Права».&lt;br /&gt;
:{{question}}[[Участник:Ivanchenko|Ivanchenko]] 14:00, 28 Aug 2007 (MSD): Мне не нравилась не сама «Роль», а то как ее потом надо употреблять. «Assign user roles» — присвоить роли, назначить роли, назначить на роли, установить роли, дать роли; или «Assign test plan roles» — назначить роли для плана тестирования? Как-то все это не очень по-русски звучит. «Права доступа» — вполне пригодный термин.&lt;br /&gt;
:: [[Участник:Andrew|Andrew]] 12:08, 29 Aug 2007 (MSD) Да действительно не очень получается. А что если вместо «Права доступа» просто «Права».&lt;br /&gt;
&lt;br /&gt;
=== Права ===&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 12:08, 29 Aug 2007 (MSD) Тогда получиться &lt;br /&gt;
* «Assign user roles» — «Установить права пользователей»&lt;br /&gt;
* «Assign test plan roles» — «Установить права в плане тестирования»&lt;br /&gt;
&lt;br /&gt;
== Tester ==&lt;br /&gt;
&lt;br /&gt;
=== Тестер ===&lt;br /&gt;
{{no}}[[Участник:StasFomin|Стас Фомин]] 15:37, 28 Aug 2007 (MSD): Много раз наблюдал в рунете, что такая прямая калька с английского вызывала оскобительные коннотации («тестер» — это такой девайс, а человек — это «тестировщик», а еще лучше — «инженер по качеству»). &lt;br /&gt;
{{no}} [[Участник:Andrew|Andrew]] 12:15, 29 Aug 2007 (MSD) Хотя я встречал в книга Тамре «Основы тестирования ПО» термин «тестер», он мне совсем не нравиться.&lt;br /&gt;
&lt;br /&gt;
=== Тестировщик ===&lt;br /&gt;
{{ok}}[[Участник:StasFomin|Стас Фомин]] 15:37, 28 Aug 2007 (MSD): Предлагаю «тестировщика» (не «тестера»).&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 12:15, 29 Aug 2007 (MSD) Да это правильный перевод, а то тестер, программер, дальше пойдет манагер и прочие мифические существа.&lt;br /&gt;
&lt;br /&gt;
==Bug==&lt;br /&gt;
=== Дефект ===&lt;br /&gt;
{{no}} [[Участник:Andrew|Andrew]] 12:43, 29 Aug 2007 (MSD) Мне кажется «Дефект» это то что исправляют разработчики, а то что находят тестировщики это «Баг» - несоответствие программы спецификации.&lt;br /&gt;
&lt;br /&gt;
=== Баг ===&lt;br /&gt;
{{ok}} [[Участник:Andrew|Andrew]] 12:43, 29 Aug 2007 (MSD) Видимо «баг» правильно. Хоть это наверное жаргон. Но и в английском не самое древнее слово.&lt;br /&gt;
&lt;br /&gt;
=См. также=&lt;br /&gt;
; [[TestLink]]: Русская документация по системе. Основана на переводе сырой (под SVN) документации к версии 1.7. Просьба ко всем в теме рецензировать и править.&lt;br /&gt;
; [[strings.txt (TestLink-RU)]]: Статья с основной локализацией интерфейса. Статья разбита по разделам, в соответствии с разделами в оригинальном файле &amp;lt;tt&amp;gt;strings.txt&amp;lt;/tt&amp;gt;. По ссылке «скачать» можно получить готовый PHP-файл, который нужно разместить в каталоге &lt;br /&gt;
  testlink\locale\ru_RU\strings.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Файлы из каталога &lt;br /&gt;
  testlink\gui\help\ru_RU\&lt;br /&gt;
&lt;br /&gt;
* [[assignReqs.html (TestLink-RU)]]&lt;br /&gt;
* [[browseResults.html (TestLink-RU)]]&lt;br /&gt;
* [[bug_add.html (TestLink-RU)]]&lt;br /&gt;
* [[content.html (TestLink-RU)]]&lt;br /&gt;
* [[custom_fields.html (TestLink-RU)]]&lt;br /&gt;
* [[editTc.html (TestLink-RU)]]&lt;br /&gt;
* [[execFilter.html (TestLink-RU)]]&lt;br /&gt;
* [[execMain.html (TestLink-RU)]]&lt;br /&gt;
* [[executeTest.html (TestLink-RU)]]&lt;br /&gt;
* [[glosary.html (TestLink-RU)]]&lt;br /&gt;
* [[keywordsAssign.html (TestLink-RU)]]&lt;br /&gt;
* [[metrics.html (TestLink-RU)]]&lt;br /&gt;
* [[newest_tcversions.html (TestLink-RU)]]&lt;br /&gt;
* [[planAddTC.html (TestLink-RU)]]&lt;br /&gt;
* [[planAssignTesters.html (TestLink-RU)]]&lt;br /&gt;
* [[planOwnerAndPriority.html (TestLink-RU)]]&lt;br /&gt;
* [[planTesters.html (TestLink-RU)]]&lt;br /&gt;
* [[printFilter.html (TestLink-RU)]]&lt;br /&gt;
* [[printTc.html (TestLink-RU)]]&lt;br /&gt;
* [[printTestSet.html (TestLink-RU)]]&lt;br /&gt;
* [[priority.html (TestLink-RU)]]&lt;br /&gt;
* [[product.html (TestLink-RU)]]&lt;br /&gt;
* [[requirementsCoverage.html (TestLink-RU)]]&lt;br /&gt;
* [[searchTc.html (TestLink-RU)]]&lt;br /&gt;
* [[shortcuts.html (TestLink-RU)]]&lt;br /&gt;
* [[showMetrics.html (TestLink-RU)]]&lt;br /&gt;
* [[tcEdit.html (TestLink-RU)]]&lt;br /&gt;
* [[tcPrint.html (TestLink-RU)]]&lt;br /&gt;
* [[tcSearch.html (TestLink-RU)]]&lt;br /&gt;
* [[tc_exec_assignment.html (TestLink-RU)]]&lt;br /&gt;
* [[testPlan.html (TestLink-RU)]]&lt;br /&gt;
* [[testSetAdd.html (TestLink-RU)]]&lt;br /&gt;
* [[testSetRemove.html (TestLink-RU)]]&lt;br /&gt;
* [[testproject.html (TestLink-RU)]]&lt;br /&gt;
* [[userRights.html (TestLink-RU)]]&lt;br /&gt;
&lt;br /&gt;
[[Category:TestLink]]&lt;/div&gt;</summary>
		<author><name>Andrew</name></author>	</entry>

	</feed>