[Playlisten] [Impressum und Datenschutzerklärung]

14.03 defensive Programmierung, assert


CC-BY-NC-SA 3.0

Tempo:

Anklickbares Transkript:

dieserVorsichtsmaßnahmenweit im Vorfeldsind die eine Geschichteer dannversucht man möglichstauszureizenwas der Compiler schon alles kann man im Misra gesehen das ist eine Erweiterung des Compilers ?? auch schon sehr hilfreich aber auch der übliche C-Compiler kann schon so einigesan das Mittel zusammenpackenunter dem Begriff defensive Programmierungdefensive Programmierung wie defensiverStil beim Autofahrenein defensiver Stil beim Programmierendas auf die übliche Bezeichnung dafür die FernsehprogrammeProgrammierungalso umsichtigund so wollendie sonst mit Umsicht fahrenmit Umsicht Programmierein bisschenals im Auge behaltenund nicht nur draufloserstens wie schon gesagt versucht man den Compiler auszureizenzum Beispiel schreibe ich Const überall dazugroß möglich istinhaltlich wie ausführlicheingeführtesSchlüsselwort kannst habe ich nie ausführlich eingeführt Const vor einer Variablendamit sagen dem Compilerdiese Variable wird nur gelesen aber nie geschriebenwenn sie trotz inneren Versuchen rein zu schreiben weiß der Compiler Hallo etwas falschund liefert den Fehlerdann wird man die Warnstufeim auf Maximum stellen die sowieso ab Werk auf Maximumzumindest bei derTour Menschbei Stufe auf Maximumund damit versuchen alle Warnungen zu beseitigenimmerauch wenn sie nicht so richtig hilfreich sindeinesder Beispieldebattenwar jadie EndlosschleifewohlPunkt H?? ?? aber nie gesehen wenn ich eine Endlosschleifebaueweil Schuhduirgendwas steht in der Endlosschleife was auch immerArminsagt mir dein Compiler ganz nettPunktVorsichtwerdendieser Befehl nach der Schleife ist nicht erreichbar kleines M Endlosschleifediese Befehle nach der Schleife ist nicht erreichbar eine Warnungkann sie sagen egal ich weiß eher dass das hinhautmit der Nachahmung durch das Programm schreiben stehen zwanzig solche Warnungenkriegen wann die einundzwanzigsteund die war wirklich wichtig die einfachste Weise Blödsinn gemacht habenwaren dann nervte sie weiß die Einsatzstelle nicht gesehen haben in den Müll von anderen zwanzig Warnungen des ?? wird man immer versuchen alle Warnungenweg zu kriegen?? noch der mal das als Beispiel wenn siehier noch sowas drin habenmeine sinnvolle WarnungistA gleichdreiinirgendein Blödsinnerzeugt es eine sinnvolle Warnung gebenwelcheaber sicherlich eigenen Vergleich gewollt habe aber eine Zuweisung geschriebenund ?? gleich drei Leerschritt also es gibt drei beiwas aber jetztdie erste Warnung ist wirklich wichtigals Zuweisungfort ein Vergleich haben wollte dies wichtigdie Wahl und möchte auf jeden Fall haben?? Art wurde gesetzt aber niemals verwendetund so sei es ?? und das Return ist nicht erreichbarokayam Sinn der Lasso gemischt wird Warnungen die hilfreich sind mit Warnungen die mich nicht wirklich interessieren wird schwierig versuchen sie immernull Warnungen zu haben dass jede Warnung wirklichberücksichtigendass die unten das getan völlig Aus kommentierendie Mailfunktionin Cbraucht kein Veterandas Return kommentiere ich aus die Variable A muss das ehrlich verwenden und dieses Gleichnis natürlich ein gleich gleich sein?? großes A verwendet werdenKlammer zu mich natürlich viel erreichen ein Programmhaben das soll jetzt ohne Warnungendas läuft dann ohne Warnung durch ?? versuchen Sie möglichst immernull Warnung zwar alle Warnungen anzuzeigenund wann sagt man keine üblichen Compiler sogar so einstellen das sie bei Warnungendass sie Warnungenbehandeln wie Fehlersich dann also bockig stellenso das es was der Compiler als solcher kannund dann gibt es nocheinengrößerenTrickanden Code abzuspeckenmit Sensoren wenn Sie so wollen der Fachbegriff ist Instrumentencoachins ShowmeinenwirdCoachwenn irgendwasschief läuft rechtlich gewarnt werden sozusagen ein Frühwarnsystemdas Essen schönes Bild für ein Frühwarnsystemin ihrem Programmcode drin das in sofortdas sofort das Inn schlägt schnellstmöglich bescheid sagenwenn wasschief läuftund die übliche Art in Cdamit anzufangenwenn sich Searchzu sichern und ?? third versichernSolutionsdieZusicherungenwarenin ?? Kommaimmer sofort für den Nummer neunesgibt ein nettes Makroist deutsch sieht aus wie eine Funktion ist aber ein Makro?? steckt in ?? third hadernund damit können Sie jetzt ihr eigenesGrünwald FrühwarnsystembauenKommazum Beispielkönnte ich versuchenKomma was ich bau mal eineQuadratwurzelfunktionfür ganze Zahlen für die Lückentext Nummerneuneine Quadratwurzelfunktionfür ganze Zahl ist nicht gerade so sinnvoll aberein billiges Beispiel das sollte ich tunsoll eine ganze Zeit nehmen und dann genährteine ?? Quadratwurzelliefernüblicherweisewird sie jetztsowas schreiben wie auch Baum eine forschendewhile-Schleife geht Baum eine while-Schleifegucke wie großdieQuadrate sind was mich überlegt I plus einsmaldie plus eins wenn daskleiner ist kleiner gleich sogar wenn das kleiner gleichübergebenenX istdannProbleme den Nächsten auch nochund dann gewichtig zurückPunktdas wäre einenicht gerade effizienteraber hoffentlich machbarenQuadratwurzelfür ganze Zahlen ?? ich probiere einfach durch?? ist einmal einskleiner gleich der Zahl übergeben isteinmalzwei kleiner gleich dreimal drei kleiner gleich in die größte ?? für diesgebastelt minus eins Gewicht zurück ?? aber gerade beispielhaft ausprobieren und so wirklich hinhautHint war ist gleichist quer gut vormirohnehinschonarmes Querhuchennull Torsobei Arausgleichsfehlercodenull der sollte auch funktionierenkönnenKomma was was nicht glatt gerade aufgehtinden Bau zu sehenweil siesooffensichtlich?? ein Programmierfehler?? vermutet natürlich das ?? ?? bei mir viel Energiemuss auch die Warnungen beachten ?? in erzählsupermuss auf die Wand selbst wenn manin Hektik in der Vorlesung ist muss man die Warnungen beachtenins Leere das meine Funktion ist Wermuthsehr schönKommabesserund fünfzehn und sechzehn hat er noch nicht lose ab und aufdreiich vier mal vier sondernüberdrei mal dreißig fünfzehn okay das wäre dieseganzseitigeQuadratwurzelwie auch immer die jetzt funktioniertich probiere einfach alle Quadrate ausund das letzte was umzingelt hat nämlichjetzt will ich hier ein Frühwarnsysteminstallieren?? typischerweisebaut man mindestensvor und nach Bedingungen einer Vorbedingungheißt ich prüfe zu Beginn der Funktionob den alles mit rechten Dingen zugehthier würde ich zum Beispiel prüfenob die Zahl X wieder übergeben wirdob die auch nicht negativ ist wenn die Zahl negativ ist es offensichtlich was blödsinnigspäter in anderen ProgrammiersprachenKomma dassdiese Fälle mit Rezepten abfangen aber hier?? ?? thirdArmprüfe ob das X was sie ankommtgrößer gleich null istdann ist die Welt in Ordnung wenn's kleiner als null istliebste Fehlermeldunges wird eine Zusicherungund am EndeArmsollte vielleicht noch prüfenam Ende sollte vielleicht noch prüfen ob die Zahlen nicht zu groß wirddies in der Jazz auf dieser Maschine ja sechzehn Gedicht das heißt das was hier als Wurzel höchstens rauskommen darfist zwo hundertfünfundfünfzighundert sechsten fünfzig Quadratmeterzu groß fürsechzehn Bit als ich im muss darf höchstens hundert fünfundfünfzig rauskommendas wäre eine nach Bedingung ich prüfeob die Ergebnisse immer noch stimmt hier natürlich ganz einfachdenken Sie vielleicht an die Seminaraufgabemit der Warteschlangeund auch jeweils prüfen ob die die Länge der Warteschlangedie Zeigerder Zeiger das alles noch im grünen Bereich ist?? gesellige Jackswas ich ?? Mathematik Komma schon erzählt habe das hier wären seine die Jacks ist alles noch immer im grünen Bereich?? und der Zeit was passierte sich im grünen Bereich istKommaich ruf es hierbei mitminus fünfzehn aufsolangeichall das durch die Welt in Ordnung und jetzt kommt der Aufruf mit minus fünfzehnGradwar voller FeldzeileachtX größer gleich null war nicht wahrdas ist das eingebauteFrühwarnsystemjetztund können nun sagenProgramm abbrechenin den als Debugger reingehenoder mäßiger einfach weitermachendass es ganz übel das wenn sie in allen nennenswerten Entwicklungssystemenauch diese drei Wahlmöglichkeitendannkomplett abbrechen den Programmlaufin attische Debugger reingehenoder ignorierenimmer die als ?? Debuggerkannnatürlich schon das Kind imBrunnen eigentlich sollte der mir oben reinspringen dass es nicht so ganz gelungentypischerweise würde dich obenstehen bleibendieesherrschen Zier wenn Sie Fragen aus das wenn ichist das denn nicht ganz viel Rechenaufwandhierwar ich Pflaster mein Programm zu mit allen solchen Befehlen wird das Programm nicht ehrlich längerund auch langsamerdas schöne istdas sie dieses es wird verschwinden lassen könnensie könneneine weitere Konstante definieren??Andy Bucknot diba gingnichtbeim Debugger denn die wagt so die können diese Konstante definiertund es ist alles so gebaut wenn diese Konstantedefiniert istmacht es ersetzt nicht das ?? löst sich in Luft auf es wird nicht ein kombiniert Kost keine Zeitwird aber auch nicht getestetbevordas es wird überhaupt eingeführt wird muss das in die Bank definiert seinnunalso schritten dadurchAmit siebzehnJahrenals Professor dieses Makro überhaupt gebaut wird muss Andy Buck definiert sei dann ist es draußenweshalb ich das nicht auswendig weiß beides niemand tatsächlich so hin schreibt was man tut ist was anderesKomma die sagen es dem CompilerGesang ist im Compilerunter den OptionenbeimCompilergucken Differenzen bis da sagen den Compilerdieses Symbol soll ganz zu Beginn definiert seinbevor alles andere passiert?? sogar noch anders machenals sie sich jemals gefragt haben warum es hierdie Buck und Riess geht passiert dort gesehen hat andie Liebert Version ist die die man typischerweiseohne Optimierungenmacht das die in Einzelschritten durchläuftund mit Ersatz bautdie Release Version ist die die man mit allen Optimierungenmachtundohne die es als die Version die man ?? ausliefertdie Fusionsdiva zum Testendie Funktion und uns diese Konfigurationließ zum ausliefernder Vlies schaltendie gesamten Einstellungen noch malund können mir dann sagen für diese ausliefertAuslieferungsversionbitteselbst nicht einbauen dieses Symbol soll definiert seinund dafür die Optimierungenauf Heilund würden dann das Programm bauen zu ?? ausliefernund wenn sie auf die Bank schaltenscheinen Punkt ob sonsthaben sie optimal welches Nonnenund das Symbol nichtsKomma kann sie noch weitere einrichten aber typischerweise belässt man es bei dieser Konfiguration und Rieskonfigurationeinmal um Programm zu bauen zum Testen einer ?? anzubauen zum auslieferneiner Mitoptimierungeinmal ohneeinmalohne es hört und einmal mit Schönandzum Testen wird man aber beide Versionenbenutzenals nur die Release Version wird ausgeliefert keine Frage ?? zum Testen müssen sie beide benutzenweilder Code durch Optimierungen durcheinander schütteln kann wenn es ist ?? nicht mehr drinnen ist und die Optimierung drin sind kann es sein das der Code durcheinanderschüttelnwas ganz neues wieder sichtbar werden esgibt ärgerliche Fällean ihn vernichten des Suchens berichtenes gibt ärgerliche Fälle in denen die Biwakversion funktioniertund die Release Version nicht mehr funktioniertweil es optimiert ist und dadurch neue Fehler zu Tage treten also testen muss man beide Versionenaussieht ?? man Release Versionanletzte Sachemanwird typischerweiseeinzelneModule des Ganzenfür sich selbst man schreibt Sammlung von Unittestsnennt sich dasallerverheißene Testfällenwenn ich die Wurzel von neun berechnen soll drei rauskommen wenn ich die Wurzel von null berechnen soll nur rauskommendas kann ?? automatisch testen schreiben ein kleines Programm das die Wurzel von neun ausrechnetund feststelltKomma wirklichdrei rauskommt und wenn ich drei rauskommt müssen es ist was faul und müssen was tunan das ganze alsals als Sammlung von Tests und einander stellenum ihre Funktion zu testen dass ein Unit Test und das ganzeschicker zu machen und eleganter zu machen dass man aber weiß offen von den zehn Tests sind fehlgeschlagen?? spezielle Framework ein Link auf einesim Skriptan das Mandat typischerweise automatisierenSie schreiben eine Sammlung an Testsund führen die dann automatisch durch diese Tests bei jeder Änderung ihres Programms von der automatischen Feststellung an diese Testfälle immer noch funktioniertdas ist das jedoch als weitergeschriebenbetrieben third ist das Frühwarnsystemund wenn sie dann Unittestsschreibenan sie dann sogar dieautomatisiert ist das automatisierte Testenvon dem Programm nicht das Frühwarnsystem