peer code review - se4science · 2020. 6. 2. · simplified gerrit workflow 26 no developer’s...

53
Contemporary Peer Code Review Practices Jeffrey C. Carver Nasir U. Eisty University of Alabama

Upload: others

Post on 24-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Contemporary Peer Code Review Practices

Jeffrey C. CarverNasir U. Eisty

University of Alabama

Page 2: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

2

Can you spot the mistakes?

Page 3: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

// file: IVR.CPPvoid IVR(){

//press 1 for account balance, 2 for last transaction,//3 for last statement, any other for operatorplay_prompt();

int key_pressed= get_user_choice();if(key_pressed ==1){

play_account_balance();}else if(key_pressed =2){

play_last_transaction();}else if(key_pressed ==3){

play_last_statement();}else transfer_to_operator();

}

3

Assignment operatorinstead of comparison

12345678910111213141516171819202122

Page 4: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

//file: printer.javaif (user.isAuthenticated){

userAccess = checkUserAuthorization(user);

//if user has access to printer if(user.isAuthenticated && userAccess.printer)

printUsageReport ();else

emailUsageReport();}

4

1234567891011

Redundant check

Page 5: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

//file: UserStats.java

String[] listOfUsers = getUsersList();

//print all the users name

for(int i=1;i< listOfUsers.length();i++)

System.out.println(“User# “+i +”: “+listOfUsers[i]);

5

123456

Will not print first user

Page 6: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Do you think only novice developers make those

mistakes?

Page 7: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

7

Page 8: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

8

Page 9: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

9

Page 10: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

10

Page 11: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

To Err is Human

Page 12: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

12

Page 13: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Typical Code Review Workflow

13

Page 14: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

14

Writes Reviews

RequestsReview

Edits

Abandon

Merge

Page 15: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Mailing List Code Review

15

Page 16: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

16

Page 17: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Contemporary Code Reviews

17

Page 18: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

18

Page 19: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

19

IssuesIdentified in code review

Page 20: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

20

Page 21: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Scientific Code Review

21

Page 22: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

22

Page 23: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

23

Page 24: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

24

Page 25: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

25

Page 26: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Simplified Gerrit workflow

26

No

Developer’s Local Branch

Main project branch

Reviewer

Approved

Developer

Yes

Push to mainPull to local branch

Push to Gerrit

Notifies developer

ReviewsCode

Notifies

Page 27: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Gerrit Repository Structure

27

Page 28: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Gerrit Terminology

• Change:• The unit of review• Every git commit has a change-id• Results in a single commit when merged to the Git

repository• Change numbers are unique and never change

• Patch Set:• A revision of a Change• Each time a Change is modified, it will receive a

new patch set• Patch set numbering starts from 1 • Technically, a patch set is a unique Git commit

28

Page 29: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Gerrit Terminology• Label

• A rating category that allows or blocks progress of a change. (i.e. Build, Deploy, Code Review)

• Score• The rating given to a label. • Code review spans +2 to -2

• Submit• Merges a change into the repository - until this happens, the

code is outside of the repo

• Abandon• Archives a change (can be restored later)

• Project• A Git repository

29

Page 30: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Review Scores

Score Description Action

-2 This shall not be merged Blocks submit

-1 I would prefer this is not merged as is None

0 No score None

+1 Looks good to me, but someone else must approve

None

+2 Looks good to me, approved Allows submit

30

Page 31: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Gerrit Installation

http://bit.ly/Gerrit-Tutorial-SEA18

31

Page 32: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Code Review Exercise 1

Page 33: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

• Pair with a neighbor

• Download dayOfYear.java from: http://SE4Science.org/CodeReview-SEA/

• Upload code to the “exercise”repositoryyou created while setting up GerritHub

• Add your partner as a reviewer

• Review each other’s code

33

Page 34: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Discussion

Page 35: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

35

Don’t repeat yourself

Page 36: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

36

Comments Where Needed

Page 37: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

37

Fail Fast

February 9, 2019

dayOfYear(1,9,2019) dayOfYear(9,2,2019)

dayOfYear(2019,2,9)

Page 38: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

38

Fail Faster

dayOfYear(String month, int dayOfMonth, int year) { ...

}

Page 39: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

39

Avoid Magic Numbers

Page 40: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

40

One Purpose for each variable

Page 41: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Code Review Exercise 2

Page 42: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

• Keep the same pair

• Download leapYear.java from: http://SE4Science.org/CodeReview-SEA/

• Upload the code to the “exercise”repository you created while setting up GerritHub

• Add your partner as a reviewer

• Review each other’s code 42

Page 43: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

43

Use Good Names

secondsPerDay = 86400

Page 44: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

44

Magic Numbers

Page 45: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

45

Use Whitespace to Help the Reader

Page 46: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

46

Bugs hidden in this code

Page 47: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Other Code Review Tools

Page 48: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Code Review Tools

48

Gerrit: https://code.google.com/p/gerrit/

Review Board: https://www.reviewboard.org/

Phabricator: https://phabricator.org/

Crucible: https://www.atlassian.com/software/crucible

Page 49: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Feedback And Discussion

Page 50: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Feedback

http://bit.ly/SEA-CR-Tutorial-Feedback

50

Page 51: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

51

Code Review

Page 52: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

52

Collaborate?

Jeffrey [email protected]

Page 53: Peer Code Review - SE4Science · 2020. 6. 2. · Simplified Gerrit workflow 26 No Developer’s Local Branch Main project branch Reviewer Approved Developer Yes Pull to local branch

Photo Credits

- http://incolors.club/collectionfdwn-female-computer-programmer.htm

- http://tech.trivago.com/img/posts/code-review/code-review-3.jpg

- http://www.protectitip.com/wp-content/uploads/2014/11/Software-Code.jpg

- http://www.computerhistory.org/atchm/wp-content/uploads/2013/11/marked_up_listing-542x404.jpg

- https://static1.squarespace.com/static/53798babe4b0fca9449cf693/t/53f78774e4b0ce4d05e4152f/1408730997720/

- https://residentialwastesystems.com/wp-content/uploads/2016/10/dumpsters-trumbull-ct.jpg• http://www.hipaasecurenow.com/index.php/beckers-

hipaa-compliance-8-best-practices/• https://commons.wikimedia.org/wiki/File:Collaborati

on_(9601759166).jpg#metadata 53