LEADER 00000cam a2201033Ma 4500 001 739838992 003 OCoLC 005 20240129213017.0 006 m o d 007 cr zn||||||||| 008 110529s2011 inua ob 001 0 eng d 010 |z 2010939958 019 750328790|a773015602|a842961826|a961547296|a962591326 |a966233552|a988534487|a991956597|a1037431733|a1038630205 |a1045438797|a1058141110|a1083597004|a1153491176 |a1162526197 020 9781118098226|q(electronic bk.) 020 1118098226|q(electronic bk.) 020 0470872497 020 9780470872499 020 |q(pbk. ;|qalk. paper) 020 |q(pbk. ;|qalk. paper) 020 1283397862 020 9781283397865 020 9786613397867 020 6613397865 024 3 9780470872499 029 1 AU@|b000050981022 029 1 AU@|b000051558679 029 1 AU@|b000052900529 029 1 CHNEW|b000615419 029 1 DEBBG|bBV043121131 029 1 DEBBG|bBV044154991 029 1 DEBSZ|b368469816 029 1 DEBSZ|b372886205 029 1 DEBSZ|b397002726 029 1 DEBSZ|b421528486 029 1 HEBIS|b291536948 029 1 HEBIS|b299834123 029 1 NZ1|b14257305 029 1 AU@|b000073102547 035 (OCoLC)739838992|z(OCoLC)750328790|z(OCoLC)773015602 |z(OCoLC)842961826|z(OCoLC)961547296|z(OCoLC)962591326 |z(OCoLC)966233552|z(OCoLC)988534487|z(OCoLC)991956597 |z(OCoLC)1037431733|z(OCoLC)1038630205|z(OCoLC)1045438797 |z(OCoLC)1058141110|z(OCoLC)1083597004|z(OCoLC)1153491176 |z(OCoLC)1162526197 037 CL0500000106|bSafari Books Online 040 COO|beng|epn|cCOO|dUMI|dN$T|dB24X7|dYDXCP|dOUP|dE7B|dHEBIS |dEBLCP|dOCLCQ|dDEBSZ|dOCLCQ|dCDX|dOCLCF|dOCLCQ|dAZK|dLOA |dJBG|dAGLDB|dMOR|dPIFAG|dZCU|dLIV|dMERUC|dOCLCQ|dNJR|dU3W |dBRL|dSTF|dWRM|dVTS|dCEF|dNRAMU|dICG|dINT|dVT2|dAU@|dCOO |dOCLCQ|dWYU|dOCLCQ|dUAB|dA6Q|dDKC|dOCLCQ|dM8D|dOCLCQ |dUKCRE|dVLY|dBRF|dOCLCO|dOCLCQ|dOCLCO|dOCLCL 049 INap 082 04 005.12 082 04 005.12|222 099 eBook O’Reilly for Public Libraries 100 1 Bergmann, Sebastian,|d1978-|1https://id.oclc.org/worldcat/ entity/E39PCjtBw9rkK3g34g3cbQwgXb 245 10 Real-world solutions for developing high-quality PHP frameworks and applications /|cSebastian Bergmann, Stefan Priebsch.|h[O'Reilly electronic resource] 260 Indianapolis, Ind. :|bWiley Pub.,|c©2011. 300 1 online resource (xxix, 378 pages) :|billustrations 336 text|btxt|2rdacontent 337 computer|bc|2rdamedia 338 online resource|bcr|2rdacarrier 490 1 Wrox guides 504 Includes bibliographical references and index. 505 00 |gMachine generated contents note:|gch. 1|tSoftware Quality --|tExternal Quality --|tInternal Quality -- |tTechnical Debt --|tConstructive Quality Assurance -- |tClean Code --|tExplicit and Minimal Dependencies -- |tClear Responsibilities --|tNo Duplication --|tShort Methods with Few Execution Branches --|tSoftware Metrics - -|tCyclomatic Complexity and npath Complexity --|tChange Risk Anti-Patterns (CRAP) Index --|tNon-Mockable Total Recursive Cyclomatic Complexity --|tGlobal Mutable State - -|tCohesion and Coupling --|tTools --|tPHPUnit --|tphploc --|tPHP Copy-Paste-Detector (phpcpd) --|tPHP Dead Code Detector (phpdcd) --|tPHP Depend (pdepend) --|tPHP Mess Detector (phpmd) --|tPHP CodeSniffer (phpcs) --|tbytekit- cli --|tPHP CodeBrowser (phpcb) --|tCruiseControl and phpUnderControl --|tHudson --|tArbit --|tConclusion -- |gch. 2|tSoftware Testing --|tBlack Box and White Box Tests --|tHow Many Tests Are Needed? --|tSystem Tests -- |tBrowser Testing --|tAutomated Tests --|tTest Isolation - -|tAcceptance Tests. 505 00 |tLimits of System Tests --|tUnit Tests --|tReturn Values --|tDependencies --|tSide Effects --|tReal-Life Example -- |tAnalyzing the Code to Test --|tSetting Up a Test Environment --|tAvoid Global Dependencies --|tTest Independently from Data Sources --|tTesting Asynchronous Events --|tStoring Changes in the Database -- |tUnpredictable Results --|tEncapsulating Input Data -- |tFurther Reflections --|tConclusion --|gch. 3|tTYPO3: The Agile Future Of A Ponderous Project --|tIntroduction -- |tThe History of TYPO3: Thirteen Years in Thirteen Paragraphs --|tDaring to Start Over! --|tOur Experience with Testing --|tPolicies and Techniques --|tBittersweet Elephant Pieces --|tTest-Driven Development --|tTests as Documentation --|tContinuous Integration --|tClean Code -- |tRefactoring --|tProgramming Guidelines --|tDomain-Driven Design --|tCourse of Action in Development --|tDeveloping New Code --|tExtending and Modifying Code --|tOptimizing Code --|tSpeed --|tReadability --|tFinding and Fixing Bugs --|tDisposing of Old Code --|tTest Recipes -- |tInadvertently Functional Unit Test. 505 00 |tAccess to the File System --|tConstructors in Interfaces --|tTesting Abstract Classes --|tTesting Protected Methods --|tUse of Callbacks --|tInto the Future --|gch. 4|tUnit Testing Bad Practices --|tWhy Test Quality Matters --|tBad Practices and Test Smells --|tDuplication in Test Code -- |tAssertion Roulette and Eager Test --|tFragile Test -- |tObscure Test --|tProblems with Global State --|tIndirect Testing --|tObscure Test Names --|tLying Test --|tSlow Test --|tConditional Logic in Tests --|tSelf-validating Tests --|tWeb-surfing Tests --|tMock Overkill --|tSkip Epidemic --|tConclusion --|gch. 5|tQuality Assurance At Digg Inc --|tProblems We Are Facing --|tLegacy Code Base - -|tHow Do We Solve These Problems? --|tSize Does Matter -- |tTeam Size --|tProject Size --|tCode Size --|tUnit Testing and You --|tChoosing a Testing Framework -- |tWorking with an Expert --|tOne Week in a Room -- |tTraining Our Team --|tWriting Testable Code --|tAvoid Static Methods --|tDependency Injection --|tMock Objects - -|tOverview --|tDatabase --|tLoosely Coupled Dependencies --|tSubject/Observer for Testing Class Internals. 505 00 |tMemcached --|tMocking a Service-Oriented Architecture -- |tModel --|tService Query --|tService Endpoint --|tThe Base Classes --|tDigg's Quality Assurance Process -- |tTesting --|tPlanning the Testing Effort --|tTasks -- |tAutomation --|tBenefits --|tTesting Early --|tTesting Often --|tChallenges --|tConclusion --|gch. 6|tTesting Service-Oriented APIS --|tThe Problems --|tSolutions -- |tAPI Credentials --|tAPI Limits --|tOffline Testing of Service Protocols --|tOffline Testing of Concrete Services --|tConclusion --|gch. 7|tTesting A Webdav Server -- |tAbout the eZ WebDAV Component --|tWebDAV -- |tArchitecture --|tDevelopment Challenges --|tRequirements Analysis --|tTDD after RFC --|tTesting a Server -- |tAutomated Acceptance Tests with PHPUnit --|tCapturing Test Trails --|tTest Recipe --|tIntegration into PHPUnit - -|tA Custom Test Case --|tThe Acceptance Test Suite -- |tAcceptance Tests by Example --|tConclusion --|gch. 8 |tTesting Symfony And Symfony Projects --|tTesting a Framework --|tThe symfony Release Management Process -- |tLong-term Support --|tCode Coverage --|tTests versus Real Code. 505 00 |tRunning the Test Suite --|tMain Lessons Learned -- |tNever Use the Singleton Design Pattern in PHP -- |tDecouple Your Code with Dependency Injection --|tLower the Number of Dependencies between Objects with an Event Dispatcher --|tTesting Web Applications --|tLowering the Barrier of Entry of Testing --|tUnit Tests --|tEasy to Install --|tEasy to Learn --|tFun to Use --|tFunctional Tests --|tThe Browser Simulator --|tThe Fixtures --|tThe CSS3 Selectors --|tTesting Forms --|tDebugging -- |tConclusion --|gch. 9|tTesting The EZCgraph Component -- |tDevelopment Philosophy --|tGraph Component -- |tArchitecture --|tTest Requirements --|tDriver Mocking -- |tMock the Driver --|tMultiple Assertions --|tStructs -- |tExpectation Generation --|tConclusion --|tTesting Binary Data --|tThe Drivers --|tExpectation Generation --|tSVG -- |tXML Comparison --|tFloating-point Problems --|tBitmap Creation --|tBitmap Comparison --|tGD Version Differences --|tFlash --|tThe Assertion --|tConclusion --|gch. 10 |tTesting Database Interaction --|tIntroduction -- |tReasons Not to Write Database Tests. 505 00 |tWhy We Should Write Database Tests --|tWhat We Should Test --|tWriting Tests: Mocking Database Connections -- |tWriting Tests: PHPUnit Database Extension --|tThe Database Test Case Class --|tEstablishing the Test Database Connection --|tCreating Data Sets --|tXML Data Sets --|tFlat XML Data Sets --|tCSV Data Sets --|tYAML Data Sets --|tDatabase Data Sets --|tData Set Decorators - -|tGenerating Data Sets --|tData Operations --|tCreating Tests --|tTesting the Loading of Data --|tTesting the Modification of Data --|tUsing the Database Tester -- |tApplying Test-Driven Design to Database Testing -- |tUsing Database Tests for Regression Testing --|tTesting Problems with Data --|tTesting Problems Revealed by Data - -|tConclusion --|gch. 11|tQuality Assurance At studiVZ -- |tIntroduction --|tAbout studiVZ --|tAcceptance Tests -- |tAcceptance Tests in Agile Environments --|tSelenium -- |tThe Selenium Extension of PHPUnit --|tThe Technical Setup of studiVZ --|tDevelopment Environment --|tTest Environment --|tBest Practices --|tSins of Our Youth -- |tMonolithic Tests --|tStatic Users. 505 00 |tStrategy Change --|tAtomic Tests with Dynamic Test Data --|tRobust Selenium Tests --|tTest Scope Must Be Clear -- |tCommon Functionality or Browser Compatibility as Well? - -|tFix Tests Right Away! --|tStabilize Locators, and Use IDs --|tSpeed, the Sore Subject --|tRecipes for Last- Minute Features --|tTests Are Software Too --|tCapture and Replay versus Programming Tests --|tThe Team: A Good Mix - -|tWe Need a DSL --|tInternal DSL --|tTesting_SeleniumDSL 1.0 --|tProblem: Context Sensitivity -- |tTesting_SeleniumDSL 2.0, A Draft --|tState and Outlook on Version 2.0 --|tConclusion --|gch. 12|tContinuous Integration --|tIntroduction --|tContinuous Integration -- |tConfiguration --|tBuild Management and Automated Tests - -|tVersion Management --|tContinuous Integration -- |tStatic Analysis --|tCode Clones --|tRefactoring -- |tSoftware Metrics --|tClassic Metrics --|tObject-Oriented Metrics --|tRATS --|tInstallation --|tConfiguration -- |tStatic Tests --|tProgramming Conventions --|tCoding Guidelines --|tGradual Introduction into Legacy Projects - -|tCoding Standards in the Daily Work. 505 00 |tSyntax Analysis --|tDynamic Tests --|tReporting -- |tNotification in the Case of Errors --|tStatistics -- |tPHP CodeBrowser --|tDeliverables --|tOperations -- |tAdvanced Topics --|tContinuous Deployment --|tUsing a Reverse Proxy --|tContinuous Integration and Agile Paradigms --|tConclusion --|gch. 13|tSwoodoo: A True Agile Story --|tIntroduction --|tEvolution: Only the Strong Survive --|tHow We Reached the eXtreme Side --|tAnd While We Are Working --|tThe Art of Evolution --|tLack of Experience --|tThe Java-developer-coding-in-PHP Phenomenon --|tThe Nobody-but-me-understands-my-code Developer -- |tConclusion --|gch. 14|tUsability --|tAnything Goes, But What Is the Price? --|tDesign Aspects --|tAccessibility -- |tReadability --|tLabels for Form Elements --|tNavigating by Keyboard --|tEffective Contrast --|tLogo Links to Home Page --|tAlternative Texts for Images --|tBackground Image in Background Color --|tUsable Print Version --|tVisible Links --|tGood Bookmarks --|tNo Frames --|tScalable Fonts --|tTechnical Aspects --|tPerformance --|tSemantic Code -- |tFewer Requests --|tCSS Sprites. 505 00 |tJavaScript on Bottom, CSS on Top --|tLink CSS Instead of Importing --|tJavaScript --|tUser Guidance --|tThe "Fold" Myth --|tFeedback on Interaction --|tNavigation --|tPop- ups and Other Annoyances --|tHabits and Expectations -- |tFault Tolerance and Feedback --|tTesting Usability -- |tConclusion --|gch. 15|tPerformance Testing -- |tIntroduction --|tTools --|tEnvironmental Considerations --|tLoad Testing --|tApache Bench --|tPylot --|tOther Load Testing Tools --|tProfiling --|tCallgrind --|tKCachegrind --|tAPD --|tXdebug --|tXHProf --|tOProfile --|tSystem Metrics --|tstrace --|tSysstat --|tCustom Instrumentation --|tCommon Pitfalls --|tDevelopment versus Production Environments --|tCPU Time --|tMicro-Optimizations --|tPHP as the Glue --|tPriority of Optimization --|tConclusion -- |gch. 16|tSecurity --|tWhat Is Security? --|tSecure by Design --|tOperations --|tPhysical Access. 505 00 |tSoftware Development --|tNo Security by Obscurity -- |tSeparation of Concerns --|tA Matter of Rights --|tError Handling --|tBasic Settings --|tWhat Does Security Cost? - -|tThe Most Common Problems --|gA10.|tUnvalidated Redirects and Forwards --|gA9.|tInsufficient Transport Layer Protection --|gA8.|tFailure to Restrict URL Access - -|gA7.|tInsecure Cryptographic Storage --|gA6.|tSecurity Misconfiguration --|gA5.|tCross Site Request Forgery (CSRF /XSRF) --|gA4.|tInsecure Direct Object References --|gA3. |tBroken Authentication and Session Management --|gA2. |tCross-Site Scripting (XSS) --|gA1.|tInjection -- |tConclusion --|gch. 17|tConclusion. 520 Presents information and a variety of case studies focusing on creating sustainable applications and frameworks using PHP. 546 English. 590 O'Reilly|bO'Reilly Online Learning: Academic/Public Library Edition 650 0 PHP (Computer program language) 650 0 Application software|xDevelopment. 650 6 PHP (Langage de programmation) 650 6 Logiciels d'application|xDéveloppement. 650 7 Application software|xDevelopment|2fast 650 7 PHP (Computer program language)|2fast 700 1 Priebsch, Stefan.|4aut 776 08 |iPrint version:|aBergmann, Sebastian, 1978-|tReal-world solutions for developing high-quality PHP frameworks and applications.|dIndianapolis, IN : Wiley Pub., ©2011 |z9780470872499|z0470872497|w(OCoLC)635494699 830 0 Wrox guides. 856 40 |uhttps://ezproxy.naperville-lib.org/login?url=https:// learning.oreilly.com/library/view/~/9780470872499/?ar |zAvailable on O'Reilly for Public Libraries 938 Books 24x7|bB247|nbks00041177 938 Coutts Information Services|bCOUT|n20576022|c29.99 GBP 938 ProQuest Ebook Central|bEBLB|nEBL706824 938 ebrary|bEBRY|nebr10513956 938 EBSCOhost|bEBSC|n391500 938 YBP Library Services|bYANK|n3650559 938 YBP Library Services|bYANK|n12670248 994 92|bJFN