Skip to content
Snippets Groups Projects
Requirements.tex 19.3 KiB
Newer Older
%\documentclass[handout]{beamer} 
\documentclass[t,12pt,numbers,fleqn]{beamer}
%\documentclass[ignorenonframetext]{beamer}

\newif\ifquestions
%\questionstrue
\questionsfalse

\usepackage{pgfpages} 
\usepackage{hyperref}
\hypersetup{colorlinks=true,
    linkcolor=blue,
    citecolor=blue,
    filecolor=blue,
    urlcolor=blue,
    unicode=false}
\urlstyle{same}

\usepackage{booktabs}
\usepackage{hhline}
\usepackage{multirow}
\usepackage{multicol}
\usepackage{array}

\bibliographystyle{plain}

%\usetheme{Iimenau}

\useoutertheme{split} %so the footline can be seen, without needing pgfpages

%\pgfpagesuselayout{resize to}[letterpaper,border shrink=5mm,landscape]  %if this is uncommented, the hyperref links do not work

\mode<presentation>{}

\input{../def-beamer}

\newcommand{\topic}{03 Requirements}

\input{../titlepage}

\begin{document}

\input{../footline}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Requirements}

\bi
\item Administrative details
\item Questions: project choices?, software tools?
\item Software Engineering for Scientific Computing literature
\item Scientific Computing Software Qualities
\item Motivation: Challenges to Developing Quality Scientific Software
\item Requirements documentation for scientific computing
\item A requirements template
\item Advantages of new template and examples
\item The template from a software engineering perspective
\item Concluding remarks
\item References
\ei
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Administrative Details}

\bi
\item Can everyone access GitLab?
  \href{https://gitlab.cas.mcmaster.ca/smiths/cas741}{https://gitlab.cas.mcmaster.ca/smiths/cas741}
\item Create a GitHub account if you don't already have one
\item Add \texttt{smiths} to your GitHub repos
\item \structure{Assign the instructor an issue to review your problem statement}
\ei

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Administrative Details: Deadlines}
Problem Statement & Week 02 & Sept 14\\
SRS Present & Week 04 & Week of Sept 24\\
SRS & Week 05 & Oct 4\\
Syst.\ VnV Present & Week 06 & Week of Oct 15\\
System VnV Plan & Week 07 & Oct 22\\
MG Present & Week 08 & Week of Oct 29\\
MG & Week 09 & Nov 5\\
MIS Present & Week 10 & Week of Nov 12\\
MIS & Week 11 & Nov 19\\
Unit VnV or Impl.\ Present & Week 12 & Week of Nov 26\\
Unit VnV Plan & Week 13 & Dec 3\\
Final Doc & Week 14 & Dec 10\\
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% \begin{frame}
% \frametitle{Introductions}

% \begin{itemize}
% \item Your name
% \item Degree program
% \item Academic background
% \item Experience with:
% \begin{itemize}
% \item Scientific computing
% \item Continuous math
% \item Discrete math
% \item Software engineering
% \item Software development technology
% \bi
% \item Git
% \item GitHub or GitLab
% \item LaTeX
% \item Make etc.
% \ei
% \end{itemize}
% \item What do you hope to get out of this course?
% \end{itemize}

% \end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Questions?}
\begin{itemize}
\item Questions about project choices?
\item Questions about software tools?
\item Partial tex files in the blank project template
\item
  \href{https://gitlab.cas.mcmaster.ca/smiths/cas741/tree/master/BlankProjectTemplate/docs/ProblemStatement}{Problem
    statement}
\item Copy the folder structure and README files from the blank project, but
  wait for tex files for deliverables
\end{itemize}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Problem Statement}
\bi
\item Written in LaTeX
\item Due electronically (on GitHub) by deadline
\item Generated files should NOT be under source control (except pdf)
\item Comments might be typed directly into your source
\item For all 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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\frametitle{Sample Project Statements} 
\item
  \href{https://github.com/icbicket/SpectrumImageAnalysisPy/blob/master/Doc/ProblemStatement/ProblemStatement.tex}
  {SpectrumImageAnalysisPy}
\item
  \href{https://github.com/palmerst/cas741_sp/blob/master/Doc/ProblemStatement/ProblemStatement.pdf}{Aqueous
    Speciation Diagram Generator}
\item
  \href{https://github.com/aoananp/cas741/blob/master/Doc/ProblemStatement/ProblemStatement.pdf}{System
    of ODE solver library}
\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{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 (qualities) for scientific software?}
\item User Satisfaction = The Important Qualities are High + Within Budget
\end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}

