Binärgewitter Spezial #5 - Testing 26.11.2013
Felix, Marc, Mat, Pfleidi und Ingo haben sich zusammen gefunden um über das Testen von Software zu sprechen.
Trotzdem den Toten der Woche
Sinn und Zweck
- Ausführbare Spezifikation
- Sicherheit beim Refactoring
- Erleichterung beim Verschieben von Designentscheidungen
- “Ausprobieren” von Objektdesign
- Sample code wie Interfaces/Objekte/Binaries funktionieren sollten
- Schutz vor Regressions (speziell mit CI)
- Performance Regressionen erkennen
- Schutz vor Broken-Windows-Phänomen
- Nebeneffekt: Gut testbarer Code ist oft flexibler und besser wartbar
Was testet man?
- Unit Test
- Integration Test
- Acceptance Test
- Web Testing (Browser Automation)
- Vulnerability Testing
- Fuzz Testing - Spezielle Form von Vulnerability Testing/Quality Assurance
- Property based testing
- Input validation: Paradedisziplin SQL injection
- Stichwort: Checked Exceptions - z.B. in Java für Fälle, die häufig auftreten
- Penetration Test
- Fuzz Testing - Spezielle Form von Vulnerability Testing/Quality Assurance
- Performance Testing
- Load Testing
- “PWN Testing” (Neu! TM!)
- (Code Metrics)
- Komplexität
- Sandy Metz rules for developers
- [SOLID Principle](http://en.wikipedia.org/wiki/SOLID_(object-oriented_design))
- Code-Coverage
- Valgrind
Wie entwickelt man testgetrieben?
- Test-driven development (TDD) (inside out)
- Behavior Driven Development (BDD) (outside in)
- Feature Driven Development (FDD)
Stubs/Mocks/Fixtures
- Stubs
- Mocks
- Fixtures
- Data-Factories
- Mocks aren’t stubs
Java Frameworks
Python Frameworks
Ruby Frameworks:
- Test-Unit (aka: old stdlib)
- Minitest (aka: stdlib)
- RSpec
- Mocha
- Cucumber (Behavior Driven Testing)
- HTTP Client testing
- File System: FakeFS
- Zeit: Timecop
JS Frameworks
PHP
Unsere Projekte
Infrastruktur
- Testing macht erst mit CI richtig Sinn / CI macht erst mit Testing richtig Sinn
- Jenkins CI
- Travis CI Free Kommerz
- Atlassian Bamboo
- Coveralls
- Code Climate
- Xcode Bots, Mac OS X Server
- Vim Syntax Checker: syntastic
- pep8, pylint
- JSLint
- faker
- Auch: faker
- Auch: Data::Faker