Learning Objectives: Software Engineering - COMP 350
Document Details

Uploaded by FlashyPeachTree7377
Tags
Summary
These learning objectives cover software engineering topics for COMP 350 course. The topics covered include software design, Agile and Scrum methodologies, testing and logging, REST APIs, cloud computing, and containerization with Docker. Concepts such as version control with Git, CI/CD, and soft skills are also included.
Full Transcript
Learning Objectives COMP 350 – Software Engineering 01_Intro Define Software Engineering and understand its breadth. Define software maintenance. 02_Users Define UI and UX and understand the difference. Know what a persona is and how it is used in software design. Know how to craft a user journey...
Learning Objectives COMP 350 – Software Engineering 01_Intro Define Software Engineering and understand its breadth. Define software maintenance. 02_Users Define UI and UX and understand the difference. Know what a persona is and how it is used in software design. Know how to craft a user journey and the types of information that are included in a user journey. 03_Requirements Define user requirements and be able to identify well-crafted and poorly-crafted requirements. Understand how requirements are used in software development Understand how to go about requirements gathering. 04_agileandjira Define Waterfall and understand its limitations. Compare agile and waterfall. Define Agile and understand the eight items in the manifesto. Also be able to identify practices that are Agile and ones that violate Agile principles. APM vs DevOps Understand how Jira can be used for APM, specifically how to add to a backlog, sprint backlog, create a sprint, move items on a storyboard to in progress and done, view the burndown chart for your project ** possible exam question: get a snapshot of your burndown chart and add it to a word doc What a backlog is used for, difference between sprint backlog and backlog 05_ Scrum Define Scrum Describe how scrum follows agile principles. What is a product backlog, what does it contain, how is it used in scrum. Know the two team roles, product owner and scrum master, and understand the responsibilities they have. Understand and be able to make cost estimates for tasks. Define a sprint and understand its purpose. Define Burndown chart and understand its usefulness Understand the purpose and usefulness of the daily scrum (or stand-up) and the retrospective. What are the 3 questions each team member answers during a scrum meeting. Understand the three ceremonies and three artifacts of scrum. 06_UI/Wireframes Identify good and bad examples of user interfaces. Understand some of the processes a UI engineer goes through to design a good UI or identify bad aspects of a ui. Define and create a wireframe. 07 – gradle Understand what packages are, how they are used, and the advantages of using packages. Understand what a gradle project is, and how it is created. How is a gradle java project different from the java projects you have used in the past. Understand some of the purposes of the build.gradle file, specifically the dependencies block and the jar block. Understand what a.jar file is used for Understand what CI/CD stands for Understand why using gradle is valuable for CI/CD (several items were discussed during the gradle exercise) **demonstrate how to build a gradle project in intellij, add a package, add a class to that package, add a test to the test folder, add a rule to build a jar file, build and locate the jar file 08_Design Understand the difference between a domain diagram and a class diagram and be able to create them for a given problem. Understand how each of these diagrams can be used during the software development process. 09_Sprint1Prep 10_Version Control Define Version control What is the difference between Git and GitHub How is your local repository different than your remote repository, and how are they similar Understand the following git commands: status, commit, push, clone, add, pull Understand what a merge conflict is and how to resolve a merge conflict. Understand good practices for using version control Understand how to create a branch protection rule and the benefits and effects of adding a branch rule on the master branch to not allow changes to be made to it without a pull request Understand how to create a branch Understand how to make a pull request and how to approve a pull request Understand how to merge the (remote) master branch into your branch and why that might be helpful/valuable. Understand what I mean by the term ‘feature branch” and why that is a valuable way to distinguish branches 11_Testing and Logging Be able to define and understand the difference between unit testing, integration testing, and end-to-end testing. Generally understand the job duties of a SWE Test Engineer Understand what makes a good/complete set of unit tests for a method, and be able to identify examples of bad unit tests. Also be able to identify bad practices that make code harder to test. Be able to describe some additional testing types used in software engineering Understand what code coverage and mocking means with respect to testing Understand how logging is helpful in testing and debugging production services Know what PII means Understand flaky tests, and give examples of what could cause a test to be flaky. Be able to define Test driven development and understand its benefits Understand what is in a testing plan, its purpose, and be able to write a test that has the required information needed for a testing plan. 12_Refactoring Understand the principles and benefits of refactoring. Have experience with tools that can make refactoring easier (IntelliJ in our case). Understand “code smells”, be able to identify common code smells, and understand how to refactor to fix the problem. 14_REST Understand the difference between front end and back end development. Understand the characteristics of a REST API. Understand how the front end and back end communicate. (how to set up routes and endpoints, front end and back end, GET, POST, PUT, DELETE, and how to put/get information from front end to back end and vice versa) Bring up a Javalin REST server on your local machine and test it. 15_ReleaseCycle Explain the software release cycle and give a possible workflow for accomplishing a software release. Understand the purpose and practice of flag-guarding. Be able to implement flag guarding of a feature. Vocabulary (in the context of software releases): Binary, canary, production, continuous deployment, rolling release, rollback, feature flag, CI/CD 16_Soft Skills Identify some soft skills that are important for SWEs and be able to communicate their benefits. 17_Caching Understand the properties and purpose of a private or local cache Understand the following eviction policies and understand when each might be used: LRU, LFU, FIFO, LIFO Implement a LRU cache, understand the purpose of each data structure used. 19_Cloud Intro Define cloud computing and understand the expected deliverables of a cloud provider, specifically: On-Demand Service, Broad Network Access, Resource Pooling, Rapid Elasticity, Measured Service Understand the benefits of cloud computing. Define and understand load-balancing. Define and understand SLA. Define virtual machine Define Edge Network 23_Docker/CloudContainers What is a container. Understand the difference between containers and virtual machines, and understand the benefits of using containers. Practice creation of a docker file, building of a docker image, and release of an application in containers. Know the purpose of a docker file and the basic instructions that it contains. Given a dockerfile explain the purpose of each of the commands. Practice creation of a docker file, build and run the container using a Docker Engine. Understand the steps you took in our in class lab to run and test a container containing our javalin server. Also on Exam 2: everything Agile/Scrum related.