第 1 張,共 53 張

Attributions

Usage is attributed in the speaker notes

1

第 2 張,共 53 張

Please do not redistribute these slides without prior written permission

2

第 3 張,共 53 張

CS 5500

Foundations of Software Engineering

Dr. Mike Shah

3

第 4 張,共 53 張

Pre-Class Warm up (1/2)

  • Final words of wisdom from The Pragmatic Programmer

4

第 5 張,共 53 張

Pre-Class Warm up (2/2)

  • Final words of wisdom from The Pragmatic Programmer

5

第 6 張,共 53 張

Note to self: Start audio recording of lecture :)�(Someone remind me if I forget!)

6

第 7 張,共 53 張

“The Daily Scrum”

7

第 8 張,共 53 張

Last Class (“What did I do yesterday”)

  • Work Day

8

第 9 張,共 53 張

Course Logistics (“What are we going to do today”)

  • Final Project due!
    • Don’t forget to do your teammate evaluations as well! (On the README.md on first page)
  • Trace course evaluations!
    • Please do them! I read every single trace evaluation, and I do incorporate the feedback in future courses (some of you I will see again too--so it is to your direct benefit!)
  • Class Photo
  • Final Lecture!

9

第 10 張,共 53 張

Blocking (“What is stopping forward progress”)

  • Other open questions?

10

第 11 張,共 53 張

TRACE Evaluations

11

第 12 張,共 53 張

TRACE

  • Please take a few moments to complete your TRACE evaluations of this course
  • They are very helpful to me to improve as an instructor, improve this course, and improve other courses that I may be your instructor in the future!

12

第 13 張,共 53 張

Class Picture Time!

13

第 14 張,共 53 張

14

第 15 張,共 53 張

Module - Final Lecture

15

第 16 張,共 53 張

We have come a long way!

  • As we wrap up the course it is worthwhile to reflect on all of the topics you have learned about.
    • There is quite a list too! (Really do think about your skills 4 months ago and how far you have progressed!)

16

第 17 張,共 53 張

Lecture 1 - Introduction

  • Course Introduction
  • Introduction to the D Programming Language
    • Topics included:
      • Hello World using the DMD compiler
      • Use of rdmd to speed up iteration!
      • Look at built-in types, data structures (fixed-arrays, dynamic arrays, associative arrays, etc.)
  • Some notes available on
    • Git and github

17

第 18 張,共 53 張

Lecture 2

  • Review into how the D programming language works
    • Understanding pointers
    • Stack, Heap, and static memory
  • Programming Paradigms
    • Procedural Programming
    • Functional Style (map, filter, reduce)
    • Object-Oriented Programming
      • Structs - Value Type
      • Classes - Reference Type
        • Classes allow for inheritance, structs do not
        • Classes can implement an interface
  • Brief exercise in class design with inheritance
    • (And not to forget about composition)

18

第 19 張,共 53 張

Lecture 3

  • Program Analysis
    • Code Smells (potential antipatterns)
    • Static analysis -- tooling to ask ‘what could go wrong’ in any execution
      • scanner to help
    • dynamic analysis - ask ‘what actually happened in 1 instance’ of an execution
      • trace, profile, and log data
  • Avoiding leaky abstractions
    • Example with iterator
  • Debugging!
    • Understanding different strategies (look and scan, delta debugging, conditional compilation, and using our compiler)
      • release vs debug build
    • Using a debugger
      • GDB and/or LLDB

19

第 20 張,共 53 張

Lecture 4

  • Learned what a SCRUM is (i.e. standup meeting)
  • Learned about the software development life cycle (SDLC)
    • Many variations of SDLC, but the point is that following the right process can help improve software
      • Two main families:
        • Waterfall
        • Agile
    • Learned about Project Management (with more of an agile focus)
      • Developing user stories and use cases
      • Using github for project management
    • Introduction to DDoc for software documentation

20

第 21 張,共 53 張

Lecture 5

  • Libraries
    • Learned a bit about how to structure our project
      • 1 source file = 1 module
      • several modules can be in a package
      • We can create a static or dynamic library of our packages or individual modules
  • DUB
    • A package manager and a build tool
    • Helps manage dependencies
  • Brief introduction to SDL
    • Installing library
      • bindbc-sdl package

