1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Java Testing and Design- P1 docx

50 387 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Java Testing and Design
Tác giả Frank Cohen
Trường học Upper Saddle River, New Jersey, USA
Chuyên ngành Software Testing and Design
Thể loại Sách kỹ thuật
Năm xuất bản 2004
Thành phố Upper Saddle River
Định dạng
Số trang 50
Dung lượng 826,19 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Contents Foreword xiii Preface xv Acknowledgments xix P A R T I Gauging Web-Enabled Applications CHAPTER 1 The Forces at Work Affecting Your Web-Enabled Software 1 The First Three Axioms

Trang 1

“The new software testing methods introduced in this book will show you how to form and apply effective online goal-directed design and testing techniques You begin with your user’s goals, follow Frank’s recommendations for scalable system design, and end with powerful tests that measure your user’s success in achieving them.”

—Alan Cooper,

Author of About Face 2.0: The Essentials of Interaction Design

and The Inmates Are Running the Asylum.

He is also the father of Visual Basic

“A must read for Java developers needing to deliver high-quality, scalable, and well performing production Web Services.”

—Phil Goodwin,Staff Engineer, JAX Team, Sun Microsystems, Inc

“Testing, scalability, and test-driven design and methodologies are the new ‘battlefield’ of software development Frank Cohen introduces a new methodology for designing, testing, and maintaining Web-enabled applications This book is the best battlegear available.”

—Andrew Sliwkowski,Performance Analyst, BEA Systems

“Frank uses his considerable experience in information system technology to provide a view of the evolution from mainframe to Client/Server to distributed ‘n’ or ‘flapjack’ tier architectures, structured

to object-oriented design, and waterfall to Agile/Scrum/XP development approaches Now that we (as

an industry) have moved toward this distributed, open environment—testing, scalability, and interoperability are the next challenges, and Frank’s book is an excellent introduction.”

—Ed Hunter,SunOne Performance Team, Sun Microsystems, Inc

“The book is an excellent presentation of metrics and measurement approaches to harnessing and calculating performance and functionality when working with Web-enabled applications, especially Web Services The book’s emphasis on user archetypes to drive otherwise headless testing agents is

a key point.”

—Bret Pettichord,Software Testing and Test Automation Guru for IBM/Tivoli, BMC, Segue,

Interleaf; and co-author of Lessons Learned in Software Testing

“Frank Cohen’s new book takes a theoretical, didactic, and empirical approach to attacking this issue and does a fantastic job at bringing both the novice and expert from the ‘what and why’ to the

‘how’ of software testing design, automation, and scalability/reusability.”

—Christian J HesslerStaff Engineer, Sun Microsystems, Inc

“An unequaled achievement in clarity of Java testing, design, and optimization To avoid trace scalability and performance ‘gotchas’ inherent in early Java development, this book is for you!”

hard-to-—Farooq Khan,Software Development Manager, 2Wire Inc

“What I liked most about this book was the confidence with which Cohen presents a wide range of topics: objects, tests, architecture, frameworks, and design—all the right stuff for a software developer, QA technician, and IT manager.”

—Rossana Muriel,

Trang 3

PRENTICE HALL PTR

PRENTICE HALL

PROFESSIONAL TECHNICAL REFERENCE

UPPER SADDLE RIVER, NJ 07458

and Design

From Unit Testing

to Automated Web Tests

Frank Cohen

Trang 4

To Lorette—truly, deeply, madly

❖ ❖ ❖

A CIP catalog reference for this book can be obtained from the Library of Congress

Editorial/Production Supervision: MetroVoice Publishing Services

Executive Editor: Greg Doench

Marketing Manager: Chris Guzikowski

Manufacturing Manager: Alexis Heydt-Long

Cover Designer: Nina Scuderi

Cover Design Director: Jerry Votta

Series Designer: Gail Cocker-Bogusz

Full-Service Project Manager: Anne R Garcia

© 2004 by Pearson Education, Inc.

Publishing as Prentice Hall Professional Technical Reference Upper Saddle River, New Jersey 07458

Prentice Hall PTR offers excellent discounts on this book when ordered in quantity for bulk purchases or special sales For more information, please contact: U.S Corporate and Government Sales, 1-800-382-3419, corpsales@pearsontechgroup.com For sales outside of the U.S.,

