Real-world solutions for developing high-quality PHP frameworks and applications:
Gespeichert in:
Bibliographische Detailangaben
1. Verfasser: Bergmann, Sebastian (VerfasserIn)
Format: Elektronisch E-Book
Sprache:English
Veröffentlicht: Indianapolis, Ind. Wiley Pub. ©2011
Schriftenreihe:Wrox guides
Schlagworte:
Online-Zugang:FAW01
FAW02
Volltext
Beschreibung:Title from title screen
Includes bibliographical references and index
Machine generated contents note - ch. 1 - Software Quality -- - External Quality -- - Internal Quality -- - Technical Debt -- - Constructive Quality Assurance -- - Clean Code -- - Explicit and Minimal Dependencies -- - Clear Responsibilities -- - No Duplication -- - Short Methods with Few Execution Branches -- - Software Metrics -- - Cyclomatic Complexity and npath Complexity -- - Change Risk Anti-Patterns (CRAP) Index -- - Non-Mockable Total Recursive Cyclomatic Complexity -- - Global Mutable State -- - Cohesion and Coupling -- - Tools -- - PHPUnit -- - phploc -- - PHP Copy-Paste-Detector (phpcpd) -- - PHP Dead Code Detector (phpdcd) -- - PHP Depend (pdepend) -- - PHP Mess Detector (phpmd) -- - PHP CodeSniffer (phpcs) -- - bytekit-cli -- - PHP CodeBrowser (phpcb) -- - CruiseControl and phpUnderControl -- - Hudson -- - Arbit -- - Conclusion -- - ch. 2 - Software Testing -- - Black Box and White Box Tests -- - How Many Tests Are Needed? -- - System Tests -- - Browser Testing -- - Automated Tests -- - Test Isolation -- - Acceptance Tests
Limits of System Tests -- - Unit Tests -- - Return Values -- - Dependencies -- - Side Effects -- - Real-Life Example -- - Analyzing the Code to Test -- - Setting Up a Test Environment -- - Avoid Global Dependencies -- - Test Independently from Data Sources -- - Testing Asynchronous Events -- - Storing Changes in the Database -- - Unpredictable Results -- - Encapsulating Input Data -- - Further Reflections -- - Conclusion -- - ch. 3 - TYPO3: The Agile Future Of A Ponderous Project -- - Introduction -- - The History of TYPO3: Thirteen Years in Thirteen Paragraphs -- - Daring to Start Over! -- - Our Experience with Testing -- - Policies and Techniques -- - Bittersweet Elephant Pieces -- - Test-Driven Development -- - Tests as Documentation -- - Continuous Integration -- - Clean Code -- - Refactoring -- - Programming Guidelines -- - Domain-Driven Design -- - Course of Action in Development -- - Developing New Code -- - Extending and Modifying Code -- - Optimizing Code -- - Speed -- - Readability -- - Finding and Fixing Bugs -- - Disposing of Old Code -- - Test Recipes -- - Inadvertently Functional Unit Test
Access to the File System -- - Constructors in Interfaces -- - Testing Abstract Classes -- - Testing Protected Methods -- - Use of Callbacks -- - Into the Future -- - ch. 4 - Unit Testing Bad Practices -- - Why Test Quality Matters -- - Bad Practices and Test Smells -- - Duplication in Test Code -- - Assertion Roulette and Eager Test -- - Fragile Test -- - Obscure Test -- - Problems with Global State -- - Indirect Testing -- - Obscure Test Names -- - Lying Test -- - Slow Test -- - Conditional Logic in Tests -- - Self-validating Tests -- - Web-surfing Tests -- - Mock Overkill -- - Skip Epidemic -- - Conclusion -- - ch. 5 - Quality Assurance At Digg Inc -- - Problems We Are Facing -- - Legacy Code Base -- - How Do We Solve These Problems? -- - Size Does Matter -- - Team Size -- - Project Size -- - Code Size -- - Unit Testing and You -- - Choosing a Testing Framework -- - Working with an Expert -- - One Week in a Room -- - Training Our Team -- - Writing Testable Code -- - Avoid Static Methods -- - Dependency Injection -- - Mock Objects -- - Overview -- - Database -- - Loosely Coupled Dependencies -- - Subject/Observer for Testing Class Internals
Memcached -- - Mocking a Service-Oriented Architecture -- - Model -- - Service Query -- - Service Endpoint -- - The Base Classes -- - Digg's Quality Assurance Process -- - Testing -- - Planning the Testing Effort -- - Tasks -- - Automation -- - Benefits -- - Testing Early -- - Testing Often -- - Challenges -- - Conclusion -- - ch. 6 - Testing Service-Oriented APIS -- - The Problems -- - Solutions -- - API Credentials -- - API Limits -- - Offline Testing of Service Protocols -- - Offline Testing of Concrete Services -- - Conclusion -- - ch. 7 - Testing A Webdav Server -- - About the eZ WebDAV Component -- - WebDAV -- - Architecture -- - Development Challenges -- - Requirements Analysis -- - TDD after RFC -- - Testing a Server -- - Automated Acceptance Tests with PHPUnit -- - Capturing Test Trails -- - Test Recipe -- - Integration into PHPUnit -- - A Custom Test Case -- - The Acceptance Test Suite -- - Acceptance Tests by Example -- - Conclusion -- - ch. 8 - Testing Symfony And Symfony Projects -- - Testing a Framework -- - The symfony Release Management Process -- - Long-term Support -- - Code Coverage -- - Tests versus Real Code
Running the Test Suite -- - Main Lessons Learned -- - Never Use the Singleton Design Pattern in PHP -- - Decouple Your Code with Dependency Injection -- - Lower the Number of Dependencies between Objects with an Event Dispatcher -- - Testing Web Applications -- - Lowering the Barrier of Entry of Testing -- - Unit Tests -- - Easy to Install -- - Easy to Learn -- - Fun to Use -- - Functional Tests -- - The Browser Simulator -- - The Fixtures -- - The CSS3 Selectors -- - Testing Forms -- - Debugging -- - Conclusion -- - ch. 9 - Testing The EZCgraph Component -- - Development Philosophy -- - Graph Component -- - Architecture -- - Test Requirements -- - Driver Mocking -- - Mock the Driver -- - Multiple Assertions -- - Structs -- - Expectation Generation -- - Conclusion -- - Testing Binary Data -- - The Drivers -- - Expectation Generation -- - SVG -- - XML Comparison -- - Floating-point Problems -- - Bitmap Creation -- - Bitmap Comparison -- - GD Version Differences -- - Flash -- - The Assertion -- - Conclusion -- - ch. 10 - Testing Database Interaction -- - Introduction -- - Reasons Not to Write Database Tests
Why We Should Write Database Tests -- - What We Should Test -- - Writing Tests: Mocking Database Connections -- - Writing Tests: PHPUnit Database Extension -- - The Database Test Case Class -- - Establishing the Test Database Connection -- - Creating Data Sets -- - XML Data Sets -- - Flat XML Data Sets -- - CSV Data Sets -- - YAML Data Sets -- - Database Data Sets -- - Data Set Decorators -- - Generating Data Sets -- - Data Operations -- - Creating Tests -- - Testing the Loading of Data -- - Testing the Modification of Data -- - Using the Database Tester -- - Applying Test-Driven Design to Database Testing -- - Using Database Tests for Regression Testing -- - Testing Problems with Data -- - Testing Problems Revealed by Data -- - Conclusion -- - ch. 11 - Quality Assurance At studiVZ -- - Introduction -- - About studiVZ -- - Acceptance Tests -- - Acceptance Tests in Agile Environments -- - Selenium -- - The Selenium Extension of PHPUnit -- - The Technical Setup of studiVZ -- - Development Environment -- - Test Environment -- - Best Practices -- - Sins of Our Youth -- - Monolithic Tests -- - Static Users
Strategy Change -- - Atomic Tests with Dynamic Test Data -- - Robust Selenium Tests -- - Test Scope Must Be Clear -- - Common Functionality or Browser Compatibility as Well? -- - Fix Tests Right Away! -- - Stabilize Locators, and Use IDs -- - Speed, the Sore Subject -- - Recipes for Last-Minute Features -- - Tests Are Software Too -- - Capture and Replay versus Programming Tests -- - The Team: A Good Mix -- - We Need a DSL -- - Internal DSL -- - Testing_SeleniumDSL 1.0 -- - Problem: Context Sensitivity -- - Testing_SeleniumDSL 2.0, A Draft -- - State and Outlook on Version 2.0 -- - Conclusion -- - ch. 12 - Continuous Integration -- - Introduction -- - Continuous Integration -- - Configuration -- - Build Management and Automated Tests -- - Version Management -- - Continuous Integration -- - Static Analysis -- - Code Clones -- - Refactoring -- - Software Metrics -- - Classic Metrics -- - Object-Oriented Metrics -- - RATS -- - Installation -- - Configuration -- - Static Tests -- - Programming Conventions -- - Coding Guidelines -- - Gradual Introduction into Legacy Projects -- - Coding Standards in the Daily Work
Syntax Analysis -- - Dynamic Tests -- - Reporting -- - Notification in the Case of Errors -- - Statistics -- - PHP CodeBrowser -- - Deliverables -- - Operations -- - Advanced Topics -- - Continuous Deployment -- - Using a Reverse Proxy -- - Continuous Integration and Agile Paradigms -- - Conclusion -- - ch. 13 - Swoodoo: A True Agile Story -- - Introduction -- - Evolution: Only the Strong Survive -- - How We Reached the eXtreme Side -- - And While We Are Working -- - The Art of Evolution -- - Lack of Experience -- - The Java-developer-coding-in-PHP Phenomenon -- - The Nobody-but-me-understands-my-code Developer -- - Conclusion -- - ch. 14 - Usability -- - Anything Goes, But What Is the Price? -- - Design Aspects -- - Accessibility -- - Readability -- - Labels for Form Elements -- - Navigating by Keyboard -- - Effective Contrast -- - Logo Links to Home Page -- - Alternative Texts for Images -- - Background Image in Background Color -- - Usable Print Version -- - Visible Links -- - Good Bookmarks -- - No Frames -- - Scalable Fonts -- - Technical Aspects -- - Performance -- - Semantic Code -- - Fewer Requests -- - CSS Sprites
JavaScript on Bottom, CSS on Top -- - Link CSS Instead of Importing -- - JavaScript -- - User Guidance -- - The "Fold" Myth -- - Feedback on Interaction -- - Navigation -- - Pop-ups and Other Annoyances -- - Habits and Expectations -- - Fault Tolerance and Feedback -- - Testing Usability -- - Conclusion -- - ch. 15 - Performance Testing -- - Introduction -- - Tools -- - Environmental Considerations -- - Load Testing -- - Apache Bench -- - Pylot -- - Other Load Testing Tools -- - Profiling -- - Callgrind -- - KCachegrind -- - APD -- - Xdebug -- - XHProf -- - OProfile -- - System Metrics -- - strace -- - Sysstat -- - Custom Instrumentation -- - Common Pitfalls -- - Development versus Production Environments -- - CPU Time -- - Micro-Optimizations -- - PHP as the Glue -- - Priority of Optimization -- - Conclusion -- - ch. 16 - Security -- - What Is Security? -- - Secure by Design -- - Operations -- - Physical Access
Software Development -- - No Security by Obscurity -- - Separation of Concerns -- - A Matter of Rights -- - Error Handling -- - Basic Settings -- - What Does Security Cost? -- - The Most Common Problems -- - A10 - Unvalidated Redirects and Forwards -- - A9 - Insufficient Transport Layer Protection -- - A8 - Failure to Restrict URL Access -- - A7 - Insecure Cryptographic Storage -- - A6 - Security Misconfiguration -- - A5 - Cross Site Request Forgery (CSRF/XSRF) -- - A4 - Insecure Direct Object References -- - A3 - Broken Authentication and Session Management -- - A2 - Cross-Site Scripting (XSS) -- - A1 - Injection -- - Conclusion -- - ch. 17 - Conclusion
Presents information and a variety of case studies focusing on creating sustainable applications and frameworks using PHP.
Beschreibung:1 Online-Ressource (xxix, 378 pages)
ISBN:1118098226
9781118098226
9781118098233
9781118098240

Es ist kein Print-Exemplar vorhanden.

Fernleihe Bestellen Achtung: Nicht im THWS-Bestand! Volltext öffnen