{"id":1711,"date":"2016-11-26T16:37:41","date_gmt":"2016-11-26T15:37:41","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=1711"},"modified":"2023-06-07T15:23:45","modified_gmt":"2023-06-07T13:23:45","slug":"snakes-exploring-pipelines-a-system-engineering-and-management-project","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/11\/26\/snakes-exploring-pipelines-a-system-engineering-and-management-project\/","title":{"rendered":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project"},"content":{"rendered":"<h3>Part 0: Introduction<\/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>Once upon a time, which was about one and a half months ago, an illustrious group of three students found together, united by the shared interest to learn more about systems engineering and software development in the aptly named course \u201cSystem Engineering and Management\u201d.<\/p>\n<p>As we had to choose a project to work on for the course, we decided to explore modern, professional development methodologies as employed in software development companies.<br \/>\nIn particular, we wanted to focus on pair programming and test driven development with unit tests for the actual coding, as well as using a build and deployment pipeline for continuous integration, supported by tools and a version control system.<br \/>\n<!--more--><br \/>\nSo, having decided that, the only remaining part we needed for our project was a concrete application to program.<\/p>\n<p>After a long, emotional discussion (which lasted for at least ten minutes), we agreed on implementing a timeless classic, uniquely suitable for working with pipelines: Snake! (Actually, there was another application we considered beforehand, but we don\u2019t talk about that anymore.)<\/p>\n<figure id=\"attachment_1714\" aria-describedby=\"caption-attachment-1714\" style=\"width: 395px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1714\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/11\/26\/snakes-exploring-pipelines-a-system-engineering-and-management-project\/0_1\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1.jpg\" data-orig-size=\"410,410\" 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=\"0_1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1.jpg\" class=\"wp-image-1714\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1-300x300.jpg\" alt=\"A python. (Because snakes. Not the language.) Source: https:\/\/rashmanly.files.wordpress.com\/2008\/10\/1439659.jpg\" width=\"395\" height=\"395\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1-300x300.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1-150x150.jpg 150w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_1.jpg 410w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/a><figcaption id=\"caption-attachment-1714\" class=\"wp-caption-text\">A python. (Because snakes. Not the language.)<\/figcaption><\/figure>\n<p>Snake promised an easy-to-code, basic system with the possibility of future additions, since the main focus was the process of development and deployment, as mentioned before.<\/p>\n<p>Finding common ground in our experience with Java as programming language for the application itself, we chose fitting tools and frameworks. JUnit was an obvious choice for test driven development, as was Git(hub) for code versioning. For setting up our tool pipeline, we wanted to try out Gradle for build automation and the wide-spread Jenkins server for continuous integration. Regarding pair programming, we had to settle with ourselves, naturally.<\/p>\n<p>Starting off with what we had most experience in, we designed the architecture for our Snake game with the help of time-tested tools such as: Bidirectional face-to-face communication, a whiteboard, and associated markers with varying output colours. The result of this task (which might be supplemented with a proper UML-diagram in future entries):<\/p>\n<figure id=\"attachment_1717\" aria-describedby=\"caption-attachment-1717\" style=\"width: 656px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2.jpg\"><img loading=\"lazy\" decoding=\"async\" data-attachment-id=\"1717\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/11\/26\/snakes-exploring-pipelines-a-system-engineering-and-management-project\/0_2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2.jpg\" data-orig-size=\"1600,1200\" 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=\"0_2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2-1024x768.jpg\" class=\"wp-image-1717 size-large\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2-1024x768.jpg\" alt=\"Take note of the highly accurate anatomical approximation of a snake.\" width=\"656\" height=\"492\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2-1024x768.jpg 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2-300x225.jpg 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2-768x576.jpg 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/11\/0_2.jpg 1600w\" sizes=\"auto, (max-width: 656px) 100vw, 656px\" \/><\/a><figcaption id=\"caption-attachment-1717\" class=\"wp-caption-text\">Take note of the highly accurate anatomical approximation of a snake.<\/figcaption><\/figure>\n<p>The rules of Snake are probably common knowledge, as such we will only provide a concise overview of the architecture for now: All entities off the game will be objects controlled by the game loop and visualized in a user interface. The Gameobject will be the parent class for the Bodypart-objects which form the snake, including the head. The Food-object will extend the Gameobject class as well. The snake will move in an Arena object (probably a JFrame).<\/p>\n<p>The game loop executes Gamecontroller \u201cticks\u201d. For each tick, the user input is checked, a new position for the snake is calculated, and the result is be rendered in the user interface.<br \/>\nWhile calculating the new position, the first action is to grow the snake body, if it has eaten the tick before, checking the game over conditions (the snake touching itself or the border \u2639\ufe0f), checking if the snake head reached food, checking the win condition (the snake covers the entire Arena ?) and finally creating a new food object, if the old one was eaten.<\/p>\n<p>Having completed this first architecture draft, next on was setting up and configuring the development environment (Eclipse) and our tool pipeline. The exact workflow for this will be covered in the next blog entries.<\/p>\n<p>Until then, happy slithering.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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, united by the shared interest [&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-1711","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":1740,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2016\/12\/09\/snakes-exploring-pipelines-a-system-engineering-and-management-project-3\/","url_meta":{"origin":1711,"position":0},"title":"Snakes exploring Pipelines &#8211; A \u201cSystem Engineering and Management\u201d Project","author":"Yann Loic Philippczyk","date":"9. December 2016","format":false,"excerpt":"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\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 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","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2016\/12\/entry2-snake.png?resize=525%2C300&ssl=1 1.5x"},"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":1711,"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":1711,"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":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":1711,"position":3},"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":2143,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2017\/03\/08\/of-apache-spark-hadoop-vagrant-virtualbox-and-ibm-bluemix-services\/","url_meta":{"origin":1711,"position":4},"title":"Of Apache Spark, Hadoop, Vagrant, VirtualBox and IBM Bluemix Services &#8211; Part 1 &#8211; Introduction","author":"bh051, cz022, ds168","date":"8. March 2017","format":false,"excerpt":"As part of the lecture \u201cSystem Engineering and Management\u201d in the winter semester 2016\/17, we run a project with Apache Spark and the Apache Hadoop Ecosystem. In this article series firstly we want to introduce Apache Spark and the Apache Hadoop Ecosystem. Furthermore we want to give an overview of\u2026","rel":"","context":"In &quot;Student Projects&quot;","block_context":{"text":"Student Projects","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/student-projects\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":36,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2015\/11\/26\/systems-engineering-and-management-ws-20152016\/","url_meta":{"origin":1711,"position":5},"title":"Systems Engineering and Management WS 2015\/2016","author":"Thomas Pohl","date":"26. November 2015","format":false,"excerpt":"The course Systems Engineering and Management is designed to bridge the gap between theoretical studies in Ultra Large\u00a0Scale Systems\u00a0and\u00a0professional state of the art development. Students should find a platform to explore modern tooling and environments for building, integrating, testing and scaling their applications. It turned out as a good idea\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":"","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\/1711","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=1711"}],"version-history":[{"count":8,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1711\/revisions"}],"predecessor-version":[{"id":24709,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/1711\/revisions\/24709"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=1711"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=1711"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=1711"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=1711"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}