please contact: International Sales, 1-317-581-3793, international@pearsontechgroup.com

All company and product names mentioned herein are the trademarks or registered trademarks

of their respective owners.

All rights reserved No part of this book may be reproduced, in any form or by any means, without permission in writing from the publisher.

Printed in the United States of America First Printing

ISBN 0-13-142189-1 Pearson Education LTD.

Pearson Education Australia PTY, Limited Pearson Education Singapore, Pte Ltd.

Pearson Education North Asia Ltd.

Pearson Education Canada, Ltd.

Pearson Educación de Mexico, S.A de C.V.

Pearson Education—Japan Pearson Education Malaysia, Pte Ltd.

Trang 5

Contents

Foreword xiii Preface xv Acknowledgments xix

P A R T I

Gauging Web-Enabled Applications

CHAPTER 1

The Forces at Work Affecting Your Web-Enabled Software 1

The First Three Axioms 2Web-Enabled Applications, the New Frontier 4Why Writing High-Quality Software Today Is Hard 10

The Myth of Version 2.0 Solidity 11 Management’s Quest for Grail 12 Trying for Homogeneity When Heterogeneity Rules 15 The Language of Bugs 17

The Evil Twin Vice Presidents Problem 18

A Concise History of Software Development 19

Web-Enabled Applications 20 Test Paradigms and Lifecycle Processes 22

Testing Methods 25

Click-Stream Testing 26 Unit Testing 27 Functional System Testing 28 Scalability and Performance Testing 30 Quality of Service Testing 30

Trang 6

vi Contents

Defining Test Agents 30

Scalability and Performance Testing with Test Agents 33

Testing for the Single User 35Creating Intelligent Test Agents 38

Automated Testing 39

Summary 39

CHAPTER 2

When Application Performance Becomes a Problem 41

Just What Are Criteria? 41Defining Criteria for Good Web Performance 44

Are the Features Working? 46

Is Performance Acceptable? 46 How Often Does It Fail? 46

Web-Enabled Application Measurement Tools 46The Web Rubric 47

The Four Tests of Good Performance 49Components of a Good Test Agent 50Web-Enabled Application Types 51The Web-Enabled Application Points System (WAPS) 53The Web-Enabled Application’s Framework 57

The Flapjacks Architecture 57 Adopting Flapjacks and Intelligent Test Agents 59

Building Intelligent Test Agents in a Flapjacks Environment 64

Script Languages and Test Agents 66 Generating Meaningful Data 75

Considerations for Web-Enabled Application Tests 87

Functionality and Scalability Testing 87 Functional Testing 90

Trang 7

Contents vii

Scalability Testing 91 Testing Modules for Functionality and Scalability 92 Management Styles 99

Service Level Agreements 101Grid Computing and Intelligent Agents 104

The Road to Easy Setup, Use, and Maintenance 105 Self-Healing Systems 106

Understanding Performance and Scalability Criteria 108

Defining SPC 108 SPC in Action 111

Modeling a User’s Goals 115

Test States 117 Using UML and Code Comments to Model Tests 118 Putting the Test Together 119

Summary 120

CHAPTER 4

Java Development and Test Automation Tools 121

The Three Waves 122

Desktop Application Development and Test Automation 122 Client/Server Development and Test Automation 124 Web-Enabled Development and Test Automation 127

Achieving the Troika—the Fourth Wave 131

A Test Automation Lifecycle 133Summary 137

CHAPTER 5

Bridging from Methodology to Design 139

Searching for Tools to Enable the Troika 140How to Get TestMaker 144

TestMaker and the Open Source Process 145

Spending Five Minutes with TestMaker 146

Installing TestMaker on a Windows or Linux Computer 147

Running TestMaker 148

Getting to Know the TestMaker Graphic Environment 148 Opening and Running Test Agents 150

Building Agents with the New Agent Wizard 153

Why I Like Jython 162

1 Jython Is Quick 163

2 Data Structures and List Iteration Come for Free 163

3 Dynamic Variables with Automatic Typing 164

4 Functions Are First Class 164

Trang 8

viii Contents

5 Java Integration 165

6 Bean Property Introspection 165

7 Sun Is Adopting Scripting in Java 166

