34
ECE 3574: Applied Software Design Changwoo Min 1

ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

ECE 3574: Applied Software Design

Changwoo Min

1

Page 2: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Welcome to ECE 3574•  Applied Software Design

•  CRN 13397

•  Web site: https://computing.ece.vt.edu/~changwoo/ECE3574-2020S/

•  Instructor: Changwoo Min, [email protected]

2

Page 3: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Today’s schedule•  About your instructor

•  Description of the course

•  Administrative details

•  Expectations

•  Course Tools Setup

3

Page 4: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

About me•  Changwoo Min

•  Assistant Professor at ECE @ VT

•  Web site: https://multics69.github.io/

•  Email: [email protected]

•  Office: Durham 333

4

Page 5: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

My research interests•  Many-core performance scalability of operating system

•  What happen if we run Linux on 448-core machine?

•  Will your application run 448x faster?

•  Storage performance on blazing fast storage device

•  What happen if storage performance is becoming closer to DRAM

performance?

•  Will your application achieve DRAM-like IO performance?

•  System security

•  Are you sure if your hardware/software is not hacked?

5

Page 6: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Some of my open source projects•  MV-RLU: Scalable Concurrent Programming Framework

•  Written in C

•  SOLROS: Operating System for Heterogeneous Computing

•  Written in C and C++

•  Mosaic: Graph processing engine

•  Written in C++

•  FxMark: File system benchmark

•  Written in C and Python

•  Juxta: Automatic bug finding tool in linux file systems

6

Page 7: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Communication•  Course website

•  https://computing.ece.vt.edu/~changwoo/ECE3574-2020S/

•  syllabus, schedule, notes, etc.

•  primary way materials are distributed.

•  GitHub

•  https://github.com

•  distribute starter code, demonstrate progress

•  share code with instructors/TAs

•  how you submit your assignments

7

Page 8: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Communication•  Canvas

•  https://canvas.vt.edu/courses/104629

•  grades posted

•  Piazza

•  https://piazza.com/class/k5lszznhxhm3o0

•  use it to ask (and answer) questions

•  forum/wiki like software for QA, polls, announcements

•  replaces email listserv, but has a configurable email digest

8

Page 9: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Course objectives•  Use software design patterns and application programming interface

(API) specifications to implement efficient and portable software.

•  Design and implement multi-threaded and multi-process applications

that rely on standardized inter-process communication and

synchronization mechanisms.

•  Design and implement complex software applications based on portable

software frameworks and event-driven programming.

•  Design, implement, and perform testing strategies including unit and

integration testing.

9

Page 10: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Course objectives•  In short, practice to design and implement large-scale software

•  Q: Lines of code of your largest software written in C/C++?

1. < 500 lines of code

2. < 1,000 lines of code

3. < 5,000 lines of code

4. > 10,000 lines of code

10

Page 11: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Course topics•  Generics and containers

•  Inheritance and polymorphism

•  Unit and integration testing

•  Design patterns

•  Using class-based software libraries

•  Event-driven programming

•  Concurrency: processes and threads

•  Communication using shared memory and messages

11

Page 12: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Prerequisites•  ECE 2574 Data Structures and Algorithms. You are expected to be

competent in the basics of programming with C++ and the use of data

structures and algorithms to solve problems.

•  It is helpful to be familiar with Unix systems (e.g. taken 2524) but it is

not considered a prerequisite.

12

Page 14: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Additional resources•  Pro Git book: https://git-scm.com/book/en/v2

•  CMake Tutorial: http://www.cmake.org/cmake-tutorial/

•  C++ Reference: http://en.cppreference.com/w/

•  QT Documentation: http://doc.qt.io

•  Collaborative Collection of C++ Best Practices:

https://lefticus.gitbooks.io/cpp-best-practices/content/

14

Page 15: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Software•  C++ compiler with sufficient C++11 support

•  Only specified compiler extensions and libraries may be used.

•  GCC >= 4.8

•  Clang >= 3.5

•  VC++ >= 19 (e.g. Visual Studio 2015 or 2017)

•  CMake for managing the build process (see www.cmake.org)

•   git for source code management tool (see git-scm.com)

15

Page 16: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Development environments•  For development you can use your favorite editor and a command

console to invoke the compiler toolchain, or you can use any integrated

development environment (IDE) supported by CMake, including Visual

Studio on Windows and XCode on the Mac

•  There are several other options including QT Creator and CLion.

•  Use whatever works for you but note each project will define a reference

environment using a Linux virtual machine that, for grading purposes, is

the final arbiter of working code.

•   Highly recommend to use Linux (e.g., Ubuntu, Fedora)

16

Page 17: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Grading and honor code•  Coursework consists of in-class exercises, project milestones, and a final

exam. The grades will be computed as follows:

•  Exercises: 10%

•  Project: 75%

•  Final Exam: 15%

•  All graded work, other than the in-class exercises, is expected to be the

original work of the individual student.

•  Do not copy other’s code.

