ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr...
Transcript of ECE 3574: Applied Software Designchangwoo/ECE3574... · Project 3 Final (75pt): Apr 4, 2020 - Apr...
![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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/1.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/2.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/3.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/4.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/5.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/6.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/7.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/8.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/9.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/10.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/11.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/12.jpg)
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 13: 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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/13.jpg)
Text and resources• Readings will be assigned from the following books and various online
sources.
• Clean Code: A Handbook of Agile Software Craftsmanship
• The Pragmatic Programmer: From Journeyman to Master
• A Tour of C++
• Effective C++: 55 Specific Ways to Improve Your Programs and
Designs
13
![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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/14.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/15.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/16.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/17.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/18.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/19.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/20.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/21.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/22.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/23.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/24.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/25.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/26.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/27.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/28.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/29.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/30.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/31.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/32.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/33.jpg)
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](https://reader034.fdocuments.us/reader034/viewer/2022042413/5f2da4985a27ff53d32f1580/html5/thumbnails/34.jpg)
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