diff --git a/Lectures/L03_Requirements/Requirements.pdf b/Lectures/L03_Requirements/Requirements.pdf index 68756cdd4595a7d7d565f7131d0ff88e02e2397d..d06da441ca4a778b1f96bbb17860803b05f61e6b 100644 Binary files a/Lectures/L03_Requirements/Requirements.pdf and b/Lectures/L03_Requirements/Requirements.pdf differ diff --git a/Lectures/L03_Requirements/Requirements.tex b/Lectures/L03_Requirements/Requirements.tex index 68376b7e74fe77d9d9910c16079c59396b5227ad..8be9a49c93ac588b4ec78ed9e51314721d7107ea 100755 --- a/Lectures/L03_Requirements/Requirements.tex +++ b/Lectures/L03_Requirements/Requirements.tex @@ -22,7 +22,7 @@ \usepackage{multicol} \usepackage{array} -\bibliographystyle{plainnat} +\bibliographystyle{plain} %\usetheme{Iimenau} @@ -34,7 +34,7 @@ \input{../def-beamer} -\newcommand{\topic}{03 Requirements DRAFT} +\newcommand{\topic}{03 Requirements} \input{../titlepage} @@ -49,18 +49,15 @@ \bi \item Administrative details -\item Questions: project choices, software tools -\item License and copyright +\item Questions: project choices?, software tools? \item Problem statement and example -\item Motivation -\begin{itemize} +\item Software Engineering for Scientific Computing literature \item Scientific Computing Software Qualities -\item Challenges to Developing Quality Scientific Software -\end{itemize} +\item Motivation: Challenges to Developing Quality Scientific Software \item Requirements documentation for scientific computing -\item A new requirements template +\item A requirements template \item Advantages of new template and examples -\item The new template from a software engineering perspective +\item The template from a software engineering perspective \item Concluding remarks \item References \ei @@ -72,8 +69,9 @@ \frametitle{Administrative Details} \bi -\item Add me to your GitHub repos, my GitHub id is \texttt{smiths} +\item Add \texttt{smiths} to your GitHub repos \item Linked-In +\item \structure{Assign the instructor an issue to review your problem statement} \ei \end{frame} @@ -81,50 +79,150 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame} -\frametitle{Administrative Details: Report Deadlines} +\frametitle{Administrative Details: Deadlines} ~\newline \begin{tabular}{l l l} \textbf{Problem Statement} & Week 02 & Sept 15\\ -System Requirements Specification (SRS) & Week 05 & Oct 4\\ -Verification and Validation Plan & Week 07 & Oct 25\\ -Module Guide (MG) & Week 09 & Nov 8\\ -Module Interface Specification (MIS) & Week 11 & Nov 22\\ +SRS Present & Week 04 & Week of Sept 25\\ +SRS & Week 05 & Oct 4\\ +V\&V Present & Week 06 & Week of Oct 16\\ +V\&V Plan & Week 07 & Oct 25\\ +MG Present & Week 08 & Week of Oct 30\\ +MG & Week 09 & Nov 8\\ +MIS Present & Week 10 & Week of Nov 13\\ +MIS & Week 11 & Nov 22\\ +Impl.\ Present & Week 12 & Week of Nov 27\\ Final Documentation & Week 13 & Dec 6\\ \end {tabular} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Questions?} +\begin{itemize} +\item Questions about project choices? +\item Questions about software tools? \bi -\item The written deliverables will be graded based on the repo contents as of -11:59 pm of the due date -\item If you need an extension, please ask -\item Two days after each major deliverable, your GitHub issues will be due +\item git? +\item LaTex? \ei +\item Partial tex files in the blank project template +\item \href{https://gitlab.cas.mcmaster.ca/smiths/cas741/blob/master/BlankProjectTemplate/Doc/ProblemStatement/ProblemStatement.tex}{Problem statement} +\end{itemize} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Problem Statement} +\bi +\item Written in LaTeX +\item Due electronically (on GitLab) by deadline +\item Comments might be typed directly into your source +\item For later assignments with LaTeX source, include the LaTeX + commands for comments +\item \textbf{What} problem are you trying to solve? +\item \textbf{Not how} you are going to solve the problem +\item Why is this an important problem? +\item What is the context of the problem you are solving? +\bi +\item Who are the stakeholders? +\item What is the environment for the software? +\ei +\item A page description should be sufficient +\ei \end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame} -\frametitle{Administrative Details: Presentations} +\frametitle{Sample Project Statements} -~\newline -\begin{tabular}{l l l} -SRS Present & Week 04 & Week of Sept 25\\ -V\&V Present & Week 06 & Week of Oct 16\\ -MG Present & Week 08 & Week of Oct 30\\ -MIS Present & Week 10 & Week of Nov 13\\ -Implementation Present & Week 12 & Week of Nov 27\\ -\end {tabular} +\bi +\item \href{https://gitlab.cas.mcmaster.ca/ThisTooShallParse/3XA3_CParser}{CParser} +\item \href{https://gitlab.cas.mcmaster.ca/theateam/FloppyFishGroup}{FloppyFish} +\item + \href{https://gitlab.cas.mcmaster.ca/screenholders/screenholders}{Screenholders} +\item Template in repo +\ei + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{SE For SC Literature} +\begin {itemize} + +\item CAS 741 process is document driven, adapted +from the waterfall model~\cite{GhezziEtAl2003, VanVliet2000} +\item Many say a document driven process is not used by, nor suitable for, +scientific software. \bi -\item Tentative dates -\item Specific schedule depends on final class registration and need -\item Informal presentations with the goal of improving everyone's written - deliverables +\item Scientific developers naturally use an agile + philosophy~\cite{AckroydEtAl2008, CarverEtAl2007, EasterbrookAndJohns2009, Segal2005}, +\item or an amethododical process~\cite{Kelly2013} +\item or a knowledge acquisition driven process~\cite{Kelly2015}. \ei +\item Scientists do not view rigid, process-heavy approaches, + favorably~\cite{CarverEtAl2007} +\item Reports for each stage of development are counterproductive~\cite[p.~373]{Roache1998} +\item Up-front requirements are +impossible~\cite{CarverEtAl2007, SegalAndMorris2008} +\item \structure{What are some arguments in favour of a rational document driven + process?} +\end{itemize} \end{frame} -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Counter Arguments} + +\begin {itemize} + +\item Just because document driven is not used, does not mean it will not work +\item Documentation provides many +benefits~\cite{Parnas2010}: +\bi +\item easier reuse of old designs +\item better communication about requirements +\item more useful design reviews +\item easier integration of separately +written modules +\item more effective code inspection +\item more effective testing +\item more efficient corrections and improvements. +\ei +\item Actually faking a rational design process +\item Too complex for up-front requirements sounds like an excuse +\bi +\item Laws of physics/science slow to change +\item Often simple design patterns +\item Think program family, not individual member +\ei +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Definition of Software Qualities} + +\begin{itemize} +\item Measures of the excellence or worth of a software product (code or document) or process +with respect to some aspect +\item \structure{What are some important aspects (qualties) for scientific softwarwe?} +\item User Satisfaction = The Important Qualities are High + Within Budget +\end{itemize} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame} @@ -165,6 +263,293 @@ Implementation Present & Week 12 & Week of Nov 27\\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame} +\frametitle{Correctness Versus Reliability Versus Robustness} + +What is the difference between these 3 qualities?\\ +~\\ +Can you assess correctness without a requirements specification? + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Correctness} + +\begin{itemize} +\item A software product is correct if it satisfies its requirements specification +\item Correctness is extremely difficult to achieve because +\begin{itemize} +\item The requirements specification may be imprecise, ambiguous, inconsistent, + based on incorrect knowledge, or nonexistent +\item Requirements often compete with each other +\item It is virtually impossible to produce ``bug-free'' software +\item It is very difficult to verify or measure correctness +\end{itemize} +\item If the requirements specification is formal, correctness can in theory and + possibly in practise be +\begin{itemize} +\item Mathematically defined +\item Proven by mathematical proof +\item Disproven by counterexample +\end{itemize} +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Reliability} + +\begin{itemize} +\item A software product is reliable if it usually does what is intended to do +\item Correctness is an absolute quality, while reliability is a relative quality +\item A software product can be both reliable and incorrect +\item Reliability can be statistically measured +\item Software products are usually much less reliable than other engineering + products +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Robustness} + +\begin{itemize} +\item A software product is robust if it behaves reasonably even in + unanticipated or exceptional situations +% example of saving a file and power is lost +\item A correct software product need not be robust +\begin{itemize} +\item Correctness is accomplished by satisfying requirements +\item Robustness is accomplished by satisfying unstated requirements +\end{itemize} +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Question on Correctness. Reliability and Robustness} + +Reliable programs are a superset of correct programs AND robust programs are a +superset of reliable programs. Is this statement True or False? +\begin{enumerate}[A.] +\item True +\item False %answer - robust programs may or may not be correct or reliable +\end{enumerate} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Performance} + +What are some ways you could measure software performance?\\ +~\\ +What are some ways you could specify performance requirements to make them +unambiguous and verifiable? + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Performance} + +\begin{itemize} +\item The performance of a computer product is the efficiency with which the + product uses its resources (memory, time, communication) +\item Performance can be evaluated in three ways +\begin{itemize} +\item Empirical measurement +\item Analysis of an analytic model +\item Analysis of a simulation model +\end{itemize} +\item Poor performance often adversely affects the usability and scalability of + the product +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Usability} + +What are some examples of excellent usability?\\ +~\\ +When you go to a friend's house, you can likely operate their microwave without +reading the manual. What did human factors engineers do to make this possible? + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Usability} + +\begin{itemize} +\item The usability of a software product is the ease with which a typical human + user can use the product +\item Usability depends strongly on the capabilities and preferences of the user +\item The user interface of a software product is usually the principle factor + affecting the product's usability +\item Human computer interaction (HCI) is a major interdisciplinary subject + concerned with understanding and improving interaction between humans and + computers +\end{itemize} +% talk about IBM usability lab and other things that Muir mentioned +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Verifiability} + +\begin{itemize} +\item The verifiability of a software product is the ease with which the + product's properties (such as correctness and performance) can be verified +\item Verifiability can be both an internal and an external quality +%\item What is the relationship between verifiability and correctness? +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Maintainability} + +\begin{itemize} +\item The maintainability of a software product is the ease with which the + product can be modified after its initial release +\item Maintenance costs can exceed 60\% of the total cost of the software product +\item There are three main categories of software maintenance +\begin{enumerate} +\item Corrective: Modifications to fix residual and introduced errors +\item Adaptive: Modifications to handle changes in the environment in which the product is used +\item Perfective: Modifications to improve the qualities of the software +\end{enumerate} +\item Software maintenance can be divided into two separate qualities +\begin{enumerate} +\item Repairability: The ability to correct defects +\item Evolvability: The ability to improve the software and to keep it current +\end{enumerate} +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Maintainability} + +What do software developers do to promote maintainability? + +% documentation, traceability, separation of concerns, modularity, design for +% change, design for generality + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Reusability} + +What are the advantages of reusing code?\\ +~\\ +Why doesn't it happen more often? + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Reusability} + +\begin{itemize} +\item A software product or component is reusable if it can be used to create a + new product +\item Reuse comes in two forms +\begin{enumerate} +\item Standardized, interchangeable parts +\item Generic, instantiable components +\end{enumerate} +\item Reusability is a bigger challenge in software engineering than in other + areas of engineering +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Portability} + +\begin{itemize} +\item A software product is portable if it can run in different environments +\item The environment for a software product includes the hardware platform, the + operating system, the supporting software and the user base +\item Since environments are constantly changing, portability is often crucial + to the success of a software product +\item Some software such as operating systems and compilers, is inherently + machine specific +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Understandability} + +\begin{itemize} +\item The understandability of a software product is the ease with which the + requirements, design, implementation, documentation, etc. can be understood +\item Understandability is an internal quality that has an impact on other + qualities such as verifiability, maintainability, and reusability +\item There is often a tension between understandability and the performance of + a software product +\item Some useful software products completely lack understandability + (e.g. those for which the source code is lost) +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Relationship between Qualities} + +Draw a diagram showing the relationships between the various software qualities + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame} +\frametitle{Measurement of Quality} + +\begin{itemize} +\item A software quality is only important if it can be measured - without + measurement there is no basis for claiming improvement +\item A software quality must be precisely defined before it can be measured +\item Most software qualities do not have universally accepted +\item Can you directly measure maintainability? +\item How might you measure maintainability? +\end{itemize} + +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \begin{frame} \frametitle{Problems with Developing Quality Scientific Computing Software} @@ -193,7 +578,7 @@ programs}} \begin{frame} -\frametitle{Adapt Software Engineering Methodologies} +\frametitle{Adapt Software Engineering Methods} \begin{itemize} @@ -249,7 +634,6 @@ programs}} \begin{itemize} \item Background on requirements elicitation, analysis and documentation -\item Tabular expressions \item Why requirements analysis for engineering computation? \item System Requirements Specification and template for beam analysis software @@ -304,45 +688,6 @@ programs}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\begin{frame} -\frametitle{Tabular Expressions} - -\begin{flushleft} -\scalebox{0.75}{ -\begin{tabular}{||r|p{6cm}||} -\hhline{=|=} -Composition rule & $\cup_{i=1}^{4} H_2[i] \cap (\cap_{j=1}^{2} H_1[j] ~;~ G[i,j])$ \\ -\hhline{=|=} -\end{tabular} -} -\end{flushleft} - -%\begin{center} -\begin{tabular}{|l|p{0.3cm}|l|l|} -\multicolumn{4}{c}{} \\ -\multicolumn{2}{c}{} & \multicolumn{2}{>{\large}c}{$H_1$} \\ -\hhline{|~|~|-|-|} -\multicolumn{2}{c|}{} & $S_{GET}'\cup =$ & $ErrorMsg'+=$ \\ -\hhline{|~|~|-|-|} -\multicolumn{4}{c}{} \\ -\hhline{|-|~|-|-|} -$x_1 < 0$ & & $\emptyset$ & $InvalidInput\_x_1$ \\ -\hhline{|-|~|-|-|} -$0 \le x_1 < min_d$ & & $\emptyset$ & $x_1\_TooSmall$ \\ -\hhline{|-|~|-|-|} -$x_1 > max_d$ & & $\emptyset$ & $x_1\_TooLarge$ \\ -\hhline{|-|~|-|-|} -$min_d \le x_1 \le max_d$ & & $\{@{x_1}\}$ & $NULL$ \\ -\hhline{|-|~|-|-|} -\multicolumn{2}{c}{} & \multicolumn{2}{r}{$\land ChangeOnly(S_{GET}, ErrorMsg)$}\\ -\multicolumn{2}{>{\large}c}{$H_2$} & \multicolumn{2}{>{\large}c}{$G$} \\ -\end{tabular} -%\end{center} - -\end{frame} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \begin{frame} \frametitle{Why Requirements Analysis?} %\begin{figure} @@ -612,7 +957,7 @@ PS1.a & $L$ & & &... & &... & & & $\surd$ & ... & & ... & ... \\ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\frame{\frametitle{More on the New Template} +\frame{\frametitle{More on the Template} \begin{itemize}%[<+-| alert@+>]%[iacolor=gray] \item Why a new template? \item The new template @@ -787,6 +1132,16 @@ displacement of the system, or mathematically $\delta U = 0$ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\begin{frame} +\frametitle{Examples} +\begin{itemize} +\item \href{https://github.com/smiths/swhs}{Solar Water Heating System} +\item \href{https://github.com/JacquesCarette/literate-scientific-software/tree/master/CaseStudies/glass/Documentation/SRS}{GlassBR} +\end{itemize} +\end{frame} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \begin{frame} \frametitle{Concluding Remarks} \begin{itemize}