Real-world solutions for developing high-quality PHP frameworks and applications:
Gespeichert in:
1. Verfasser: | |
---|---|
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 |
Internformat
MARC
LEADER | 00000nmm a2200000zc 4500 | ||
---|---|---|---|
001 | BV043121131 | ||
003 | DE-604 | ||
005 | 00000000000000.0 | ||
007 | cr|uuu---uuuuu | ||
008 | 151126s2011 |||| o||u| ||||||eng d | ||
020 | |a 1118098226 |c electronic bk. |9 1-118-09822-6 | ||
020 | |a 9781118098226 |c electronic bk. |9 978-1-118-09822-6 | ||
020 | |a 9781118098233 |9 978-1-118-09823-3 | ||
020 | |a 9781118098240 |9 978-1-118-09824-0 | ||
035 | |a (OCoLC)739838992 | ||
035 | |a (DE-599)BVBBV043121131 | ||
040 | |a DE-604 |b ger |e aacr | ||
041 | 0 | |a eng | |
049 | |a DE-1046 |a DE-1047 | ||
082 | 0 | |a 005.12 |2 22 | |
100 | 1 | |a Bergmann, Sebastian |e Verfasser |4 aut | |
245 | 1 | 0 | |a Real-world solutions for developing high-quality PHP frameworks and applications |c Sebastian Bergmann, Stefan Priebsch |
264 | 1 | |a Indianapolis, Ind. |b Wiley Pub. |c ©2011 | |
300 | |a 1 Online-Ressource (xxix, 378 pages) | ||
336 | |b txt |2 rdacontent | ||
337 | |b c |2 rdamedia | ||
338 | |b cr |2 rdacarrier | ||
490 | 0 | |a Wrox guides | |
500 | |a Title from title screen | ||
500 | |a Includes bibliographical references and index | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a 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 | ||
500 | |a Presents information and a variety of case studies focusing on creating sustainable applications and frameworks using PHP. | ||
650 | 4 | |a PHP (Computer program language) | |
650 | 4 | |a Application software / Development | |
650 | 4 | |a Web sites / Design | |
650 | 7 | |a COMPUTERS / Software Development & Engineering / General |2 bisacsh | |
650 | 7 | |a COMPUTERS / Software Development & Engineering / Systems Analysis & Design |2 bisacsh | |
650 | 7 | |a Application software / Development |2 fast | |
650 | 7 | |a PHP (Computer program language) |2 fast | |
650 | 4 | |a PHP (Computer program language) | |
650 | 4 | |a Application software |x Development | |
700 | 1 | |a Priebsch, Stefan |e Sonstige |4 oth | |
776 | 0 | 8 | |i Erscheint auch als |n Druck-Ausgabe, Paperback |z 0-470-87249-7 |
776 | 0 | 8 | |i Erscheint auch als |n Druck-Ausgabe, Paperback |z 978-0-470-87249-9 |
856 | 4 | 0 | |u http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500 |x Aggregator |3 Volltext |
912 | |a ZDB-4-EBA | ||
999 | |a oai:aleph.bib-bvb.de:BVB01-028545322 | ||
966 | e | |u http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500 |l FAW01 |p ZDB-4-EBA |q FAW_PDA_EBA |x Aggregator |3 Volltext | |
966 | e | |u http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500 |l FAW02 |p ZDB-4-EBA |q FAW_PDA_EBA |x Aggregator |3 Volltext |
Datensatz im Suchindex
_version_ | 1804175550626922496 |
---|---|
any_adam_object | |
author | Bergmann, Sebastian |
author_facet | Bergmann, Sebastian |
author_role | aut |
author_sort | Bergmann, Sebastian |
author_variant | s b sb |
building | Verbundindex |
bvnumber | BV043121131 |
collection | ZDB-4-EBA |
ctrlnum | (OCoLC)739838992 (DE-599)BVBBV043121131 |
dewey-full | 005.12 |
dewey-hundreds | 000 - Computer science, information, general works |
dewey-ones | 005 - Computer programming, programs, data, security |
dewey-raw | 005.12 |
dewey-search | 005.12 |
dewey-sort | 15.12 |
dewey-tens | 000 - Computer science, information, general works |
discipline | Informatik |
format | Electronic eBook |
fullrecord | <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>13233nmm a2200661zc 4500</leader><controlfield tag="001">BV043121131</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">00000000000000.0</controlfield><controlfield tag="007">cr|uuu---uuuuu</controlfield><controlfield tag="008">151126s2011 |||| o||u| ||||||eng d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">1118098226</subfield><subfield code="c">electronic bk.</subfield><subfield code="9">1-118-09822-6</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781118098226</subfield><subfield code="c">electronic bk.</subfield><subfield code="9">978-1-118-09822-6</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781118098233</subfield><subfield code="9">978-1-118-09823-3</subfield></datafield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781118098240</subfield><subfield code="9">978-1-118-09824-0</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)739838992</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV043121131</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">aacr</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-1046</subfield><subfield code="a">DE-1047</subfield></datafield><datafield tag="082" ind1="0" ind2=" "><subfield code="a">005.12</subfield><subfield code="2">22</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Bergmann, Sebastian</subfield><subfield code="e">Verfasser</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Real-world solutions for developing high-quality PHP frameworks and applications</subfield><subfield code="c">Sebastian Bergmann, Stefan Priebsch</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Indianapolis, Ind.</subfield><subfield code="b">Wiley Pub.</subfield><subfield code="c">©2011</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">1 Online-Ressource (xxix, 378 pages)</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">c</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">cr</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="490" ind1="0" ind2=" "><subfield code="a">Wrox guides</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Title from title screen</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Includes bibliographical references and index</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">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</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Presents information and a variety of case studies focusing on creating sustainable applications and frameworks using PHP.</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">PHP (Computer program language)</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Application software / Development</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Web sites / Design</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">COMPUTERS / Software Development & Engineering / General</subfield><subfield code="2">bisacsh</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">COMPUTERS / Software Development & Engineering / Systems Analysis & Design</subfield><subfield code="2">bisacsh</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">Application software / Development</subfield><subfield code="2">fast</subfield></datafield><datafield tag="650" ind1=" " ind2="7"><subfield code="a">PHP (Computer program language)</subfield><subfield code="2">fast</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">PHP (Computer program language)</subfield></datafield><datafield tag="650" ind1=" " ind2="4"><subfield code="a">Application software</subfield><subfield code="x">Development</subfield></datafield><datafield tag="700" ind1="1" ind2=" "><subfield code="a">Priebsch, Stefan</subfield><subfield code="e">Sonstige</subfield><subfield code="4">oth</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Druck-Ausgabe, Paperback</subfield><subfield code="z">0-470-87249-7</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Druck-Ausgabe, Paperback</subfield><subfield code="z">978-0-470-87249-9</subfield></datafield><datafield tag="856" ind1="4" ind2="0"><subfield code="u">http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500</subfield><subfield code="x">Aggregator</subfield><subfield code="3">Volltext</subfield></datafield><datafield tag="912" ind1=" " ind2=" "><subfield code="a">ZDB-4-EBA</subfield></datafield><datafield tag="999" ind1=" " ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-028545322</subfield></datafield><datafield tag="966" ind1="e" ind2=" "><subfield code="u">http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500</subfield><subfield code="l">FAW01</subfield><subfield code="p">ZDB-4-EBA</subfield><subfield code="q">FAW_PDA_EBA</subfield><subfield code="x">Aggregator</subfield><subfield code="3">Volltext</subfield></datafield><datafield tag="966" ind1="e" ind2=" "><subfield code="u">http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500</subfield><subfield code="l">FAW02</subfield><subfield code="p">ZDB-4-EBA</subfield><subfield code="q">FAW_PDA_EBA</subfield><subfield code="x">Aggregator</subfield><subfield code="3">Volltext</subfield></datafield></record></collection> |
id | DE-604.BV043121131 |
illustrated | Not Illustrated |
indexdate | 2024-07-10T07:18:04Z |
institution | BVB |
isbn | 1118098226 9781118098226 9781118098233 9781118098240 |
language | English |
oai_aleph_id | oai:aleph.bib-bvb.de:BVB01-028545322 |
oclc_num | 739838992 |
open_access_boolean | |
owner | DE-1046 DE-1047 |
owner_facet | DE-1046 DE-1047 |
physical | 1 Online-Ressource (xxix, 378 pages) |
psigel | ZDB-4-EBA ZDB-4-EBA FAW_PDA_EBA |
publishDate | 2011 |
publishDateSearch | 2011 |
publishDateSort | 2011 |
publisher | Wiley Pub. |
record_format | marc |
series2 | Wrox guides |
spelling | Bergmann, Sebastian Verfasser aut Real-world solutions for developing high-quality PHP frameworks and applications Sebastian Bergmann, Stefan Priebsch Indianapolis, Ind. Wiley Pub. ©2011 1 Online-Ressource (xxix, 378 pages) txt rdacontent c rdamedia cr rdacarrier Wrox guides 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. PHP (Computer program language) Application software / Development Web sites / Design COMPUTERS / Software Development & Engineering / General bisacsh COMPUTERS / Software Development & Engineering / Systems Analysis & Design bisacsh Application software / Development fast PHP (Computer program language) fast Application software Development Priebsch, Stefan Sonstige oth Erscheint auch als Druck-Ausgabe, Paperback 0-470-87249-7 Erscheint auch als Druck-Ausgabe, Paperback 978-0-470-87249-9 http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500 Aggregator Volltext |
spellingShingle | Bergmann, Sebastian Real-world solutions for developing high-quality PHP frameworks and applications PHP (Computer program language) Application software / Development Web sites / Design COMPUTERS / Software Development & Engineering / General bisacsh COMPUTERS / Software Development & Engineering / Systems Analysis & Design bisacsh Application software / Development fast PHP (Computer program language) fast Application software Development |
title | Real-world solutions for developing high-quality PHP frameworks and applications |
title_auth | Real-world solutions for developing high-quality PHP frameworks and applications |
title_exact_search | Real-world solutions for developing high-quality PHP frameworks and applications |
title_full | Real-world solutions for developing high-quality PHP frameworks and applications Sebastian Bergmann, Stefan Priebsch |
title_fullStr | Real-world solutions for developing high-quality PHP frameworks and applications Sebastian Bergmann, Stefan Priebsch |
title_full_unstemmed | Real-world solutions for developing high-quality PHP frameworks and applications Sebastian Bergmann, Stefan Priebsch |
title_short | Real-world solutions for developing high-quality PHP frameworks and applications |
title_sort | real world solutions for developing high quality php frameworks and applications |
topic | PHP (Computer program language) Application software / Development Web sites / Design COMPUTERS / Software Development & Engineering / General bisacsh COMPUTERS / Software Development & Engineering / Systems Analysis & Design bisacsh Application software / Development fast PHP (Computer program language) fast Application software Development |
topic_facet | PHP (Computer program language) Application software / Development Web sites / Design COMPUTERS / Software Development & Engineering / General COMPUTERS / Software Development & Engineering / Systems Analysis & Design Application software Development |
url | http://search.ebscohost.com/login.aspx?direct=true&scope=site&db=nlebk&db=nlabk&AN=391500 |
work_keys_str_mv | AT bergmannsebastian realworldsolutionsfordevelopinghighqualityphpframeworksandapplications AT priebschstefan realworldsolutionsfordevelopinghighqualityphpframeworksandapplications |