diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..007020e241febdf2f501551f6e7b2b9a96223bac
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java/">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java/">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/.gitignore b/.gitignore
index f78622ce4db553b85bc1139478a3fd49e6298c49..fd3c34a602ea5e87284591e1f3c18ed7fa563b64 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,4 +19,7 @@
 *.rar
 
 # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
\ No newline at end of file
+hs_err_pid*
+
+/bin/
+/target/
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1c6c11f1ceb24b74b652cef7f143106e7abffda6
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,63 @@
+image: maven:3.5.0-jdk-8-alpine
+
+variables:
+  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
+  JACOCO_AGENT:   "target/coverage/jacoco.exec"
+
+stages:
+  - build
+  - test
+  - qa
+
+cache:
+  paths:
+    - .m2/repository
+    - target/
+
+build_job:
+  stage: build
+  script:
+    - mvn --batch-mode compile -Dmaven.test.skip=true -Djacoco.skip=true
+
+test_unit:
+ stage: test
+ script:
+   - mvn test -P Unit
+
+test_isolation:
+ stage: test
+ script:
+   - mvn test -P Isolation
+ except:
+   - master
+
+test_integration:
+ stage: test
+ script:
+   - mvn test -P Integration
+ only:
+   - master
+
+sonar_publish_job:
+  stage: qa
+  before_script:
+    - mvn -Djacoco.destFile=$JACOCO_AGENT clean org.jacoco:jacoco-maven-plugin:0.7.8:prepare-agent install
+    - mvn -X -Djacoco.dataFile=$JACOCO_AGENT -Djacoco.outputDirectory=./jacoco_ut org.jacoco:jacoco-maven-plugin:report
+  script:
+    - mvn --batch-mode verify jxr:jxr pmd:pmd sonar:sonar -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_USER_TOKEN -Dsonar.analysis.mode=publish -Dsonar.issuesReport.console.enable=true -Dsonar.jacoco.reportPath=$JACOCO_AGENT -Dsonar.junit.reportPaths=target/surefire-reports
+  coverage: /Total.*?([0-9]{1,3})%/
+  only:
+    - develop
+    - master
+
+sonar_preview_job:
+  stage: qa
+  before_script:
+    - mvn -Djacoco.destFile=$JACOCO_AGENT clean org.jacoco:jacoco-maven-plugin:0.7.8:prepare-agent install
+    - mvn -X -Djacoco.dataFile=$JACOCO_AGENT -Djacoco.outputDirectory=./jacoco_ut org.jacoco:jacoco-maven-plugin:report
+  script:
+    - mvn --batch-mode verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.0.1:sonar -Dsonar.host.url=$SONAR_URL -Dsonar.login=$SONAR_USER_TOKEN -Dsonar.analysis.mode=preview -Dsonar.gitlab.project_id=$CI_PROJECT_PATH -Dsonar.gitlab.commit_sha=$CI_BUILD_REF -Dsonar.gitlab.ref_name=$CI_BUILD_REF_NAME -Dsonar.gitlab.user_token=$GITLAB_USER_TOKEN -Dsonar.gitlab.url="https://gitlab.inf.uva.es" -Dsonar.issuesReport.console.enable=true -Dsonar.gitlab.only_issue_from_commit_line=true -Dsonar.gitlab.comment_no_issue=true -Dsonar.gitlab.disable_global_comment=true
+  coverage: /Total.*?([0-9]{1,3})%/
+  except:
+    - develop
+    - master
diff --git a/.m2/settings.xml b/.m2/settings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de53b57defd8b174cb177bc957ee8f478bd7f985
--- /dev/null
+++ b/.m2/settings.xml
@@ -0,0 +1,280 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<!--
+ | This is the configuration file for Maven. It can be specified at two levels:
+ |
+ |  1. User Level. This settings.xml file provides configuration for a single
+ |                 user, and is normally provided in
+ |                 ${user.home}/.m2/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -s /path/to/user/settings.xml
+ |
+ |  2. Global Level. This settings.xml file provides configuration for all
+ |                 Maven users on a machine (assuming they're all using the
+ |                 same Maven installation). It's normally provided in
+ |                 ${maven.home}/conf/settings.xml.
+ |
+ |                 NOTE: This location can be overridden with the CLI option:
+ |
+ |                 -gs /path/to/global/settings.xml
+ |
+ | The sections in this sample file are intended to give you a running start
+ | at getting the most out of your Maven installation. Where appropriate, the
+ | default values (values used when the setting is not specified) are provided.
+ |
+ |-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+
+  <!-- localRepository
+   | The path to the local repository maven will use to store artifacts.
+   |
+   | Default: ~/.m2/repository
+  <localRepository>/path/to/local/repo</localRepository>
+  -->
+
+  <!-- interactiveMode
+   | This will determine whether maven prompts you when it needs input. If set
+   | to false, maven will use a sensible default value, perhaps based on some
+   | other setting, for the parameter in question.
+   |
+   | Default: true
+  <interactiveMode>true</interactiveMode>
+  -->
+
+  <!-- offline
+   | Determines whether maven should attempt to connect to the network when
+   | executing a build. This will have an effect on artifact downloads,
+   | artifact deployment, and others.
+   |
+   | Default: false
+  <offline>false</offline>
+  -->
+
+  <!-- pluginGroups
+   | This is a list of additional group identifiers that will be searched when
+   | resolving plugins by their prefix, i.e. when invoking a command line like
+   | "mvn prefix:goal". Maven will automatically add the group identifiers
+   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not
+   | already contained in the list.
+   |-->
+  <pluginGroups>
+    <!-- pluginGroup
+     | Specifies a further group identifier to use for plugin lookup.
+    <pluginGroup>com.your.plugins</pluginGroup>
+    -->
+  </pluginGroups>
+
+  <!-- proxies
+   | This is a list of proxies which can be used on this machine to connect to
+   | the network. Unless otherwise specified (by system property or command-
+   | line switch), the first proxy specification in this list marked as active
+   | will be used.
+   |-->
+  <proxies>
+    <!-- proxy
+     | Specification for one proxy, to be used in connecting to the network.
+     |
+    <proxy>
+      <id>optional</id>
+      <active>true</active>
+      <protocol>http</protocol>
+      <username>proxyuser</username>
+      <password>proxypass</password>
+      <host>proxy.host.net</host>
+      <port>80</port>
+      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
+    </proxy>
+    -->
+  </proxies>
+
+  <!-- servers
+   | This is a list of authentication profiles, keyed by the server-id used
+   | within the system. Authentication profiles can be used whenever maven must
+   | make a connection to a remote server.
+   |-->
+  <servers>
+    <!-- server
+     | Specifies the authentication information to use when connecting to a
+     | particular server, identified by a unique name within the system
+     | (referred to by the 'id' attribute below).
+     |
+     | NOTE: You should either specify username/password OR
+     |       privateKey/passphrase, since these pairings are used together.
+     |
+    <server>
+      <id>deploymentRepo</id>
+      <username>repouser</username>
+      <password>repopwd</password>
+    </server>
+    -->
+
+    <!-- Another sample, using keys to authenticate.
+    <server>
+      <id>siteServer</id>
+      <privateKey>/path/to/private/key</privateKey>
+      <passphrase>optional; leave empty if not used.</passphrase>
+    </server>
+    -->
+  </servers>
+
+  <!-- mirrors
+   | This is a list of mirrors to be used in downloading artifacts from remote
+   | repositories.
+   |
+   | It works like this: a POM may declare a repository to use in resolving
+   | certain artifacts. However, this repository may have problems with heavy
+   | traffic at times, so people have mirrored it to several places.
+   |
+   | That repository definition will have a unique id, so we can create a
+   | mirror reference for that repository, to be used as an alternate download
+   | site. The mirror site will be the preferred server for that repository.
+   |-->
+  <mirrors>
+    <!-- mirror
+     | Specifies a repository mirror site to use instead of a given repository.
+     | The repository that this mirror serves has an ID that matches the
+     | mirrorOf element of this mirror. IDs are used for inheritance and direct
+     | lookup purposes, and must be unique across the set of mirrors.
+     |
+    <mirror>
+      <id>mirrorId</id>
+      <mirrorOf>repositoryId</mirrorOf>
+      <name>Human Readable Name for this Mirror.</name>
+      <url>http://my.repository.com/repo/path</url>
+    </mirror>
+     -->
+  </mirrors>
+
+  <!-- profiles
+   | This is a list of profiles which can be activated in a variety of ways,
+   | and which can modify the build process. Profiles provided in the
+   | settings.xml are intended to provide local machine-specific paths and
+   | repository locations which allow the build to work in the local
+   | environment.
+   |
+   | For example, if you have an integration testing plugin - like cactus -
+   | that needs to know where your Tomcat instance is installed, you can
+   | provide a variable here such that the variable is dereferenced during the
+   | build process to configure the cactus plugin.
+   |
+   | As noted above, profiles can be activated in a variety of ways. One
+   | way - the activeProfiles section of this document (settings.xml) - will be
+   | discussed later. Another way essentially relies on the detection of a
+   | system property, either matching a particular value for the property, or
+   | merely testing its existence. Profiles can also be activated by JDK
+   | version prefix, where a value of '1.4' might activate a profile when the
+   | build is executed on a JDK version of '1.4.2_07'. Finally, the list of
+   | active profiles can be specified directly from the command line.
+   |
+   | NOTE: For profiles defined in the settings.xml, you are restricted to
+   |       specifying only artifact repositories, plugin repositories, and
+   |       free-form properties to be used as configuration variables for
+   |       plugins in the POM.
+   |
+   |-->
+
+  <profiles>
+    <!-- profile
+     | Specifies a set of introductions to the build process, to be activated
+     | using one or more of the mechanisms described above. For inheritance
+     | purposes, and to activate profiles via <activatedProfiles/> or the
+     | command line, profiles have to have an ID that is unique.
+     |
+     | An encouraged best practice for profile identification is to use a
+     | consistent naming convention for profiles, such as 'env-dev',
+     | 'env-test', 'env-production', 'user-jdcasey', 'user-brett', etc. This
+     | will make it more intuitive to understand what the set of introduced
+     | profiles is attempting to accomplish, particularly when you only have a
+     | list of profile id's for debug.
+     |
+     | This profile example uses the JDK version to trigger activation, and
+     | provides a JDK-specific repo.
+    <profile>
+      <id>jdk-1.4</id>
+
+      <activation>
+        <jdk>1.4</jdk>
+      </activation>
+
+      <repositories>
+        <repository>
+          <id>jdk14</id>
+          <name>Repository for JDK 1.4 builds</name>
+          <url>http://www.myhost.com/maven/jdk14</url>
+          <layout>default</layout>
+          <snapshotPolicy>always</snapshotPolicy>
+        </repository>
+      </repositories>
+    </profile>
+    -->
+
+    <!--
+     | Here is another profile, activated by the system property 'target-env'
+     | with a value of 'dev', which provides a specific path to the Tomcat
+     | instance. To use this, your plugin configuration might hypothetically
+     | look like:
+     |
+     | ...
+     | <plugin>
+     |   <groupId>org.myco.myplugins</groupId>
+     |   <artifactId>myplugin</artifactId>
+     |
+     |   <configuration>
+     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
+     |   </configuration>
+     | </plugin>
+     | ...
+     |
+     | NOTE: If you just wanted to inject this configuration whenever someone
+     |       set 'target-env' to anything, you could just leave off the
+     |       <value/> inside the activation-property.
+     |
+    <profile>
+      <id>env-dev</id>
+
+      <activation>
+        <property>
+          <name>target-env</name>
+          <value>dev</value>
+        </property>
+      </activation>
+
+      <properties>
+        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
+      </properties>
+    </profile>
+    -->
+  </profiles>
+
+  <!-- activeProfiles
+   | List of profiles that are active for all builds.
+   |
+  <activeProfiles>
+    <activeProfile>alwaysActiveProfile</activeProfile>
+    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
+  </activeProfiles>
+  -->
+</settings>
diff --git a/ivagonz-antroma-practica2/.project b/.project
similarity index 69%
rename from ivagonz-antroma-practica2/.project
rename to .project
index 014cba9b6fb52d4bd4e00e7056b8bc0f1645e39a..bd95be5b2bd280d29b2ddec3cc9bc9118ae32739 100644
--- a/ivagonz-antroma-practica2/.project
+++ b/.project
@@ -10,8 +10,14 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f9fe34593fcd3624a964478aeb438b0d44fe7237
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,4 @@
+eclipse.preferences.version=1
+encoding//src/main/java=UTF-8
+encoding//src/test/java=UTF-8
+encoding/<project>=UTF-8
diff --git a/ivagonz-antroma-practica2/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
similarity index 90%
rename from ivagonz-antroma-practica2/.settings/org.eclipse.jdt.core.prefs
rename to .settings/org.eclipse.jdt.core.prefs
index 3a21537071bf4118b9e1ee864cb4bc258aa48211..672496e107ed4e070613aad776b4df5146306bd4 100644
--- a/ivagonz-antroma-practica2/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -8,4 +8,5 @@ org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..f897a7f1cb2389f85fe6381425d29f0a9866fb65
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/README.md b/README.md
index 68afcc8b422db5760ad7bdb12dcc6e99a4672231..adb64671af8e0f44b8ed3e62d706f6a9a6c0b0e3 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,44 @@
-Inicio de readme
\ No newline at end of file
+# Información del proyecto
+
+## Tecnologías utilizadas
+El proyecto se ha realizado usando JUnit4.
+Se he llevado a cabo su desarrollo con jdk 8 en el IDE Eclipse Mars 2.
+
+
+Hemos usado git con un repositorio remoto en Gitlab: https://gitlab.inf.uva.es/ivagonz/ivagonz-antroma-practica2.git, y con un repositorio de respaldo en BitBucket: https://antroma@bitbucket.org/ivagonz/ivagonz-antroma-practica2.git.
+
+
+Se ha utilizado la herramienta tracking time para medir los tiempos gastados en realizar cada tarea y la comunicación entre los miembros del desarrollo se ha llevado a cabo mediante slack y skype.
+
+## Resumen y funcionalidades
+Se ha llevado a cabo un test driven development para una red de autobuses con varias lineas y sus respectivas paradas con posiciones GPS.
+
+## Clases de las que consta el proyecto
+Las clases que se han desarrollado para dar solucion al proyectos son: DirecionGPS, Linea, Parada, Red, AllTest, AllLineaTest, AllRedTest, DireccionGPSTest, LineaConstructorTest, LineaCorrespondenciasyTransbordosTest, LineaGestionDeParadasTest, ParadaTest, RedConstructorTest, RedGestionDeDistanciasTest, RedGestionDeLineasTest.
+
+## SLOC
+- DirecionGPS: 47.
+- Linea: 232.
+- Parada: 48.
+- Red: 126.
+- DireccionGPSTest: 78.
+- LineaConstructorTest: 171.
+- LineaCorrespondenciasyTransbordosTest: 215.
+- LineaGestionDeParadasTest: 177.
+- ParadaTest: 59.
+- RedConstructorTest: 122.
+- RedGestionDeDistanciasTest. 124.
+- RedGestionDeLineasTest: 151.
+
+## LLOC
+- DireccionGPSTest: 36.
+- LineaConstructorTest: 111.
+- LineaCorrespondenciasyTransbordosTest: 129.
+- LineaGestionDeParadasTest: 79.
+- ParadaTest: 27.
+- RedConstructorTest: 56.
+- RedGestionDeDistanciasTest: 55.
+- RedGestionDeLineasTest: 75.
+
+## Horas-Hombre
+El numero de horas hombre es de 13,66.
diff --git a/build.xml b/build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..da7174e4c3b6e3b37c3ab5da812a425b38d464e3
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,92 @@
+<project name="ivagonz-antroma-practica3" default="compilar" basedir=".">
+	<description>
+		Fichero build de Ant con los objetivos definidos en el enunciado de la practica
+	</description>
+
+	<!-- Properties -->
+	<property name="jacocoagent" location="target/coverage/jacoco.exec" />
+	<property environment="env"/>
+	<property name="SONAR_USER_TOKEN" value="e0591cee4f7d7243465bf26e3367278459272da2"/>
+
+	<!-- Condicion para comprobar la existencia del agente -->
+	<condition property="jacoco-agent-present">
+		<available file="${jacocoagent}" />
+	</condition>
+
+	<!-- Objetivos -->
+
+	<!-- Objetivo compilar -->
+	<target name="compilar" description="obtiene dependencias y compila" depends="limpiar, compilar_unix" />
+	<target name="compilar_unix" description="compilar unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn compile test-compile'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo ejecutarTodo -->
+	<target name="ejecutarTodo" depends="ejecutarTestsTDDyCajaNegra, ejecutarTestEnAislamiento, ejecutarPruebasSecuencia" />
+
+	<!-- Objetivo ejecutarTestsTDD -->
+	<target name="ejecutarTestsTDDyCajaNegra" description="pruebas TDD y de caja negra" depends="ejecutarTestsTDDyCajaNegra_unix" />
+	<target name="ejecutarTestsTDDyCajaNegra_unix" description="ejecutarTestsTDDyCajaNegra unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn test -P Unit'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo ejecutarTestEnAislamiento -->
+	<target name="ejecutarTestEnAislamiento" description="pruebas de caja blanca en aislamiento" depends="ejecutarTestEnAislamiento_unix" />
+	<target name="ejecutarTestEnAislamiento_unix" description="ejecutarTestEnAislamiento unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn test -P Isolation'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo ejecutarPruebasSecuencia -->
+	<target name="ejecutarPruebasSecuencia" description="caja negra, pruebas de secuencia" depends="ejecutarPruebasSecuencia_unix" />
+	<target name="ejecutarPruebasSecuencia_unix" description="ejecutarPruebasSecuencia unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn test -P Sequences'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo obtenerInformeCobertura -->
+	<target name="obtenerInformeCobertura" description="obtener informes de cobertura" depends="compilar, obtenerInformeCobertura_unix" />
+	<target name="obtenerInformeCobertura_unix" description="obtenerInformeCobertura Unix" depends="prepare-agent_unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn compile test-compile'" />
+		</exec>
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn -X -Djacoco.dataFile=${jacocoagent} -Djacoco.outputDirectory=./jacoco_ut org.jacoco:jacoco-maven-plugin:report'" />
+		</exec>
+	</target>
+	<target name="prepare-agent_unix" unless="jacoco-agent-present">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn -Djacoco.destFile=${jacocoagent} clean org.jacoco:jacoco-maven-plugin:0.7.8:prepare-agent install'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo medidas -->
+	<target name="medidas" description="obtener informe sobre medidas" depends="obtenerInformeCobertura, medidas_unix" />
+	<target name="medidas_unix" description="medidas Unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn -P Unit,Integration jxr:jxr pmd:pmd sonar:sonar -Dsonar.host.url=https://sonarqube.inf.uva.es/ -Dsonar.login=${SONAR_USER_TOKEN.value} -Dsonar.analysis.mode=publish -Dsonar.issuesReport.console.enable=true -Dsonar.jacoco.reportPath=target/coverage/jacoco.exec -Dsonar.junit.reportPaths=target/surefire-reports'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo documentar -->
+	<target name="documentar" description="genera el site de la documentación del proyecto" depends="documentar_unix" />
+	<target name="documentar_unix" description="documentar en Unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn javadoc:javadoc'" />
+		</exec>
+	</target>
+
+	<!-- Objetivo limpiar -->
+	<target name="limpiar" description="Elimina archivos innecesarios" depends="limpiar_unix" />
+	<target name="limpiar_unix" description="limpiar en Unix">
+		<exec dir="." executable="sh">
+			<arg line="-c 'mvn clean'" />
+		</exec>
+	</target>
+</project>
diff --git a/ivagonz-antroma-practica2/.classpath b/ivagonz-antroma-practica2/.classpath
deleted file mode 100644
index f3cf8a50c1a916ffbbd7ca825039b32aa07dbfed..0000000000000000000000000000000000000000
--- a/ivagonz-antroma-practica2/.classpath
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="srctests"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/ivagonz-antroma-practica2/srctests/uva/tds/pr2/equipo10/LineaTest.java b/ivagonz-antroma-practica2/srctests/uva/tds/pr2/equipo10/LineaTest.java
deleted file mode 100644
index ea94892e6bf654cccca6cc59be8ba7df2b985990..0000000000000000000000000000000000000000
--- a/ivagonz-antroma-practica2/srctests/uva/tds/pr2/equipo10/LineaTest.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package uva.tds.pr2.equipo10;
-
-import static org.junit.Assert.*;
-
-import org.junit.Test;
-
-public class LineaTest {
-
-	@Test
-	public void test() {
-		fail("Not yet implemented");
-	}
-
-}
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000000000000000000000000000000000000..58be75b9e731b95b60fb164cb1937c9b50345e96
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,107 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>uva.tds.pr2.equipo10</groupId>
+	<artifactId>ivagonz-antroma-practica3</artifactId>
+	<version>0.0.1-SNAPSHOT</version>
+	<properties>
+		<maven.compiler.source>1.8</maven.compiler.source>
+		<maven.compiler.target>1.8</maven.compiler.target>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.12</version>
+			<scope>test</scope>
+		</dependency>
+		<!-- https://mvnrepository.com/artifact/org.easymock/easymock -->
+		<dependency>
+			<groupId>org.easymock</groupId>
+			<artifactId>easymock</artifactId>
+			<version>3.4</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+	<profiles>
+		<profile>
+			<id>Unit</id>
+			<properties>
+				<testcase.groups>uva.tds.pr2.equipo10.Unit</testcase.groups>
+			</properties>
+			<activation>
+				<activeByDefault>true</activeByDefault>
+			</activation>
+		</profile>
+		<profile>
+			<id>Isolation</id>
+			<properties>
+				<testcase.groups>uva.tds.pr2.equipo10.Isolation</testcase.groups>
+			</properties>
+		</profile>
+		<profile>
+			<id>Integration</id>
+			<properties>
+				<testcase.groups>uva.tds.pr2.equipo10.Integration</testcase.groups>
+			</properties>
+		</profile>
+	</profiles>
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-surefire-plugin</artifactId>
+					<version>2.20</version>
+					<configuration>
+						<groups>${testcase.groups}</groups>
+					</configuration>
+					<dependencies>
+						<dependency>
+							<groupId>org.apache.maven.surefire</groupId>
+							<artifactId>surefire-junit47</artifactId>
+							<version>2.20.1</version>
+						</dependency>
+					</dependencies>
+				</plugin>
+				<plugin>
+					<groupId>org.jacoco</groupId>
+					<artifactId>jacoco-maven-plugin</artifactId>
+					<version>0.7.9</version>
+				</plugin>
+				<plugin>
+					<groupId>org.sonarsource.scanner.maven</groupId>
+					<artifactId>sonar-maven-plugin</artifactId>
+					<version>3.4.0.905</version>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+	<reporting>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-project-info-reports-plugin</artifactId>
+				<version>2.7</version>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jxr-plugin</artifactId>
+				<version>2.3</version>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+				<version>3.8</version>
+				<configuration>
+					<linkXref>true</linkXref>
+					<sourceEncoding>utf-8</sourceEncoding>
+					<minimumTokens>100</minimumTokens>
+					<targetJdk>1.8</targetJdk>
+				</configuration>
+			</plugin>
+		</plugins>
+	</reporting>
+
+</project>
diff --git a/src/main/java/uva/tds/pr2/equipo10/DireccionGPS.java b/src/main/java/uva/tds/pr2/equipo10/DireccionGPS.java
new file mode 100644
index 0000000000000000000000000000000000000000..48a2c337a71db8f3d00fbeffaccf5773c8c35e67
--- /dev/null
+++ b/src/main/java/uva/tds/pr2/equipo10/DireccionGPS.java
@@ -0,0 +1,58 @@
+package uva.tds.pr2.equipo10;
+
+/**
+ * Implementación de una DirecciónGPS para la segunda práctica de la asignatura
+ * TDS.
+ *
+ * @author ivagonz
+ * @author antroma
+ */
+public class DireccionGPS {
+
+	private double latitud;
+	private double longitud;
+
+	/**
+	 * Constructor de una dirección GPS.
+	 *
+	 * @param latitud
+	 *            Número que indica la latitud de la dirección. Debe ser
+	 *            correcto: >=-180 && <=180.
+	 * @param longitud
+	 *            Número que indica la longitud de la dirección. Debe ser
+	 *            correcto: >=-180 && <=180.
+	 * @throws IllegalArgumentException
+	 *             En caso de incumplir alguna de las condiciones impuestas a
+	 *             los argumentos del constructor.
+	 */
+	public DireccionGPS(double latitud, double longitud) {
+		if (latitud < -180)
+			throw new IllegalArgumentException("La latitud debe ser mayor o igual a -180");
+		if (latitud > 180)
+			throw new IllegalArgumentException("La latitud debe ser menor o igual a 180");
+		if (longitud < -180)
+			throw new IllegalArgumentException("La longitud debe ser mayor o igual a -180");
+		if (longitud > 180)
+			throw new IllegalArgumentException("La longitud debe ser menor o igual a 180");
+		this.latitud = latitud;
+		this.longitud = longitud;
+	}
+
+	/**
+	 * @return latitud de la DireccionGPS.
+	 */
+	public double getLatitud() {
+		// TODO Auto-generated method stub
+		return latitud;
+	}
+
+	/**
+	 *
+	 * @return longitud de la DireccionGPS .
+	 */
+	public double getLongitud() {
+		// TODO Auto-generated method stub
+		return longitud;
+	}
+
+}
diff --git a/src/main/java/uva/tds/pr2/equipo10/Linea.java b/src/main/java/uva/tds/pr2/equipo10/Linea.java
new file mode 100644
index 0000000000000000000000000000000000000000..dcfe69cb37301372f0bd1605ddb04917d6bc7286
--- /dev/null
+++ b/src/main/java/uva/tds/pr2/equipo10/Linea.java
@@ -0,0 +1,232 @@
+package uva.tds.pr2.equipo10;
+
+
+/**
+ * Implementación basica de una linea de buses
+ *
+ * @author antroma
+ * @author ivagonz
+ *
+ */
+public class Linea {
+
+	/**
+	 * Constructor de la clase linea
+	 *
+	 * @param identificador
+	 *            Identificadeor de la linea. Debe ser correcto: identificador
+	 *            positivo
+	 * @param paradas
+	 *            Array que contiene las paradas de la linea y cuya primera y
+	 *            ultima posicion seran la primera y ultima parada de la linea
+	 *            respectivamente. Debe ser correcto: No debe ser nulo No debe
+	 *            contener elementos nulos Debe tener 3 elmentos o mas La
+	 *            distancia entre el primer y ultimo elemento del array debe ser
+	 *            menor a 100.
+	 * @throws IllegalArgumentException
+	 *             en caso de incumplir las condiciones impuestas a los
+	 *             parámetros.
+	 */
+	public Linea(int identificador, Parada[] paradas) {
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * Añade Paradas intermedias a la línea.
+	 *
+	 * @param parada
+	 *            Parada a anadir. Debe ser correcta: No nula.
+	 * @param posicion
+	 *            Posicion en la que añadir la Parada.Debe ser correcta: No
+	 *            puede ser el inicio ni el final de la Linea.
+	 * @throws IllegalArgumentException
+	 *             en caso de incumplir las condiciones impuestas a los
+	 *             parámetros.
+	 */
+	public void addParadaIntermedia(Parada parada, int posicion) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Añade una parada como final del recorrido
+	 *
+	 * @param parada
+	 *            parada que se añade. Debe ser correcta: no nula estar a menos
+	 *            de 100 metros de la parada inicial.
+	 */
+	public void addParadaFinal(Parada parada) {
+		// TODO Auto-generated method stub
+	}
+
+	/**
+	 * Anade una parada como inicio del recorrido.
+	 *
+	 * @param parada
+	 *            parada que se añade. Debe ser correcta: no nula estar a menos
+	 *            de 100 metros de la parada final.
+	 */
+	public void addParadaInicial(Parada parada) {
+
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Elimina una parada de la linea, si la parada proporcionada no está, no
+	 * hará nada
+	 *
+	 * @param parada
+	 *            parada que se elimina. Debe ser correcta: no nula, no debe ser
+	 *            la parada inicial ni la final.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas
+	 */
+	public void removeParada(Parada parada) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Comprueba si la Linea tiene una Parada cerca de la direccion pasada.
+	 *
+	 * @param direccion2
+	 *            DireccionGPS a comprobar.Debe ser correcto: No ser null.
+	 * @return true si tiene una Parada a menos de 200m de la Direccion pasada,
+	 *         false en caso contrario.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public boolean hasParadaCerca(DireccionGPS direccion2) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/**
+	 * Comprueba si la Linea pasada como argumento tiene correspondencia con
+	 * this.
+	 *
+	 * @param linea
+	 *            Linea a comparar con this. Tendrá correspondencia si tiene una
+	 *            Parada a menos de 200 metros de una Parada de this. Tiene que
+	 *            ser correcta: No nula.
+	 * @return true si linea tiene correspondencia con this, false en caso
+	 *         contrario.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public boolean hasCorrespondencia(Linea linea) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/**
+	 * Da información sobre las Paradas que tienen correspondencia de linea y
+	 * this.
+	 *
+	 * @param linea
+	 *            Linea a comparar con this. Debe ser correcta: No debe ser null
+	 *            y debe tener correspondencia con this.
+	 * @return Vector con las Paradas que tienen correspondencia con Paradas de
+	 *         this.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public Parada[] getParadasConCorrespondencia(Linea linea) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/**
+	 * Comprueba si la Linea pasada como parámetro tiene trasbordo directa con
+	 * this.
+	 *
+	 * @param linea
+	 *            Linea a comparar con this. Debe ser correcta: No nula.
+	 * @return true si la Linea tiene trasbordo directo con this, false en caso
+	 *         contrario.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public boolean hasTrasbordoDirecto(Linea linea) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/**
+	 * Obtiene un vector de Paradas con trasbordo directo entre Linea y this, si
+	 * linea tiene trasbordo directo con this.
+	 *
+	 * @param linea
+	 *            Linea a comparar con this, para obtener las Paradas con
+	 *            trasbordo directo. Debe ser correcta: No nula y tiene que
+	 *            tener Paradas con trasbordo directo.
+	 * @return Vector con las Paradas de trasbordo directo entre Linea y this.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public Parada[] getParadasConTrasbordoDirecto(Linea linea) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/**
+	 * Comprobará la distancia entre 2 Paradas de la Linea.
+	 *
+	 * @param parada1
+	 *            Primera Parada a comprobar. Debe ser correcta: No nula.
+	 * @param parada2
+	 *            Segunda Parada a comprobar.Debe ser correcta: No nula.
+	 * @return La distancia entre las 2 paradas pasadas como parámetro si están
+	 *         en la Ĺinea, 0 en caso contrario.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas a los parámetros.
+	 */
+	public int checkDistancia(Parada parada1, Parada parada2) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/**
+	 *
+	 * @return Identificador de this.
+	 */
+	public int getId() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/**
+	 *
+	 * @return Vector de Paradas de this.
+	 */
+	public Parada[] getParadas() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/**
+	 * Comprobará si la Linea tiene alguna Parada null, para informar al
+	 * usuario.
+	 *
+	 * @return true si tiene alguna Parada null, false en caso contrario.
+	 */
+	public boolean hasParadaNull() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/**
+	 * Comprueba si la Linea tiene una Parada.
+	 *
+	 * @param parada
+	 *            Parada a comprobar dentro de la linea. Debe ser correcta:No
+	 *            nula.
+	 * @return true si la Linea tiene la Parada, false en caso contrario.
+	 */
+	public boolean hasParada(Parada parada) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}
diff --git a/src/main/java/uva/tds/pr2/equipo10/Parada.java b/src/main/java/uva/tds/pr2/equipo10/Parada.java
new file mode 100644
index 0000000000000000000000000000000000000000..2649d838eef61769a3f35c1ad8b12ef8233172a3
--- /dev/null
+++ b/src/main/java/uva/tds/pr2/equipo10/Parada.java
@@ -0,0 +1,48 @@
+package uva.tds.pr2.equipo10;
+
+
+/**
+ * Implementación de una Parada para la segunda práctica de la asignatura TDS.
+ *
+ * @author ivagonz
+ * @author antroma
+ */
+public class Parada {
+
+	/**
+	 * Constructor de la clase Parada.
+	 *
+	 * @param direccionGPS
+	 *            Recibe un objeto DireccionGPS que indicara la posición de la
+	 *            Parada dentro de una Linea de la Red. Debe ser correcto: no
+	 *            nulo.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public Parada(DireccionGPS direccionGPS) {
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 * Función que dada otra parada, obtendrá la distancia entre this y dicha
+	 * Parada, expresada en metros.
+	 *
+	 * @param parada
+	 *            Parada a comparar con this. Debe ser correcta: no nula.
+	 * @throws IllegalArgumentException
+	 *             si se incumplen las condiciones impuestas al parámetro.
+	 */
+	public int getDistancia(Parada parada) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	/**
+	 * @return DireccionGPS de this.
+	 */
+	public DireccionGPS getDireccion() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+}
diff --git a/src/main/java/uva/tds/pr2/equipo10/Red.java b/src/main/java/uva/tds/pr2/equipo10/Red.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d7c75bdea886eb4f45bfdcc0b9b62cc85ba0ff4
--- /dev/null
+++ b/src/main/java/uva/tds/pr2/equipo10/Red.java
@@ -0,0 +1,126 @@
+package uva.tds.pr2.equipo10;
+
+
+/**
+ * Implementación sencilla de una red de buses.
+ *
+ * @author ivagonz
+ * @author antroma
+ */
+public class Red {
+
+	/**
+	 * Inicia una red de autobuses con un vector de Lineas que la componen.
+	 *
+	 * @param lineas
+	 *            Vector de lineas de la Red. Debe ser correcto: No nulo, no
+	 *            debe contener elementos nulos y debe contener al menos 2
+	 *            lineas.
+	 * @throws IllegalArgumentException
+	 *             si no se cumplen las conciones impuestas al parámetro.
+	 */
+	public Red(Linea[] lineas) {
+		// TODO Auto-generated constructor stub
+	}
+
+	/**
+	 *
+	 * @return vector de Lineas de la Red.
+	 */
+	public Linea[] getLineas() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/**
+	 * Comprueba si la Red tiene alguna Linea nula.
+	 *
+	 * @return true si tiene al menos una Linea nula, false en caso contrario.
+	 */
+	public boolean hasLineaNull() {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	/**
+	 * Agrega una Linea dentro de la Red de buses.
+	 *
+	 * @param linea
+	 *            Linea a agregar en la Red. Debe ser correcta: No nula, no debe
+	 *            estar ya en la Red.
+	 * @throws IllegalArgumentException
+	 *             en caso de incumplir las condiciones impuestas al par�metro.
+	 */
+	public void addLinea(Linea linea) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Obtiene una Linea de la Red mediante la posición indicada como parámetro.
+	 *
+	 * @param posicion
+	 *            Entero que indica la posición de la Linea a obtener dentro de
+	 *            la Red.Debe ser correcto: Positiva.
+	 * @return La Linea en la posición dada de existir Linea en la posición,
+	 *         null en caso contrario.
+	 * @throws IllegalArgumentException
+	 *             en caso de incumplir las condiciones impuestas al parámetro.
+	 */
+	public Linea getLinea(int posicion) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/**
+	 * Elimina una Linea de la Red de autobuses.
+	 *
+	 * @param linea
+	 *            Linea a borrar.Debe ser correcta: No nula y debe estar dentro
+	 *            de la Red.
+	 * @throws IllegalArgumentException
+	 *             en caso de incumplir las condiciones impuestas al parámetro.
+	 */
+	public void removeLinea(Linea linea) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * Obtiene un vector de Lineas que tienen Parada cerca de una Direccion y un
+	 * radio dados.
+	 *
+	 * @param direccion
+	 *            DireccionGPS en la que debe haber Paradas cerca.Debe ser
+	 *            correcta: No nula.
+	 * @param radio
+	 *            Radio para buscar Paradas dentro de la Red.Debe ser correcto:
+	 *            Positivo.
+	 * @return Vector con las Lineas que tienen Parada cerca de la Direccion.
+	 * @throws IllegalArgumentException
+	 *             en caso de incumplir alguna de las condiciones impuestas a
+	 *             los parámetros.
+	 */
+	public Linea[] infoParadas(DireccionGPS direccion, int radio) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	/**
+	 * Obtiene la distancia en metros entre dos Paradas de la Red.
+	 *
+	 * @param parada1
+	 *            Primera Parada a comprobar. Debe ser correcta: No nula.
+	 * @param parada2
+	 *            Segunda Parada a comprobar. Debe ser correcta: No nula.
+	 * @return La distancia en metros entre las 2 Paradas.
+	 * @throws IllegalArgumentException
+	 *             si se incumple alguna de las condiciones impuestas a los
+	 *             parámetros.
+	 */
+	public int getDistanciaParadas(Parada parada1, Parada parada2) {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/AllLineaTest.java b/src/test/java/uva/tds/pr2/equipo10/AllLineaTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..5ddb121803aefb6a417c689ecc4fce5e44d0e4e9
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/AllLineaTest.java
@@ -0,0 +1,12 @@
+package uva.tds.pr2.equipo10;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({ LineaConstructorTest.class, LineaGestionDeParadasTest.class,
+		LineaCorrespondenciasYTrasbordosTest.class })
+public class AllLineaTest {
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/AllRedTest.java b/src/test/java/uva/tds/pr2/equipo10/AllRedTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..9183939983b1e476fcfc934b63f3dcae62a7f28e
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/AllRedTest.java
@@ -0,0 +1,12 @@
+package uva.tds.pr2.equipo10;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({ RedConstructorTest.class, RedGestionDeDistanciasTest.class, RedGestionDeLineasTest.class })
+
+public class AllRedTest {
+
+}
\ No newline at end of file
diff --git a/src/test/java/uva/tds/pr2/equipo10/AllTest.java b/src/test/java/uva/tds/pr2/equipo10/AllTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..1f88da867d78d7618fc29a540ad78f73fe5293d0
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/AllTest.java
@@ -0,0 +1,12 @@
+package uva.tds.pr2.equipo10;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+@RunWith(Suite.class)
+@SuiteClasses({ DireccionGPSTest.class, ParadaTest.class, AllLineaTest.class, AllRedTest.class })
+
+public class AllTest {
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/DireccionGPSTest.java b/src/test/java/uva/tds/pr2/equipo10/DireccionGPSTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..db9cf9d3c70544f299b31944466bcd696021e2d9
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/DireccionGPSTest.java
@@ -0,0 +1,78 @@
+package uva.tds.pr2.equipo10;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category(Unit.class)
+public class DireccionGPSTest {
+
+	private final double errorAdmisible = 0.001;
+
+	@Test
+	public void constructorCorrectoTest() {
+		double latitud = 1.0;
+		double longitud = 1.0;
+
+		DireccionGPS direccion = new DireccionGPS(latitud, longitud);
+		assertEquals(latitud, direccion.getLatitud(), errorAdmisible);
+		assertEquals(longitud, direccion.getLongitud(), errorAdmisible);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorLatitudMenorQueMenos180Test() {
+		double longitud = 1.0;
+		@SuppressWarnings("unused")
+		DireccionGPS direccion = new DireccionGPS(-180.01, longitud);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorLatitudMayorQue180Test() {
+		double longitud = 1.0;
+		@SuppressWarnings("unused")
+		DireccionGPS direccion = new DireccionGPS(180.01, longitud);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorLongitudMenorQueMenos180Test() {
+		double latitud = 1.0;
+		@SuppressWarnings("unused")
+		DireccionGPS direccion = new DireccionGPS(latitud, -180.01);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorLongitudMayorQue180Test() {
+		double latitud = 1.0;
+		@SuppressWarnings("unused")
+		DireccionGPS direccion = new DireccionGPS(latitud, 180.01);
+	}
+
+	@Test
+	public void getLatitudCorrectoTest() {
+		double latitud = 1.0;
+		double longitud = 1.0;
+
+		DireccionGPS direccion = new DireccionGPS(latitud, longitud);
+		assertEquals(latitud, direccion.getLatitud(), errorAdmisible);
+	}
+
+	@Test
+	public void getLongitudCorrectoTest() {
+		double latitud = 1.0;
+		double longitud = 1.0;
+
+		DireccionGPS direccion = new DireccionGPS(latitud, longitud);
+		assertEquals(longitud, direccion.getLongitud(), errorAdmisible);
+	}
+
+	@Test
+	public void secuenciaTest() {
+		double latitud = 1.0;
+		double longitud = 1.0;
+		DireccionGPS direccion = new DireccionGPS(latitud, longitud);
+		direccion.getLatitud();
+		direccion.getLongitud();
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/Integration.java b/src/test/java/uva/tds/pr2/equipo10/Integration.java
new file mode 100644
index 0000000000000000000000000000000000000000..ff02759b3faae466256c3acd629f6f022ac358c4
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/Integration.java
@@ -0,0 +1,5 @@
+package uva.tds.pr2.equipo10;
+
+public interface Integration {
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/Isolation.java b/src/test/java/uva/tds/pr2/equipo10/Isolation.java
new file mode 100644
index 0000000000000000000000000000000000000000..93ead36140fa49c31703d3d4c9c9f1bca67cd6a1
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/Isolation.java
@@ -0,0 +1,5 @@
+package uva.tds.pr2.equipo10;
+
+public interface Isolation {
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/LineaConstructorTest.java b/src/test/java/uva/tds/pr2/equipo10/LineaConstructorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..104fb2ef76487a4cfdaec6a34f0d38e64ff2fdfa
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/LineaConstructorTest.java
@@ -0,0 +1,171 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class LineaConstructorTest {
+
+	private final double errorAdmisible = 0.001;
+
+	@Test
+	public void constructorCorrectoTest() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		int identificador = 1;
+
+		Linea linea = new Linea(identificador, paradas);
+
+		assertEquals(identificador, linea.getId(), errorAdmisible);
+		assertNotNull(linea.getParadas());
+		assertArrayEquals(paradas, linea.getParadas());
+		assertFalse(linea.hasParadaNull());
+
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorIdentificadorMenorQue1Test() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		int identificador = 0;
+
+		@SuppressWarnings("unused")
+		Linea linea = new Linea(identificador, paradas);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void constructorParadasNullTest() {
+		Parada[] paradas = null;
+
+		int identificador = 1;
+
+		@SuppressWarnings("unused")
+		Linea linea = new Linea(identificador, paradas);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void constructorParadasConUnElementoNullTest() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = null;
+		paradas[2] = parada3;
+		int identificador = 1;
+
+		@SuppressWarnings("unused")
+		Linea linea = new Linea(identificador, paradas);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorParadasConMenosDe3ElementosTest() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada[] paradas = new Parada[2];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		int identificador = 1;
+
+		@SuppressWarnings("unused")
+		Linea linea = new Linea(identificador, paradas);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorDistanciaParadaInicioYParadaFinMayorQue100Test() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS direccion3 = new DireccionGPS(20.4509, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		int identificador = 1;
+
+		@SuppressWarnings("unused")
+		Linea linea = new Linea(identificador, paradas);
+	}
+
+	@Test
+	public void getIdCorrectoTest() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		int identificador = 1;
+
+		Linea linea = new Linea(identificador, paradas);
+		assertEquals(identificador, linea.getId(), errorAdmisible);
+	}
+
+	@Test
+	public void getParadasCorrectoTest() {
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		int identificador = 1;
+
+		Linea linea = new Linea(identificador, paradas);
+		assertArrayEquals(paradas, linea.getParadas());
+	}
+
+	@Test
+	public void secuenciaTest() {
+		fail("Quitar en implementacion");
+		DireccionGPS direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada parada1 = new Parada(direccion1);
+		Parada parada2 = new Parada(direccion2);
+		Parada parada3 = new Parada(direccion3);
+		Parada[] paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		int identificador = 1;
+
+		Linea linea = new Linea(identificador, paradas);
+		linea.addParadaIntermedia(parada1, 2);
+		linea.removeParada(parada1);
+		linea.hasParadaCerca(direccion1);
+		linea.hasCorrespondencia(linea);
+		linea.getParadasConTrasbordoDirecto(linea);
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/LineaCorrespondenciasYTrasbordosTest.java b/src/test/java/uva/tds/pr2/equipo10/LineaCorrespondenciasYTrasbordosTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f84e169e8d621eef47d6a25cc7a95a342f3c374
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/LineaCorrespondenciasYTrasbordosTest.java
@@ -0,0 +1,215 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class LineaCorrespondenciasYTrasbordosTest {
+
+	private DireccionGPS direccion1;
+	private DireccionGPS direccion2;
+	private DireccionGPS direccion3;
+	private Parada parada1;
+	private Parada parada2;
+	private Parada parada3;
+	private Parada paradas[];
+	private int identificador;
+	private Linea linea;
+
+	private final double errorAdmisible = 0.001;
+
+	@Before
+	public void setUp() throws Exception {
+		direccion1 = new DireccionGPS(20.45, 30.50);
+		direccion2 = new DireccionGPS(30.5, 20.4);
+		direccion3 = new DireccionGPS(20.4498, 30.50);
+		parada1 = new Parada(direccion1);
+		parada2 = new Parada(direccion2);
+		parada3 = new Parada(direccion3);
+		paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		identificador = 1;
+		linea = new Linea(identificador, paradas);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		direccion1 = null;
+		direccion2 = null;
+		direccion3 = null;
+		parada1 = null;
+		parada2 = null;
+		parada3 = null;
+		paradas = null;
+		identificador = 0;
+		linea = null;
+	}
+
+	@Test
+	public void hasCorrespondenciaCorrectoTest() {
+		fail("Quitar en implementación");
+		DireccionGPS _direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS _direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS _direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada _parada1 = new Parada(_direccion1);
+		Parada _parada2 = new Parada(_direccion2);
+		Parada _parada3 = new Parada(_direccion3);
+		Parada _paradas[] = new Parada[3];
+		_paradas[0] = _parada1;
+		_paradas[1] = _parada2;
+		_paradas[2] = _parada3;
+		int _identificador = 2;
+		Linea _linea = new Linea(_identificador, _paradas);
+
+		assertTrue(linea.hasCorrespondencia(_linea));
+		assertNotNull(_linea);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void hasCorrespondenciaConLineaNullTest() {
+		linea.hasCorrespondencia(null);
+	}
+
+	@Test
+	public void getParadasConCorrespondenciaCorrectoTest() {
+		fail("Quitar en implementación");
+		DireccionGPS _direccion1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS _direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS _direccion3 = new DireccionGPS(20.4498, 30.50);
+		Parada _parada1 = new Parada(_direccion1);
+		Parada _parada2 = new Parada(_direccion2);
+		Parada _parada3 = new Parada(_direccion3);
+		Parada _paradas[] = new Parada[3];
+		_paradas[0] = _parada1;
+		_paradas[1] = _parada2;
+		_paradas[2] = _parada3;
+		int _identificador = 2;
+		Linea _linea = new Linea(_identificador, _paradas);
+
+		Parada paradasConCorrespondencia[] = linea.getParadasConCorrespondencia(_linea);
+		Parada correspondencias[] = new Parada[] { _parada1, _parada2, _parada3 };
+
+		assertNotNull(_linea);
+		assertTrue(linea.hasCorrespondencia(_linea));
+		assertArrayEquals(correspondencias, paradasConCorrespondencia);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getParadasConCorrespondenciaLineaNullTest() {
+		linea.getParadasConCorrespondencia(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getParadasConCorrespondenciaConLineaSinCorrespondenciaTest() {
+		DireccionGPS _direccion1 = new DireccionGPS(21.45, 31.50);
+		DireccionGPS _direccion2 = new DireccionGPS(31.5, 21.4);
+		DireccionGPS _direccion3 = new DireccionGPS(21.4498, 31.50);
+		Parada _parada1 = new Parada(_direccion1);
+		Parada _parada2 = new Parada(_direccion2);
+		Parada _parada3 = new Parada(_direccion3);
+		Parada _paradas[] = new Parada[3];
+		_paradas[0] = _parada1;
+		_paradas[1] = _parada2;
+		_paradas[2] = _parada3;
+		int _identificador = 2;
+		Linea _linea = new Linea(_identificador, _paradas);
+		linea.getParadasConCorrespondencia(_linea);
+	}
+
+	@Test
+	public void hasTrasbordoDirectoCorrectoTest() {
+		fail("Quitar en implementación");
+		DireccionGPS _direccion1 = new DireccionGPS(21.45, 31.50);
+		DireccionGPS _direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS _direccion3 = new DireccionGPS(21.4498, 31.50);
+		Parada _parada1 = new Parada(_direccion1);
+		Parada _parada2 = new Parada(_direccion2);
+		Parada _parada3 = new Parada(_direccion3);
+		Parada _paradas[] = new Parada[3];
+		_paradas[0] = _parada1;
+		_paradas[1] = _parada2;
+		_paradas[2] = _parada3;
+		int _identificador = 2;
+		Linea _linea = new Linea(_identificador, _paradas);
+		assertTrue(linea.hasTrasbordoDirecto(_linea));
+		assertNotNull(_linea);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void hasTrasbordoDirectoConLineaNullTest() {
+		linea.hasTrasbordoDirecto(null);
+	}
+
+	@Test
+	public void getParadasConTrasbordoDirectoCorrectoTest() {
+		fail("Quitar en implementación");
+		DireccionGPS _direccion1 = new DireccionGPS(21.45, 31.50);
+		DireccionGPS _direccion2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS _direccion3 = new DireccionGPS(21.4498, 31.50);
+		Parada _parada1 = new Parada(_direccion1);
+
+		Parada _parada2 = new Parada(_direccion2);
+		Parada _parada3 = new Parada(_direccion3);
+		Parada _paradas[] = new Parada[3];
+		_paradas[0] = _parada1;
+		_paradas[1] = _parada2;
+		_paradas[2] = _parada3;
+		int _identificador = 2;
+		Linea _linea = new Linea(_identificador, _paradas);
+
+		Parada paradasConCorrespondencia[] = linea.getParadasConTrasbordoDirecto(_linea);
+		assertNotNull(_linea);
+		assertTrue(linea.hasTrasbordoDirecto(_linea));
+		Parada trasbordos[] = new Parada[] { _parada2 };
+		assertArrayEquals(trasbordos, paradasConCorrespondencia);
+
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getParadasConTrasbordoDirectoConLineaNullTest() {
+		linea.getParadasConCorrespondencia(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getParadasConTrasbordoDirectoConLineaSinTrasbordoDirectoTest() {
+		DireccionGPS _direccion1 = new DireccionGPS(21.45, 31.50);
+		DireccionGPS _direccion2 = new DireccionGPS(31.5, 21.4);
+		DireccionGPS _direccion3 = new DireccionGPS(21.4498, 31.50);
+		Parada _parada1 = new Parada(_direccion1);
+		Parada _parada2 = new Parada(_direccion2);
+		Parada _parada3 = new Parada(_direccion3);
+		Parada _paradas[] = new Parada[3];
+		_paradas[0] = _parada1;
+		_paradas[1] = _parada2;
+		_paradas[2] = _parada3;
+		int _identificador = 2;
+		Linea _linea = new Linea(_identificador, _paradas);
+		linea.getParadasConTrasbordoDirecto(_linea);
+	}
+
+	@Test
+	public void checkDistanciaCorrectoTest() {
+		fail("Quitar en implementación");
+		int distancia = linea.checkDistancia(parada1, parada2);
+		assertNotNull(parada1);
+		assertNotNull(parada2);
+		assertEquals(1698851, distancia, errorAdmisible);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void checkDistanciaConPrimerParametroNullTest() {
+		linea.checkDistancia(null, parada2);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void checkDistanciaConSegundoParametroNullTest() {
+
+		linea.checkDistancia(parada1, null);
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/LineaGestionDeParadasTest.java b/src/test/java/uva/tds/pr2/equipo10/LineaGestionDeParadasTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6bef90cb9acf6e23336900a5ef90b948d98c241
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/LineaGestionDeParadasTest.java
@@ -0,0 +1,177 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.*;
+
+public class LineaGestionDeParadasTest {
+
+	private DireccionGPS direccion1;
+	private DireccionGPS direccion2;
+	private DireccionGPS direccion3;
+	private Parada parada1;
+	private Parada parada2;
+	private Parada parada3;
+	private Parada paradas[];
+	private int identificador;
+	private Linea linea;
+
+	@Before
+	public void setUp() throws Exception {
+		direccion1 = new DireccionGPS(20.45, 30.50);
+		direccion2 = new DireccionGPS(30.5, 20.4);
+		direccion3 = new DireccionGPS(20.4498, 30.50);
+		parada1 = new Parada(direccion1);
+		parada2 = new Parada(direccion2);
+		parada3 = new Parada(direccion3);
+		paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		identificador = 1;
+		linea = new Linea(identificador, paradas);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		direccion1 = null;
+		direccion2 = null;
+		direccion3 = null;
+		parada1 = null;
+		parada2 = null;
+		parada3 = null;
+		paradas = null;
+		identificador = 0;
+		linea = null;
+	}
+
+	@Test
+	public void addParadaIntermediaCorrectoTest() {
+		fail("Cambiar");
+		DireccionGPS direccionGPS = new DireccionGPS(20.1, 31);
+		Parada parada = new Parada(direccionGPS);
+		int posicion = 1;
+		linea.addParadaIntermedia(parada, posicion);
+		assertFalse(linea.hasParadaNull());
+		assertEquals(linea.getParadas()[posicion], parada);
+	}
+
+	@Test(expected = NullPointerException.class)
+	public void addParadaIntermediaConParadaNullTest() {
+		int posicion = 1;
+		linea.addParadaIntermedia(null, posicion);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addParadaIntermediaConPosicionMenorDeCeroTest() {
+		DireccionGPS direccionGPS = new DireccionGPS(20.1, 31);
+		Parada parada = new Parada(direccionGPS);
+		int posicion = 0;
+		linea.addParadaIntermedia(parada, posicion);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addParadaIntermediaConPosicionMayorQueParadaFinalTest() {
+		DireccionGPS direccionGPS = new DireccionGPS(20.1, 31);
+		Parada parada = new Parada(direccionGPS);
+		int posicion = paradas.length - 1;
+		linea.addParadaIntermedia(parada, posicion);
+	}
+
+	@Test
+	public void addParadaFinalCorrectoTest() {
+		fail("Quitar en implementación");
+		DireccionGPS direccionGPS = new DireccionGPS(20.44989, 30.5);
+		Parada parada = new Parada(direccionGPS);
+		linea.addParadaFinal(parada);
+
+		assertFalse(linea.hasParadaNull());
+		assertEquals(linea.getParadas()[linea.getParadas().length - 1], parada);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addParadaFinalParadaNulaTest() {
+		linea.addParadaFinal(null);
+
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addParadaFinalConParadaAMasDe100MetrosDeLaInicialSTest() {
+		DireccionGPS direccionGPS = new DireccionGPS(20.4509, 30.5);
+		Parada parada = new Parada(direccionGPS);
+		linea.addParadaFinal(parada);
+	}
+
+	@Test
+	public void addParadaInicialCorrectoTest() {
+		fail("Cambiar");
+		DireccionGPS direccionGPS = new DireccionGPS(20.44989, 30.5);
+		Parada parada = new Parada(direccionGPS);
+		linea.addParadaInicial(parada);
+		assertFalse(linea.hasParadaNull());
+		assertEquals(linea.getParadas()[0], parada);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addParadaInicialConParadaNullTest() {
+		linea.addParadaInicial(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addParadaInicialConParadaAMasDistanciaDeCienTest() {
+		DireccionGPS direccionGPS = new DireccionGPS(20.44989, 30.5);
+		Parada parada = new Parada(direccionGPS);
+		linea.addParadaInicial(parada);
+	}
+
+	@Test
+	public void removeParadaCorrectoTest() {
+		fail("Quitar en implementación");
+		linea.removeParada(parada2);
+
+		assertFalse(linea.hasParadaNull());
+		assertFalse(linea.hasParada(parada2));
+
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void removeParadaNulaTest() {
+		linea.removeParada(null);
+
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void removeParadaConparadaInicialTest() {
+		linea.removeParada(parada1);
+
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void removeParadaConparadaFinTest() {
+		linea.removeParada(parada3);
+
+	}
+
+	@Test
+	public void hasParadaCercaCorrectoTest() {
+		fail("Quitar en implementación");
+		assertTrue(linea.hasParadaCerca(direccion2));
+		assertNotNull(direccion2);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void hasParadaCercaConDireccionNullTest() {
+		linea.hasParadaCerca(direccion2);
+	}
+
+	@Test
+	public void hasParadaCorrectoTest() {
+		assertTrue(linea.hasParada(parada1));
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void hasParadaConParadaNullTest() {
+		linea.hasParada(null);
+	}
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/ParadaTest.java b/src/test/java/uva/tds/pr2/equipo10/ParadaTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f57eed05917792166bfb89e3deb550dc0cb9b58f
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/ParadaTest.java
@@ -0,0 +1,60 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+
+public class ParadaTest {
+
+	@Test
+	public void constructorCorrectoTest() {
+		DireccionGPS direccion = new DireccionGPS(5.1, -5.1);
+
+		Parada parada = new Parada(direccion);
+		assertNotNull(parada.getDireccion());
+		assertEquals(direccion, parada.getDireccion());
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorDireccionNullTest() {
+		@SuppressWarnings("unused")
+		Parada parada = new Parada(null);
+	}
+
+	@Test
+	public void getDireccionCorrectoTest() {
+		DireccionGPS direccion = new DireccionGPS(5.1, -5.1);
+		Parada parada = new Parada(direccion);
+		assertEquals(direccion, parada.getDireccion());
+	}
+
+	@Test
+	public void getDistanciaCorrectoTest() {
+		fail("Quitar en implentación");
+		DireccionGPS direccion = new DireccionGPS(5.1, -5.1);
+		Parada parada = new Parada(direccion);
+		Parada parada2 = new Parada(direccion);
+		parada.getDistancia(parada2);
+		assertNotNull(parada2);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getDistanciaParadaACompararNullTest() {
+		DireccionGPS direccion = new DireccionGPS(5.1, -5.1);
+		Parada parada = new Parada(direccion);
+		parada.getDistancia(null);
+	}
+
+	@Test
+	public void secuenciaTest() {
+		fail("Quitar en implementacion");
+		DireccionGPS direccion = new DireccionGPS(5.1, -5.1);
+		Parada parada = new Parada(direccion);
+		Parada parada2 = new Parada(direccion);
+		parada.getDireccion();
+		parada.getDistancia(parada2);
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/RedConstructorTest.java b/src/test/java/uva/tds/pr2/equipo10/RedConstructorTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd061b14e7d0402e3d4e1db8033b5aaa58767013
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/RedConstructorTest.java
@@ -0,0 +1,122 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RedConstructorTest {
+
+	private DireccionGPS direccion1;
+	private DireccionGPS direccion2;
+	private DireccionGPS direccion3;
+	private Parada parada1;
+	private Parada parada2;
+	private Parada parada3;
+	private Parada paradas[];
+	private int identificador;
+	private Linea linea;
+
+	private Parada parada4;
+	private Parada parada5;
+	private Parada parada6;
+	private Parada paradas2[];
+	private int identificador2;
+	private Linea linea2;
+
+	@Before
+	public void setUp() throws Exception {
+		direccion1 = new DireccionGPS(20.45, 30.50);
+		direccion2 = new DireccionGPS(30.5, 20.4);
+		direccion3 = new DireccionGPS(20.4498, 30.50);
+		parada1 = new Parada(direccion1);
+		parada2 = new Parada(direccion2);
+		parada3 = new Parada(direccion3);
+		paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		identificador = 1;
+		linea = new Linea(identificador, paradas);
+
+		parada6 = new Parada(direccion3);
+		parada5 = new Parada(direccion2);
+		parada4 = new Parada(direccion1);
+		paradas2 = new Parada[3];
+		paradas2[0] = parada6;
+		paradas2[1] = parada5;
+		paradas2[2] = parada4;
+		identificador2 = 2;
+		linea2 = new Linea(identificador2, paradas2);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		direccion1 = null;
+		direccion2 = null;
+		direccion3 = null;
+		parada1 = null;
+		parada2 = null;
+		parada3 = null;
+		paradas = null;
+		identificador = 0;
+		linea = null;
+		parada6 = null;
+		parada5 = null;
+		parada4 = null;
+		paradas2 = null;
+		identificador2 = 0;
+		linea2 = null;
+	}
+
+	@Test
+	public void constructorCorrectoTest() {
+		Linea lineas[] = new Linea[] { linea, linea2 };
+		Red red = new Red(lineas);
+		assertNotNull(lineas);
+		assertArrayEquals(lineas, red.getLineas());
+		assertFalse(red.hasLineaNull());
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorConLineasNullTest() {
+		@SuppressWarnings("unused")
+		Red red = new Red(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorConLineaNullTest() {
+		Linea lineas[] = new Linea[] { linea, null };
+		@SuppressWarnings("unused")
+		Red red = new Red(lineas);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void constructorConLineasDeTamanioMenorDe2Test() {
+		Linea lineas[] = new Linea[] { linea };
+		@SuppressWarnings("unused")
+		Red red = new Red(lineas);
+	}
+
+	@Test
+	public void getLineasCorrectoTest() {
+		Linea lineas[] = new Linea[] { linea, linea2 };
+		Red red = new Red(lineas);
+		assertArrayEquals(lineas, red.getLineas());
+	}
+
+	@Test
+	public void secuenciaTest() {
+		fail("Quitar en implementacion");
+		Linea lineas[] = new Linea[] { linea, linea2 };
+		Red red = new Red(lineas);
+		red.addLinea(linea);
+		red.removeLinea(linea);
+		red.getDistanciaParadas(parada1, parada2);
+		red.getLinea(0);
+		red.infoParadas(direccion1, 100);
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/RedGestionDeDistanciasTest.java b/src/test/java/uva/tds/pr2/equipo10/RedGestionDeDistanciasTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..56c790d22e01392fe1d19c7cacc59daac819b865
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/RedGestionDeDistanciasTest.java
@@ -0,0 +1,124 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RedGestionDeDistanciasTest {
+
+	private DireccionGPS direccion1;
+	private DireccionGPS direccion2;
+	private DireccionGPS direccion3;
+	private Parada parada1;
+	private Parada parada2;
+	private Parada parada3;
+	private Parada paradas[];
+	private int identificador;
+	private Linea linea;
+
+	private Parada parada4;
+	private Parada parada5;
+	private Parada parada6;
+	private Parada paradas2[];
+	private int identificador2;
+	private Linea linea2;
+
+	private Linea[] lineas;
+	private Red red;
+
+	@Before
+	public void setUp() throws Exception {
+		direccion1 = new DireccionGPS(20.45, 30.50);
+		direccion2 = new DireccionGPS(30.5, 20.4);
+		direccion3 = new DireccionGPS(20.4498, 30.50);
+		parada1 = new Parada(direccion1);
+		parada2 = new Parada(direccion2);
+		parada3 = new Parada(direccion3);
+		paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		identificador = 1;
+		linea = new Linea(identificador, paradas);
+
+		parada6 = new Parada(direccion3);
+		parada5 = new Parada(direccion2);
+		parada4 = new Parada(direccion1);
+		paradas2 = new Parada[3];
+		paradas2[0] = parada6;
+		paradas2[1] = parada5;
+		paradas2[2] = parada4;
+		identificador2 = 2;
+		linea2 = new Linea(identificador2, paradas2);
+
+		lineas = new Linea[] { linea, linea2 };
+		red = new Red(lineas);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		direccion1 = null;
+		direccion2 = null;
+		direccion3 = null;
+		parada1 = null;
+		parada2 = null;
+		parada3 = null;
+		paradas = null;
+		identificador = 0;
+		linea = null;
+
+		parada6 = null;
+		parada5 = null;
+		parada4 = null;
+		paradas2 = null;
+		identificador2 = 0;
+		linea2 = null;
+
+		lineas = null;
+		red = null;
+	}
+
+	@Test
+	public void infoParadasCorrectoTest() {
+		int radio = 200;
+		Linea info[] = new Linea[] { linea, linea2 };
+		Linea infoVuelta[] = red.infoParadas(direccion1, radio);
+		assertNotNull(direccion1);
+		assertArrayEquals(info, infoVuelta);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void infoParadasConDireccionNullTest() {
+		int radio = 200;
+		red.infoParadas(null, radio);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void infoParadasConRadioNegativoTest() {
+		int radio = -1;
+		red.infoParadas(direccion1, radio);
+	}
+
+	@Test
+	public void getDistanciaParadasCorrectoTest() {
+		@SuppressWarnings("unused")
+		int distancia = red.getDistanciaParadas(parada1, parada5);
+		assertNotNull(parada1);
+		assertNotNull(parada5);
+		assertEquals(6887904, red.getDistanciaParadas(parada1, parada5));
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getDistanciaConPrimerParametroNullTest() {
+		red.getDistanciaParadas(null, parada5);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getDistanciaConSegundoParametroNullTest() {
+		red.getDistanciaParadas(parada1, null);
+	}
+
+}
diff --git a/src/test/java/uva/tds/pr2/equipo10/RedGestionDeLineasTest.java b/src/test/java/uva/tds/pr2/equipo10/RedGestionDeLineasTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..01da72737ac3be175d8dfdc412a4bfefe90bbf05
--- /dev/null
+++ b/src/test/java/uva/tds/pr2/equipo10/RedGestionDeLineasTest.java
@@ -0,0 +1,152 @@
+package uva.tds.pr2.equipo10;
+
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class RedGestionDeLineasTest {
+
+	private DireccionGPS direccion1;
+	private DireccionGPS direccion2;
+	private DireccionGPS direccion3;
+	private Parada parada1;
+	private Parada parada2;
+	private Parada parada3;
+	private Parada paradas[];
+	private int identificador;
+	private Linea linea;
+
+	private Parada parada4;
+	private Parada parada5;
+	private Parada parada6;
+	private Parada paradas2[];
+	private int identificador2;
+	private Linea linea2;
+
+	private Linea[] lineas;
+	private Red red;
+
+
+	@Before
+	public void setUp() throws Exception {
+		direccion1 = new DireccionGPS(20.45, 30.50);
+		direccion2 = new DireccionGPS(30.5, 20.4);
+		direccion3 = new DireccionGPS(20.4498, 30.50);
+		parada1 = new Parada(direccion1);
+		parada2 = new Parada(direccion2);
+		parada3 = new Parada(direccion3);
+		paradas = new Parada[3];
+		paradas[0] = parada1;
+		paradas[1] = parada2;
+		paradas[2] = parada3;
+		identificador = 1;
+		linea = new Linea(identificador, paradas);
+
+		parada6 = new Parada(direccion3);
+		parada5 = new Parada(direccion2);
+		parada4 = new Parada(direccion1);
+		paradas2 = new Parada[3];
+		paradas2[0] = parada6;
+		paradas2[1] = parada5;
+		paradas2[2] = parada4;
+		identificador2 = 2;
+		linea2 = new Linea(identificador2, paradas2);
+
+		lineas = new Linea[] { linea, linea2 };
+		red = new Red(lineas);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		direccion1 = null;
+		direccion2 = null;
+		direccion3 = null;
+		parada1 = null;
+		parada2 = null;
+		parada3 = null;
+		paradas = null;
+		identificador = 0;
+		linea = null;
+
+		parada6 = null;
+		parada5 = null;
+		parada4 = null;
+		paradas2 = null;
+		identificador2 = 0;
+		linea2 = null;
+
+		lineas = null;
+		red = null;
+	}
+
+	@Test
+	public void addLineaCorrectoTest() {
+		DireccionGPS d1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS d2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS d3 = new DireccionGPS(20.4498, 30.50);
+		Parada p1 = new Parada(d1);
+		Parada p2 = new Parada(d2);
+		Parada p3 = new Parada(d3);
+		Parada p[] = new Parada[3];
+		p[0] = p1;
+		p[1] = p2;
+		p[2] = p3;
+		int identificador3 = 3;
+		Linea linea3 = new Linea(identificador3, p);
+		red.addLinea(linea3);
+		assertNotNull(linea3);
+		assertEquals(linea3, red.getLinea(2));
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addLineaConLineaNullTest() {
+		red.addLinea(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void addLineaConLineaYaExistenteEnLaRedTest() {
+		red.addLinea(linea);
+	}
+
+	@Test
+	public void getLineaCorrectoTest() {
+		assertEquals(linea, red.getLinea(0));
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void getLineaConPosicionNegativaTest() {
+		red.getLinea(-1);
+	}
+
+	@Test
+	public void removeLineaCorrectoTest() {
+		fail("Quitar en implementación");
+		red.removeLinea(linea);
+		assertNotNull(linea);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void removeLineaConLineaNullTest() {
+		red.removeLinea(null);
+	}
+
+	@Test(expected = IllegalArgumentException.class)
+	public void removeLineaConLineaQueNoEstaEnLaRedTest() {
+		DireccionGPS d1 = new DireccionGPS(20.45, 30.50);
+		DireccionGPS d2 = new DireccionGPS(30.5, 20.4);
+		DireccionGPS d3 = new DireccionGPS(20.4498, 30.50);
+		Parada p1 = new Parada(d1);
+		Parada p2 = new Parada(d2);
+		Parada p3 = new Parada(d3);
+		Parada p[] = new Parada[3];
+		p[0] = p1;
+		p[1] = p2;
+		p[2] = p3;
+		int identificador3 = 3;
+		Linea linea3 = new Linea(identificador3, p);
+		red.removeLinea(linea3);
+	}
+}
diff --git a/ivagonz-antroma-practica2/src/uva/tds/pr2/equipo10/Linea.java b/src/test/java/uva/tds/pr2/equipo10/Unit.java
similarity index 57%
rename from ivagonz-antroma-practica2/src/uva/tds/pr2/equipo10/Linea.java
rename to src/test/java/uva/tds/pr2/equipo10/Unit.java
index 2cb7b4fa1895d9451831be70dd27b131a8802e29..f70e292ab0b1023368ec35b92004b9990d65e976 100644
--- a/ivagonz-antroma-practica2/src/uva/tds/pr2/equipo10/Linea.java
+++ b/src/test/java/uva/tds/pr2/equipo10/Unit.java
@@ -1,5 +1,6 @@
 package uva.tds.pr2.equipo10;
 
-public class Linea {
+public interface Unit {
 
 }
+