======Software Development Methods, Spring 2024====== This course introduces a selection of theories and practices that, we believe, will enhance the student's ability in developing correct and high-quality software. Its goal is to acquaint the students with some of the well-used methods and tools for practical software development as well as some fundamentals of software verification, so as to prepare them for a career in software development. The view taken here is that of an engineer (programmer, software engineer, or software architect) and hence the focus of the course is primarily on the technical aspects of software development process. ===== Announcements ===== * 05/14: {{courses:sdm2024:sdm2024grade_termproject.pdf|current scores}} of term project available. * 05/08: slides for Software Testing available. * 05/08: suggested solutions to {{courses:sdm2024:hw3_s.pdf|HW#3}} and {{courses:sdm2024:hw4_s.pdf|HW#4}} available. * 05/06: review forms for the second prelim. demo presentations: {{courses:sdm2024:Presentations_demo2.docx|Evaluation by Individual Reviewer}} and {{courses:sdm2024:Presentations_demo2_comments.docx|Group-for-Group Comments}}. * 05/01: link to the slides of 05/01 updated. * 04/24: {{courses:sdm2024:hw4.pdf|HW#4}} due 2:20PM 05/01. * 04/17: slides for Web Application Security available. * 04/10: review forms for the first prelim. demo presentations: {{courses:sdm2024:Presentations_demo1.docx|Evaluation by Individual Reviewer}} and {{courses:sdm2024:Presentations_demo1_comments.docx|Group-for-Group Comments}}. * 04/10: slides for Design Patterns and for Introduction to Debuggers available. * 04/02: {{courses:sdm2024:hw3.pdf|HW#3}} due 2:20PM 04/10. * 04/02: slides for Domain Modeling available. * 03/27: slides for Advanced Web Programming available. * 03/20: {{courses:sdm2024:hw2.pdf|HW#2}} due 2:20PM 03/27. * 03/20: slides for {{courses:sdm2021:WebProgrammingBasics.pptx|Basics of Web Programming}} (from Year 2021) available. * 03/20: slides for Design Document and an example design document available. * 03/14: a worth-viewing presentation (in particular the second half) of what "GPTs" may be developed using some version of ChatGPT: [[https://www.youtube.com/watch?v=U9mJuUkhUzk&t=10s|OpenAI DevDay: Opening Keynote]]. * 03/14: two worth-noting papers for more sophisticated uses of generative IT tools: [[https://arxiv.org/abs/2210.03629|ReAct: Synergizing Reasoning and Acting in Language Models]], [[https://proceedings.neurips.cc/paper_files/paper/2023/hash/271db9922b8d1f4dd7aaef84ed5ac703-Abstract-Conference.html|Tree of Thoughts: Deliberate Problem Solving with Large Language Models]]. * 03/13: review forms for the proposal presentations: {{courses:sdm2024:Presentations_proposal.docx|Evaluation by Individual Reviewer}} and {{courses:sdm2024:Presentations_proposal_comments.docx|Group-for-Group Comments}}. * 03/13: slides for UML Diagrams available. * 03/13: slides for Chrome DevTools available. * 03/12: no change has been made to the 03/05 draft of the term project description; so, that draft is the finalized version. * 03/06: slides for An Overview of Software Modeling and UML available. * 03/05: {{courses:sdm2024:termproject20240305.pdf|Draft of Term Project}} available for discussions, to be finalized by 5PM 03/08. * 02/22: the [[https://docs.google.com/forms/d/e/1FAIpQLSdHU9jq0lAjcYiOm-_DEIFqfT6ElHofw81nSd7MrVcJliaD2A/viewform|Google form]] for requesting an account on the Git server for this course. * 02/21: {{courses:sdm2024:hw1.pdf|HW#1}} (attachment: zipped {{courses:sdm2024:hw1.txt.zip|hw1.txt}}) due 2:00PM 02/29. * 02/21: slides for Git available. * 02/21: slides for Course Introduction available. * 02/18: this website created to complement the NTU COOL site for this course. ===== Instructor ===== [[http://www.im.ntu.edu.tw/~tsay/|Yih-Kuen Tsay (蔡益坤)]], Room 1108, Management II, 3366-1189, ''Xtsay@ntu.edu.twX'' (between the enclosing pair of X's). ===== Guest Speakers ===== Jeffrey CH Liu (劉智雄, Appier), Clement CW Su (蘇志文, IBM), Scar Su (蘇瑞亨, 叡揚), Chih-Pin Tai (戴智斌, 創炎/Traiwan出來玩), Ming-Hsien Tsai (蔡明憲, 台科大), and Ching-Lin Yu (游景麟, Google). ===== Lectures ===== Wednesday 2:20-5:20PM, Room 302, College of Management, Building 2. ===== Office Hours ===== Tuesday 1:30-2:00PM, Wednesday 1:30-2:00PM, or by appointment, Room 1108, Management Building 2. ===== TA ===== Yun-Chia Hsu (許芸嘉), Xr11725030@ntu.edu.twX (between the enclosing pair of X's). ===== Prerequisites ===== Object-Oriented Programming and Database Management. ===== Textbook ===== Class notes and selected readings. ===== Syllabus/Schedule (with links to slides/notes) ===== We will start with an overview of the typical software development process and relevant issues and then study in greater details some fundamental elements of software modeling, design, and verification, along with several software productivity tools and development practices. To practice applying these methods and tools, we will carry out a term project that involves the development of a large Web application. We will also study Web application programming techniques and security, to better prepare for the project. * **Introduction** (2/3 week: 02/21a) \\ Overview of software requirements, development process, design methods, verification \\ [{{courses:sdm2024:introduction.pdf|slides}}] * **Productivity Tools: Version Control with Git** (1/3 week: 02/21b) [{{courses:sdm2024:git.pdf|slides}}] * **Term Project: Initial Discussions** (1/3 week: 03/06a) [{{courses:sdm2024:termproject20240305.pdf|Draft}}] * **Software Modeling: An Overview of UML** (2/3 week: 03/06b) \\ Introduction, basics of modeling, overview of the UML \\ [{{courses:sdm2024:UML_overview.pptx|slides}}] * **Productivity Tools: Chrome DevTools** (1/3 week: 03/13a) [{{courses:sdm2024:ChromeDevTools.pptx|slides}}] * **Software Modeling: UML Diagrams** (2/3 week: 03/13b) \\ Structural modeling (//class diagrams, classifiers, interfaces, packages//), behavioral modeling (//interactions, use case diagrams, interaction diagrams, activity diagrams//), architectural modeling (//collaborations, deployment diagrams//), advanced structural modeling (//object diagrams, components//), advanced behavioral modeling (//events, state machines, processes and threads, timing constraints//) \\ [{{courses:sdm2024:UML_diagrams.pptx|slides}}] * **Term Project: Proposal Presentations** (1/3 week: 03/20a) \\ * **Software Development Practice: Design Document** (2/3 week: 03/20b) \\ Design document introduction, high level design document, implementation level design document, design document for agile development \\ [{{courses:sdm2024:DesignDocIntroduction.pptx|slides}}, {{courses:sdm2024:DesignDocumentSimpleExample.doc|An Example Design Document}}] * **Software Implementation: Advanced Web Programming** (1 week: 03/27) [{{courses:sdm2021:WebProgrammingBasics.pptx|basics}}, {{courses:sdm2024:WebProgrammingAdvanced.pptx|advanced}},{{courses:sdm2024:examples.zip|examples}}] * **Software Modeling: Domain Modeling** (1 week: 04/03) \\ Introduction, mathematical preliminaries, and basic and higher abstractions [{{courses:sdm2024:domain_modeling.pdf|slides}}]\\ * **Productivity Tools: Debuggers** (1/3 week: 04/10a) [{{https://docs.google.com/presentation/d/1e0uAAo2PBaPnvvyrOh0JHq486AbWINnlsM-WY5F-EPk/edit?usp=sharing|slides}}] * **Software Design: Design Patterns** (1 and 2/3 weeks: 04/10b, 04/24) \\ Why design patterns, introduction to creational, structural, and behavioral patterns, GoF patterns \\ [{{https://docs.google.com/presentation/d/1aC5f4BKWkj1Xk8cSR8GtIMT1NxNuj8YriqZ_9qdb8SQ/edit#slide=id.p|slides}}, {{courses:sdm2023:DesignPatternsSampleCPP.zip|code examples}}] * **Term Project: First Preliminary Demos** (1/3 week: 04/17a) \\ * **Software Security: Web Application Security** (2/3 week: 04/17b) \\ Dynamic Web pages, client-side scripts, security vulnerabilities, vulnerabilities detection and prevention \\ [{{courses:sdm2024:web_app_security.pptx|slides}}] * **Software Development Practice: Agile Development in Practice** (1 week: 05/01) \\ Principles for building an agile team, essentials of scrum, kanban, and scrumban, DevOps, and engineering culture\\ [{{https://docs.google.com/presentation/d/1vMR3h90ne2wtBfVNTlX9I1h-CE8R1Nji-HgVp3bFqSE/edit#slide=id.p|slides}}] * **Term Project: Second Preliminary Demos** (1/3 week: 05/08a) \\ * **Midterm Discussions** (or Make-Up Lecture) (2/3 week: 05/08b) * **Software Verification: Testing** (1 week: 05/15) \\ [{{courses:sdm2024:software_testing.pptx|slides}}] * ** Formal Specification: Formal Logic and Correctness Requirements** (.5 week: 05/22a) \\ Motivation, program correctness, propositional and first-order logics (//propositions, proofs, theorems, predicates, models//)\\ [{{courses:sdm2024:logic.pdf|slides}}] * **Formal Verification: Verification of Programs with Frama-C and ACSL** (.5 week: 05/22b) \\ [slides: {{courses:sdm2024:hoare_logic.pdf|Hoare Logic}}, {{courses:sdm2024:frama-c_acsl.pdf|Frama-C and ACSL}}] * **Term Project: Final Presentations (2024/05/29)** * **Final Exam (2024/06/05)** ===== Grading ===== Homework 10%, Attendance/Participation 10%, Term Project 50%, Final 30%. ===== References ===== - //[[https://www.youtube.com/watch?v=-4Yp3j_jk8Q|Thinking Above the Code]]//, L. Lamport, Microsoft Research Faculty Summit 2014. - //[[https://www.amazon.com/Software-Requirements-Specifications-Principles-Prejudices/dp/0201877120|Software Requirements and Specifications: A Lexicon of Practice, Principles and Prejudices]]//, M. Jackson, Addison-Wesley, 1995. - [[https://en.wikipedia.org/wiki/Agile_software_development|Agile software development]], Wikipedia. - [[http://git-scm.com/|Git]]. - [[http://www.eclipse.org/|Eclipse]], The Eclipse Foundation open source community website. - //[[http://www.uml.org/|The UML Resource Page]]//, OMG. - //[[https://www.youtube.com/watch?v=zid-MVo7M-E&t=339s|UML Use Case Diagram Tutorial]]//, YouTube. - //[[https://www.youtube.com/watch?v=pCK6prSq8aw|How to Make a UML Sequence Diagram]]//, YouTube. - //[[https://www.amazon.com/-/zh_TW/Grady-Booch/dp/013485215X/ref=sr_1_1?crid=18BVNLJTWKMXW&keywords=The+Unified+Modeling+Language+User+Guide&qid=1645369406&s=books&sprefix=the+unified+modeling+language+user+guide%2Cstripbooks-intl-ship%2C620&sr=1-1|The Unified Modeling Language User Guide, 2nd Edition]]//, G. Booch, I. Jacobson, and J. Rumbaugh, Addison-Wesley, 2005. - //[[http://www.owasp.org/|The OWASP Website]]//. (Note: a website dedicated to Web application security.) - //[[https://www.amazon.com/-/zh_TW/Martin-Fowler/dp/0201895420/ref=sr_1_1?crid=2SLPZFFK6664M&keywords=analysis+patterns&qid=1645368582&s=books&sprefix=analysis+patterns%2Cstripbooks-intl-ship%2C302&sr=1-1|Analysis Patterns: Reusable Object Models]]//, M. Fowler, Addison-Wesley, 1997. - //[[https://www.amazon.com/-/zh_TW/Erich-Gamma/dp/0201633612/ref=sr_1_1?crid=X3575Z80C0R&keywords=Design+Patterns%3A+Elements+of+Reusable+Object-Oriented+Software&qid=1645369528&s=books&sprefix=design+patterns+elements+of+reusable+object-oriented+software%2Cstripbooks-intl-ship%2C545&sr=1-1|Design Patterns: Elements of Reusable Object-Oriented Software]]//, E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Addison-Wesley, 1995. - //[[http://formalmethods.wikia.com/wiki/Formal_methods|The Formal Methods Page]]//, J. Bowen. (Note: this Web portal provides links to numerous formal methods and tools.) - //[[https://www.amazon.com/-/zh_TW/Michael-Huth/dp/052154310X/ref=sr_1_1?crid=F3YN84QY8K4B&keywords=Logic+in+Computer+Science%3A+Modelling+and+Reasoning+about+Systems&qid=1645369676&s=books&sprefix=logic+in+computer+science+modelling+and+reasoning+about+systems%2Cstripbooks-intl-ship%2C585&sr=1-1|Logic in Computer Science: Modelling and Reasoning about Systems]]//, M. Huth and M. Ryan, Cambridge University Press, 2004. - //[[http://www.cis.upenn.edu/~jean/gbooks/logic.html|Logic for Computer Science: Foundations of Automatic Theorem Proving]]//, J.H. Gallier, Harper & Row Publishers, 1985. (Note: follow the link to author's free download site.) - //[[https://www.omg.org/spec/OCL/2.4/PDF|Object Constraint Language, Version 2.4]]//, OMG, 2014. - //[[https://www.amazon.com/-/zh_TW/Daniel-Jackson/dp/0262528908/ref=sr_1_1?crid=1HRSPG1OO8I4Z&keywords=Software+Abstractions%3A+Logic%2C+Language%2C+and+Analysis&qid=1645369758&s=books&sprefix=software+abstractions+logic%2C+language%2C+and+analysis%2Cstripbooks-intl-ship%2C806&sr=1-1|Software Abstractions: Logic, Language, and Analysis]]//, D. Jackson, MIT Press, 2006. - //[[https://www.amazon.com/-/zh_TW/Krzysztof-R-Apt-ebook/dp/B00FB52KBQ/ref=sr_1_1?crid=2BRORYXL1AOG1&keywords=Verification+of+Sequential+and+Concurrent+Programs%2C+3rd+Edition&qid=1645369822&s=books&sprefix=verification+of+sequential+and+concurrent+programs%2C+3rd+edition%2Cstripbooks-intl-ship%2C628&sr=1-1|Verification of Sequential and Concurrent Programs, 3rd Edition]]//, K.R. Apt, F.S. de Boer, and E.-R. Olderog, Springer, 2009. - [[http://frama-c.com/|Frama-C]]. - //[[https://www.amazon.com/-/zh_TW/Gerard-Holzmann/dp/0321773713/ref=sr_1_1?crid=OTY9L5ILZDOM&keywords=The+SPIN+Model+Checker%3A+Primer+and+Reference+Manual&qid=1645369923&s=books&sprefix=the+spin+model+checker+primer+and+reference+manual%2Cstripbooks-intl-ship%2C456&sr=1-1|The SPIN Model Checker: Primer and Reference Manual]]//, G.J. Holzman, Addison-Wesley, 2003. - [[http://spinroot.com/|Spin]]. - [[http://babelfish.arc.nasa.gov/trac/jpf|Java Pathfinder]]. ===== Old Exams and Solutions ===== [{{courses:sdm:mid2004.pdf|Midterm 2004}}, {{courses:sdm:mid2004_s.pdf|Solutions}}] [{{courses:sdm:final2004.pdf|Final 2004}}] [{{courses:sdm:mid2006.pdf|Midterm 2006}}, {{courses:sdm:mid2006_s.pdf|Solutions}}] [{{courses:sdm:final2006.pdf|Final 2006}}] [{{courses:sdm:mid2008.pdf|Midterm 2008}}] [{{courses:sdm:mid2009.pdf|Midterm 2009}}] [{{courses:sdm:mid2010.pdf|Midterm 2010}}] [{{courses:sdm:mid2011.pdf|Midterm 2011}}] [{{courses:sdm:mid2012.pdf|Midterm 2012}}] [{{courses:sdm:final2013.pdf|Final 2013}}] [{{courses:sdm:final2014.pdf|Final 2014}}] [{{courses:sdm:final2015.pdf|Final 2015}}] [{{courses:sdm:final2016.pdf|Final 2016}}] [{{courses:sdm:final2017.pdf|Final 2017}}] [{{courses:sdm:final2020.pdf|Final 2020}}] [{{courses:sdm:sdm2021final.pdf|Final 2021}}] [{{courses:sdm:sdm2022final.pdf|Final 2022}}] [{{courses:sdm:sdm2023final.pdf|Final 2023}}]