`
`(12) United States Patent
`Sobel
`
`(10) Patent N0.:
`(45) Date of Patent:
`
`US 7,334,005 B2
`Feb. 19, 2008
`
`(54) CONTROLLABLE DEPLOYMENT OF
`SOFTWARE UPDATES
`
`2006/0075001 A1 *
`4/2006 Canning et a1. .......... .. 707/203
`OTHER PUBLICATIONS
`
`(75) Inventor: William E. Sobel, Stevenson Ranch,
`CA (U S)
`
`(73) Assignee; symantec Corporation’ cupertinoa CA
`(Us)
`
`http://web.archive.org/web/20041009093542/www.microsoft.com/,
`Frequently Asked Questions About Updating Your Computer, Aug.
`25, 2004.
`http:/web.archive.org/web/2004l0l6l85847/http://ekb.dbstalk.
`corn/295; Dish Network Receiver Software Versions, Oct. 16, 2004.
`
`( * ) Notice:
`
`Subject to any disclaimer, the term of this
`patent is extended or adjusted under 35
`U_S,C, 154(b) by 533 days,
`
`(21) Appl. No.: 11/106,194
`
`(22) Filed:
`
`Apr. 13, 2005
`
`(65)
`
`Prior Publication Data
`
`NOV‘ 2’ 2006
`
`51
`(
`)
`
`US 2006/0248116 A1
`I t Cl
`Gnot'sF /44
`G06F 9/445
`
`(2006 01)
`2006'01
`_
`_
`_
`(
`'
`)
`(52) US. Cl. .................... .. 707/203, 717/177, 717/172,
`_
`_
`_
`708/250
`(58) Field of Classi?cation Search .............. .. 717/ 172,
`_
`_
`717/177} 707/203
`See aPPllcatlon ?le for Complete Search hlstory-
`References Cited
`
`(56)
`
`US. PATENT DOCUMENTS
`7,181,512 B1 *
`2/2007 Lesher et a1‘
`
`709/223
`
`* cited b examiner
`y
`Primary Examinerishahid Alam
`Assistant ExamineriPatrick E Sweeney
`(74) Attorney, Agent, or F irmiFenwick & West LLP
`
`(57)
`
`ABSTRACT
`_
`_
`_
`_
`The risk of inadvertent introduction of software bugs to a
`large number of users during a software update is minimized
`by controlling updates using a uniform mechanism of send
`ing updates to seed users. A value-generating module gen
`erates a value for a computer, the value falling within a
`population range of values. A sampling range-generating
`module generates a sampling range of values as a proper
`subset of the population range, the probability of the random
`Value falling Within the: Sampling range being predetep
`mined. An eligibility determination module determines
`Whether the Computer is eligible to receive a Software
`update, the computer being determined eligible when the
`random value for the computer falls within the sampling
`range, and an update module provides the software update to
`the computer based on the eligibility determination. In some
`embodiments, a problem review module determines whether
`tllgiigpélate has caused a problem for computers receiving the
`
`2003/0066065 Al *
`
`4/2003 Larkin . . . . . . . . . . . . . . .
`
`. . . .. 7l7/l77
`
`'
`
`2004/0019889 Al *
`2004/0060044 A1 *
`
`7l7/l77
`l/2004 Melchione et a1. .
`3/2004 Das et a1. ................. .. 717/171
`
`26 Claims, 5 Drawing Sheets
`
`Generate a Random Value
`for a Computer
`
`402
`
`l
`
`Set a Sampling Range
`of Values
`
`w
`404
`
`l
`
`Determine whether the Computer is w 406
`eligible to receive the Software Update
`
`Random
`Value falls
`within Sampling
`Range?
`
`f 408
`
`Provide
`Software Update
`to Computer
`
`K 410
`Do not provide
`Software Update
`to Computer
`
`1
`
`SYMC 1011
`
`
`
`U.S. Patent
`
`Feb. 19, 2008
`
`Sheet 1 0f 5
`
`US 7,334,005 B2
`
`.mzmmhz
`
`N F
`
`
`
`hzmjo hzmjo hzmjo .EwjQ
`
`
`
`
`
`2
`
`SYMC 1011
`
`
`
`U.S. Patent
`
`Feb. 19,2008
`
`Sheet 2 0f 5
`
`US 7,334,005 B2
`
`vow
`
`
`
`mwE<o< mmE<Q<
`
`
`
`9N N51 5965 8N1 8N1
`
`
`
`
`
`vEo>>Ez woinzmo Allv E952 I mowwmooma
`
`N .QE
`
`3
`
`SYMC 1011
`
`
`
`U.S. Patent
`
`Feb. 19, 2008
`
`Sheet 3 0f 5
`
`US 7,334,005 B2
`
`ink
`
`
`
`
`
`2262 3231 5521
`
`
`
`@582 2N8:
`
`mom K
`
`
`
`
`
`226E :QEEEEEQ 3:565
`
`m .OI
`
`mom \
`
`an \
`
`
`
`
`
`2:82 ms?acmmémcmm 9:553
`
`
`
`
`
`IP 2522 #55338 @633
`
`4
`
`SYMC 1011
`
`
`
`U.S. Patent
`
`Feb. 19, 2008
`
`Sheet 4 0f 5
`
`US 7,334,005 B2
`
`Generate a Random Value
`for a Computer
`
`"v 402
`
`Set a Sampling Range
`of Values
`
`404
`
`Determine whether the Computer is w 406
`eligible to receive the Software Update
`
`Random
`Value falls
`within Sampling
`Range?
`
`/ 408
`
`Provide
`Software Update
`to Computer
`
`f 410
`Do not provide
`Software Update
`to Computer
`
`FIG. 4
`
`5
`
`SYMC 1011
`
`
`
`U.S. Patent
`
`Feb. 19, 2008
`
`Sheet 5 of 5
`
`US 7,334,005 B2
`
`Determine whether the Software Update
`caused Problems for receiving Computers N 502
`
`Problem
`caused?
`
`s04 \
`
`f 506
`
`Set a broader
`Resolve Problem —>
`Sampling Range
`
`f 508
`l
`Determine whether Computer
`is eligible to receive Update
`based-on broader Range
`
`Random
`Value falls within
`broader Range?
`
`510 \
`Provide
`Software Update
`to Computer
`
`f 512
`Do not provide
`Software Update
`to Computer
`
`FIG. 5
`
`6
`
`SYMC 1011
`
`
`
`US 7,334,005 B2
`
`1
`CONTROLLABLE DEPLOYMENT OF
`SOFTWARE UPDATES
`
`BACKGROUND OF THE INVENTION
`
`1. Field of the Invention
`This invention pertains in general to computer software
`update deployment, and more speci?cally to techniques for
`controlled release of software updates to random subsets of
`seed users over time.
`2. Description of the Related Art
`Deploying a software update to a large number of users at
`a time can pose numerous problems since such updates
`sometimes introduce software bugs or cause other problems
`when released to the public. Software companies have
`attempted to deal with this problem by limiting the initial
`release of a new software update to only a subset of all
`possible users. If a software update is released to only
`10,000 machines in a ?rst round of release rather than to the
`entire pool of millions of users, it is much easier to deal with
`any problems or bugs introduced by the software. The users
`who are affected by the problem are much fewer and more
`manageable in this type of limited initial release.
`There are a number of different ways in which this type
`of limited software update deployment has been performed.
`One method involves limiting the initial release only to users
`in a particular target country or some other de?ned subset of
`users. For example, all users in Denmark for a particular
`software application that is being updated will receive the
`update ?rst and can report any problems with the software
`before it is released to the general public. However, this
`manual release method has caused problems in the past
`when, for example, a particular bug only manifested itself in
`the target country and nowhere else. Thus, in those
`instances, the testing of the product by the seed users in the
`target country was not representative of the entire population
`of users of the software application to whom the update
`would ultimately be deployed.
`Another method for limiting update release includes the
`timed posting and removal of updates. For example, the
`software update can be made available to the general public
`at 2 am. for a couple of hours, and then the update is
`removed. The goal of this method is to permit a subset of
`users to have a chance to download the update during this
`two-hour window, and those users can report problems with
`the software update before it is released more generally to
`the public. The company distributing the software can
`monitor for bug reports and reports of system crashes to
`determine whether the update is ready to be provided to a
`broader group of users. This manual release method, how
`ever, is still not very useful because there are no statistics
`tied into the update release, and there is no way to know who
`the seed users are or whether the coverage of the seed user
`base is adequate for testing the software before a much wider
`release.
`None of the above manual methods of release provide a
`su?icient amount of control over the software update
`deployment. However, control is particularly important in
`situations where software updates have to be released on a
`very short time frame, since the patch may be needed to
`resolve a current issue that users are facing with the soft
`ware. If the software update has to be released within a
`week, there is very little time to run an actual beta test cycle
`for the update. For example, the posting and removal of
`software at 2 am. may have to be repeated numerous times
`over a few days to get enough downloads to form a signi?
`cant enough seed user base. However, for a critical software
`
`20
`
`25
`
`30
`
`35
`
`40
`
`45
`
`50
`
`55
`
`60
`
`65
`
`2
`update for which time is of the essence, there may not be
`time to develop a representative base and the product may be
`released to the public before being properly tested.
`Therefore, there is a need in the art for a method that
`allows a more uniform mechanism of systematically sending
`out software updates to a de?ned and random proportion of
`seed users before the mass distribution of the update, allow
`ing software updates to be controlled to a much more
`granular level.
`
`DISCLOSURE OF INVENTION
`
`The above need is met by controlling software updates
`using a uniform mechanism of sending updates to seed
`users. A value-generating module generates a random value
`for a computer, the value falling within a population range
`of possible values. A sampling range-generating module
`generates a sampling range of values as a proper subset of
`the population range, the probability of the random value
`falling within the sampling range being predetermined. An
`eligibility determination module determines whether the
`computer is eligible to receive a software update, the com
`puter being determined eligible when the random value for
`the computer falls within the sampling range, and an update
`module provides the software update to the computer based
`on the eligibility determination. In some embodiments, a
`problem review module determines whether the software
`update has caused a problem for computers receiving the
`update. In response to a determination by the problem
`review module that the software update has not caused
`substantial problems for the computers receiving the update,
`the sampling range-generating module broadens the initial
`sampling range and software updates are provided to com
`puters with random values falling within the adjusted range.
`The features and advantages described in this disclosure
`and in the following detailed description are not all-inclu
`sive, and particularly, many additional features and advan
`tages will be apparent to one of ordinary skill in the relevant
`art in view of the drawings, speci?cation, and claims hereof.
`Moreover, it should be noted that the language used in the
`speci?cation has been principally selected for readability
`and instructional purposes, and may not have been selected
`to delineate or circumscribe the inventive subject matter,
`resort to the claims being necessary to determine such
`inventive subject matter.
`
`BRIEF DESCRIPTION OF THE DRAWINGS
`
`FIG. 1 is a high-level block diagram illustrating an
`example of a standard computing environment 100, accord
`ing to one embodiment of the present invention;
`FIG. 2 is a high-level block diagram illustrating a standard
`computer system 200 for use with the present invention;
`FIG. 3 is a high-level block diagram illustrating the
`functional modules within the update deployment module
`120, according to one embodiment of the present invention;
`FIG. 4 is a ?owchart illustrating steps performed to
`control the release of software updates, according to one
`embodiment of the present invention; and
`FIG. 5 is a ?owchart illustrating steps performed to
`control the release of software updates where the sampling
`range is being broadened over time, according to one
`embodiment of the present invention.
`The ?gures depict an embodiment of the present invention
`for purposes of illustration only. One skilled in the art will
`readily recogniZe from the following description that alter
`native embodiments of the structures and methods illustrated
`
`7
`
`SYMC 1011
`
`
`
`US 7,334,005 B2
`
`3
`herein may be employed Without departing from the prin
`ciples of the invention described herein.
`
`DETAILED DESCRIPTION OF THE
`PREFERRED EMBODIMENTS
`
`4
`As knoWn in the art, the Internet is a large, publicly
`accessible netWork of netWorks. Individual computers and
`other devices can utiliZe communications protocols such as
`the transmission control protocol/Intemet protocol (TCP/IP)
`to send messages to other computers on the Internet. These
`messages can use protocols such as the hypertext transport
`protocol (HTTP), ?le transfer protocol (FTP), simple mail
`transport protocol (SMTP), post of?ce protocol 3 (POP3),
`and Internet message access protocol (IMAP), and data
`representations such as the hypertext markup language
`(HTML) and extensible markup language (XML) to carry
`and exchange information. Embodiments of the present
`invention may use other communications protocols and
`languages to exchange data.
`Another communications link 118 connects the server 116
`to the Internet 112. The server 116 can send information,
`such as softWare updates or patches, across the Internet 112
`and to the client computers 110. Additionally, the client
`computers 110 can send out information (i.e., providing
`randomly generated values to the server 116 for controlled
`update deployment) or make requests across the Internet 112
`to the server 116, such as general requests for softWare
`updates or requests for updates for a particular softWare
`application. The communications link 118 is generally the
`same as the communications links 114 connecting the client
`computers 110 to the Internet 112. Although only one server
`116 and associated communications link 118 are shoWn in
`FIG. 1, embodiments of the present invention may have
`multiple servers and/or links. The server 116 may be a
`conventional computer system or a netWork of systems.
`In the embodiment illustrated in FIG. 1, each client
`computer 110 executes an update deployment module 120
`for controlling softWare update deployment for the client
`computer 110. The update deployment module 120 can be a
`discrete application program, or the module 120 can be
`integrated into another application program or the client
`computer’s 110 operating system. In some embodiments, all
`or a portion of the update deployment module 120 is
`executed on the server 116 Thus, the server 116 controls
`Which softWare updates are sent out and Which computers
`Will receive the updates. For example, the module 120 might
`include tWo different programs, one running on the server
`116 and one running on the client 110. The program running
`on the server 116 can set up parameters for determining
`Which clients 110 Will receive an update, and the program
`running on the clients 110 can generate a value that may or
`may not fall Within the parameters set by the server 116. The
`server 116 can then send the softWare update to the clients
`110 that fall Within the established parameters, Which Will be
`a subset of all of the users Who Will eventually receive the
`update. Thus, both the client computers 110 and the server
`116 can be involved in creating a controlled environment for
`update release.
`FIG. 2 is a high-level block diagram illustrating a func
`tional vieW of a typical computer system 200 for storing and
`executing the compatibility module 120, according to one
`embodiment of the present invention. This computer system
`200 can act as a client computer 110, as shoWn in FIG. 1.
`HoWever, one or more of the components of the computer
`system 200 may be missing or modi?ed in the client
`computer 110. Illustrated is a processor 202 coupled to a bus
`204. Also coupled to the bus 204 are a memory 206, a
`storage device 208, a keyboard 210, a graphics adapter 212,
`a pointing device 214, and a netWork adapter 216. A display
`218 is coupled to the graphics adapter 212.
`The processor 202 may be any general-purpose processor
`such as an INTEL x86, SUN MICROSYSTEMS SPARC, or
`
`20
`
`25
`
`30
`
`35
`
`40
`
`45
`
`The update deployment module disclosed herein alloWs a
`more uniform mechanism of systematically sending out
`softWare updates to a random portion of users before the
`general distribution of the update to the public, alloWing
`much more control over softWare updates. Upon success of
`the distribution of the software to the ?rst group of seed
`users, the update deployment module can increase the range
`of the seed users, possibly by an order of magnitude, and the
`module can continue this increasing of the number of seed
`users until some predetermined number of users has
`received the update. As used herein, a “softWare update,” or
`an “update” or “patch,” can include an upgrade to a neWer
`version of a particular softWare application or module or a
`version With neW functionality, alteration of con?guration
`parameters, a virus de?nition (or other malicious code
`de?nition), addition of an executable module (e.g., a neW
`user feature, an alteration of the operating system or other
`installed application), and the like.
`FIG. 1 is a high-level block diagram illustrating a com
`puting environment 100 according to an embodiment of the
`present invention. Multiple client computers 110 are in
`communication With the Internet 112 or other netWork, such
`as a local area network, via communications links 114.
`Although only four client computers 110 are shoWn in FIG.
`1, there can be thousands or even millions of computer
`systems coupled to the Internet 112, according to embodi
`ments of the present invention. In one embodiment, the
`client computers 110 are conventional computer systems. In
`other embodiments, one or more of the client computers 110
`are different electronic devices having connectivity to
`remote update sources, such as cellular telephones, personal
`digital assistants (PDAs), etc. A server 116 is also connected
`to the Internet 112 via a communications link 118.
`As is knoWn in the art, the client computers 110 preferably
`execute an operating system and one or more application
`programs. As used herein, the term “application” or “soft
`Ware application” can include any type of softWare or
`program, a component of a program, a service, an object, a
`distributed object, or a collection of one or more of these.
`The operating system controls the operation of the computer
`system, and some examples of such an operating system
`include LINUX® or one of the versions of MICROSOFT
`WINDOWS®.
`In FIG. 1, each client computer 110 is connected to the
`Internet via a communications link 114. Preferably, the
`communications link 114 utiliZes conventional netWorking
`technology. For example, in one embodiment a client com
`puter 110 uses a modem to connect over standard telephone
`lines With an Internet Service Provider (ISP) having a
`high-speed connection to the Internet 112. In another
`embodiment, a client computer 110 uses a digital subscriber
`line (DSL) or cable modem to access the ISP via a telephone
`line or cable television line, respectively. In yet another
`embodiment, the client computer 110 uses a netWork card
`and Ethernet connection to directly connect to the Internet
`112. In still other embodiments, the communications link
`114 connects the client computer 110 via a Wireless 802.11,
`Bluetooth, or mobile phone (e.g., CDMA or GSM) netWork.
`Thus, many different types of technology can be used to
`provide the functionality of the communications link 114.
`
`50
`
`55
`
`60
`
`65
`
`8
`
`SYMC 1011
`
`
`
`US 7,334,005 B2
`
`5
`POWERPC compatible-CPU, or the processor 202 may also
`be a custom-built processor. The memory 206 may be, for
`example, ?rmware, read-only memory (ROM), non-volatile
`random access memory (NVRAM), and/ or RAM, and holds
`instructions and data used by the processor 202. The storage
`device 208 is, in one embodiment, a hard disk drive but can
`also be any other device capable of storing data, such as a
`Writeable compact disk (CD) or DVD, and/or a solid-state
`memory device. The pointing device 214 may be a mouse,
`track ball, or other type of pointing device, and is used in
`combination With the keyboard 210 to input data into the
`computer system 200. The graphics adapter 212 displays
`images and other information on the display 218. The
`netWork adapter 216 couples the client computer 110 With
`the Internet 112.
`As is knoWn in the art, the computer system 200 is
`adapted to execute computer program modules for providing
`functionality described herein. In this description, the term
`“module” refers to computer program logic for providing the
`speci?ed functionality. A module can be implemented in
`hardWare, ?rmWare, and/or softWare. Where the any of the
`modules described herein are implemented as softWare, the
`module can be implemented as a standalone program, but
`can also be implemented in other Ways, for example as part
`of a larger program, as a plurality of separate programs, or
`as one or more statically or dynamically linked libraries. It
`Will be understood that the modules described herein rep
`resent one embodiment of the present invention. Certain
`embodiments may include other modules. In addition, the
`embodiments may lack modules described herein and/or
`distribute the described functionality among the modules in
`a different manner. Additionally, the functionalities attrib
`uted to more than one module can be incorporated into a
`single module. In one embodiment of the present invention,
`the modules are stored on the storage device 208, loaded into
`the memory 206, and executed by the processor 202. Alter
`natively, hardWare or softWare modules may be stored
`elseWhere Within the computer system 200.
`FIG. 3 is a high-level block diagram illustrating the
`functional modules Within the update deployment module
`120, according to one embodiment of the present invention.
`The update deployment module 120, in the embodiment
`illustrated in FIG. 3, includes a value-generating module
`302, a sampling range-generating module 304, an eligibility
`determination module 306, an update module 308, and a
`problem revieW module 310. Any or all of these modules can
`be included on a client computer 110, on a server 116, or
`both.
`The value-generating module 302 generates a value that
`can be a random value for a client computer 110, the value
`falling Within a population range of possible values. One of
`ordinary skill in the art Will recogniZe that the generation of
`a “random value” or “random number” can be in?uenced by
`a deterministic or knoWn component. For example, the
`random value generated could be affected by a user’s
`preference settings for risk tolerance or some other type of
`bias toWard generating one number over another, and yet the
`number generated is still random. In some embodiments, the
`random value is automatically generated at the time of
`installation of the value-generating module 302 on a client
`computer 110. In other embodiments, the value is generated
`When a server 116 requests this data from a client computer
`110. The value can also be generated any time in betWeen the
`installation and the request. Furthermore, the value can be
`generated When a client computer 110 ?rst requests a
`softWare update from the server 116 or noti?es the server
`116 that an update is needed.
`
`20
`
`25
`
`30
`
`35
`
`40
`
`45
`
`50
`
`55
`
`60
`
`65
`
`6
`The random value generated Will typically be maintained
`for the client computer 110, and thus the value continues to
`exist and is used for a number of different softWare updates.
`HoWever, the value-generating module 302 generates a neW
`number for a computer 110 When necessary or desired. For
`example, a neW number can be generated during a user
`migration to a neW machine, after reinstallation of the
`softWare, after system failure, or as a debugging mechanism.
`In some embodiments, the value can change each time a
`successful update occurs for security reasons.
`The random values are preferably non-unique values, and
`the update deployment process functions most effectively
`When the values generated are non-unique random values.
`The values can be non-unique since the invention does not
`require that every computer 110 or user be tracked (i.e., it is
`not necessary to track every unknoWn), as might be neces
`sary in a system that uses unique ID numbers to prevent
`piracy by tracking each piece of softWare that is sent out or
`by keeping track of every subscriber for the softWare and
`limiting Who can receive updates based on subscriptions.
`Typically, the value-generating module 302 generates the
`random value from a uniform distribution, thus ensuring that
`a straight uniform sampling of client computers 110 receives
`the update regardless of the country they live in, the lan
`guage, the location, the time of day, etc. In this manner, a
`random subset of all users of the client computers 110 is
`tested. HoWever, the value can also be generated from other
`distributions, such as a bell curve distribution, a Poisson
`distribution, an empirically-de?ned distribution, and the
`like.
`A multidimensional number could also be generated.
`Instead of having a single number, a computer 110 can
`generate a feW numbers. For example, the computer 110 can
`have a number based on the country in Which it is located,
`a number based on the risk tolerance of the user (i.e., certain
`users may have a high risk tolerance and may be more
`interested in receiving the most current softWare updates
`Without delay, and certain users may have an especially loW
`risk tolerance and may only Wish to receive the update after
`it has been Well tested by other users), and a number based
`on some other identifying characteristic. A particular update
`can thus be set to be tested by users in a l to 10 range for
`risk tolerance, a l to 3 range for country, and a l to 50 range
`for some other characteristic, thereby testing different per
`centages of the users With different de?ned characteristics.
`As stated above, the random value generated falls Within
`a population range of possible values. This population range
`can be any range from N to N, Where N can be for example
`a 32-bit number, N can be —l, 0, l, 1000, 1 million, etc., or
`N can be any machine-representable number, bounded or
`unbounded. The population range spans the set of values for
`all users to Whom the update Will probably ultimately be sent
`after the testing has been completed. The random values
`generated by computers 110 to receive the update Will fall
`Within the population range.
`The sampling range-generating module 304 generates a
`sampling range of values as a proper subset of the population
`range, the probability of the value falling Within the sam
`pling range being predetermined. The sampling range
`de?nes the subset of users Who Will test the product by
`de?ning a range in Which the values generated by some of
`the clients 110 Will fall. As described above, the random
`values generated by the clients 110 Will fall Within the
`population range, and the population range spans the set of
`values for all users to Whom the update Will probably
`ultimately be sent after the testing has been completed. Thus,
`the sampling range generated by the sampling range-gener
`
`9
`
`SYMC 1011
`
`
`
`US 7,334,005 B2
`
`7
`ating module 304 is a subset of the population range, and the
`sampling range de?nes the subset of values that Will be
`involved in the testing (i.e., the clients 110 With values
`falling Within the sampling range that Will test the software
`update). For example, if the population range is 1 to 1
`million, and the update is to be sent out to all users, the
`sampling range Would also be set to be 1 to 1 million. If the
`population range is 1 to 100 and the sampling range is 1 to
`5, clients 110 With values falling Within that sampling range
`(e.g., a value of 4) Will receive the software update.
`The sampling range can also be discontinuous. For
`example, the range can run from 1 to 10 and from 21 to 100.
`This might be useful in a situation Where certain users have
`especially loW risk tolerances and do not Wish to participate
`in the testing procedure. Users generating numbers falling
`Within 11 to 20 can be set to receive the update last, after it
`has been tested by many other users.
`The sampling range can be speci?ed in a ?le that is
`associated With the softWare update package to be deployed
`(e.g., bundled With the softWare update package or linked
`With an URL, reference, or pointer to the package). The
`sampling range can also stored on the client computer 110 or
`on a server 116 (e.g., in a central location such as a relational
`database, a registry, or a repository directory).
`The sampling range-generating module 304 not only
`generates the initial range of seed users, but also can
`generate successively broader sampling ranges (Within the
`population range) as the update testing progresses. For
`example, if the population range is from 1 to 1000, the
`sampling range-generating module 304 can initially gener
`ate a range of from 1 to 10. This range can be set With the
`goal of controlling the initial deployment of the update so
`that 1% of the population of users With random values Within
`the population range Will receive the update in the ?rst
`round. Once deployment has occurred for a period of time
`and signi?cant problems have not been reported, the module
`304 can generate a second broader range to encompass a
`larger number of target users. For example, the second range
`might be from 1 to 100, thus rolling out the update to 10%
`of the users to Whom the patch applies in this second round
`of release. This broadening of the range can continue until
`the update has been provided to all users to Whom the patch
`applies. Thus, all or most computers 110 With random values
`Within the population range of 1 to 1000 Will receive the
`update. If there are problems at any point during the roll out
`of the update, the roll out can be stopped While the problem
`is being resolved. HoWever, any problems encountered
`should only a?fect the initial sets of seed users rather than the
`entire population of users, thus permitting much easier
`control of damage caused due to problems With the update.
`In some embodiments, the starting sampling range Will
`vary as different softWare updates are released. For example,
`if the initial sampling range is 1 to 10 for one softWare
`update, the initial sampling range can be set to be 11 to 20
`for the next softWare update. In this manner, the ?rst set of
`seed users Who are most likely to be a?fected by problems
`With the updates Will vary from one update release to
`another.
`In some embodiments, the value-generating module 302
`can also generate random values according to an unknoWn
`or unexpected distribution. For example, computers and
`softWare have been knoWn in the past to have biases,
`sometimes unexpected, in their random number generators.
`These biases can result in the generation of random values
`that are either not truly random or that do not conform to the
`anticipated distribution, e.g., a uniform, normal, or other
`distribution. In some embodiments, the sampling generator
`
`20
`
`25
`
`30
`
`35
`
`40
`
`45
`
`50
`
`55
`
`60
`
`65
`
`8
`can set the WindoW according to any knoWn distribution
`such that the probability of any given value generated Will
`have the desired probability of falling Within the WindoW.
`Additionally, the range can be set based on an empirically
`determined frequency of values generated, for example by
`estimating the empirical distribution for the numbers tested
`over a WindoW in time such that it Will more accurately
`re?ect the true distribution of the sample values that are
`received. The sampling range-generating module 304 can
`adjust the siZe of WindoW based on knoWn patterns or rates
`of requests for updates. After setting a range, the sampling
`range-generating module 304 can collect information
`regarding hoW many people actually test the update (e.g., it
`can keep track of the number of doWnloads), and so the
`module 304 can build statistical data as it is in operation to
`determine if oversampling or undersampling is occurring.
`Therefore, it does not necessarily matter What values are
`generated or according to What distribution since the sam
`pling range generator can adjust for this.
`The eligibility determination module 306 determines
`Whether the computer 110 is eligible to receive a softWare
`update. The computer 110 is determined to be eligible When
`the random value for the computer 110 falls Within the
`sampling range. Thus, the eligibility determination module
`306 determines Whether or not the value for each computer
`110 falls Within the sampling range. In some embodiments,
`the module 306 ?rst determines Whether there is a sampling
`range set for a particular update, and if so, What the range is.
`The eligibility determination module 306 can make its
`determination each time softWare updates are available by
`asking each client computer 110 for its random value, and
`then c