diff --git a/CourseOutline/CAS741Description.txt b/CourseOutline/CAS741Description.txt new file mode 100644 index 0000000000000000000000000000000000000000..e6214227ecd960e6c2197b08a4b7ec2275c1c74d --- /dev/null +++ b/CourseOutline/CAS741Description.txt @@ -0,0 +1,19 @@ +CAS 741/CSE 741 Development of Scientific Software + +Overview + +This course presents the basic principles of software development for reliable scientific and engineering software. Using example applications, a systematic process is given for the development and documentation of requirements, system design, module design, implementation, testing and inspection. + +Description + +Scientific computation consists of using computer tools to simulate mathematical models of real world systems so that we can better understand and predict the system's behaviour. A small sample of some important applications of scientific computation include the following: designing new automotive parts, analysing the flow of blood in the body, and determining the concentration of a pollutant released into the groundwater. As these examples illustrate, scientific computation can be used for tackling problems that impact such areas as manufacturing, financial planning, environmental policy, and the health, welfare and safety of communities. Given the important applications of scientific computation, it is surprising that little emphasis is currently placed on the quality of the software that performs the computations. Although many successful and sophisticated algorithms have been developed for scientific computing, the software often suffers from problems with such qualities as reliability, usability, verifiability, maintainability, reusability and portability. This is why scientific software is routinely sold with a disclaimer instead of a warranty. To make matters worse, the quality of scientific software is becoming increasingly more of an issue because the complexity and size of the problems that can be simulated on modern computers is constantly growing. The question for the future is how to meet the growing need for providing quick solutions to large and complex problems, and at the same time ensure that the solutions are correct? This graduate course will investigate this question by applying to scientific computing problems such software engineering methodologies as commonality analysis, requirements analysis and documentation, modular decomposition, module interface specification, testing, code and document generation and assurance cases. + +The course will look at tools, techniques and principles for iterative and incremental development of scientific and engineering software. Despite the iterative development cycle, the documentation will follow 5 rational steps: i) identify the problem, ii) document the requirements, iii) design the system, iv) implement the software, and v) perform tests. This structure is well suited to scientific computing because it parallels the idealized scientific method, as follows: i) a physical problem of engineering or scientific importance is identified; ii) a system of governing equations and the associated boundary conditions are derived; iii) a numerical algorithms are developed; iv) the numerical algorithms are implemented on a computer; and, v) the model and the computed results are verified and validated, with the potential to return to one of the previous steps if necessary. These five steps are inherently multidisciplinary as they involve skills from physical modelling, mathematics, numerical analysis and computer science. For this reason it is important that requirements (including assumptions) and design decisions are clearly documented. + +Delivery + +The course will be taught as a series of lectures and group discussions. An important component of the course grade will be individual projects to design and develop software for solving a scientific computing problem. + +Prerequisites + +An interest in scientific computing is important, but no knowledge of numerical methods beyond what is typically covered in an undergraduate degree will be assumed. The projects will be selected to match the students background knowledge and interests. \ No newline at end of file diff --git a/CourseOutline/CAS741_Outline.pdf b/CourseOutline/CAS741_Outline.pdf new file mode 100644 index 0000000000000000000000000000000000000000..de42339cf4ca1d99c6c9fcad82a477a6cc390e67 Binary files /dev/null and b/CourseOutline/CAS741_Outline.pdf differ diff --git a/CourseOutline/CAS741_Outline.tex b/CourseOutline/CAS741_Outline.tex new file mode 100755 index 0000000000000000000000000000000000000000..1b013564739b70abb2cb20d39429eecacd0a9c99 --- /dev/null +++ b/CourseOutline/CAS741_Outline.tex @@ -0,0 +1,266 @@ +\documentclass[12pt]{article} + +\usepackage{hyperref} + +\hypersetup{ + bookmarks=true, % show bookmarks bar? + colorlinks=true, % false: boxed links; true: colored links + linkcolor=red, % color of internal links (change box color with linkbordercolor) + citecolor=green, % color of links to bibliography + filecolor=magenta, % color of file links + urlcolor=cyan % color of external links +} + +\oddsidemargin 0mm +\evensidemargin 0mm +\textwidth 165mm +\textheight 205mm + +\title{Computing and Software 741 (Computational Engineering and Science 741) + Development of Scientific Computing Software} +%\author{Spencer Smith} + +\pagestyle {plain} +\pagenumbering {arabic} + +\newcommand{\be}{\begin{enumerate}} +\newcommand{\ee}{\end{enumerate}} +\newcommand{\bi}{\begin{itemize}} +\newcommand{\ei}{\end{itemize}} + +% enumi counter is redefined for the purpose of numbering the deliverables +\renewcommand{\labelenumi}{\arabic{enumi}.} +\newcounter{temp} + +\begin {document} + +\maketitle + +This course outline contains important information that will effect your +grade. You should retain and refer to this outline throughout the term. + +\section {Instructor} + +Dr.~Spencer Smith\\ +Office: ITB/167\\ +E-mail: \texttt{smiths@mcmaster.ca}\\ +Web: \url{http://www.cas.mcmaster.ca/~smiths}\\ +Office Hours Term 1: Drop in, or by appointment\\ + +\section{Calendar Description} + +This course presents the basic principles of software development for reliable +scientific and engineering software. Using example applications, a systematic +process is given for the development and documentation of requirements, system +design, module design, implementation, testing and inspection. + +\section{Introduction} + +Scientific computation consists of using computer tools to simulate mathematical +models of real world systems so that we can better understand and predict the +system's behaviour. A small sample of some important applications of scientific +computation include the following: designing new automotive parts, analysing the +flow of blood in the body, and determining the concentration of a pollutant +released into the groundwater. As these examples illustrate, scientific +computation can be used for tackling problems that impact such areas as +manufacturing, financial planning, environmental policy, and the health, welfare +and safety of communities. Given the important applications of scientific +computation, it is surprising that little emphasis is currently placed on the +quality of the software that performs the computations. Although many +successful and sophisticated algorithms have been developed for scientific +computing, the software often suffers from problems with such qualities as +reliability, usability, verifiability, maintainability, reusability and +portability. This is why scientific software is routinely sold with a +disclaimer instead of a warranty. To make matters worse, the quality of +scientific software is becoming increasingly more of an issue because the +complexity and size of the problems that can be simulated on modern computers is +constantly growing. The question for the future is how to meet the growing need +for providing quick solutions to large and complex problems, and at the same +time ensure that the solutions are correct? This graduate course will +investigate this question by applying to scientific computing problems such +software engineering methodologies as commonality analysis, requirements +analysis and documentation, modular decomposition, module interface +specification, testing, code and document generation and assurance cases. + +The course will look at tools, techniques and principles for iterative and +incremental development of scientific and engineering software. Despite the +iterative development cycle, the documentation will follow 5 rational steps: i) +identify the problem, ii) document the requirements, iii) design the system, iv) +implement the software, and v) perform tests. This structure is well suited to +scientific computing because it parallels the idealized scientific method, as +follows: i) a physical problem of engineering or scientific importance is +identified; ii) a system of governing equations and the associated boundary +conditions are derived; iii) a numerical algorithms are developed; iv) the +numerical algorithms are implemented on a computer; and, v) the model and the +computed results are verified and validated, with the potential to return to one +of the previous steps if necessary. These five steps are inherently +multidisciplinary as they involve skills from physical modelling, mathematics, +numerical analysis and computer science. For this reason it is important that +requirements (including assumptions) and design decisions are clearly +documented. + +\subsection*{Course Web Site} + +This course will be administered via Avenue to Learn. Go to + +\bi + + \item[] \url{http://avenue.mcmaster.ca/} + +\ei + +\noindent to access the course's Avenue to Learn page. Please send only normal +McMaster e-mail; do not send mail via Avenue. + +Students should be aware that, when they access the electronic +components of this course, private information such as first and last +names, user names for the McMaster e-mail accounts, and program +affiliation may become apparent to all other students in the same +course. The available information is dependent on the technology +used. Continuation in this course will be deemed consent to this +disclosure. If you have any questions or concerns about such +disclosure please discuss this with the Instructor. + +\emph{It is the student's responsibility to be aware of the + information on the course's Avenue to Learn page and to check + regularly for announcements.} + +The primary purpose of Avenue will be for maintaining grades. Most +of the course content will be maintained in a public git repository. +You can access this repository at:\\ + +\href{https://gitlab.cas.mcmaster.ca/smiths/cas741/}{https://gitlab.cas.mcmaster.ca/smiths/cas741/}\\ + +\noindent Rather than use the Avenue discussion board, please post your +questions (issues) to the GitLab issue tracker. + +In addition to Avenue and the gitlab course note repository, every student will +create a public gitHub repository (with instructor added as a full access +collaborator) for their work. The GitHub server is located at +\url{https://github.com/}. Students will be expected to use GitHub to provide +comments on the work of other students in the class. + +\section {Course Project} + +At the beginning of the term each student will select a scientific computing +problem. Over the course of the term software will be developed to address the +selected problem. The software development process will follow the iterative +waterfall model, with the following milestones: + +\begin {enumerate} + +\item Software Requirements Specification (SRS) +\item Module Guide (MG) +\item Module Interface Specification (MIS) +\item Implementation (any appropriate programming language) +\item Testing + +\end {enumerate} + +With approval from the instructor, the deliverables can potentially be modified, +if a project is more suited to different deliverables. For instance, a project +could replace one of the above deliverables with an assurance case deliverable, +or with domain specific code to automatically build the deliverables. + +\section {Course Structure} + +The format of the course will consist of student and instructor presentations. +Each student will be expected to do an informal presentation on their SRS, MG, +MIS, Implementation and Testing. It is expected the class discussion will +assist in improving the quality of the written deliverables. Each student will +be expected to hand in the following written documents: SRS, MG, MIS, and Final +Documentation. + +\section {Grading} + +\begin {enumerate} + +\item Presentations and class discussion 10\% + +\item Quality of GitHub issues provided to classmates 5\% + +\item System Requirements Specification (SRS) 20\% + +\item Module Guide (MG) 10\% + +\item Module Interface Specification (MIS) 20\% + +\item Final Documentation (including revised versions of previous documents, + plus the source code and a testing report) 35\% + +\end {enumerate} + +\section {Policy Statements} + +This section of the course outline explains the course policy with respect to +improving the course, missed work, discrimination and academic dishonesty. + +\subsection {Improving the course} + +Ideas to improve the course are always welcome. Moreover, if you have problems +in the course please contact the instructors as early as possible. + +\subsection {Missed Work} + +Late assignments, without permission, will receive a penalty of -20 \% per +working day that the assignment is late. + +\subsection {Discrimination} + +The Faculty of Engineering is concerned with ensuring an environment +that is free of all adverse discrimination. If there is a problem, +that cannot be resolved by discussion among the persons concerned, +individuals are reminded that they should contact their Department +Chair and the Human Rights and Equity Services (HRES) office as soon +as possible. + +\subsection {Academic Dishonesty} + +You are expected to exhibit honesty and use ethical behaviour in all aspects of +the learning process. Academic credentials you earn are rooted in principles of +honesty and academic integrity. + +Academic dishonesty is to knowingly act or fail to act in a way that results or +could result in unearned academic credit or advantage. This behaviour can result +in serious consequences, e.g., the grade of zero on an assignment, loss of +credit with a notation on the transcript (notation reads: ``Grade of F assigned +for academic dishonesty''), and/or suspension or expulsion from the university. + +It is your responsibility to understand what constitutes academic dishonesty. +For information on the various types of academic dishonesty please refer to the +Academic Integrity Policy, located at +\[\texttt{http://www.mcmaster.ca/academicintegrity/}\] + +\noindent The following illustrates only three forms of academic dishonesty: + +\be + +\item Plagiarism, e.g., the submission of work that is not one's own or for + which other credit has been obtained. + +\item Improper collaboration in group work. + +\item Copying or using unauthorized aids in tests and examinations. + + \ee + +\emph{Your work must be your own.} Plagiarism and copying will not be +tolerated! If it is discovered that you plagiarized or copied, it +will be considered as academic dishonesty. + +Students may be asked to defend their written work orally. + +\subsection*{Course Modifications} + +The instructor and university reserve the right to modify elements of +the course during the term. The university may change the dates and +deadlines for any or all courses in extreme circumstances. If either +type of modification becomes necessary, reasonable notice and +communication with the students will be given with explanation and the +opportunity to comment on changes. It is the responsibility of the +student to check their McMaster e-mail and course websites weekly +during the term and to note any changes. Your McMaster e-mail is the +one with the address ending in \texttt{@mcmaster.ca}. This is a +separate e-mail address from your Avenue address. + +\end{document} \ No newline at end of file diff --git a/README.md b/README.md index 03d2a45d38ab486f012b3bcf1da243bf030fe1bd..9c422d8b0fef673ea518e4c48628c79ccd18c149 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# CAS 741 Development of Scientific Computing Software +# CAS 741/CSE 741 Development of Scientific Computing Software This course presents the basic principles of software development for reliable scientific and engineering software. Using example applications, a systematic