Using Jython to Incorporate JUnit 166

JUnit for Repeatable Tests 166

A JUnit Example 167 JUnit and TestMaker 169

Compliance, As in Non, and Browser Caching 177 Invalid Data 179

Session Problems 181 Constructing HTTP Test Agents 181

Tuning SOAP and XML Web Services 217

The Web Services Vision 218XML-RPC for Web Interoperability 221Where XML-RPC Falls Short 227Universal Interoperability with SOAP 227Web Service Scalability Techniques 229Web Service Interoperability Problems 231

Discovery 232 Definition 232 Request/Response 234

On the Horizon 237

Using TestMaker to Understand WSDL 237

Constructing SOAP Calls 242 Different Types of SOAP Calls 245

Trang 9

Contents ix

Validating Response Data 254Making It Easier to Write Agents 255Resources 255

Summary 256

CHAPTER 8

State, Design, and Testing 257

A Question of State 257Lifecycle for Testing Stateful Systems 261Techniques to Establish State 263

Preparation and Setup Agents 267

Setup_agent 273

Using Databases to Configure Tests 280Using Lingo to Make Test ContentClose to Real 286

Summary 291

CHAPTER 9

Integrating with NET Web Services 293

Interoperability and Integration 295How Is NET Different? 297

Document-Style Scalability 300 SOAP Headers in NET 302 WSDL NET Style 304

A Test Agent for NET Environments 307Near Term Considerations 315

Summary 316

CHAPTER 10

Building and Testing Intranets and Secure Environments 319

Getting a Head Start 319

Security by Routing 320 Virtual Private Networks 322 Network Segments and Subnets 323 Transport Security 325

SOAP over SSL 330 NET Passport Authentication 331 HTTP Basic Authentication 332

SOAP and Security 333

Trang 10

x Contents

Generating Certificates and KeyStores 336

The Java Keytool 339

Summary 341

CHAPTER 11

A Web Application Framework from Construction to Test 343

The Trading Desk and Intelligent Test Agents 343Scalability Test Goals 344

System Infrastructure 345User Archetypes 348Understanding the Test Requirements 350Constructing the Test 352

Implementing User Archetypes in Code Modules 356Implementing the Master Component 365

Setup 366 Run 368 Cleanup 371 Property Files for Test Configuration 371

Implementing the Logging Component 372Avoiding Test Scalability Problems 374

A First Look at the Results 376

Summary 377

CHAPTER 12

Turning Test Agent Results into Actionable Knowledge 379

What to Expect from Results Analysis 380

Goal: Our New Web Site Needs to Handle Peak Loads of 50 Concurrent Users 381 Goal: The Web Site Registration Page Needs to Work Flawlessly 381

Goal: Customer Requests for Month-End Reports Must Not Slow Down the Order-Entry Service 382

Goal Summary 383

The Big Five Problem Patterns 383

Resource Problems 383 Concurrency Problems 384 Component Problems 386 Contention Problems 387 Crash Recovery Problems 388

Key Factors in Results Analysis 389Scenarios Where Results Data Misleads 391

The Node Problem 391 The Hidden Error 392

Trang 11

Contents xi

Dileep’s Dilemma 393 Diminishing Returns 394

Back to the Stock Trading Example 394

Implementing the Tally Agent 394

Understanding What Happens over the Wire 404 Testing in a Complex Environment 407

The Test Method 411Test Environment Considerations 414Constraints in the Test Environment 416Summary 417

CHAPTER 14

Making the Right Choices for SOAP Scalability 419

Why is SOAP So Popular? 419SOAP Encoding Styles 421Simple Object Access Needs Simple Testing 424Should You Let the Tools Do the Driving? 428

May I Freak Out Now? 428

The Performance Kit 429

How Do I Get the Performance Kit? 430 Installing the Performance Kit 431 Getting Started 432

Some Other Things We Found 445Summary 446

CHAPTER 15

Multiprotocol Testing in an Email Environment 447

Needs and Benefits 447Scoping the Project 448

Trang 12

xii Contents

Test Design and Methodology 451

User Archetypes 453

Installation and Configuration 455

From Archetypes to Test Agent Scripts 456 Building Muriel 457

Building Marilyn 461

Result Analysis 476Summary 477

Index 479

Trang 13

