principles of software construction: objects, design, and...
TRANSCRIPT
![Page 1: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/1.jpg)
1 15-214
School of Computer Science
Principles of Software Construction: Objects, Design, and Concurrency Introduction, Overview, and Syllabus Christian Kästner Bogdan Vasilescu
![Page 2: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/2.jpg)
2 15-214
Software is everywhere
![Page 3: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/3.jpg)
3 15-214
Growth of code and complexity over time
(informal reports)
![Page 4: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/4.jpg)
4 15-214
15-313 Software Engineering 4
![Page 5: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/5.jpg)
5 15-214 15-313 Software Engineering 5
![Page 6: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/6.jpg)
6 15-214
School of Computer Science
Principles of Software Construction: Objects, Design, and Concurrency Introduction, Overview, and Syllabus Christian Kästner Bogdan Vasilescu
![Page 7: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/7.jpg)
8 15-214
binary tree
graph search
sorting
BDDs
primes
GCD
![Page 8: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/8.jpg)
9 15-214
Our goal: understanding both the building blocks and also the design principles for construction of software systems at scale
From Programs to Systems
Writing algorithms, data structures from scratch
Functions with inputs
and outputs Sequential and local
computation
Full functional specifications
Reuse of libraries, frameworks
Asynchronous and reactive designs
Parallel and distributed
computation Partial, composable,
targeted models
![Page 9: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/9.jpg)
10 15-214
School of Computer Science
Principles of Software Construction: Objects, Design, and Concurrency Introduction, Overview, and Syllabus Christian Kästner Bogdan Vasilescu
![Page 10: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/10.jpg)
11 15-214
Objects in the real world
![Page 11: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/11.jpg)
12 15-214
Object-oriented programming • Programming based on structures
that contain both data and methods
public class Bicycle { private int speed; private final Wheel frontWheel, rearWheel; private final Seat seat; … public Bicycle(…) { … } public void accelerate() { speed++; } public int speed() { return speed; } }
![Page 12: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/12.jpg)
13 15-214
School of Computer Science
Principles of Software Construction: Objects, Design, and Concurrency Introduction, Overview, and Syllabus Christian Kästner Bogdan Vasilescu
![Page 13: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/13.jpg)
14 15-214
Semester overview
• Introduction to Java and O-O
• Introduction to design
– Design goals, principles, patterns
• Designing classes
– Design for change
– Design for reuse
• Designing (sub)systems
– Design for robustness
– Design for change (cont.)
• Design case studies
• Design for large-scale reuse
• Explicit concurrency
• Distributed systems
• Crosscutting topics:
– Modern development tools: IDEs, version control, build automation, continuous integration, static analysis
– Modeling and specification, formal and informal
– Functional correctness: Testing, static analysis, verification
![Page 14: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/14.jpg)
15 15-214
Sorting with configurable order, variant A
void sort(int[] list, String order) { …
boolean mustswap;
if (order.equals("up")) {
mustswap = list[i] < list[j];
} else if (order.equals("down")) {
mustswap = list[i] > list[j];
}
…
}
![Page 15: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/15.jpg)
16 15-214
Sorting with configurable order, variant B
• Sorting with configurable order, variant B void sort(int[] list, Comparator cmp) {
…
boolean mustswap;
mustswap = cmp.compare(list[i], list[j]);
…
}
interface Comparator {
boolean compare(int i, int j);
}
class UpComparator implements Comparator {
boolean compare(int I, int j) { return i<j; }}
class DownComparator implements Comparator {
boolean compare(int I, int j) { return i>j; }}
(by the way, this design is called “strategy pattern”)
![Page 16: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/16.jpg)
17 15-214
Tradeoffs? void sort(int[] list, String order) {
…
boolean mustswap;
if (order.equals("up")) {
mustswap = list[i] < list[j];
} else if (order.equals("down")) {
mustswap = list[i] > list[j];
}
…
}
void sort(int[] list, Comparator cmp) {
…
boolean mustswap;
mustswap = cmp.compare(list[i], list[j]);
…
}
interface Comparator {
boolean compare(int i, int j);
}
class UpComparator implements Comparator {
boolean compare(int I, int j) { return i<j; }}
class DownComparator implements Comparator {
boolean compare(int I, int j) { return i>j; }}
![Page 17: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/17.jpg)
18 15-214
Sorting with a configurable order, version B'
interface Comparator { boolean compare(int i, int j); } final Comparator ASCENDING = (i, j) -> i < j; final Comparator DESCENDING = (i, j) -> i > j; static void sort(int[] list, Comparator cmp) { … boolean mustSwap = cmp.compare(list[i], list[j]); … }
![Page 18: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/18.jpg)
19 15-214
it depends
![Page 19: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/19.jpg)
20 15-214
it depends (see context)
depends on what? what are scenarios? what are tradeoffs?
![Page 20: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/20.jpg)
21 15-214
Software engineering is the branch of computer science that creates practical, cost-effective solutions to computing and information processing problems, preferably by applying scientific knowledge, developing software systems in the service of mankind.
Software Engineering for the 21st Century: A basis for rethinking the curriculum Manifesto, CMU-ISRI-05-108
![Page 21: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/21.jpg)
22 15-214
"Software engineering is the branch of computer science that creates practical, cost-effective solutions to computing and information processing problems, preferentially by applying scientific knowledge, developing software systems in the service of mankind. Software engineering entails making decisions under constraints of limited time, knowledge, and resources. […]
Engineering quality resides in engineering judgment. […]
Quality of the software product depends on the engineer's faithfulness to the engineered artifact. […]
Engineering requires reconciling conflicting constraints. […]
Engineering skills improve as a result of careful systematic reflection on experience. […]
Costs and time constraints matter, not just capability. […]
Software Engineering for the 21st Century: A basis for rethinking the curriculum Manifesto, CMU-ISRI-05-108
![Page 22: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/22.jpg)
23 15-214
Goal of software design
• Think before coding
• For each desired program behavior there are infinitely many programs – What are the differences between the variants?
– Which variant should we choose?
– How can we synthesize a variant with desired properties?
• Consider qualities – Maintainability, extensibility, performance, …
• Make explicit design decisions
![Page 23: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/23.jpg)
24 15-214
Tradeoffs? void sort(int[] list, String order) {
…
boolean mustswap;
if (order.equals("up")) {
mustswap = list[i] < list[j];
} else if (order.equals("down")) {
mustswap = list[i] > list[j];
}
…
}
void sort(int[] list, Comparator cmp) {
…
boolean mustswap;
mustswap = cmp.compare(list[i], list[j]);
…
}
interface Comparator {
boolean compare(int i, int j);
}
class UpComparator implements Comparator {
boolean compare(int I, int j) { return i<j; }}
class DownComparator implements Comparator {
boolean compare(int I, int j) { return i>j; }}
![Page 24: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/24.jpg)
25 15-214
Preview: Design goals, principles, and patterns
• Design goals enable evaluation of designs
– e.g. maintainability, reusability, scalability
• Design principles are heuristics that describe best practices
– e.g. high correspondence to real-world concepts
• Design patterns codify repeated experiences, common solutions
– e.g. template method pattern
![Page 25: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/25.jpg)
26 15-214
Software Engineering at CMU
• 15-214: “Code-level” design – extensibility, reuse, concurrency, functional correctness
• 15-313: “Human aspects” of software development – requirements, team work, scalability, security, scheduling,
costs, risks, business models
• 15-413, 17-413 Practicum, Seminar, Internship
• Various master-level courses on requirements, architecture, software analysis, etc
• SE Minor: http://isri.cmu.edu/education/undergrad/
26
![Page 26: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/26.jpg)
27 15-214
This is not a Java course
![Page 27: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/27.jpg)
28 15-214
This is not a Java course
but you will write a lot of
Java code
![Page 28: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/28.jpg)
29 15-214
This is secretly a Java course
![Page 29: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/29.jpg)
30 15-214
int a = 010 + 3;
System.out.println("A" + a);
![Page 30: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/30.jpg)
31 15-214
int a = 010 + 3;
System.out.println("A" + a);
![Page 31: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/31.jpg)
32 15-214
School of Computer Science
Principles of Software Construction: Objects, Design, and Concurrency Introduction, Overview, and Syllabus Christian Kästner Bogdan Vasilescu
![Page 32: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/32.jpg)
33 15-214
Summary: Course themes • Object-oriented programming
• Code-level design
• Analysis and modeling
• Concurrency and distributed systems
![Page 33: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/33.jpg)
34 15-214
COURSE ORGANIZATION
34
![Page 34: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/34.jpg)
35 15-214
Course preconditions
• 15-122 or equivalent – Two semesters of programming – Knowledge of C-like languages
• 21-127 or equivalent – Familiarity with basic discrete math concepts
• Specifically: – Basic programming skills – Basic (formal) reasoning about programs
• Pre/post conditions, invariants, formal verification
– Basic algorithms and data structures • Lists, graphs, sorting, binary search, etc.
![Page 35: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/35.jpg)
36 15-214
High-level learning goals
1. Ability to design medium-scale programs – Design goals (e.g., design for change, design for reuse) – Design principles (e.g., low coupling, explicit interfaces) – Design patterns (e.g., strategy pattern, decorator pattern), libraries, and frameworks – Evaluating trade-offs within a design space – Paradigms such as event-driven GUI programming
2. Understanding object-oriented programming concepts and how they support design decisions
– Polymorphism, encapsulation, inheritance, object identity
3. Proficiency with basic quality assurance techniques for functional correctness – Unit testing – Static analysis – (Verification)
4. Fundamentals of concurrency and distributed systems 5. Practical skills
– Ability to write medium-scale programs in Java – Ability to use modern development tools, including VCS, IDEs, debuggers, build and test
automation, static analysis, …
(See course web site for a full list of learning goals)
![Page 36: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/36.jpg)
37 15-214
Course staff
• Christian Kästner [email protected], Wean 5122
• Bogdan Vasilescu [email protected], Wean 5115
• Teaching assistants: Hubert, Zilei, Alvin, Evans, Avi, Jordan, Tianyu
Recitations are required
![Page 37: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/37.jpg)
38 15-214
Course meetings
• Lectures: Tuesday and Thursday 3:00 – 4:20pm here :)
• Recitations: Wednesdays 9:30 - … - 3:20pm
– Supplementary material, hands-on practice, feedback
– Starting next week
• Office hours: see course web page
– https://www.cs.cmu.edu/~ckaestne/15214/s2017/
Recitation attendance is required
![Page 38: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/38.jpg)
39 15-214
Course Infrastructure
• Course website https://www.cs.cmu.edu/~ckaestne/15214/s2017/ – Schedule, assignments, lecture slides, policy documents
• Tools – Git, Github: Assignment distribution, hand-in, and grades – Piazza: Discussion board – Eclipse, IntelliJ Idea, or similar: Recommended for developing code – Gradle, Travis-CI, Checkstyle, Findbugs: Practical development tools
• Assignments – Homework 1 available tomorrow morning – Ensure all tools are working together, Git, Java, Eclipse, Gradle,
Checkstyle – Attend office hours in case of problems or ask on Piazza
![Page 39: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/39.jpg)
40 15-214
Textbooks
• Craig Larman. Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development. 3rd Edition. Prentice Hall. 2004. ISBN 0-13-148906-2
• Joshua Bloch. Effective Java, Second Edition. Addison-Wesley, ISBN 978-0321356680.
• Selective other readings later in the semester • Electronic version available through CMU library
• Regular reading assignments of chapters and
online quizzes (Tuesdays) • Additional (optional) readings listed on slides
and web page
40
![Page 40: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/40.jpg)
41 15-214
Approximate grading policy
• 50% assignments
• 20% midterms (2 x 10% each)
• 20% final exam
• 10% quizzes and participation
This course does not have a fixed letter grade policy; i.e., the final letter grades will not be A=90-100%, B=80-90%, etc.
![Page 41: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/41.jpg)
42 15-214
Collaboration policy
• See course web page for details!
• We expect your work to be your own
• Do not release your solutions (not even after end of semester)
• Ask if you have any questions
• If you are feeling desperate, please reach out to us – Always turn in any work you've completed before the
deadline
• We run cheating detection tools. Trust us, academic integrity meetings are painful for everybody
![Page 42: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/42.jpg)
43 15-214
Late day policy
• See syllabus on course web page for details
• 2 possible late days per deadline (exceptions will be announced)
– 5 total free late days for semester (+ separate 2 late days for assignments done in pairs)
– 10% penalty per day after free late days are used
– but we won’t accept work 3 days late
• Extreme circumstances – talk to us
![Page 43: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/43.jpg)
44 15-214
School of Computer Science
Principles of Software Construction: Objects, Design, and Concurrency Introduction to Software Engineering tools Christian Kästner Bogdan Vasilescu
![Page 44: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/44.jpg)
45 15-214
You will need for homework 1
• Java: more on Thursday
• Version control: Git
• Hosting: GitHub
• Build manager: Gradle
• Continuous integration service: Travis-CI
![Page 45: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/45.jpg)
46 15-214
What is version control?
• System that records changes to a set of files over time – Revert files back to a previous state
– Revert entire project back to a previous state
– Compare changes over time
– See who last modified something that might be causing a problem
• As opposed to:
hw1.java hw1_v2.java hw1_v3.java
hw1_final.java hw1_final_new.java …
![Page 46: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/46.jpg)
47 15-214
Centralized version control
• Single server that contains all the versioned files
• Clients check out/in files from that central place
• E.g., CVS, SVN (Subversion), and Perforce
https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
![Page 47: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/47.jpg)
48 15-214
SVN
Server (truth)
Clients
Network
svn checkout
![Page 48: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/48.jpg)
49 15-214
SVN
Server (truth)
Clients
Network
svn commit
![Page 49: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/49.jpg)
50 15-214
SVN
Server (truth)
Clients
Network
svn update
![Page 50: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/50.jpg)
51 15-214
SVN
Server (truth)
Clients
Network
svn commit: FAIL
![Page 51: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/51.jpg)
52 15-214
SVN
Server (truth)
Clients
Network
svn update
![Page 52: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/52.jpg)
53 15-214
SVN
Server (truth)
Clients
Network
svn update: CONFLICT
![Page 53: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/53.jpg)
54 15-214
Centralized version control
• Advantages:
– Everyone knows what everyone else is doing (mostly)
– Administrators have more fine-grained control
• Disadvantages:
– Single point of failure
– Cannot work offline
– Slow
– Does not scale
• Easier to lose data • Incentive to use version
control sparingly • Tangled instead of
atomic commits
![Page 54: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/54.jpg)
55 15-214
SVN
Server (truth)
Clients
Network
svn update: CONFLICT svn commit
Every time there is a commit on the system there is a chance of creating a conflict with someone else
![Page 55: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/55.jpg)
56 15-214
SVN
Server (truth)
Conflicts: sometimes
Network
svn update: CONFLICT svn commit
3 developers
![Page 56: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/56.jpg)
57 15-214
SVN
Server (truth)
Conflicts: often
Network
svn update: CONFLICT svn commit
30 developers
![Page 57: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/57.jpg)
58 15-214
SVN
Server (truth)
Conflicts: all the time to everybody
Network
svn update: CONFLICT svn commit
300 developers
![Page 58: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/58.jpg)
59 15-214
Brief timeline of VCS
• 1982: RCS (Revision Control System), still maintained • 1990: CVS (Concurrent Versions System) • 2000: SVN (Subversion) • 2005: Bazaar, Git, Mercurial
Git • Developed by Linus Torvalds, the creator of Linux • Designed to handle large projects like the Linux kernel
efficiently – Speed – Thousands of parallel branches
![Page 59: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/59.jpg)
60 15-214
Git
Server (truth)
Git is distributed. There is not one server …
![Page 60: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/60.jpg)
61 15-214
Git … but many
![Page 61: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/61.jpg)
62 15-214
Git Actually there is one server per computer
![Page 62: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/62.jpg)
63 15-214
Git Every computer is a server and version control happens locally.
![Page 63: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/63.jpg)
64 15-214
Distributed version control
• Clients fully mirror the repository – Every clone is a full
backup of all the data
• Advantages: – Fast, works offline,
scales
– Better suited for collaborative workflows
• E.g., Git, Mercurial, Bazaar
https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
![Page 64: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/64.jpg)
65 15-214
SVN (left) vs. Git (right)
• SVN stores changes to a base version of each file
• Version numbers (1, 2, 3, …) are increased by one after each commit
• Git stores each version as a snapshot
• If files have not changed, only a link to the previous file is stored
• Each version is referred by the SHA-1 hash of the contents
https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
![Page 65: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/65.jpg)
66 15-214
Git
git commit
How do you share code with collaborators if commits are local?
![Page 66: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/66.jpg)
67 15-214
Git
git pull git pull
git pull
… But requires host names / IP addresses
You pull their commits from them (and they do the same with yours)
![Page 67: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/67.jpg)
68 15-214
GitHub typical workflow GitHub
Public repository where you make your changes public
![Page 68: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/68.jpg)
69 15-214
GitHub typical workflow GitHub
git commit
![Page 69: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/69.jpg)
70 15-214
GitHub typical workflow GitHub
git commit
![Page 70: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/70.jpg)
71 15-214
GitHub typical workflow GitHub
git push
push your local changes into a remote repository.
![Page 71: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/71.jpg)
72 15-214
GitHub typical workflow GitHub
git push
Collaborators can push too if they have access rights.
![Page 72: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/72.jpg)
73 15-214
GitHub typical workflow GitHub
git pull
Without access rights, “don’t call us, we’ll call you” (pull from trusted sources) … But again requires host names / IP addresses.
![Page 73: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/73.jpg)
74 15-214
GitHub typical workflow GitHub
git push
“Main” “Forks”
Instead, people maintain public remote “forks” of “main” repository on GitHub and push local changes.
![Page 74: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/74.jpg)
75 15-214
GitHub typical workflow GitHub
Pull Request
“Main” “Forks”
Availability of new changes is signaled via ”Pull Request”.
![Page 75: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/75.jpg)
76 15-214
GitHub typical workflow GitHub
git pull
“Main” “Forks”
Changes are pulled into main if PR accepted.
![Page 76: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/76.jpg)
77 15-214
214 workflow GitHub
“Main”
Your local “clone” TA’s “clone”
You push homework solutions; pull recitations, homework assignments, grades. TAs vice versa
![Page 77: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/77.jpg)
78 15-214
Organizing a Development Project
(Project root)
Optional: Sub-Project
src
main
java resources
test
java resources
target
Optional: Sub-Project
...
Derived (does not go into version control), e.g., compiled Java
Actual source code
Everything below src/main gets deployed, i.e., no tests
README.md, LICENSE.md, version control, configuration management
![Page 78: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/78.jpg)
79 15-214
Build Manager
• Tool for scripting the automated steps required to produce a software artifact, e.g.:
– Compile Java files in src/main/java, place results in target/classes
– Compile Java files in src/test/java, place results in target/test-classes
– Run JUnit tests in target/test-classes
– If all tests pass, package compiled classes in target/classes into .jar file.
![Page 79: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/79.jpg)
80 15-214
Types of Build Managers
• IDE project managers (limited functionality)
• Dependency-Based Managers
– Make (1977)
• Task-Based Managers
– Ant (2000)
– Maven (2002)
– Ivy (2004)
– Gradle (2012)
![Page 80: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/80.jpg)
81 15-214
Dependency-Based Managers
• Dependency graph: – Boxes: files
– Arrows: dependencies; “A depends on B”: if B is changed, A must be regenerated
• Build manager (e.g., Make) determines min number of steps required to rebuild after a change.
From: https://www.cs.odu.edu/~zeil/cs350/s17/Public/buildManagers/index.html
![Page 81: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/81.jpg)
82 15-214
Task-Based Managers: Ant
• Disadvantages of Make:
– Not portable (system- dependent commands, paths, path lists)
– Low level (focus on individual files)
• Ant:
– Focus on task dependencies
– Targets (dependencies) described in build.xml
From: https://www.cs.odu.edu/~zeil/cs350/s17/Public/buildManagers/index.html
![Page 82: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/82.jpg)
83 15-214
Task-Based Managers: Maven
• Maven:
– build management (like Ant),
– and configuration management (unlike Ant)
• Can express standard project layouts and build conventions (project archetypes)
• Still uses XML (pom.xml)
![Page 83: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/83.jpg)
84 15-214
Task-Based Managers: Gradle
• Combines the best of Ant and Maven
• From Ant keep: • Portability: Build commands described platform-independently
• Flexibility: Describe almost any sequence of processing steps
• … but drop: • XML as build language, inability to express simple control flow
• From Maven keep: • Dependency management
• Standard directory layouts & build conventions for common project types
• … but drop: • XML, inflexibility, inability to express simple control flow
![Page 84: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/84.jpg)
85 15-214
Big Builds
• Must run frequently: • fetching and setup of
3rd party libraries
• static analysis
• compilation
• unit testing
• packaging of artifacts
• Can run less frequently:
• documentation
• deployment
• integration testing
• test coverage reporting
• system testing
• Keep track of different Ant/Maven targets, or …
![Page 85: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/85.jpg)
86 15-214
Continuous Integration
• Version control with central “official” repository. Run: – automated builds & tests (unit, integration, system,
regression) with every change (commit / pull request) – Test, ideally, in clone of production environment – E.g., Jenkins (local), Travis CI (cloud-based)
• Advantages: – Immediate testing of all changes – Integration problems caught early and fixed fast – Frequent commits encourage modularity – Visible code quality metrics motivate developers – (cloud-based) Local computer not busy while waiting for build
• Disadvantages: – Initial effort to set up
![Page 86: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/86.jpg)
87 15-214
Travis CI
• Cloud-based CI service; GitHub integration – Listens to push events and pull request events and
starts “build” automatically
– Runs in virtual machine / Docker container
– Notifies submitter of outcome; sets GitHub flag
• Setup: project top-level folder .travis.yml – Specifies which environments to test in (e.g., jdk
versions)
87
![Page 87: Principles of Software Construction: Objects, Design, and Concurrencyckaestne/15214/s2017/slides/... · 2017-05-04 · 15-214 9 Our goal: understanding both the building blocks and](https://reader030.vdocument.in/reader030/viewer/2022040512/5e5eae2519dca526b427dad9/html5/thumbnails/87.jpg)
88 15-214
Coding Standards (Checkstyle)
• Code conventions are important: – 80% of software lifetime cost goes to maintenance. – Most software are not maintained by the original author. – Code conventions improve software readability; maintain
consistency across teams and time.
• Checkstyle, tool to automate coding standards: – Runs as part of automated build / continuous integration – Checks, e.g.,:
• Line Length: e.g., Avoid lines longer than 80 characters • Wrapping lines: e.g., Break after comma, before operator • Comments: Javadoc • Naming conventions: e.g., class names, variable names • Indentation: e.g., spaces over tabs
88