SECTION 1: CODE REASONING + VERSION CONTROL

Slides:



Advertisements
Similar presentations
CSE 331 Software Design & Implementation Dan Grossman Winter 2014 Lecture 2 – Reasoning About Code With Logic 1CSE 331 Winter 2014.
Advertisements

A Simple Introduction to Git: a distributed version-control system CS 5010 Program Design Paradigms “Bootcamp” Lesson 0.5 © Mitchell Wand, This.
Version Control with git. Version Control Version control is a system that records changes to a file or set of files over time so that you can recall.
1 CSE 390 “Lecture 11” Version control with Git slides created by Ruth Anderson, images from
Git for Version Control These slides are heavily based on slides created by Ruth Anderson for CSE 390a. Thanks, Ruth! images taken from
SECTION 1: VERSION CONTROL + ECLIPSE slides borrowed and adapted from Alex Mariakis and CSE 390a.
Subversion. What is Subversion? A Version Control System A successor to CVS and SourceSafe Essentially gives you a tracked, shared file system.
علیرضا فراهانی استاد درس: جعفری نژاد مهر Version Control ▪Version control is a system that records changes to a file or set of files over time so.
Introduction to Version Control
Version Control with Subversion Quick Reference of Subversion.
With Mercurial and Progress.   Introduction  What is version control ?  Why use version control ?  Centralised vs. Distributed  Why Mercurial ?
Git – versioning and managing your software L. Grewe.
GIT An introduction to GIT Source Control. What is GIT (1 of 2) ▪ “Git is a free and open source distributed version control system designed to handle.
Warmup A programmer’s wife tells him, “Would you mind going to the store and picking up a loaf of bread? Also, if they have eggs, get a dozen.” The programmer.
Object-Oriented Software Engineering Using UNIX groups and Subversion Estimated Time: minutes “Unix is user-friendly. It's just very selective about.
Version Control. What is it? Software to help keep track of changes made to files Tracks the history of your work Helps you collaborate with others.
Source Control Primer Patrick Cozzi University of Pennsylvania CIS Spring 2012.
…using Git/Tortoise Git
Git workflow and basic commands By: Anuj Sharma. Why git? Git is a distributed revision control system with an emphasis on speed, data integrity, and.
SWEN 302: AGILE METHODS Roma Klapaukh & Alex Potanin.
Information Systems and Network Engineering Laboratory II DR. KEN COSH WEEK 1.
Version Control.
Copyright © 2015 – Curt Hill Version Control Systems Why use? What systems? What functions?
SECTION 2: CODE REASONING + PROGRAMMING TOOLS slides borrowed and adapted from Alex Mariakis and CSE 390a.
1 GIT NOUN \’GIT\ A DISTRIBUTED REVISION CONTROL AND SOURCE CODE MANAGEMENT (SCM) SYSTEM WITH AN EMPHASIS ON SPEED. INITIALLY DESIGNED AND DEVELOPED BY.
A Simple Introduction to Git: a distributed version-control system CS 5010 Program Design Paradigms “Bootcamp” Lesson 0.5 © Mitchell Wand, This.
Intro to Git presented by Brian K. Vagnini Hosted by.
Introduction to Git Yonglei Tao GVSU. Version Control Systems  Also known as Source Code Management systems  Increase your productivity by allowing.
SECTION 1: CODE REASONING + VERSION CONTROL slides borrowed and adapted from Alex Mariakis and CSE 390a Justin Bare & Deric Pang.
SECTION 2: HW3 Setup slides borrowed and adapted from Alex Mariakis and CSE 390a.
Information Systems and Network Engineering Laboratory I DR. KEN COSH WEEK 1.
Lecture 5 Remotes Sign in on the attendance sheet! Turn in homework at the front!
1 Ivan Marsic Rutgers University LECTURE 2: Software Configuration Management.
Collaborative Git An introduction to Git with others
SECTION 2: HW3 Setup slides borrowed and adapted from Alex Mariakis,CSE 390a,Justin Bare, Deric Pang, Erin Peach, Vinod.
Source Control Dr. Scott Schaefer. Version Control Systems Allow for maintenance and archiving of multiple versions of code / other files Designed for.
CS5220 Advanced Topics in Web Programming Version Control with Git
Information Systems and Network Engineering Laboratory II
I Don’t Git It: A beginner’s guide to git Presented by Mathew Robinson
Version Control with Subversion
A Simple Introduction to Git: a distributed version-control system
LECTURE 2: Software Configuration Management
Keeping track of all the copies of your files
Code Management Releases
Source Control Dr. Scott Schaefer.
CSE 374 Programming Concepts & Tools
A Simple Introduction to Git: a distributed version-control system
CSE 303 Concepts and Tools for Software Development
CS5220 Advanced Topics in Web Programming Version Control with Git
Concurrent Version Control
CSE 331 Software Design & Implementation
Version Control System
Distributed Version Control with git
Source Code Management
LECTURE 3: Software Configuration Management
Introduction to Configuration Management
ECONOMETRICS ii – spring 2018
slides borrowed and adapted from Alex Mariakis and CSE 390a
Getting Started with Git and Bitbucket
Reasoning About Code; Hoare Logic
Version control with Git
SECTION 1: CODE REASONING + VERSION CONTROL + ECLIPSE
Git CS Fall 2018.
Version Control System - Git
Section 1: Code Reasoning
Git started with git: 2018 edition
Version Control with Git and GitHub
Review of Previous Lesson
1. GitHub.
Presentation transcript:

