======Software Development Methods, Fall 2017====== 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 ===== * next edition: [[http://im.ntu.edu.tw/~tsay/dokuwiki/doku.php?id=courses:sdm2020:main&#announcements|Software Development Methods 2020]] * 01/26: Grade Report available; contact Yih-Kuen Tsay by 5PM 01/27 if you have any question or request. * 12/27: slides for Logic, OCL, Automata-Based Model Checking, and Hoare Logic available. * 12/19: slides for Software Testing available. * 12/13: slides for Web Application Security available. * 11/28: slides for Design Patterns and some code examples available. * 11/28: slides for Bluemix and for Team Collaboration available. * 11/22: slides for Design Document and an example design document available. * 11/22: {{courses:sdm2017:hw4.pdf|HW#4}} due 2PM 11/29. * 10/31: {{courses:sdm2017:hw3.pdf|HW#3}} due 11/08. * 10/25: slides for Domain Modeling available. * 10/11: slides for Advanced Web Programming available. * 09/26: {{courses:sdm2017:termproject_draft20170926.pdf|Draft of Term Project}} available for discussions, to be finalized by 10/11. * 09/26: slides for UML Diagrams available. * 09/25: slides for Eclipse and EGit available. * 09/20: {{courses:sdm2017:hw2.pdf|HW#2}} due 2PM 09/27. * 09/20: slides for {{courses:sdm2017:WebProgrammingBasics.pptx|Basics of Web Programming}} available. * 09/20: slides for An Overview of UML available. * 09/16: enrollment authorization numbers will be given on 9/20 according to the ranking in the waiting list; those who would get an enrollment authorization number then may complete HW#1 later on 09/21. * 09/16: HW#1 revised; download it again to get the correct version. * 09/14: the {{courses:sdm2017:waitinglist.pdf|waiting list}} available. * 09/13: slides for Git available. * 09/13: {{courses:sdm2017:hw1.pdf|HW#1}} due 10PM 09/19. * 09/13: slides for Course Introduction available. * 09/08: website announced. This website is the primary source of all up to date course information and syllabus of Software Development Methods 2017; there is no separate PDF version for the syllabus. ===== 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 (劉智雄, IBM), Pauline Peng (彭寶嶙, 叡揚), Clement CW Su (蘇志文, IBM), Scar Su (蘇瑞亨, 叡揚), Chih-Pin Tai (戴智斌, 創炎/Traiwan出來玩), Ming-Hsien Tsai (蔡明憲, Academia Sinica), and Ching-Lin Yu (游景麟, Mozilla). ===== Lectures ===== Wednesday 2:20-5:20PM, Room 204, 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 ===== Carlos Chang (張永叡), Xjake080449@gmail.comX (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) ===== After an overview of the typical software development process and relevant issues, we will study 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: 09/13a) \\ Overview of software requirements, development process, design methods, and verification \\ [{{courses:sdm2017:introduction.pdf|slides}}] * **Productivity Tools: Version Control with Git** (1/3 week: 09/13b) [{{courses:sdm2017:git.pdf|slides}}] * **Software Modeling: An Overview of UML** (2/3 week: 09/20a) \\ Introduction, basics of modeling, overview of the UML \\ [{{courses:sdm2017:UML_overview.pdf|slides}}] * **Productivity Tools: Eclipse and EGit** (1/3 week: 09/20b) [{{courses:sdm2017:Eclipse.pdf|Tips for Using Eclipse}}, {{courses:sdm2017:EGit.pdf|EGit: Git for Eclipse}}] * **Software Modeling: UML Diagrams** (1 week: 09/27) \\ 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:sdm2017:UML_diagrams.pdf|slides}}] * **Software Implementation: Web Programming Pearls** (1 week: 10/11) [{{courses:sdm2017:WebProgrammingBasics.pptx|basics}}, {{courses:sdm2017:WebProgrammingAdvanced.pptx|advanced}}] * **Term Project: Proposal Presentations** (1/3 week: 10/18a) \\ * **Invited Talk** (2/3 week: 10/18b) \\ [{{courses:sdm2017:invitedtalk_softwaredevelopment.pdf|slides}}] * **Software Modeling: Domain Modeling** (2 weeks: 10/25, 11/01) \\ What and how (abstract models, notations and constructs, basic business logics, crossing domains, layers of abstraction), common patterns, with group exercises and discussions \\ [{{courses:sdm2017:DomainModel.pptx|slides}}] * **Software Development Practice: Next-Generation Cloud and Cognitive Applications** (2/3 week: 11/08a) \\ Overview of open source projects CloudFoundry and IBM Bluemix, rapid cloud application development with composable cloud services, Watson Cognitive API for building next generation applications \\ [{{courses:sdm2017:bluemixintroduction.pdf|slides}}; websites: [[http://http://bluemix.net/|Bluemix]], [[http://http://https://hub.jazz.net/|JazzHub]]; inspiring article: [[http://www.economist.com/news/special-report/21593580-cheap-and-ubiquitous-building-blocks-digital-products-and-services-have-caused|A Cambrian moment]]] * **Software Development Practice: Team Collaboration** (1/3 week: 11/08b) \\ Agile development process, Git-Flow best practices, continuous integration, and IBM experience\\ [{{courses:sdm2017:SoftwareEngineering.pdf|slides}}] * **Term Project: First Preliminary Demos** (1/3 week: 11/22a) \\ * **Software Development Practice: Design Document** (2/3 week: 11/22b) \\ High level design document, implementation level design document, user story (for Agile) \\ [{{courses:sdm2017:DesignDocIntroduction.pdf|slides}}, notes: {{courses:sdm2017:DesignDocSimpleExample.doc|An Example Design Document}}] * **Design Patterns** (2 weeks: 11/29, 12/06) \\ Why design patterns, introduction to creational, structural, and behavioral patterns, GoF patterns \\ [{{courses:sdm2017:DesignPatterns.pdf|slides}}; {{courses:sdm2017:DesignPatternsExamples.zip|code examples}}] * **Term Project: Second Preliminary Demos** (1/3 week: 12/13a) \\ * **Software Security: Web Application Security** (2/3 week: 12/13b) \\ Dynamic Web pages, client-side scripts, security vulnerabilities, vulnerabilities detection and prevention \\ [{{courses:sdm2017:web_app_security.pptx|slides}}] * **Software Verification: Testing** (1 week: 12/20) \\ [{{courses:sdm2017:software_testing.pptx|slides}}] * **Software Modeling: Formal Logic and Correctness Requirements** (1/2 week: 12/27a) \\ Propositions, proofs, theorems, predicates, models\\ [{{courses:sdm2017:logic.pdf|slides}}] \\ Object Constraint Language (//relation with UML models, values, types, expressions, objects, properties, collection operations//)\\ [{{courses:sdm2017:OCL.pptx|slides}}] * **Software Verification: Formal Verification** (1/2 week: 12/27b) \\ Automata-based model checking, linear temporal logic, Spin (//Promela, never-claims//) \\ [{{courses:sdm2017:automata_based_model_checking.pdf|slides}}]\\ Axiomatic semantics of programs (//assertions, pre/post-conditions, invariants//), partial and total correctness \\ [{{courses:sdm2017:hoare_logic.pdf|slides}}] * **Term Project: Final Presentations (2018/01/03)** * **Final Exam (2018/01/10)** ===== Grading ===== Homework 10%, Term Project 50%, Final 30%, Attendance/Participation 10%. ===== References ===== - [[http://git-scm.com/|Git]]. - [[http://www.eclipse.org/|Eclipse]], The Eclipse Foundation open source community website. - [[http://projects.eclipse.org/projects/tools.pdt|PHP IDE for Eclipse]]. - [[http://www.eclipse.org/webtools/jsdt/|JavaScript IDE for Eclipse]]. - [[http://http://bluemix.net/|Bluemix]]. - [[http://http://https://hub.jazz.net/|JazzHub]]. - //[[http://www.uml.org/|The UML Resource Page]]//, OMG. - //The Unified Modeling Language User Guide, 2nd Edition//, G. Booch, I. Jacobson, and J. Rumbaugh, Addison-Wesley, 2005. - //Design Patterns: Elements of Reusable Object-Oriented Software//, E. Gamma, R. Helm, R. Johnson, and J. Vlissides, Addison-Wesley, 1995. - [[http://www.android.com/|Android]]. - //[[http://www.owasp.org/|The OWASP Website]]//. (Note: a website dedicated to Web application security.) - //The Formal Methods Page: //http://formalmethods.wikia.com/wiki/Formal_methods, J. Bowen. (Note: this Web portal provides links to numerous formal methods and tools.) - //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.) - //Object Constraint Language, OMG Available Specification, Version 2.0//, OMG. - //Software Abstractions: Logic, Language, and Analysis//, D. Jackson, MIT Press, 2006. - //Temporal Verification of Reactive Systems: Safety//, Z. Manna and A. Pnueli, Springer-Verlag, 1995. - //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]]. - //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]]. - [[http://people.cs.kuleuven.be/~bart.jacobs/verifast/|VeriFast]]. ===== 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}}]