Library Hours
Monday to Friday: 9 a.m. to 9 p.m.
Saturday: 9 a.m. to 5 p.m.
Sunday: 1 p.m. to 9 p.m.
Naper Blvd. 1 p.m. to 5 p.m.

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