\documentclass{beamer} \usetheme{metropolis} \usepackage{lmodern} \usepackage[czech]{babel} \usepackage[utf8x]{inputenc} \usepackage[T1]{fontenc} \usepackage{textpos} \usepackage{tikz,calc} \usepackage{graphicx} \usepackage{wrapfig} \usepackage{color} \usepackage{mathtools} \usepackage{hyperref} \usepackage{epstopdf} \usepackage{amsmath} \usepackage{minted} \hypersetup{ colorlinks, citecolor=black, filecolor=black, linkcolor=black, urlcolor=black } \usepackage{pdflscape} \title{Softwarový projekt z 0 na 95\% a zpět} \author{Karel Kočí} \date{17.10.2017} \begin{document} \frame{\titlepage} \begin{frame}{Život projektu z pohledu vývojáře} \begin{itemize} \item Zadání \item Návrh \item Proof of concept \item Prvotní implementace \item Nasazení \item Bugy, refactoring a přidávání/odebírání feature \item Next generation \end{itemize} \end{frame} \begin{frame} \center \includegraphics[width=5.5cm]{what-your-code-looks-like.png} \end{frame} \begin{frame}{Zadání} Zodpovídá management ale nečekejte, že vědí co dělají! \begin{block}{Co by mělo určitě obsahovat} \begin{itemize} \item Časový horizont projektu \item Software/Hardware omezení \item Stěžejní funkcionality \item Rozdělení na krátkodobé a dlouhodobé cíle \end{itemize} \end{block} \begin{block}{A co naopak určitě ne} \begin{itemize} \item Výběr technologií \item Popis UX \item Přání a myšlenky \end{itemize} \end{block} \end{frame} \begin{frame}{Design} Vychází ze zadání a dává ho dohromady vedoucí vývojář. \begin{block}{Co by měl určitě obsahovat} \begin{itemize} \item Přesná technická specifikace jednotlivých funkcionalit \item Rozporcování na modulární minimalistické části \item Rozplánování dočasných a stálých částí \item Rešerše rozhraní ke zbytku systému a všech nutných funkcionalit \item Vymezení interakce s uživatelem \item Vymezení technologií \end{itemize} \end{block} Design -> uživatelská a vývojářská dokumentace \end{frame} \begin{frame}{Předtím než napíšete řádku} \begin{block}{Výběr jazyka} \begin{itemize} \item Co je vhodné \item Co se v dané oblasti používá \item Co umíte \end{itemize} \end{block} \begin{block}{Výběr knihoven} \begin{itemize} \item Nepiště si věci sami \item Nestavějte kolem jedné knihovny \end{itemize} \end{block} \end{frame} \begin{frame}{Proof of concept} \begin{itemize} \item Funkční ale nepřívětivé (CLI, žádný frontend) \item Implementace pouze stěžejních funkcionalit \item Pokud možno předneste zadavateli \item Neobtěžujte se testy \item Benchmarky \end{itemize} \end{frame} \begin{frame}{Skládáme základy} \begin{itemize} \item Build systém \item Unit testy \item Integrační testy (platforma) \item CI testy na jiné než vývojářské platformě \item Version control (git) \end{itemize} \end{frame} \begin{frame}{Kvalita kódu} \begin{block}{Python} \begin{itemize} \item flake8 a pylint \item unittest \item coverage \end{itemize} \end{block} \begin{block}{C/C++} \begin{itemize} \item cppcheck \item clang \item gcc -Wall (-Werror) \item gcov \item valgrind \end{itemize} \end{block} A komentáře! \end{frame} \begin{frame}{Komentáře 1} \Huge Nikdy ``Here be dragons''! \end{frame} \begin{frame}[fragile]{Komentáře 2} \begin{minted}[frame=lines]{Python} def size(self): """Returns size""" return self.__size__ def increament(self): """Increments size""" self.__size__ += 1 \end{minted} \end{frame} \begin{frame}{Změny v projektu} \begin{block}{Přidáváme funkcionality} \begin{itemize} \item Součástí toho je refactoring \item Přidáváme pouze smysluplné funkcionality \end{itemize} \end{block} \begin{block}{Odebíráme funkcionality} \begin{itemize} \item Označíme za obsolete (v kódu, dokumentaci a nejlépe při použití také do logu) \item Po dostatečné době odstraní znovu spolu s refactoringem \item Zpětná kompatibilita? Přechod? \end{itemize} \end{block} \end{frame} \begin{frame} \center \includegraphics[width=11cm]{SoftwareEngineersLife.png} \end{frame} \begin{frame}{Předáváme projekt} \begin{itemize} \item Dodržujte kvalitu kódu a pokrytí dokumentací \item Přímé vysvětlená myšlenky projektu a budoucí plány \item Přiznejte co se nepovedlo \end{itemize} \end{frame} \begin{frame}{Next generation} \begin{itemize} \item Analýza toho co se povedlo a co ne \item Rozdíly v designu či dokonce zadání \item Vracíte se na začátek \item Poučte se z chyb \end{itemize} \end{frame} \section{Moje zpackání} \section{Děkuji za pozornost} \end{document}