{"id":1740,"date":"2016-12-09T17:02:53","date_gmt":"2016-12-09T16:02:53","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=1740"},"modified":"2023-06-07T15:23:59","modified_gmt":"2023-06-07T13:23:59","slug":"snakes-exploring-pipelines-a-system-engineering-and-management-project-3","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/","title":{"rendered":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project"},"content":{"rendered":"<h3>Part 2: Initial Coding<\/h3>\n<p><strong> This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. <\/strong><\/p>\n<p>Onwards to the fun part: The actual coding! In this blog entry, we will focus on test-driven development. Like we learned in the course, the very first task to do was to set up unit tests with JUnit, and so we did. As a quick reminder (or an introduction) the basic concept of test driven development:<\/p>\n<p><!--more--><br \/>\nAt first, write a test that fails, in our case in a separate JUnit class. Then, write just enough actual application code so that the test passes, again, in our case by using the \u201cquick fixes\u201d automatically suggested by Eclipse. The last step is to refactor the code in order to improve code quality, without adding any new functionality! These three steps form a single iteration. The development process consists of a constant cycle of these iterations until the entire application is done. Like a snake that moves in a circle. (Not really, but I\u2019ve got a quota for snake-related puns to fulfill.)<\/p>\n<figure id=\"attachment_1741\" aria-describedby=\"caption-attachment-1741\" style=\"width: 407px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-testdrivendev.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1741\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/entry2-testdrivendev\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-testdrivendev.png\" data-orig-size=\"407,401\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry2-testdrivendev\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;The test-driven development process&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-testdrivendev.png\" class=\"size-full wp-image-1741\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-testdrivendev.png\" alt=\"The test-driven development process Source: https:\/\/github.com\/mjhea0\/flaskr-tdd\/blob\/master\/tdd.png\" width=\"407\" height=\"401\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-testdrivendev.png 407w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-testdrivendev-300x296.png 300w\" sizes=\"auto, (max-width: 407px) 100vw, 407px\" \/><\/a><figcaption id=\"caption-attachment-1741\" class=\"wp-caption-text\">The test-driven development process<\/figcaption><\/figure>\n<p>If this process is strictly followed, there can be no part of the application without a corresponding unit test.<\/p>\n<p>The first component of our game we wanted to implement was the basic Gameobject class, containing the coordinates of the object in question. The Gameobject class was planned as an abstract class, but implementing it this way right now would be premature regarding the process. For now, we wrote our first test in JUnit:<\/p>\n<figure id=\"attachment_1743\" aria-describedby=\"caption-attachment-1743\" style=\"width: 656px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1743\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/entry2-test2screenshot\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot.png\" data-orig-size=\"1920,1080\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry2-Test2Screenshot\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;The first (failing) test of many to come&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot-1024x576.png\" class=\"size-large wp-image-1743\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot-1024x576.png\" alt=\"The first (failing) test of many to come\" width=\"656\" height=\"369\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot-1024x576.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot-300x169.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot-768x432.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Test2Screenshot.png 1920w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><figcaption id=\"caption-attachment-1743\" class=\"wp-caption-text\">The first (failing) test of many to come<\/figcaption><\/figure>\n<p>The setup method is in charge of instantiating objects to for the following test. Since the Gameobject class is completely new and empty at the moment, the test for gameObject.getPositionX() == 1 fails, obviously. Consequently, we use the displayed quick fix to create the method. Remember, we have to write just enough code for the test to pass, without adding new functionality! Due to this, we only modify the newly created method by returning 1 (as demanded by the test) instead of 0:<\/p>\n<figure id=\"attachment_1744\" aria-describedby=\"caption-attachment-1744\" style=\"width: 656px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1744\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/entry2-selection_002\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002.png\" data-orig-size=\"1254,647\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry2-Selection_002\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Refactored code. Passing tests. Life&amp;#8217;s good.&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002-1024x528.png\" class=\"size-large wp-image-1744\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002-1024x528.png\" alt=\"Refactored code. Passing tests. Life's good.\" width=\"656\" height=\"338\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002-1024x528.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002-300x155.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002-768x396.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-Selection_002.png 1254w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><figcaption id=\"caption-attachment-1744\" class=\"wp-caption-text\">Refactored code. Passing tests. Life&#8217;s good.<\/figcaption><\/figure>\n<p>And there we have it, our first lines of test-driven coding. The following iterations consisted (among others) of creating classes for the snake\u2019s body parts, head and food, all inheriting from Gameobject, as well as the Gamecontroller, movement mechanics etc, with every new or changed part of the code preceded by tests. In the beginning, this unfamiliar process required constant attention, in order to not \u201cjust quickly add\u201d code without writing a test first:<\/p>\n<figure id=\"attachment_1745\" aria-describedby=\"caption-attachment-1745\" style=\"width: 656px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1745\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/entry-2selection_004\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004.png\" data-orig-size=\"1047,536\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry-2Selection_004\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Adding code for position y without a test -&gt; Snake does not approve!&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004-1024x524.png\" class=\"size-large wp-image-1745\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004-1024x524.png\" alt=\"Adding code for position y without a test -&gt; Snake does not approve!\" width=\"656\" height=\"336\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004-1024x524.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004-300x154.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004-768x393.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry-2Selection_004.png 1047w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><figcaption id=\"caption-attachment-1745\" class=\"wp-caption-text\">Adding code for position y without a test -&gt; Snake does not approve!<\/figcaption><\/figure>\n<p>However, after a while, and thanks to the power of pair programming, we managed to get used to the process and stick to it. The benefits were obvious at the end of the session: When we were done developing for the day, we were confident that we had well written, working, and tested code. Some of the tests for the code written until now:<\/p>\n<figure id=\"attachment_1746\" aria-describedby=\"caption-attachment-1746\" style=\"width: 656px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1746\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/entry2-tests\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests.png\" data-orig-size=\"1316,639\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry2-tests\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;Note that all the tests must pass, before you\u2019re allowed to call it a day&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests-1024x497.png\" class=\"size-large wp-image-1746\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests-1024x497.png\" alt=\"Note that all the tests must pass, before you\u2019re allowed to call it a day\" width=\"656\" height=\"318\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests-1024x497.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests-300x146.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests-768x373.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-tests.png 1316w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><figcaption id=\"caption-attachment-1746\" class=\"wp-caption-text\">Note that all the tests must pass, before you\u2019re allowed to call it a day<\/figcaption><\/figure>\n<p>But wait, there was one last thing to do: Pushing the code to our Github Repository! As the work done today was the only source of changes to the code since the last time, we only had to add the new files to the git index, committing the changes and pushing them to our repository (found <a href=\"https:\/\/github.com\/ina-demarco\/snake\">here<\/a>).<\/p>\n<figure id=\"attachment_1747\" aria-describedby=\"caption-attachment-1747\" style=\"width: 643px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1747\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/entry2-snake\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png\" data-orig-size=\"643,369\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"entry2-snake\" data-image-description=\"\" data-image-caption=\"&lt;p&gt;A snake looking forward towards the next task, after having performed several incremental test-driven programming iterations&lt;\/p&gt;\n\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png\" class=\"size-full wp-image-1747\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png\" alt=\"A snake looking forward towards the next task, after having performed several incremental test-driven programming iterations Source: http:\/\/cdn1.arkive.org\/media\/0F\/0F35A02E-58A1-408B-B259-88C1E319B1C3\/Presentation.Large\/Curl-snake-coiled.jpg\" width=\"643\" height=\"369\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png 643w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake-300x172.png 300w\" sizes=\"auto, (max-width: 643px) 100vw, 643px\" \/><\/a><figcaption id=\"caption-attachment-1747\" class=\"wp-caption-text\">A snake looking forward towards the next task, after having performed several incremental test-driven programming iterations<\/figcaption><\/figure>\n<p>This concludes our entry for today. See you round next time, and don\u2019t forget to write your tests.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Part 2: Initial Coding This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Onwards to the fun part: The actual coding! In this blog entry, we will focus on test-driven development. Like we learned in the course, the [&hellip;]<\/p>\n","protected":false},"author":58,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,22,651,2],"tags":[],"ppma_author":[698],"class_list":["post-1740","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-student-projects","category-system-designs","category-system-engineering"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1711,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/11\/26\/snakes-exploring-pipelines-a-system-engineering-and-management-project\/","url_meta":{"origin":1740,"position":0},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"26. November 2016","format":false,"excerpt":"Part 0: Introduction This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Once upon a time, which was about one and a half months ago, an illustrious group of three students found together,\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"A python. (Because snakes. Not the language.) Source: https:\/\/rashmanly.files.wordpress.com\/2008\/10\/1439659.jpg","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1-300x300.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":1758,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/01\/12\/snakes-exploring-pipelines-a-system-engineering-and-management-project-5\/","url_meta":{"origin":1740,"position":1},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"12. January 2017","format":false,"excerpt":"Part 4: Jenkins and Wrap Up This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Our first blog entry for this year will at the same time be the final one for this\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/01\/jenkins_code-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/01\/jenkins_code-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2017\/01\/jenkins_code-1.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1729,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/08\/snakes-exploring-pipelines-a-system-engineering-and-management-project-2\/","url_meta":{"origin":1740,"position":2},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"8. December 2016","format":false,"excerpt":"Part 1: Tool Setup This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. Welcome to the next part our project, on its way to become the Snake game with the very best underlying\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/blue-krait.jpg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":3397,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2018\/03\/28\/automated-unit-and-gui-testing-for-android-in-jenkins\/","url_meta":{"origin":1740,"position":3},"title":"Automated Unit- and GUI-Testing for Android in Jenkins","author":"Benedikt Schrade","date":"28. March 2018","format":false,"excerpt":"Related articles:\u00a0\u25baTake Me Home - Project Overview\u00a0 \u25baCI\/CD infrastructure: Choosing and setting up a server with Jenkins as Docker image\u00a0\u25baAndroid SDK and emulator in Docker for testing\u00a0 \u00a0\u25baTesting a MongoDB with NodeJS, Mocha and Mongoose In this article we would like to describe, how to write unit- and gui-tests for\u2026","rel":"","context":"In &quot;Mobile Apps&quot;","block_context":{"text":"Mobile Apps","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/mobile-apps\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1751,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/22\/snakes-exploring-pipelines-a-system-engineering-and-management-project-4\/","url_meta":{"origin":1740,"position":4},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"22. December 2016","format":false,"excerpt":"Part 3: Coding Guidelines This series of blog entries describes a student project focused on developing an application by using methods like pair programming, test driven development and deployment pipelines. An important part of any professional software development process (like ours :D ) are coding guidelines and methodologies, so we\u2019ll\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"As a visualization of badly developed code: Spaghetti-snakes Source: http:\/\/lh5.ggpht.com\/-Nb0b-coQ1tU\/UsZSC0STOKI\/AAAAAAAAu2I\/F2ehNp977Ww\/narcisse-snake-pits-6%25255B2%25255D.jpg?imgmax=800","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/spaghettiSnakes.jpg?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":556,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/05\/27\/test-driven-development-with-node-js\/","url_meta":{"origin":1740,"position":5},"title":"Test Driven Development with Node.js","author":"Roman Kollatschny","date":"27. May 2016","format":false,"excerpt":"Test-Driven Development with Mocha and Chai in Node.js","rel":"","context":"In &quot;Rich Media Systems&quot;","block_context":{"text":"Rich Media Systems","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/interactive-media\/rich-media-systems\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":698,"user_id":58,"is_guest":0,"slug":"yp007","display_name":"Yann Loic Philippczyk","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/1417bdd3183c4e56c15d9942de2b27a306ca0e2e6bbd14669933523fd781d806?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1740","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/58"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=1740"}],"version-history":[{"count":2,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1740\/revisions"}],"predecessor-version":[{"id":1748,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1740\/revisions\/1748"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=1740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=1740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=1740"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=1740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}