\frametitle{Important Qualities for Scientific Computing Software}

\begin{itemize}

\item External qualities
\begin{itemize}
\item Correctness (Thou shalt not lie)
\item Reliability
\item Robustness
\item Performance
\begin{itemize}
%\item Tight bounds
\item Time efficiency
\item Space efficiency
\end{itemize}
\end{itemize}

\item Internal qualities
\begin{itemize}
\item Verifiability
%\item Productivity
\item Usability
\item Maintainability
%\begin{itemize}
%\item Repairability
%\item Evolvability
%\end{itemize}
\item Reusability
\item Portability
\end{itemize}

\end{itemize}

Definitions in \cite{GhezziEtAl2003}.

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\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}

\structure{What are some examples of excellent usability?}\\
\structure{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}

\structure{What are the advantages of reusing code?}\\
\structure{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{SRS versus CA}

\begin{itemize}
\item SRS (Software Requirements Specification)
\begin{itemize}
\item Requirements for a software product
\item Usually for specific physical problems
\end{itemize}
\item CA (Commonality Analysis)
\begin{itemize}
\item Requirements for a family of related software products
\item Sometime for specific physical problems
\item Commonly used for a library of general purpose tools
\item Distinguish commonalities, variabilities and parameters of variation
\end{itemize}

\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Big Picture View of SRS/CA}

\begin{itemize}
\item Goal statement(s)
\item Inputs and outputs
\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Goal Statements for SWHS}

\structure{What are the goal statement for the Solar Water Heating System?}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Goal Statements for SWHS}

\noindent Given the temperature of the heating coil, initial conditions for the
temperature of the water and the temperature of the phase change material, and
material properties, the goal statements are:

\begin{itemize}

\item[GS1:] Predict the water 
temperature over time.

\item[GS2:] Predict the PCM 
temperature over time.
	
\item[GS3:] Predict the 
change in the energy of the water over time.

\item[GS4:] Predict the 
change in the energy of the PCM over time.

\end{itemize}

(Consider using names instead of numbers for labels.)

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Goal Statements for GlassBR}

Given the dimensions of the glass plane, glass type, the characteristics of the explosion, and
the tolerable probability of breakage, the goal statements are:
\begin{itemize}
\item[GS1:] Analyze and predict whether the
  glass slab under consideration will be able to withstand the explosion of a
  certain degree which is calculated based on user input.
\end{itemize}  

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Goal Statements for Game Physics}

\begin{itemize}
	
\item[G\_linear:] Given the physical properties, initial positions and
  velocities, and forces applied on a set of rigid bodies, determine their new
  positions and velocities over a period of time (IM-IM\_FT).

\item[G\_ang:] Given the physical properties, initial orientations and
  angular velocities, and forces applied on a set of rigid bodies, determine
  their new orientations and angular velocities over a period of
  time. (IM-IM\_FR).

\item[G\_dtcCol:] Given the initial positions and velocities of a set
  of rigid bodies, determine if any of them will collide with one another over a
  period of time.

\item[G\_Col:] Given the physical properties, initial linear and angular
  positions and velocities, determine the new positions and velocities over a
  period of time of rigid bodies that have undergone a collision (IM-IM\_C).

\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Goal Statements for Linear Solver}

\structure{What would be a good goal statement for a library of linear solvers?}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
\frametitle{Goal Statements for Linear Solver}

\begin{itemize}
	
\item[G1] Given a system of $n$ linear equations represented by matrix $A$ and
  column vector $b$, return $x$ such that $Ax = b$, if possible

\end{itemize}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[allowframebreaks]
\frametitle{References}

\nocite{Lai2004, SmithEtAl2004, SmithAndLai2005, IEEE1998, IEEE2000,
  IEEE2000_ThayerAndDorfman, RobertsonAndRobertson1999Vol, DesharnaisEtAl2004,
  JanickiAndKhedri2001, GhezziEtAl2003, KreymanAndParnas2002,
  ParnasAndClements1986, Segal2007_Dagsthul, Segal2008, Segal2007, Segal2005, Dubois2002}

\bibliography{../../ReferenceMaterial/References}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\end{document}