•  I do use a code comparison system across sections.

17

Page 18: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

ExercisesThe exercises are worked through in-class after a short lecture on the

material for that day, and are due by midnight the day of class.

18

Page 19: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Project•  This semester we will have four projects that correspond to the material

covered to that point in the course.

•  Each project has explicit due dates.

•  The total project grade takes 75% of the total course grade – 10-20%

each.

•  No project work will be accepted past the due date.

19

Page 20: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Auto-grader and Project Feedback•  For each project there is an auto-grader available:

https://grader.ece.vt.edu

•  When you first sign-in using your PID/password and 2FA it will ask you

for a username. Please use your PID.

•  Each project will have an entry where you enter a git commit hash or tag.

The grader will pull your code from GitHub, run my tests for that

milestone and give you feedback.

•  You will also receive more detailed feedback about your code within 2

weeks of the Project due date.

20

Page 21: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Prior expectationsYou are expected to understand basic computer organization and C++

syntax from ECE 1574

•  Types, including references and pointers

•  How to write and call a function, passing arguments and returning values

•  How to write and use a basic class

•  How to read and write files, including parsing techniques

•  How to do proper memory allocation and handling

21

Page 22: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Prior expectationsYou are expected to understand selection and use of common data

structures and algorithms from ECE 2574

•  Array-based and Link-based lists, stacks, queues, deques, and priority

queues

•  Tree and Hash Table based dictionaries

•  Algorithms and used for sorting and searching

22

Page 23: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Prior expectationsYou are expected to be able to write, compile, and debug C++ code using

good engineering practices.

•  Perform the mechanics of compiling a program

•  Understand how to read and correct compile-time errors

•  Understand runtime-errors and how to identify why they are occurring

•  Use an incremental development technique

•  Have good debugging skills (hypothesis testing)

•  Be able to identify and use reference material to solve problems

23

Page 24: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Honor CodeWe encourage you to help each other, but there are rules:

•  Project work must be primarily an individual effort. You are encouraged

to discuss approaches with other students but your code must be your

own.

•  You may not use materials produced as course work by others, whether in

this or previous semesters, nor may you provide work for others to use.

24

Page 25: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Honor Code•  As a general rule, when helping another student, neither your solution or

theirs should be visible. Make a habit of closing your laptops and use

paper or a whiteboard.

•  You can use material from external sources (e.g. StackOverflow), but only

with proper attribution and integration into your code base.

•  You can use any code provided by this semester’s 3574 Instructor or TAs

without attribution.

•  We do use a code comparison system.

25

Page 26: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Honor Code Example #1Sue and Bob sit at the same table in the Library working on their project.

They talk about general approaches and draw some diagrams and

pseudo-code on a nearby whiteboard. Sue finds a very useful class in the

C++ standard library and sends Bob a link to the reference page.

OK?

26

Page 27: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Honor Code Example #2Jane and Lee are good friends and like to work together on classwork. As

they work together Jane reads her code from her screen aloud so that Lee

can follow along and type it in on his laptop.

OK?

27

Page 28: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Honor Code Example #3Jake has been working hard but is struggling with his classwork and is on

academic probation. He hires a programmer from a freelance website to

write a solution for him to use, but only as a reference. He makes many

improvements to the code including better variable names and adds lots

of comments.

OK?

28

Page 29: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Tentative project planProject 1 (55pt) : Jan 21, 2020 - Feb 3, 2020 (2 weeks)

Project 2 Beta (25pt): Feb 4, 2020 - Feb 24, 2020 (3 weeks)

Project 2 Final (75pt): Feb 25, 2020 - Mar 16, 2020 (3 weeks)

Project 3 Beta (25pt): Mar 17, 2020 - Apr 3, 2020 (3 weeks)

Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks)

Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks)

NOTE: Project 3 will be an extension of Project 2.

29

Page 30: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Tips for success•  Overly invest your time for first 8 weeks!

•  Project 1: review C++ features

•  Project 2: foundation of all the rest of the project

•  Here are the tips I have for doing well in the course.

•  Attend class and do the exercises.

•  Start projects early and ask questions as soon as you have them

•  Test your code early because bug fixing is more difficult

•  Find peers to work with (just take care with the honor code)

30

Page 31: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Questions?31

Page 32: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Exercise 01: setupSee Website

32

Page 33: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Next actions•  Make sure you complete today’s Exercise 01

•  Read Chapter 1 and 2 of the Pro Git Book

•  You can skip sections 1.2 and 1.5

•  Start on Project 1

33

Page 34: ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr 17, 2020 (2 weeks) Project 4 (90pt): Apr 18, 2020 - May 1, 2020 (2 weeks) NOTE: Project

Takeaway•  Overly invest your time for first 8 weeks!

•  Project 1: review C++ features

•  Project 2: foundation of all the rest of the project

•  Ultimately however if you cannot consistently devote 12-15 hours per

week on the course it is unlikely you will do well.

34