Foreword

he ultimate test of every software construction effort is the user’s successusing the product to accomplish some practical goal No matter howmuch state-of-the-art technology goes into the software, success can only bejudged through the lens of the user

Taking this philosophy to heart, Frank Cohen has created and led a ing open-source project called TestMaker It has improved the day-to-daylives of thousands of software programmers, quality assurance technicians,and information technology managers

thriv-Since 1990, my company, Cooper Software, has pioneered the Directed method of interaction design This powerful and effective methodhas met with widespread acceptance in the interaction design community It

Goal-is heartening to see how Frank has applied these same methods to softwaretest automation and scalable system design Frank’s application of thesemethods is especially important in today’s environments where J2EE, NET,and the latest integration technologies are used to build information systems.The new software testing methods introduced in this book will show youhow to form and apply effective online goal-directed design and testing tech-niques You begin with your user’s goals, follow Frank’s recommendations forscalable system design, and end with powerful tests that measure your user’ssuccess in achieving them

As a programmer, quality assurance technician, or IT manager, you haveseveral choices of system design, automated test tools, and techniques The

T

Trang 14

xiv Foreword

lessons in this book not only present a coherent methodology, but provideyou with immediately useful tools, techniques, and code that will automatethe testing of your Web-enabled applications, especially Web Services.Frank Cohen has been leading entrepreneurial software creation effortsfor more than 25 years With this book you can take advantage of his exten-sive experience helping users achieve their goals

—Alan CooperChairman, Cooper Software

Alan is the author of About Face 2.0: The Essentials of Interaction Design and

The Inmates Are Running the Asylum He is also the father of Visual Basic.

Trang 15

Preface

ow that you have finished learning the basics of programming, testing,and application software development, you are ready for the next step.Web infrastructure (routed networks using open protocols in a grid of inex-pensive equipment) is everywhere And yet, until this book, there was noguide to show how your choices in design, coding, and testing impact thescalability, performance, and functionality of your Web-enabled applications.This book will show you a fast and efficient method to go from basic Javaknowledge to building production-worthy, scalable, and high-performingWeb-enabled applications

I wrote this book for software developers, QA technicians, and IT ers working in large corporate IT groups, software development companies,and service providers It expands on other software development books bygoing from architectural discussions to showing actual working code that youcan use in your own environment The case studies show real-world practicaltechniques to make software projects reliable, scalable, and secure

manag-This book prepares software developers for a laundry list of new APIs,protocols, and tools being packed into the next generation of J2EE, NET,and open-source systems While these new software libraries, tools, and tech-niques are a big move forward for all of us, they push software developers,

QA technicians, and IT managers to learn even more technology to turn outcomplex, highly functional, and interoperable software applications

N

Trang 16

xvi Preface

This book then gears you up to adopt the next generation of Web cols, including Web Service Interoperability (WS-I,) Security AssertionMarkup Language (SAML), Electronic Business using eXtensible MarkupLanguage (ebXML,) and Liberty Alliance Tools from technology vendors(for example, BEA WebLogic Server, IBM WebSphere, Sun Java System(formerly Sun One), and Microsoft NET) are on the move All this innova-tion gives pause to a software developer, QA technician, and IT manager Inthese environments, each choice of tool, protocol, platform, and techniqueyou make impacts system scalability and reliability

proto-I wrote this book from my experiences as the “go-to” guy for enterprisesthat need to test and solve problems in complex interoperating informationsystems, especially Web Services This book contains a treasure of knowl-edge, tips, and techniques and is applied with a solid methodology from themore than 50,000 software developers, QA technicians, and IT managers thatparticipate in my TestMaker open-source project Details are found at http://www.PushToTest.com, the Web-based community meeting place whereideas on software design, testing, and automation are exchanged every day

In this book, I describe the architectural choices to build Web-enabledapplications in Java and show how each choice impacts scalability and reli-ability I show how to test and optimize these systems in your own environ-ment I describe the need for intelligent test agents in Web-enabledenvironments, describe a test agent framework with a tutorial on the latestWeb-based test techniques, and present TestMaker, my free open-sourceframework for building intelligent test agents to check Java-based Web soft-ware for performance, scalability, and reliability I present case studies andimmediately useful code of how Elsevier Science, 2Wire, Sun Microsystems,and BEA successfully use intelligent test agent technology to build scalableJava applications and ensure confidence in their Web-enabled Java projects.Inside you will find in-depth discussions of a powerful, proven Web-enabled Java architecture, construction techniques, immediately useful code,and intelligent test agents to check Web-enabled applications for scalability,functionality, and reliability