21

第 22 張,共 53 張

Lecture 6

  • Software Verification and Validation
    • Software Verification
      • Functional (i.e. black box)
      • Structural (i.e. white box)
      • Static Testing (i.e. measurements about a program)
    • Software Validation
      • Formal Methods, Fault Injection, Dependability Analysis
  • Testing in DLang
    • Assertions
      • (Things that can logically never happen--internal to your codebase)
    • Exceptions
      • (Things you can handle during runtime--external events)
    • Code Coverage (-cov tool)
    • unit-threaded framework

22

第 23 張,共 53 張

Lecture 7

  • Final Project Overview
  • Basic 2D Graphics

23

第 24 張,共 53 張

Lecture 8

(Midterm)

24

第 25 張,共 53 張

Lecture 9

  • Graphics and Tilemaps
  • Networking
    • Client-Server Model
    • What is a socket?
    • UDP with Dlang
  • Some examples in DLang with sending data

25

第 26 張,共 53 張

Lecture 10

  • Templates
  • Message Passing
  • Design Patterns
    • Command Pattern

26

第 27 張,共 53 張

Lecture 11

  • Discussed building a GUI from scratch
    • and some tradeoffs of doing so
  • Discussed a few examples with GTK
  • Discussed Continuous Integration

27

第 28 張,共 53 張

Lecture 12 (Holiday)

28

第 29 張,共 53 張

Lecture 13

  • Design Tips
  • Project Work time

29

第 30 張,共 53 張

Course Tech Stack - Hard Skills

  • Language
    • Modern DLang 2
      • Libraries/APIS: JSON, Sockets, GTK+3, SDL,
  • Build System
    • rdmd, Dub, and using ‘version’ to build for multiple platforms
  • Tooling
    • profile, profile=gc
    • cov
    • unittest, unit threaded
    • scanner
    • multiple compilers: ldc2, dmd, (and maybe gdc for some)
    • gdb and lldb
  • Version Control
    • Git - Hosted on github.com
  • Continuous Integration
    • Github Actions (and local with act)
  • And hopefully many other tools you picked up along the way!

30

第 31 張,共 53 張

Soft Skills

  • Working in teams
  • Organization from loose project requirements
  • Agile Development
  • Project Management (Through github)

31

第 32 張,共 53 張

What you did!

(Project videos)

(Note: Only Mike has access to the repos)

32

第 33 張,共 53 張

One Quick Reminder for your projects!

  • Make sure to fill out your teammate evaluation form!

33

第 34 張,共 53 張

Fall 2023

34

第 35 張,共 53 張

Fall 2023

35

第 36 張,共 53 張

Fall 2023

36

第 37 張,共 53 張

Moving Forward!

  • This is the final lecture!
  • I will collect and share some videos for those groups who are finished.
  • For those who I will not get a chance to tell synchronously...

A big thank you for choosing my course and putting the effort in!

Your journey as a software engineer is just beginning!

You will go out into the world and do great work--and I hope you can come back in a few years to share!

37

第 38 張,共 53 張

Archive of previous Years

38

第 39 張,共 53 張

Spring 2023

39

第 40 張,共 53 張

Spring 2023

40

第 41 張,共 53 張

Spring 2023

41

第 42 張,共 53 張

Spring 2023

42

第 43 張,共 53 張

Spring 2023

43

第 44 張,共 53 張

Spring 2023

44

第 45 張,共 53 張

Spring 2023

45

第 46 張,共 53 張

Fall 2021

46

第 47 張,共 53 張

Fall 2021 Team project videos! (As of 8:11 pm 12/16/22)

47

9

第 48 張,共 53 張

Fall 2021 Team project videos! (As of 8:11 pm 12/16/22)

48

第 49 張,共 53 張

Fall 2020

49

第 50 張,共 53 張

Team project videos! (As of 1:07pm 12/9/20)

50

第 51 張,共 53 張

Spring 2020

51

第 52 張,共 53 張

52

第 53 張,共 53 張

Extra

53