SECTION 1: CODE REASONING + VERSION CONTROL CSE 331 – Spring 2018 slides borrowed and adapted from Alex Mariakis and CSE 390a, CSE 331 lecture slides, and Justin Bare and Deric Pang Section 1 slides.

OUTLINE Introductions Code Reasoning Version control Forward Reasoning Backward Reasoning Weaker vs. Stronger statements Version control

REASONING ABOUT CODE Two purposes Prove our code is correct Understand why code is correct Forward reasoning: determine what follows from initial conditions Backward reasoning: determine sufficient conditions to obtain a certain result

TERMINOLOGY The program state is the values of all the (relevant) variables An assertion is a logical formula referring to the program state (e.g., contents of variables) at a given point An assertion holds for a program state if the formula is true when those values are substituted for the variables

TERMINOLOGY An assertion before the code is a precondition – these represent assumptions about when that code is used An assertion after the code is a postcondition – these represent what we want the code to accomplish

FORWARD REASONING Given: Precondition Finds: postcondition for given precondition. Aka Finds program state after executing code, when using given assumptions of program state before execution.

FORWARD REASONING // {x >= 0, y >= 0} y = 16; // x = x + y x = sqrt(x) y = y - x

FORWARD REASONING // {x >= 0, y >= 0} y = 16; x = x + y // x = sqrt(x) y = y - x

FORWARD REASONING // {x >= 0, y >= 0} y = 16; x = x + y // {x >= 16, y = 16} x = sqrt(x) // y = y - x

FORWARD REASONING // {x >= 0, y >= 0} y = 16; x = x + y // {x >= 16, y = 16} x = sqrt(x) // {x >= 4, y = 16} y = y - x //

FORWARD REASONING // {x >= 0, y >= 0} y = 16; x = x + y // {x >= 16, y = 16} x = sqrt(x) // {x >= 4, y = 16} y = y - x // {x >= 4, y <= 12}

FORWARD REASONING // {true} if (x>0) { // abs = x } else { abs = -x

FORWARD REASONING // {true} if (x>0) { // {x > 0} abs = x // } else { // {x <= 0} abs = -x

FORWARD REASONING // {true} if (x>0) { // {x > 0} abs = x else { // {x <= 0} abs = -x // {x <= 0, abs = -x} //

FORWARD REASONING // {true} if (x>0) { // {x > 0} abs = x else { // {x <= 0} abs = -x // {x <= 0, abs = -x} // {x > 0, abs = x OR x <= 0, abs = -x} //

FORWARD REASONING // {true} if (x>0) { // {x > 0} abs = x else { // {x <= 0} abs = -x // {x <= 0, abs = -x} // {x > 0, abs = x OR x <= 0, abs = -x} // {abs = |x|}

BACKWARD REASONING Given: Postcondition Finds: The weakest precondition for given postcondition.

ASIDE: WEAKEST PRECONDTION? What is weakest precondition? Well, precondition is just a statement, so…Better ask what makes a statement weaker vs. Stronger?

WEAKER VS. STRONGER Weaker statements = more general Stronger statements = more specific aka more informational Stronger statements are more restrictive Ex: x = 16 is stronger than x > 0 Ex: “Alex is an awesome TA” is stronger than “Alex is a TA” If A implies B, A is stronger and B is weaker. If B implies A, B is stronger and A is weaker. If neither, then A and B not comparable.

BACKWARD REASONING Given: Postcondition Finds: The weakest precondition for given postcondition. So, finds most general assumption code will use to get given postcondition.

BACKWARD REASONING // a = x + b; c = 2b - 4 x = a + c // {x > 0}

BACKWARD REASONING // a = x + b; c = 2b - 4 // {a + c > 0} x = a + c // {x > 0}

BACKWARD REASONING // a = x + b; // {a + 2b – 4 > 0} c = 2b - 4 x = a + c // {x > 0}

BACKWARD REASONING // Backward reasoning is used to determine the // weakest precondition // {x + 3b - 4 > 0} a = x + b; // {a + 2b – 4 > 0} c = 2b - 4 // {a + c > 0} x = a + c // {x > 0}