• Java and J2EE-based dynamic database-driven Web-enabled architecture

• Integrated applications using SOAP, XML-RPC, NET, HTTP, HTTPS protocols

• J2EE and NET Interoperability problems solved

Trang 17

Preface xvii

• Performance Kits for developers in BEA WebLogic, IBM WebSphere, SunONE

• eCommerce site architecture and optimization

• Secure Internet services using Public Key Infrastructure (PKI), HTTPS, SSL

• Building with the next-generation security technologies: WS-I, SAML, Liberty

• Avoiding and solving concurrency problems

• Architecture, code, and test agents for J2EE, Java Web Services, P2P, NET

• Easy-to-understand test scripts using Python/Jython and Java

• Extended architectures include email protocols (IMAP, SMTP, POP3) applications

The PushToTest Web site supports this book with an active community ofusers The Web site contains all of the book’s source code and applications,ready to be expanded and customized to meet your needs to build reliableand scalable Web-enabled applications in Java

I hope this helps

—Frank Cohen

Trang 19

Acknowledgments

o man is an island,” so said the English poet John Donne In my ence writing this book, I learned that no book is an island either Thisbook is the culmination of thousands of people’s work to improve the way webuild and test Web-enabled application software Each of you provided yourfeedback, comments, and suggestions For me the experience has been richlyrewarding I hope it will be rewarding for you too

experi-There are many people who I would like to specifically highlight for theircontributions My lovely wife, Lorette, supported me on all those sleeplessnights and with her thoughts and opinions on how the book should be struc-tured My children, Jack and Madeline, missed many nights and weekendswith me as I disappeared down that rabbit-hole of a home office Thank you,and I love you more than molasses

Geoff Lane came up with the original idea to put my test tool, TestMaker,into open-source distribution He architected the Test Object Oriented Library(TOOL) in TestMaker and continues to provide his brilliant thought to theproject Because of his technical editing I covered new subjects and expandedcoverage throughout the book

Todd Bradfute has become my major collaborator in TestNetwork, a mercial version of TestMaker His feedback and designs for a distributed testenvironment have helped this book greatly

com-Darin MacBeath of Elsevier found the problems with SOAP RPC ity that are highlighted in this book To my knowledge Darin’s designs for a

scalabil-“

N

Trang 20

For their support of TestMaker I thank: Eric Brown, Farooq Kahn,Ronald Tschaler, Linda Bissum, and Bao Nguyen at 2Wire; Dileep Kumar,Madhu Konda, Rohit Valia, Robin Smith, and Deborah Andrade of theSunONE team at Sun Microsystems; Phil Goodwin and Jeff Sutor on theJava engineering team at Sun Microsystems; Michael Smith, Eric Stahl, ScottRegan, Sam Ramji, Samir Kothari, Michael Bamford, Michael Smith, andAndrew Sliwkowski at BEA Systems; Karen Lee, Deborah Magid, RodSmith, Rawn Shah, and John Swanson at IBM PJ Murray and RobertSchneider at CapeClear; Robert Scoble at Userland; Rossana Muriel andErnest Semerda at AMP

Many individuals helped to shape this book, including Raymond R Leiter,Morris Hoodye, Keyton Weissinger, Todd Green, Jim Schacterle, BrigitteGwin, Tom Clements, John Duhring, Norman Cohen, Danny Berlin, AlexSarellano, and a good many others who I have foolishly not mentioned here.Finally, thank you to you for your interest in this book Buying this bookputs food on my family table and keeps me going to improve my tools, tech-niques, and methods I appreciate your interest and hope the experience isrewarding for you personally and professionally

You are about to hear from me, I would like to hear from you Please write

or email me at fcohen@pushtotest.com and tell me what you thought aboutthis book, and about testing and building scalable Web-enabled applications

in general Let me know your contact information (including email address)and I will keep you informed about my current and future work, new prod-ucts and services, and new books and articles

Trang 21

Acknowledgments xxi

Also from Frank Cohen

• Automating Web Tests Using TestMaker, 2003, PushPress, Author

• Java Web Services Unleashed, SAMS Publishing, 2002,

Contributing Author

• Java P2P Unleashed, SAMS Publishing, 2002, Editor and

Contributing AuthorFor a full listing of publications, articles, and various ramblings, point yourbrowser to http://docs.pushtotest.com

Trang 23

1 The Forces

at Work Affecting Your Web-Enabled

Software

n my experience, more than just the way you write code impacts enabled application functionality, scalability, and performance Here arethree forces working against your software development efforts:

Web-• Working within the software development, quality, and information technology efforts at your company impacts functionality, scalability, and performance High-quality interoperable Java code is developed in processes among groups of individuals The first part of this book describes the organizational and social issues that impact functionality, scalability, and performance You will then immediately learn useful new processes and techniques to measure and improve scalability and performance

• The design and architecture choices (server software, protocols, schemas, platforms, hardware, routing) you make impacts functionality, scalability, and performance The second part of this book describes the technology behind interoperating and scalable Web-enabled applications from a Java developer’s perspective

• The way you test and monitor system and software modules and components impacts functionality, scalability, and reliability

The third part of this book presents case studies and

I

Trang 24

2 Chapter 1 The Forces at Work Affecting Your Web-Enabled Software

immediately useful intelligent test agent code to check enabled applications for functionality, scalability, performance, and reliability

Web-This chapter begins with a practical definition of Web-enabled applicationsand the Web infrastructure they run on This chapter then tackles the difficultand thorny behavioral problems found in many companies that make deliver-ing interoperable, high-quality Web-enabled applications in Java truly diffi-cult This chapter then gives a brief history of software development practicesover the years to show you how many of the software development, QA, and

IT practices in place today came to be The chapter then describes the tectural and software development practices that impact scalability, perfor-mance, and reliability in Java software Finally, this chapter sets the stage forthe rest of the book by introducing a new way of testing your application usingintelligent test agents, a new concept presented throughout this book

archi-The First Three Axioms

I remember sitting in front of my first microcomputer It was 1977 and I was

in high school I typed on the keyboard:

print "I hope Maggie Movius likes me."

Sure enough, the BASIC language interpreter took my one-line programand displayed on the terminal:

>I hope Maggie Movius likes me.

What a marvel! It seemed so simple, so understandable, so hard toexplain to anyone that had not tried it I wondered how much I could accom-plish with a microcomputer

The years rolled by I watched and participated in forming the softwaredevelopment community With the community came an emphasis on soft-ware development practices Software moved up from being an optional fea-ture in a computing box to a necessary enabling component of the U.S.economy

The software development community developed a means to rapidly sharegood ideas on how to build software, and how to dispute and put down ideas

Trang 25

The First Three Axioms 3

that were bad For example, threads and streams = good and proprietarycommunication protocols = bad

Not long after, I noticed that more complicated software, such as a Webserver software package, consists of the contributions of many softwaredevelopers In the commercial software space, teams of software developersmeant paychecks And with paychecks came management, software productlifecycles, quality assurance, version control, product launch schedules, andcode reviews

In an effort to return to a simple development example, while working in adevelopment team of a commercial software company, I typed out this sim-ple example program:

printf ("I hope Maggie Movius likes me.");

I compiled the code and checked it in to a source code control system

About an hour later, a QA technician sent me an email:

Hi Frank: Nice to have you on-board I saw your first

check-in You should know that your code is missing the copyright notice for the company and it does not meet with our coding standards since you used printf instead of printing to an output window in our standard library -Norman

The experience taught me these axioms of software development:

• Even though a program contains only a single line of code, it needs to be maintained

• Every piece of software interoperates with other software

• There is more to delivering high-quality software than writing code

Zoom forward to present As the principal architect of TestMaker, a lar free open-source test automation utility, I find these axioms help me todeliver interoperable, Web-enabled, production-ready Java software, quicklyand on a budget In this book, I show you more axioms; present practicalready-to-use techniques to build, code, and test high-quality software applica-tions; and provide test code that you can use in your own environment today

Ngày đăng: 21/01/2014, 23:20

TỪ KHÓA LIÊN QUAN