HOARE TRIPLES Hoare triples are just an extension of logical implication Hoare triple: {P} S {Q} P = precondition S = single line of code Q = postcondition A Hoare triple can be valid or invalid Valid if for all states for which P holds, executing S always produces a state for which Q holds Invalid otherwise

HOARE TRIPLE EXAMPLE #1 {x != 0} y = x*x; {y > 0} Is this valid?

HOARE TRIPLE EXAMPLE #1 {x != 0} y = x*x; {y > 0} Is this valid? Yes

HOARE TRIPLE EXAMPLE #2 Is {false} S {Q} a valid Hoare triple?

HOARE TRIPLE EXAMPLE #2 Is {false} S {Q} a valid Hoare triple? Yes. Because P is false, there are no conditions when P holds Therefore, for all states where P holds (i.e. none) executing S will produce a state in which Q holds

HOARE TRIPLE EXAMPLE #3 Is {P} S {true} a valid Hoare triple?

HOARE TRIPLE EXAMPLE #3 Is {P} S {true} a valid Hoare triple? Yes. Any state for which P holds that is followed by the execution of S will produce some state For any state, true always holds (i.e. true is true)

VERSION CONTROL

WHAT IS VERSION CONTROL? Also known as source control/revision control System for tracking changes to code Software for developing software Essential for managing projects See a history of changes Revert back to an older version Merge changes from multiple sources We’ll be talking about git/GitLab, but there are alternatives Subversion, Mercurial, CVS Email, Dropbox, USB sticks (don’t even think of doing this) Ask: who’s heard of / used version control before? Motivate: synchronization among devs, seeing history of project, making backups Extra motivation: have you ever seen what happened to large projects that DON’T use vc? (not just software either) Especially useful when multiple devs, but useful even for your own projects Using it for projects in this class. Worth the effort to learn, b/c you will use it in future classes and every internship and job. Easy to: Merge multiple developers’ changes No more “Here’s my list of changes … at least I think that’s everything… now what did you change?”) Avoid overwriting each others’ changes No more “don’t touch this file – I’m working on it!” No more “AHHHHHH, you just erased my last 15 hours of work!!!” Revert back to an older version of a file No more “I need to undo these changes… what was there before?”) See a history of changes No more “How and when did this bug sneak in?” Version control describes a TYPE of software (just like a text editor, Internet browser, …) Just like there are lots of text editors and browsers, there are lots of version control systems; we use Subversion Each is a little diff, but once you know one it’s easy to learn others

VERSION CONTROL ORGANIZATION git Working copy Repository A repository stores the master copy of the project Someone creates the repo for a new project Then nobody touches this copy directly Lives on a server everyone can access Each person clones her own working copy Makes a local copy of the repo You’ll always work off of this copy The version control system syncs the repo and working copy (with your help)

REPOSITORY Can create the repository anywhere Can be on the same computer that you’re going to work on, which might be ok for a personal project where you just want rollback protection But, usually you want the repository to be robust: On a computer that’s up and running 24/7 Everyone always has access to the project On a computer that has a redundant file system No more worries about that hard disk crash wiping away your project! We’ll use CSE GitLab – very similar to GitHub but tied to CSE accounts and authentication

VERSION CONTROL COMMON ACTIONS Working copy Repository git push pull Most common commands: commit / push integrate changes from your working copy into the repository pull integrate changes into your working copy from the repository

VERSION CONTROL UPDATING FILES Working copy Repository git push pull In a bit more detail: You make some local changes, test them, etc., then… git add – tell git which changed files you want to save in repo git commit – save all files you’ve “add”ed in the local repo copy as an identifiable update git push – synchronize with the GitLab repo by pushing local committed changes

VERSION CONTROL COMMON ACTIONS (CONT.) Working copy Repository git push pull Other common commands: add, rm add or delete a file in the working copy just putting a new file in your working copy does not add it to the repo! still need to commit to make permanent Summary: create repo, create workspace, repeatedly update & commit Remember to ask for questions!

THIS QUARTER We distribute starter code by adding it to your GitLab repo. You retrieve it with git clone the first time then git pull for later assignments You will write code using Eclipse You turn in your files by adding them to the repo, committing your changes, and eventually pushing accumulated changes to GitLab You “turn in” an assignment by tagging your repo and pushing the tag to GitLab You will validate your homework by SSHing onto attu, cloning your repo, and running an Ant build file

Working copy for grading 331 VERSION CONTROL create/push Repository pull commit/push Working copy for grading clone/pull add Working copy

AVOIDING GIT PROBLEMS For the projects in this class, you should never have to merge Except when the staff pushes out a new assignment Rules of thumb for working in multiple places: Each time before you start working on your assignment, git pull to get the latest code Each time after you are done working for a while, git add/commit/push in order to update the repository with the latest code