How To Install Software - A 12 Step Program --author anonymous 1. Examine the software packaging until you find a little printed box that explains what kind of computer system you need to run the software. It should look something like this: SYSTEM REQUIREMENTS ------------------2386 PROCESSOR OR HIGHER 628.8 MEGAHERTZ MODEM 719.7 MB FREE DISK SPACE 3546 MB RAM 432323 MB ROM 05948737 MB RPM ANTILOCK BRAKING SYSTEM 2 TURTLE DOVES NOTE: This software will not work on your computer. 2. Open the software packaging and remove the manual. This will contain detailed instructions on installing, operating, and troubleshooting the software. Throw it away. 3. Find the actual software, which should be in the form of either a 3.5-inch floppy diskette or a CD-ROM, located inside a sealed envelope that says: LICENSING AGREEMENT ------------------By breaking this seal, the user hereinafter agrees to abide by all the terms and conditions of the following agreement that nobody ever reads, as well as the Geneva Convention and the UN Charter and the Secret Membership Oath of the Benevolent Protective Order of the Elks and such other terms and conditions, real and imaginary, as the Software Company shall deem necessary and appropriate, including the right to come to the user's home and examine the user's hard drive, as well as the user's underwear drawer if we feel like it, take it or leave it, until death do us part, one nation indivisible by the dawn's early light,... finders keepers, losers weepers, ... 4. Hand the software to a child aged 3 through 12 and say, "(Name of child), please install this on my computer." 5. If you have no child age 3 through 12, insert the software in the appropriate drive, type SETUP" and press the Enter key. 6. Turn the computer on, you idiot. 7. Once again type "SETUP" and press the Enter key. 8. You will hear grinding and whirring noises for a while, after which the following message should appear on your screen: The Installation Program will now examine your system to see what would be the best way to render it inoperable. Is it OK with you? Choose one, and be honest: +-----+ | YES | +-----+ +------+ | SURE | +------+ 9. After you make your selection, you will hear grinding and whirring for a very long time while the installation program does who knows what in there. Some installation programs can actually alter molecular structures, so that when they're done, your computer has been transformed into an entirely new device, such as a food processor. At the very least, the installation program will create many new directories, sub-directories, and sub-sub-directories on your hard drive and fill them with thousands of mysterious files with names like "puree.exe," "fester.dat," and "doo.wha.." 10. When the installation program is finished, your screen should display the following message: CONGRATULATIONS! The installation program cannot think of anything else to do to your computer and has grown bored. You may now attempt to run your software. If you experience any problems, electrical shocks, insomnia, shortness of breath, nasal discharge, or intestinal parasites, you should immediately *!@!$)$%@&*^^)$*!#$_$*^^& 11. At this point your computer system should become less functional than the federal government, refusing to respond even when struck with furniture. 12. Call the toll-free Tech Support Hotline number listed on the package and wait on the line for a representative, who will explain to you, in a clear, step-by-step manner, how to adopt a child aged 3 through 12. Installing Software 1. 2. Prepare for installing: a. There's always a risk that something will go horribly wrong when you install, uninstall or update software. Back up everything you don't want to risk losing before you install a program. You have to decide what that is. I make sure that I have recently backed up my whole system with a disk image before I install programs. b. If you downloaded the software, check the file for any pestilence before you use it. There's not much risk of getting a virus, worm or Trojan from "boxed" commercial software. Get your system ready: a. 3. Close any programs you have open. The easy way to do this is to "logoff" your computer. Just log back on to the same account when Windows asks. (Don't enter a password if you usually don't use one.) You can also use Task Manager -- Ctrl+Alt+Delete -- to close running programs or you can do a clean start so that you have no unwanted programs running. b. Disable any antivirus autoprotect processes that you have running. c. Optional, but strongly suggested: Run System File Checker to set a clean starting point. [Click Start > Run > type sfc] d. Alternatively, if you're running Windows XP, set a system checkpoint. You may need to uninstall the old program first: a. If you are upgrading a program to another version, or hope to solve a problem by reinstalling a program, it's usually best to uninstall the old program first. Sometimes you get instructions with the software that tell you whether you should or not. If so, follow them. Otherwise I'd recommend you install the old program first. 4. b. Click Start > Settings > Control panel > Add/Remove Programs > scroll down the list until you find the old program. Click Add/Remove and answer OK. c. Reboot your computer after you've unstalled the program. Windows can't delete or replace some files that need to be changed except during startup. Install the program/software: a. b. c. Read everything carefully in each dialog box as the process goes along. Respond appropriately. Don't just ignore alert messages during the installation. Restart your computer if you are notified that it's needed to complete the installation. Windows can't delete or replace some files that need to be changed except during startup. 5. Advanced: Run System File Checker again to see if anything bad happened during the installation. [Windows 98: Click Start > Run > type "sfc"] [Windows XP: Open a command prompt and type "sfc"If there are any potential problems, a dialog box will open. It's usually safe to ignore or update the system information if the version # of the new file is higher, even though the date of the old file is later. For example, it's OK if version 3.8.8033 has replaced 3.8.7288, no matter what dates are shown. 6. Keep a permanent record of the action you've taken (for example -Installed "Avenger" - version 3.0 on 7/4/2002, along with any relevant notes or observations). 7. Precaution: Before you install any more software, restart your computer -- even if you do not get a notice that you "Need to restart your computer." Ctrl+Alt+Delete ^top^ Press Ctrl+Alt+Delete (This means press and hold down the first two keys and then press the Delete key for an instant. Often called the 3-fingered salute in deference to Bill Gates. In the Close Program dialog box, click the program that you want to close, and then click End Task. "AnswersThatWork" has a comprehensive list of programs to guide you in which programs to start. Backup ^top^ Before you install, uninstall or update any software, make sure you have a current backup of at least your critical documents and data. You can't afford to lose that. It's more likely that something will happen to your system (Windows mostly) though. It's a good idea to back your system up as well. The Windows XP System Restore function is an adequate alternative. It can take you back to a point before the time when the installation went bad. Alert messages during installation ^top^ A message may pop up during the installation process: "File being copied is older than the current file". Programs often use files in the Windows folders that are also used by other applications. When you get that message you should take precautionary action. Make a copy of the file that is about to be replaced -- and save it in a convenient folder. [Use Windows Explorer to make the copy. Hold down the Windows key (between Ctrl & Alt) and press the E key to open WE.)] Close WE and proceed with the installation. Later, if you find that something does not work, you can replace the older file with the copyyou made of the newer one.. Installation log ^top^ A log of each program you install or uninstall can be invaluable if you run into a problem. You can easily create a Log file that automatically enters the date each time you open it. Open Notepad and create a text file with the single line ".LOG" (Without the quotes.) Be sure to include the lead off period. Close and save the file. Now when you open it, you will see the current date. You can then complete your log entry. Put a shortcut for the file somewhere where you can easily find it when you need it -- on the desktop for example The term upgrade refers to the replacement of a product with a newer version of the same product. It is most often used in computing and consumer electronics, generally meaning a replacement ofhardware, software or firmware with a newer or better version, in order to bring the system up to date or to improve its characteristics. Contrast update and replace. See also laptop upgrade. Audiophiles use the word upgrade to describe the replacement of a product with a better-quality product with the aim of bringing enhancements to sound quality. [edit]Computing and consumer electronics Common hardware upgrades include (for example) installing additional memory (RAM), adding larger hard disks, replacing microprocessor cards or graphics cards, and installing new versions of software. Many other upgrades are often possible as well. Common software upgrades include changing the version of an operating system, of an office suite, of an anti-virus program, or of various other tools. Common firmware upgrades include the updating of the iPod control menus, the Xbox 360 dashboard, or the non-volatile flash memory that contains the embedded operating system for a consumer electronics device. Users can often download software and firmware upgrades from the Internet. Often the download is a patch—it does not contain the new version of the software in its entirety, just the changes that need to be made. Software patches usually aim to improve functionality or solve problems with security. Rushed patches can cause more harm then good and are therefore sometimes regarded[by whom?]with scepticism for a short time after release (see "Risks").[1] Patches are generally free. A software or firmware upgrade can be major or minor and the release version code-number increases accordingly. A major upgrade will change the version number, whereas a minor update will often append a ".01", ".02", ".03", etc. For example, "version 10.03" might designate the third minor upgrade of version 10. In commercial software, the minor upgrades (or updates) are generally free, but the major versions must be purchased. See also: sidegrade. When one replaces a product made by one supplier with a product made by a different supplier, one carries out a competitive upgrade. [edit]Risks Although developers produce upgrades in order to improve a product, there are risks involved— including the possibility that the upgrade will worsen the product. Upgrades of hardware involve a risk that new hardware will not be compatible with other pieces of hardware in a system. For example, an upgrade of RAM may not be compatible with existing RAM in a computer. Other hardware components may not be compatible after either an upgrade or downgrade, due to the non-availability of compatible drivers for the hardware with a specific operating system. Conversely, there is the same risk of non-compatibility when software is upgraded or downgraded for previously functioning hardware to no longer function. Upgrades of software introduce the risk that the new version (or patch) will contain a bug, causing the program to malfunction in some way or not to function at all. For example, in October 2005, a glitch in a software upgrade caused trading on the Tokyo Stock Exchange to shut down for most of the day.[2] Similar gaffes have occurred: from important government systems [3] to freeware on the internet. Upgrades can also worsen a product subjectively. A user may prefer an older version even if a newer version functions perfectly as designed. [edit]Audiophile This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (September 2010) The hobby of audiophilia offers a rich playground for potential upgraders and tweakers. Audiophile circles use the noun "upgrade" to describe the replacement of a system component or components, for example a low quality or low powered electronic amplifier, with a better quality or more powerful amplifier from the same or different manufacturer's product range ostensibly to improve on the quality of reproduced music from a hi-fi system. However, the description generally excludes the modification to the sound using different types of interconnect cables, or the replacement of electronic components within the system components by the owners in order to customise the sound, as this would constitute DIY or tweaking. The word "upgrade" has spawned the noun upgraditis, used to describe a person's obsession, compulsion, or addiction (akin to a disease) to perpetually changing his/her hi-fi system components in order to obtain ever greater enjoyment and fulfillment through enhancements to sound quality. Although the original aim is to improve the sound quality, persons with extreme manifestations of this disorder may completely lose sight of the objective and make frequently and highly expensive component changes for their own sake. When Should You Upgrade Your Software? By Dave Paradi With new versions of the software we use being released regularly, one of the questions I get often is how should someone decide whether they should upgrade their software to the current version. In addition to the cost of the upgrade, which seems to be rising steadily, there is the hassle factor in using new software - learning the new features or interface, the bugs that inevitably there and the resulting temporary loss of productivity. When I am talking about software, I am referring to both the software drivers that guide the operation of the computer components as well as the application software, such as a word processor or spreadsheet. I generally separate software upgrades into two categories: 1) service releases or bug fixes and 2) new software versions. For service releases or bug fixes, I tend to upgrade as soon as they are released since they usually make the software more stable and reliable. For new software versions, I use two criteria to determine whether I want to upgrade: 1. Is my current version no longer supported? As software manufacturers release new software, they no longer support the older versions. Most software companies support the most recent old version and perhaps one more past version, but rarely more than two old versions. To check if your version is supported, you can go to the software maker's website and check the support area. When your software is no longer supported, it may be hard to get answers to questions you have and this can lead to possible delays and frustration if you run into a problem with the software. 2. Does the new version have some features that will make my work more efficient? Almost every software release includes a slew of new features designed to make work more efficient or easier. I examine the list of new or changed features to see if any will really benefit me. Most people never use more than 10-20% of the features of a software package, so new features in that unused 80% are of less interest. The answers to the two questions above lead me towards or away from a new version of software. But before I upgrade, I consider two more factors: 3. Has the software been out long enough to detect any significant problems? I will usually wait 6-12 months after a major new software version is released before upgrading. In the first few months, the software company finds bugs that they didn't find when testing it and they prepare a service release or minor upgrade to fix those problems. I usually wait until that first service release is available until I upgrade. This reduces the risk of upgrading and running into significant problems. 4. Will I run into file format compatibility issues? If a software application has changed the file format that the information is saved in, the new files may not be compatible with the old version of the software. This can cause problems when sharing files with colleagues or partners. If the file format has changed, I will wait longer to upgrade in order to ensure that most of the people I will share files with have upgraded and we will reduce the risk of running into file compatibility problems. By considering these four questions, I hope you feel more comfortable in making software upgrade decisions. 10 things you should do before, during, and after reinstalling Windows 171Comments more + By Alan Norton October 15, 2008, 11:19 AM PDT There are some very good reasons why you might want to reinstall Microsoft Windows. Whether it is 2000, XP, or Vista, the registry can become corrupted or it can accumulate settings for programs longsince forgotten, leading to sluggish performance. Or you can find yourself with a stubborn Trojan Horse. The only way to be 100 percent sure that you have rid yourself of some particularly nasty viruses is to reload Windows. I have wanted to document the steps needed to properly reinstall Windows for a long time now. I always end up missing something after the reload and find myself scrambling to find IDs, passwords, configuration settings, or favorite Web sites lost in the reinstall. Be sure to set aside a large block of time to do the reinstall. Don’t do it before a term paper is due or your business presentation slide show. A weekend is a good time. An OS reinstall is also a good time to decide to upgrade. If you want to upgrade to Vista, there are a lot of options available to you. For more information about these options and the pros and cons of Vista, please read Vista Confusion. This article focuses on Vista but the concepts apply to all versions of Window. This blog post is also available in PDF format in a TechRepublic download. When you run the Windows Vista set-up program, you will see a window with two options: Update and Custom (Advanced). The Update option is not available when reinstalling Windows Vista. Under the Custom option, you will be doing what is known as a Clean Install. Follow these 10 steps and you will, hopefully, not find yourself having to scramble for files or information that you need after the reinstall. Please Note: I have gone to great care to test and retest this documentation. It is still possible that there are errors or missing information or that I have not covered your specific reinstallation configuration. Please provide feedback in the forum if you find any issues. Before reinstallation 1. Document your login IDs, passwords, and settings. If you are using your browser to store the passwords for Web sites, you will be in for a rude awakening after reinstalling Windows — they will be gone. Your browser is a poor place to keep your Web site IDs and passwords. One possible option is to store your information in a spreadsheet. However, if you keep your IDs and passwords in a password-protected Excel or OpenOffice Calc spreadsheet, be aware that there are programs that can recover/discover the password for most .xls files. I suggest you use stronger encryption techniques to better protect Excel 2002, 2003, and 2007 spreadsheets. If you do have Excel 2002 or later, secure your spreadsheet from hackers and then make sure you don’t lose your password! Next, add your IDs and passwords. Create a row in your spreadsheet for your ISP, e-mail, Web hosting company, personal Web sites, and any other password-protected logins. This file is also a good place to keep your e-mail POP3, SMTP, and newsserver name. If you don’t have Excel you can keep the IDs and passwords on a piece of paper securely locked away in a safe place or you can choose one of the software alternatives available. RoboForm is a popular way to secure your browser login user name and password but is not freeware. GuardID Systems offers a product called ID Vault that is supposed to be a secure way to store your IDs and passwords — for a small price. Do not keep your IDs and passwords in a Notepad or Word document unsecured and “in the clear,” readable by anyone with access to your computer or to a hacker. 2. Export your e-mail and address book, bookmarks/favorites, and cookies. You can export your e-mail and contacts from Outlook Express, Outlook, MS Mail, and most thirdparty e-mail programs. I have a folder called Mail Exports under my Archive folder where I export my e-mail. You can export from the various mailboxes. Select the Inbox, Outbox, Sent Items, and Drafts. Unless you have a special reason otherwise, you can exclude the Deleted and Junk mail boxes. I don’t bother exporting my contacts. If I need a contact, I pull it up from an archived e-mail. You might want to export your contacts though, especially if you have a large number. I used to always forget about bookmarks for my favorite Web sites. I had to spend time searching for a favorite site after Windows was reinstalled. I made a promise that I would export my IE Favorites and Firefox Bookmarks the next time I did a Windows reinstall. You can also export feeds and cookies. 3. Download the latest applications and drivers. There is a core set of applications that you know you will be using. One good way to identify these core apps is to take a look at your desktop and Start menu. You can save an image of your desktop to a non-system folder and use that as a guide to reinstalling your core apps. You can also look at your installed programs in Programs and Features located in the Control Panel. I have a logical drive named Documents and on that drive a folder called Downloads. I keep all my apps and drivers downloaded from the Internet there. These add up in a hurry. To keep it organized, I have a lot of subfolders including one for Apps and one for Drivers. Once you have a list of your core apps, download the latest versions from the Internet and save them to your \Downloads\Apps folder or a non-system folder of your choice. Some of your core apps may be on DVD, CD, or even floppy. Pull out your media and set it in a stack ready for reinstallation later. Download the latest version of your favorite anti-virus software. I like Alwil Software’s Avast! The free home version includes real-time protection for e-mail, instant message, Web browser, Outlook Exchange, and four other types of real-time protection. If you can, download a file containing the latest virus definitions. How do you know what drivers you will need? There are two basic types of drivers. I separate them here because updating them is usually handled differently: Motherboard Specific Drivers - Auto Update System and Chipset (usually Intel) Onboard Sound Onboard Video (some motherboards) Onboard LAN Many motherboard manufactures and computer vendors have an application that will check all the motherboard-related drivers to see if they are current. If your manufacturer or vendor provides this type of application, go to their Web site and download the latest version now. If you don’t have access to an update utility, you have to manually identify the motherboard-related drivers that you will need: Other drivers - Manual Update Sound Card (if your computer has a sound card) Video Card (if your computer has a video card) Modem RAID (Intel Matrix RAID, JMicron RAID, or other if you have a RAID-controller card) Other Unique Devices If you do not already know the type of video card, sound card, modem, RAID, or other unique devices in your system, you can identify them by opening the Device Manager (Figure A). Figure A The expanded items in the Device Manager show the devices installed on my computer requiring a manual driver download and install. If you aren’t running RAID, you should not need to identify any Storage controllers. If you are running RAID, you will need to have the driver file available on a floppy disk or CD if installing XP or previous versions of Windows. You also need to know the exact driver/controller name — Intel 82801 GR/GH SATA RAID for my system. Unlike previous versions of Windows, Vista recognizes your hard drives during setup and you can get your RAID drivers from there. I don’t have a sound card in my system, but if you do, expand the Sound, video and game controllers item to determine the sound card installed in your computer. Mike Smith has put together a handy Windows Reinstall Checklist (PDF) that you might want to print and use. After identifying the drivers you need to install, download them and save them to a non-system logical drive. Do not pull them from old floppies or CDs unless you are sure that new drivers are not available. 4. Housecleaning and backing up your data. Now is the time to clean up your hard drive by deleting unneeded or unwanted files. Cleaning up years of accumulated files that you no longer need or want is no fun. If you want to make it less of a chore, you can start a week or more in advance of the reinstall. Spend one or two hours each day deleting the files you are sure that you want to send to the great bit-bucket in the sky. This is also an excellent time to do a thorough anti-virus scan of all your drives. You don’t want to back up infected files. Then do a full backup, which is easy for me to say, right? You can spend hours doing a full backup, but this is a good investment of your time. Back up anything that you don’t want to lose. It is especially important if you are one of the unfortunate ones without a Windows OEM disc or a vendor reinstall disc. Many computer vendors put the Windows setup and installation files on a separate partition or folder on the hard drive. If you have a vendor built computer, Windows Reinstall - OEM Computers is a must-read. If you will be reinstalling Vista on a different partition, you will need almost 15GB of free spaceminimum on a logical drive/partition to load Vista. I like to create a partition of 30-40GB for the 32-bit version of Vista and 40-50GB for the 64 bit version. Do a full format of the logical drive/partition that will be your new system partition so that you will have a clean Vista-ready partition. Warning! If you will be dual booting using XP and Vista, do not use XP to create the partition that you will install Vista on. For a very helpful guide to issues dual booting XP and Vista please readDual Booting Windows Vista & Windows XP by Bert Kinney. 5. Service packs As of October 2008, the latest service packs are SP3 for XP and SP1 for Vista. There are five ways to retrieve and install the latest service packs. Some of these methods reduce or eliminate your risk to security vulnerabilities. Some are alternative methods you can use if you are having problems installing the service pack from Windows Update. If you are not concerned about either of these two issues, you can skip this section entirely and move on to item 6. There are five ways to get the latest Windows service pack: Download it via Windows Update Download it from the Microsoft Web site Order it on CD/DVD disc Order the latest copy of Windows that includes the latest service pack (should be noted in the product description) Install Windows Server Update Services (WSUS) or the System Center Configuration Manager (SCCM) if available and if the computer is networked on a local Intranet The update is much smaller when done through the Update utility found in the Control Panel. I planned to recommend that it is best to download the latest service pack and install it manually. Doing this would install important security updates in the service pack before connecting to the Internet. After a request for information from Microsoft I received the following response as to why that is not recommended: “Microsoft strongly recommends using Windows Update to download and install Windows Vista SP1 on single PCs. If a customer prefers to install Windows Vista SP1 from a DVD and has Internet access, they should first visit Windows Update and install all recommended and optional drivers and updates (the SP1 DVDs will have this advice on their packaging). Customers should know that the install program on the DVD does not include the same logic that Windows Update uses to check for device drivers prior to SP1 installation. To make this change, the installer would need to be substantially modified, which would take a significant amount of time. Additionally, one of the benefits of Windows Update is that it can dynamically add or remove filtered devices over time, as is necessary. If the DVD were to ship with the set of filters included, they could not be added or modified as the driver landscape changed over time. We also want customers to know that if they have any problems during or after installing SP1, they can call Microsoft Customer Support Services (CSS) free of charge with questions or for help.” Note the emphasis added. Both options require connecting to the Internet before installing SP1. I spoke with a Microsoft technician specializing in Windows Update. He informed me that there are two primary reasons why you might want to manually install SP1. I added reason three as myreason for a manual install. 1. You cannot download SP1 from Windows Update or it will not install properly. 2. 3. During high demand times SP1 may not be available to some users for up to a week or possibly longer due to a limitation placed on the number of downloads. You want the security updates included in SP1 installed before connecting to the Internet. The technical representative understood why I might want to install SP1 so that my system would be more secure before connecting to the Internet. He said it was possible to do this. However, SP1 does not include all the security patches since its release, even if you download it today. You will still have to start Windows Update to get these security updates. In case you were wondering, SP1 installs 23 important security updates and 551 hot fixes, and some of those security updates are cumulative. If you want a closer look at the details, you can review Hotfixes and Security Updates Included in Windows Vista Service Pack 1. The service packs for Vista are large — 434.5 MB for the 32-bit version and 726.5 MB for the 64-bit version. If you are still using dial-up you might be able to download the 32-bit version, but it would be easier to have a friend with broadband download the 64-bit version for you. Read the knowledge base article KB936330 carefully before installing the service pack. I downloaded the Vista 64 bit SP1, and it took approximately 42 hours over four days. Oh the sacrifices I make for you, my patient reader! Use a download manager if you want to download the Vista service pack. I don’t recommend you do this over dial-up. At $3.50, just order the SP1 CD or DVD. During reinstallation 6. Load Windows. Tip: When installing Vista in Windows, the installer takes over the entire screen. But you can still have access to Windows and features like Disk Manager by clicking on the [Windows] key. I have not had problems doing this when stuck and needed information or wanted to delete files on the target partition or format the target partition, but it might be dangerous to do while the installer is busy. Don’t forget to have your product key handy. If you have a RAID setup you will need to load the RAID drivers (be sure to get the right driver — 32 bit or 64 bit) and know the RAID controller name. For more information about installing Windows on a RAID system see Want Speed and Data Safety? Consider RAID. Rarely, you may have to have drivers for a device where Windows will be installed. As an example, some older motherboards require that you load SATA drivers in order to recognize SATA drives. Perhaps the best way to reinstall Windows is the simple and straightforward “insert Windows disc into optical drive, format target partition and install to target partition” method. You should, if you can, start with a nice clean partition to install Windows on. You can reinstall Vista from within your current Vista installation in addition to the traditional CD/DVD bootup install. If reinstalling from within Windows, connect to the Internet so the installer can check online for the latest installer updates. You can replace your existing installation, even from within the existing installation, or you can load Windows onto a different partition that you prepared in item four. If you do reinstall Windows in a different partition, the original installation must be removed per the EULA. You cannot format the target partition if it is the same as the one with the current Windows installation. Starting with Vista, the system boot files and boot manager are located in a folder called Boot. Gone is boot.ini, and replacing it is something called a Boot Configuration Data store(BCD). If you are running a dual-boot system the Boot folder may not be located on logical drive C:\. The boot files are system files and will be hidden unless you have unchecked Hide protected operating system files when configuring Explorer. If you want to load Windows onto a different logical drive, be careful that you do not delete the Boot folder when removing the original Windows installation. You also do not want to format the logical drive where the Boot folder is located. Tip: Microsoft includes a comprehensive help file called Installing Windows. It is a good idea to read this before reinstalling Windows. After reinstallation 7. Reconfigure personal settings. I have a routine that I follow — one that I developed over the years. Personal settings are, wellpersonal. I have a list of my personal settings that I like to make immediately upon Windows startup. I offer these changes as suggestions and not recommendations. Read How to Personalize Windows Vista for a step-by-step how-to guide or click on the specific topic below: Gadgets Display resolution Desktop background Power settings Explorer settings Cookies handling Defrag schedule Indexing options Desktop shortcuts For those of you who are Vista experts, you might notice that there is something conspicuously missing from my list. I do not recommend changing the default settings that leave User Account Control (UAC) turned on, but this is how to turn it off if you must. If the Windows personalization aren’t enough for you, there is a freeware version of TweakVI for Vista. You can easily spend the better part of a day going through all the tweaks available, and some of them are even useful. If you have kids and they have a computer, there are some tweaks that are useful for hiding administrative tools that you don’t want them to access. Lo and behold, you can even get your Vista product key plus lots of other detailed information about your system. You no doubt have a list of your own, many of which have long-since been forgotten that you suddenly remember after reloading Windows. You might want to keep a list of these personalized setting so that you will have it the next time you have to reinstall Windows. 8. Enable previous versions and create a “clean install” restore point. You will need to enable Previous Versions if you are using this feature in Vista Business, Ultimate, or Enterprise for a specific logical drive or folder. If you aren’t using Previous Versions, you should be, especially if you are a programmer. For information about how to turn this feature on in Vista, see Previous Versions in Vista Business, Ultimate, and Enterprise in the #2 Give examples section. I always like to immediately create a restore point once Windows is installed and personalized. You can create a restore point in the same Window that Previous Versions is enabled. Warning! If you are dual booting XP or Server 2003 and Vista or Server 2008, XP / Server 2003 will delete the Vista / Server 2008 restore points. If Previous Versions is enabled, the shadow copies of your files will also be gone. There is no simple solution for this. Be sure that Vista is installed properly before booting into XP in case you need to use a system restore point. XP users with SP1 or greater and Server 2003 users need not feel left out. They have a similar feature called Shadow Copies. 9. Configure network, install service packs, patches, and security updates. There are other security updates and patches that may be required. For example, I had a Micron Millenium PC that had an atapi.sys patch that had to be installed immediately after installing Windows. Install all security updates, patches, and fixes before connecting to the Internet. How you install SP1, your modem drivers, anti-virus, malware, firewall etc. (items 9.a - 9.e below) depends on which method you choose. Please use the instructions column of Table A to get the right order for the method you have chosen. If you skipped item 5, use the instructions for method one. Table A — The Five Vista SP1 Installation Methods Method Method One Windows Update Instructions 9.a Install anti-virus, anti-virus definitions, malware 9.b Install modem drivers and set up network connection 9.c Run Windows Update Notes The Windows Update installer will have to download files to update itself, and then it will have to restart. 9.e Create Restore Point Method Two Firewall Application Blocking 9.a Install anti-virus, anti-virus definitions, malware, and firewall9.b Install modem drivers and set up network connection9.c Run Windows Update 9.e Create Restore Point Comodo Firewall ProThe Windows Update installer will have to download files to update itself, and then it will have to restart. Windows Update Method Three Windows Update Manual Install Method Four Manual Install 9.a Install anti-virus, anti-virus definitions, malware9.b Install modem drivers and set up network connection9.c Run Windows Update 9.d Install SP1 manually 9.e Create Restore Point 9.d Install SP1 manually9.e Create Restore Point9.a Install anti-virus, anti-virus definitions, malware The Windows Update installer will have to download files to update itself, and then it will have to restart. Windows 9.b Install modem drivers and set up network connection Update 9.c Run Windows Update Method Five (Stand-alone) 9.d Install SP1 manually9.e Create Restore Point Manual Install 9.a Install anti-virus, malware, and firewall (optional) Install your anti-virus, spyware, and adware. Restart the computer if prompted before connecting to the Internet. Don’t forget to configure the anti-virus app to set the scan sensitivity. Set it to High or maximum for a thorough scan and set the real-time protection to High. If you have a file containing virus definitions, load these now. If you have a third-party firewall you want to use instead of Windows Firewall, install it now. 9.b Setup and configure network connection. Install your modem/network drivers. Create and configure your network connection(s). 9.c Run Window Update to scan for new drivers and updates. Next, connect to the Internet and use Windows Update to scan for drivers and updates. UseWindows Server Update Services or the System Center Configuration Manager (SCCM) if available and if the computer is networked on a local Intranet. The discussion below is centered on those using Windows Update. It had been so long since I started Windows Update manually that I had completely forgotten about its strange behavior. The Windows Update Window will show that it is looking for updates, and then it will close. It took me awhile to remember that although it appears that Windows Update has died a look at the notification icons on the taskbar shows that Windows Update is busy downloading updates (Figure B). Figure B Task Manager shows Windows Update process wuaudt.exe running. When I ran Windows Update after installing SP1, there were 28 important updates (Figure C) and thirteen of those were security updates (Figure D). I asked if there was a way to get the security updates created after SP1 in a downloadable cumulative security update file and was told that they are available only via Windows Update. Figure C Windows Update Window shows 28 important updates, totaling 159.4 MB after manually installing Vista SP1. Figure D Clicking View Available Updates reveals the 28 important updates since the release of SP1 — already marked for update. 9.d Install SP1 manually (optional). Install the service pack from either a disc or a file. A manual install of Vista SP1 (Figure E) requires about 7GB of free space for the 32-bit version and 13GB for the 64-bit version. Figure E These updates are installed after manually installing Vista SP1. 9.e Create a new Restore Point. After SP1 is successfully loaded, I immediately create another restore point manually and call it Clean Install with SP1 or a similar identifiable name. I do this before installing any drivers and apps. I know I will be installing a lot of drivers and apps and some of those, like video card drivers and apps, may be problematic. If I begin to have problems after loading numerous apps and drivers, it is nice to be able to go back to the Clean Install with SP1 point and restart loading the apps and drivers. Please read Remove All Remnants of the Windows Vista SP1 Installation by Greg Shultz for instructions about how you can recover disk space gobbled up by the SP1 installer. 10. Reload your drivers and apps. One thing is almost certain now that Windows has been reinstalled — some of the generic drivers that Windows has installed are not optimal. If you are lucky enough to have an auto-update utility from your motherboard manufacturer, install the latest version that you downloaded earlier, connect to the Internet, and fire up the update app. Do NOT update the BIOS. This option may be available in your motherboard update app and it may be called a BIOS update, but it is more commonly known as a BIOS flash. A BIOS flash is nota driver update. You also want to avoid any option labeled Update All. Next, pull out your list of drivers requiring manual installation and install them now. I keep my apps on a separate logical drive labeled Vista x64 Apps. It is a good idea to now go to the logical drive/folder where you keep your app files and wipe it clean. This is the fastest way to clean out the deadwood files that you will never use again. If you have all your apps on one logical drive and nothing else is stored there, it is best to format the logical drive before reloading your apps. Some programs like your newsreader usually store information like group messages on this logical drive. Export this information to your \Archive folder if you don’t want to lose it before formatting the logical drive. If you are running Intel’s Matrix RAID, install the Intel Matrix Storage Manager. It is finally time to reload all your applications. Take a peek at the desktop JPEG you created earlier or use a list of your core apps to determine what apps you want to install. Install to a fully formatted nonsystem logical drive. There are two basic strategies when reloading your apps. You can reload the apps you use the most and load additional apps when needed or load a full list of apps up front. I prefer to load the core apps and load additional apps only when needed. Take it from experience — it is not a good idea to load a lot of apps requiring a system restart and postpone the restart. Install a few at a time, restart the computer, and see if all is still well. If you do find a problem, you can return to the last known good restore point or uninstall the offending app. If you find no problems, consider manually creating a new restore point. Don’t forget to reload your e-mail messages, e-mail contacts, browser favorites, and other data that you exported earlier back into your newly reloaded apps. The final word Even a casual glance at this list reveals that loading Windows is the easy part of your reinstall project. The prep work and configuration will occupy most of your time; plan the actual date and time of the install accordingly. There is one more final bit of housekeeping to do. If you reinstalled Windows in a folder with an existing installation of Windows, you should decide what to do with the Windows.old folder. You will not find this folder if there was insufficient space on your system partition during the Windows setup. If you are reinstalling Vista, the Windows.old folder will be too large for a single-layer DVD but may fit on a dual-layer DVD. You can archive it to a backup drive, or if you have followed the steps carefully in this article and are satisfied that you have all your Windows-specific data, simply zap it into oblivion. Congratulations! By completing the 10 steps outlined here, you have prepared your computer for years of maintenance-free service. You have also protected yourself from data loss due to a hard drive failure. Installing/ Upgrading software...? -Advantages and disadvantages on installing/upgrading software -Risks of installing/ upgrading software -The requirements in preparing for install/upgrade -How to minimize risks when installing/ upgrading software 2 years ago Report Abuse Kim Z. Best Answer - Chosen by Voters Before installing, removing, or upgrading software, you may want to learn more about it first. Do any of the new and/or improved features benefit you? If yes, does the price to purchase the upgrade match that benefit? 5 Things to Consider: 1. Others Will others be affected by the change? Will employees, vendors, customers, clients or service providers, have difficulties interfacing with you? Remember, if you make it difficult for people to work with you, they may choose to go elsewhere! 2. Compatibility Are there programs that you simply must use in the course of your business? Will the new software be compatible? If file sharing is something you do, will others that share your files have problems accessing what you have done with their older versions of the same program? 3. "Buggy" Software Some software is notoriously "buggy" when first released. Others work like a charm. Do your homework. If the one you are considering is one that has a tendency to be "buggy" do you have the patience to work through the problems until a service pack is provided to address those issues? If not, you may want to wait until those issues have been addressed. 4. Opinions If you belong to a network of people in your industry, ask their opinion. Get a consensus based on people with your same skill level and level of patience. Is this something you can quickly pick up on your own, or are you going to need to take a class or e-course to bring yourself up to speed? 5. New and/or multiple computers This is the one case where it is more important (from a financial standpoint) to determine if you should downgrade the new computer or upgrade the old, or perhaps run both versions on different computers. Think long and hard how you can best serve: Your customer base, your patience level, and your personal learning curve. If you have one or more computers running on an older platform it may be financially sound to consider a downgrade for the newer computer. On the other hand, having the ability to switch back and forth from older to newer might make it a win-win. Why It's Important to Upgrade Your Software Laura G No comments When considering staying up-to-date with the latest software and how it can influence your academic and professional life, you should consider the following: Compatibility: if all of your classmates and professors are working on a new version of software, you may run into some problems when trying to submit or share documents. New software can be faster to operate with increased security features. New Features: Enhanced technology and new and improved features will allow you to apply the latest enhancements to your projects. Receiving support: if you have an outdated version of software you may be not be able to receive the software support you require, as support is usually designated for newly released software bugs and technical issues. Knowing how to use the latest software features can leave you ahead of the game when it comes to how your school papers or project will be presented. This can also give you an upper hand when it comes to the work force, as you will already know your way around new software, providing you with an advanced skill set. Question: Do I Have to Upgrade Personal Finance Software Every Year? Some of the most popular financial software offers a new version every year, which can get expensive. Is it worth your money to buy new financial software annually? Answer: The primary reason for upgrading to the latest financial software is to get new features and bug fixes for problems that existed in the previous version. Before you buy the latest personal finance software version, consider this: Reasons Not to Upgrade Software If your current version is supported (you can get tech support and no features have been disabled) and you are installing updates as they are made available, you should be getting the same bug fixes for your existing software that are included in the latest version. The latest version of your financial software may not have eradicated all bugs in the previous version of the software. Ironically, with a new financial software release comes the possibility of new bugs. The newest software version from any reputable developer will have been well-tested and quite functional, but annoying glitches can surface when the software is being used by the general population. How Long is Too Long Between Upgrades? While many financial software users upgrade annually simply to enjoy using the latest technology, some prefer to upgrade almost never, possibly going a decade before upgrading their software. The problem with waiting too long to upgrade is that when a new computer is eventually purchased, the old software may not run on the new system. If several upgrade versions exist between the version currently installed and the latest version, upgrading directly to the new version may not be possible. This is usually because the latest software can't read the data files which hold all the transactions entered over the years. To get around this, you need to install a version from between your old version and the new one to allow the software to convert your data files. After completing one or two of these intermediate upgrades, you will be able to install and use the latest version of the financial software. To find old software versions, contact tech support, who should be able to provide one or two free downloads of old versions. One other hassle caused by waiting for too long between software upgrades is missing out on using time-saving features included in newer software. These features are often worth the cost of an upgrade. The Happy Medium for Upgrades A good rule to follow for getting the most out of money spent on personal finance software upgrades it to upgrade at least every three years to take advantage of new technology that will generally run faster on your system. Within three years significant improvements will have been made to the software to make entering data, setting up budgets and using financial reports easier. Just be sure to know your financial software's obsolescence policy, which may cut off support and features that require the Internet (like data downloads) sooner. Software versioning From Wikipedia, the free encyclopedia "Versioning" redirects here. For other uses, see Version. Software versioning is the process of assigning either unique version names or unique version numbers to unique states of computer software. Within a given version number category (major, minor), these numbers are generally assigned in increasing order and correspond to new developments in the software. At a fine-grained level, revision control is often used for keeping track of incrementally different versions of electronic information, whether or not this information is actually computer software. Contents [hide] 1 Schemes o 1.1 Sequence-based identifiers 1.1.1 Change significance 1.1.2 Designating development stage 1.1.3 Separating sequences 1.1.4 Number of sequences 1.1.5 Incrementing sequences 1.1.6 Using negative numbers 1.1.7 Degree of compatibility o 1.2 Date o 1.3 Year of release o 1.4 Alphanumeric codes o 1.5 TeX o 1.6 Apple o 1.7 Other schemes 2 Internal version numbers 3 Pre-release versions 4 Modifications to the numeric system o 4.1 Odd-numbered versions for development releases o 4.2 Apple 5 Political and cultural significance of version numbers o 5.1 Version 1.0 as a milestone o 5.2 To describe program history o 5.3 Keeping up with competitors o 5.4 Superstition o 5.5 Geek culture 6 Overcoming perceived marketing difficulties 7 Significance in software engineering 8 Significance in technical support 9 Version numbers for files and documents 10 Version number ordering systems 11 Use in other media 12 See also 13 References 14 External links [edit]Schemes A variety of version numbering schemes have been created to keep track of different versions of a piece of software. The ubiquity of computers has also led to these schemes being used in contexts outside computing. [edit]Sequence-based identifiers In sequence-based software versioning schemes, each software release is assigned a unique identifier that consists of one or more sequences of numbers or letters. This is the extent of the commonality, however, schemes vary widely in areas such as the quantity of sequences, the attribution of meaning to individual sequences, and the means of incrementing the sequences. [edit]Change significance In some schemes, sequence-based identifiers are used to convey the significance of changes between releases: changes are classified by significance level, and the decision of which sequence to change between releases is based on the significance of the changes from the previous release, whereby the first sequence is changed for the most significant changes, and changes to sequences after the first represent changes of decreasing significance. For instance, in a scheme that uses a four-sequence identifier, the first sequence may be incremented only when the code is completely rewritten, while a change to the user interface or the documentation may only warrant a change to the fourth sequence. This practice permits users (or potential adopters) to evaluate how much real-world testing a given software release has undergone. If changes are made between, say, 1.3rc4 and the production release of 1.3, then that release, which asserts that it has had a production-grade level of testing in the real world, in fact contains changes which have not necessarily been tested in the real world at all.[clarification needed] This approach commonly permits the third level of numbering ("change"), but does not apply this level of rigor to changes in that number: 1.3.1, 1.3.2, 1.3.3, 1.3.4... 1.4.1, etc.[clarification needed] In principle, in subsequent releases, the major number is increased when there are significant jumps in functionality, the minor number is incremented when only minor features or significant fixes have been added, and the revision number is incremented when minor bugs are fixed. A typical product might use the numbers 0.9 (for beta software), 0.9.1, 0.9.2, 0.9.3, 1.0, 1.0.1, 1.0.2, 1.1, 1.1.1, 2.0, 2.0.1, 2.0.2, 2.1, 2.1.1, 2.1.2, 2.2, etc. Developers have at times jumped (for example) from version 5.0 to 5.5 to indicate significant features have been added, but they are not enough to warrant incrementing the major version number. This is improper. It is usually done to create a visual differential between software versions. A person may be less inclined to go through the trouble of installing, reinstalling, and/or removing old versions of software if a minor change is made instead. (I.E. Version 5.0 to 5.01, or 5.0 to 5.1) A different approach is to use the major and minor numbers, along with an alphanumeric string denoting the release type, i.e. "alpha", "beta" or "release candidate". A release train using this approach might look like 0.5, 0.6, 0.7, 0.8, 0.9 == 1.0b1, 1.0b2 (with some fixes), 1.0b3 (with more fixes) == 1.0rc1 (which, if it is stable enough) == 1.0. If 1.0rc1 turns out to have bugs which must be fixed, it turns into 1.0rc2, and so on. The important characteristic of this approach is that the first version of a given level (beta, RC, production) must be identical to the last version of the release below it: you cannot make any changes at all from the last beta to the first RC, or from the last RC to production. If you do, you must roll out another release at that lower level. However, since version numbers are human-generated, not computer-generated, there is nothing that prevents arbitrary changes that violate such guidelines: for example, the first sequence could be incremented between versions that differ by not even a single line of code, to give the (false) impression that very significant changes were made. Other schemes impart meaning on individual sequences: major.minor[.build[.revision]] or major.minor[.maintenance[.build]] Again, in these examples, the definition of what constitutes a "major" as opposed to a "minor" change is entirely arbitrary and up to the author, as is what defines a "build", or how a "revision" differs from a "minor" change. A similar problem of relative change significance and versioning nomenclature exists in book publishing, where edition numbers or names can be chosen based on varying criteria. In most proprietary software, the first released version of a software product has version 1. [edit]Designating development stage Some schemes use a zero in the first sequence to designate alpha or beta status for releases that are not stable enough for general or practical deployment and are intended for testing or internal use only. It can be used in the third position: 0 for alpha (status) 1 for beta (status) 2 for release candidate 3 for (final) release For instance: 1.2.0.1 instead of 1.2-a1 1.2.1.2 instead of 1.2-b2 (beta with some bug fixes) 1.2.2.3 instead of 1.2-rc3 (release candidate) 1.2.3.0 instead of 1.2-r (commercial distribution) 1.2.3.5 instead of 1.2-r5 (commercial distribution with many bug fixes) [edit]Separating sequences When printed, the sequences may be separated with characters. The choice of characters and their usage varies by scheme. The following list shows hypothetical examples of separation schemes for the same release (the thirteenth third-level revision to the fourth second-level revision to the second first-level revision): A scheme may use the same character between all sequences: 2.4.13, 2/4/13, 2-4-13 A scheme choice of which sequences to separate may be inconsistent, separating some sequences but not others: 2.413 A scheme's choice of characters may be inconsistent within the same identifier: 2.4_13 When a period is used to separate sequences, it does not represent a decimal point, and the sequences do not have positional significance. An identifier of 2.5, for instance, is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision. [edit]Number of sequences There is sometimes a fourth, unpublished number which denotes the software build (as used by Microsoft). Adobe Flash is a notable case where a 4-part version number is indicated publicly, as in 10.1.53.64. Some companies also include the build date. Version numbers may also include letters and other characters, such as Lotus 1-2-3 Release 1a. [edit]Incrementing sequences There are two schools of thought regarding how numeric version numbers are incremented: Most free software packages treat numbers as a continuous stream, therefore a free software or open source product may have version numbers 1.7.0, 1.8.0, 1.8.1, 1.9.0, 1.10.0, 1.11.0, 1.11.1, 1.11.2, etc. An example of such a software package is MediaWiki. However, many programs treat version numbers in another way, generally as decimal numbers, and may have version numbers such as 1.7, 1.8, 1.81, 1.82, 1.9, etc. In software packages using this way of numbering 1.81 is the next minor version after 1.8. Maintenance releases (i.e. bug fixes only) would generally be denoted as 1.81a, 1.81b, etc. The standard GNU version numbering scheme is major.minor.revision, but emacs is a notable example using another scheme where the major number ("1") was dropped and a "user site" revision was added which is always zero in original emacs packages but increased by distributors.[1] Similarly, Debian package numbers are prefixed with an optional "epoch", which is used to allow the versioning scheme to be changed.[2] [edit]Using negative numbers There exist some projects that use negative version numbers. One example is the smalleiffel compiler which started from -1.0 and counted upwards to 0.0.[1] [edit]Degree of compatibility Some projects use the major version number to indicate incompatible releases. Two examples are Apache APR[3] and the FarCry CMS.[4] [edit]Date The Wine project used a date versioning scheme, which uses the year followed by the month followed by the day of the release; for example, "Wine 20040505". Wine is now on a "standard" release track; the most current stable version (as of 2010) is 1.2. Ubuntu Linux uses a similar versioning scheme—Ubuntu 10.10, for example, was released October 2010. When using dates in versioning, for instance, file names, it is common to use the ISO scheme[5]: YYYY-MM-DD, as this is easily string sorted to increasing/decreasing order. The hyphens are sometimes omitted. Microsoft Office build numbers are actually an encoded date.[6] [edit]Year of release Other examples that identify versions by year include Adobe Illustrator 88 and WordPerfect Office 2003. When a date is used to denote version, it is generally for marketing purposes, and an actual version number also exists. For example, Microsoft Windows 2000 Server is internally versioned as Windows NT 5.0 ("NT" being a reference to the original product name). [edit]Alphanumeric codes Examples: Macromedia Flash MX Adobe Photoshop CS2 [edit]TeX TeX has an idiosyncratic version numbering system. Since version 3, updates have been indicated by adding an extra digit at the end, so that the version number asymptotically approaches π; this is a form of unary numbering – the version number is the number of digits. The current version is 3.1415926. This is a reflection of the fact that TeX is now very stable, and only minor updates are anticipated. TeX developer Donald Knuth has stated that the "absolutely final change (to be made after my death)" will be to change the version number to π, at which point all remaining bugs will become permanent features.[7] In a similar way, the version number of METAFONT asymptotically approaches e. [edit]Apple Apple has a formalised version number structure based around the NumVersion struct, which specifies a one- or two-digit major version, a one-digit minor version, a one-digit "bug" (i.e. revision) version, a stage indicator (drawn from the set development/prealpha, alpha, beta and final/release), and a one-byte (i.e. having values in the range 0–255) pre-release version, which is only used at stages prior to final. In writing these version numbers as strings, the convention is to omit any parts after the minor version whose value are zero (with "final" being considered the zero stage), thus writing 1.0.2b12, 1.0.2 (rather than 1.0.2f0), and 1.1 (rather than 1.1.0f0). [edit]Other schemes Some software producers use different schemes to denote releases of their software. For example, the Microsoft Windows operating system was first labelled with standard numerical version numbers (Windows 1.0 through Windows 3.11). Later, Microsoft started using separate version names for marketing purposes, first using years (Windows 95 (4.0), Windows 98 (4.10), Windows 2000 (5.0)), then using alphanumeric codes (Windows Me (4.90), Windows XP (5.1)), then using brand names (Windows Vista (6.0)). With the release of Windows 7 it appears that Microsoft has returned to using numerical version numbers, although the official version number for Windows 7 is 6.1.[8] The Debian project uses a major/minor versioning scheme for releases of its operating system, but uses code names from the movie Toy Story during development to refer to stable, unstable and testing releases. BLAG Linux and GNU features very large version numbers: major releases have numbers such as 50000 and 60000, while minor releases increase the number by 1 (e.g. 50001, 50002). Alpha and beta releases are given decimal version numbers slightly less than the major release number, such as 19999.00071 for alpha 1 of version 20000, and 29999.50000 for beta 2 of version 30000. Starting at 9001 in 2003, the most recent version as of 2011 is 140000.[9][10][11] [edit]Internal version numbers Software may have an "internal" version number which differs from the version number shown in the product name (and which typically follows version numbering rules more consistently). Java SE 5.0, for example, has the internal version number of 1.5.0, and versions of Windows from NT 4 on have continued the standard numerical versions internally: Windows 2000 is NT 5.0, XP is Windows NT 5.1,Windows Server 2003 is NT 5.2, Vista is NT 6.0 and 7 is NT 6.1. Note, however, that Windows NT is only on its third major revision, as its first release was numbered 3.1 (to match the then-current Windows release number). [edit]Pre-release versions In conjunction with the various versioning schemes listed above, a system for denoting prerelease versions is generally used, as the program makes its way through the stages of the software release life cycle. Programs that are in an early stage are often called "alpha" software, after the first letter in the Greek alphabet. After they mature but are not yet ready for release, they may be called "beta" software, after the second letter in the Greek alphabet. Generally alpha software is tested by developers only, while beta software is distributed for community testing. Alpha- and beta-version software is often given numerical versions less than 1 (such as 0.9), to suggest their approach toward a final "1.0" release. However, if the pre-release version is for an existing software package (e.g. version 2.5), then an "a" or "alpha" may be appended to the version number. So the alpha version of the 2.5 release might be identified as 2.5a or 2.5.a. Software packages which are soon to be released as a particular version may carry that version tag followed by "rc-#", indicating the number of the release candidate. When the version is actually released, the "rc" tag disappears. This can apparently cause trouble for some package managers, though. The Rivendell radio broadcast automation package, for example, is about[when?] to have to release its first full production release package... v1.0.1, because if they called it v1.0.0, RPM would refuse to install it, because the algorithm sorts "1.0.0" lower than "1.0.0rc2" (which is because version comparison algorithms are generally language-agnostic and thus don't know the meaning of "rc"). [edit]Modifications to the numeric system This section does not cite any references or sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (September 2010) [edit]Odd-numbered versions for development releases Between the 1.0 and the 2.6.x series, the Linux kernel used odd minor version numbers to denote development releases and even minor version numbers to denote stable releases; see Linux kernel: Version numbering. For example, Linux 2.3 was a development family of the second major design of the Linux kernel, and Linux 2.4 was the stable release family that Linux 2.3 matured into. After the minor version number in the Linux kernel is the release number, in ascending order; for example, Linux 2.4.0 → Linux 2.4.22. Since the 2004 release of the 2.6 kernel, Linux no longer uses this system, and has a much shorter release cycle, instead now simply incrementing the third number, using a fourth number as necessary. The same odd-even system is used by some other software with long release cycles, such as GNOME. [edit]Apple Apple had their own twist on this habit during the era of the classic MacOS: although there were minor releases, they rarely went beyond 1, and when they did, they twice jumped straight to 5, suggesting a change of magnitude intermediate between a major and minor release (thus, 8.5 really means 'eight and a half', and 8.6 is 'eight and a half point one'). The complete sequence of versions (neglecting revision releases) is 1.0, 1.1, 2.0, 2.1, 3.0, 3.2 (skipping 3.1), 4.0, 4.1, 5.0, 5.1, 6.0, 7.0, 7.1, 7.5, 7.6, 8.0, 8.1, 8.5, 8.6, 9.0, 9.1, 9.2. Mac OS X has departed from this trend, having gone more conventionally from 10.0 to 10.7, one minor release at a time. However, note that the 10.4.10 update does not follow the previously-indicated approach of having a "one- or two-digit major version, a one-digit minor version, a one-digit 'bug' (i.e. revision) version…". The bug-fix value is not a decimal indicator, but is an incremental whole value; while it is not expected, there would be nothing preventing a distant-future "X.4.321" release. [edit]Political and cultural significance of version numbers [edit]Version 1.0 as a milestone Proprietary software developers often start at version 1 for the first release of a program and increment the major version number with each rewrite. This can mean that a program can reach version 3 within a few months of development, before it is considered stable or reliable. In contrast to this, the free-software community tends to use version 1.0 as a major milestone, indicating that the software is "complete", that it has all major features, and is considered reliable enough for general release. In this scheme, the version number slowly approaches 1.0 as more and more bugs are fixed in preparation for the 1.0 release. The developers of MAME do not intend to release a version 1.0 of their emulator program.[citation needed] The argument is that it will never be truly "finished" because there will always be more arcade games. Version 0.99 was simply followed by version 0.100 (minor version 100 > 99). In a similar fashion Xfire 1.99 was followed by 1.100. After over 8 years of development, eMule just recently reached version 0.50a. [edit]To describe program history Winamp released an entirely different architecture for version 3 of the program. Due to lack of backwards compatibility with plugins and other resources from the major version 2, a new version was issued that was compatible with both version 2 and 3. The new version was set to 5 (2+3), skipping version 4. The developers also humorously joked that they skipped version 4 because "nobody wants to see a Winamp 4 skin", referencing the foreskin of a penis.[12] A similar thing happened with UnixWare 7, which was the combination of UnixWare 2 and OpenServer 5. [edit]Keeping up with competitors There is a common habit in the proprietary software industry to make major jumps in numeric major or minor version numbers for reasons which do not seem (to many members of the program's audience) to merit the "marketing" version numbers. This can be seen in several Microsoft and America Online products, as well as Sun Solaris and Java Virtual Machine numbering, SCO Unix version numbers, and Corel WordPerfect, as well as the filePro DB/RAD programming package, which went from 2.0 to 3.0 to 4.0 to 4.1 to 4.5 to 4.8 to 5.0, and is about to go to 5.6, with no intervening release. A slightly different version can be seen in AOL's PC client software, which tends to have only major releases (5.0, 6.0, 7.0, etc.). Likewise, Microsoft Access jumped from version 2.0 to version 7.0, to match the version number of Microsoft Word. Microsoft has also been the target of 'catch-up' versioning, with the Netscape browser skipping version 5 to 6, in line with Microsoft's Internet Explorer, but also because the Mozilla application suite inherited version 5 in its user agent string during pre-1.0 development and Netscape 6.x was built upon Mozilla's code base. Sun's Java has at times had a hybrid system, where the actual version number has always been 1.x but three times has been marketed by reference only to the x: JDK 1.0.3 JDK 1.1.2 through 1.1.8 J2SE 1.2.0 ("Java 2") through 1.4.2 Java 1.5.0 ("Java 5") Java 1.6.0 ("Java 6") Sun also dropped the first digit for Solaris, where Solaris 2.8 (or 2.9) is referred to as Solaris 8 (or 9) in marketing materials. Another example of keeping up with competitors is when Slackware Linux jumped from version 4 to version 7 in 1999.[13] A similar jump has recently taken place with the Asterisk open-source PBX construction kit, whose project leads announced that the current version 1.8.x will soon be followed by version 10, which will be followed by version 11, and then 12, and so forth, presumably dropping the other components (and their useful semantic significance) entirely. This change, though, does not seem to be motivated by 'keeping up with competition'. [1] [edit]Superstition The Office 2007 release of Microsoft Office has an internal version number of 12. The next version Office 2010 has an internal version of 14, due to superstitions surrounding the number 13.[14] Corel's WordPerfect Office, version 13 is marketed as "X3" (Roman number 10 and "3"). The procedure has continued into the next version, X4. The same has happened with Corel's Graphic Suite (i.e. CorelDRAW, Corel Photo-Paint) as well as its Video editing software "Video Studio". Nokia decided to jump directly from S60 3rd Edition to S60 5th Edition, skipping the fourth edition due to the tetraphobia of their Asian customers. ABBYY Lingvo Dictionary uses numbering 12, x3 (14), x5 (15). [edit]Geek culture The S.u.S.E Linux distribution started at version 4.2, to reference 42, "the answer to life, the universe and everything" mentioned in Douglas Adams' The Hitchhiker's Guide To The Galaxy. The current Slackware Linux distribution is version 13.37, referencing leet. [edit]Overcoming perceived marketing difficulties In the mid-1990s, the rapidly growing CMMS, Maximo, moved from Maximo Series 3 directly to Series 5, skipping Series 4 due to that number's perceived marketing difficulties in the Chinese market, where the number 4 is associated with “death” (see tetraphobia). This did not, however, stop Maximo Series 5 version 4.0 being released. (It should be noted the "Series" versioning has since been dropped, effectively resetting version numbers after Series 5 version 1.0's release.) [edit]Significance in software engineering Version numbers are used in practical terms by the consumer, or client, by being able to compare their copy of the software product against another copy, such as the newest version released by the developer. For the programmer team or company, versioning is often used on a file-by-file basis, where individual parts or sectors of the software code are compared and contrasted with newer or older revisions, often in a collaborative version control system. There is no absolute and definite software version schema; it can often vary from software genre to genre, and is very commonly based on the programmer's personal preference. [edit]Significance in technical support Version numbers allow people providing support to ascertain exactly what code a user is running, so that they know what bugs might affect a problem, and the like. This occurs when a program has a substantial user community, especially when that community is large enough that the people providing technical support are not the people who wrote the code. [edit]Version numbers for files and documents Some computer file systems, such as the OpenVMS Filesystem, also keep versions for files. Versioning amongst documents is relatively similar to the routine used with computers and software engineering, where with each small change in the structure, contents, or conditions, the version number is incremented by 1, or a smaller or larger value, again depending on the personal preference of the author and the size or importance of changes made. [edit]Version number ordering systems Version numbers very quickly evolve from simple integers (1, 2, ...) to rational numbers (2.08, 2.09, 2.10) and then to non-numeric "numbers" such as 4:3.4.3-2. These complex version numbers are therefore better treated as character strings. Operating systems that include package management facilities (such as all non-trivial Linux or BSD distributions) will use a distribution-specific algorithm for comparing version numbers of different software packages. For example, the ordering algorithms of Red Hat and derived distributions differ to those of the Debian-like distributions. As an example of surprising version number ordering implementation behavior, in Debian, leading zeroes are ignored in chunks, so that 5.0005 and 5.5 are considered as equal, and 5.5<5.0006. This can confuse users; string-matching tools may fail to find a given version number; and this can cause subtle bugs in package management if the programmers use string-indexed data structures such as version-number indexed hash tables. In order to ease sorting, some software packages will represent each component of the major.minor.release scheme with a fixed width. Perl represents its version numbers as a floating-point number, for example, Perl's 5.8.7 release can also be represented as 5.008007. This allows a theoretical version of 5.8.10 to be represented as 5.008010. Other software packages will pack each segment into a fixed bit width, for example, 5.8.7 could be represented in 24 bits: ( 5 << 16 | 8 << 8 | 7; hexadecimal: 050807; for version 12.34.56 in hexadecimal: 0C2238). The floating-point scheme will break down if any segment of the version number exceeds 1,000; a packed-binary scheme employing 8 bits apiece after 256. [edit]Use in other media Software-style version numbers can be found in other media. In some cases the use is a direct analogy (for example, Dungeons & Dragons 3.5, where the rules were revised from the third edition, but not so much as to be considered the fourth), but more often it's used to play on an association with high technology and doesn't literally indicate a 'version' (e.g., Tron 2.0, a video game followup to the film Tron, or the television show The IT Crowd, which refers to the second season as Version 2.0). A particularly notable usage is Web 2.0, referring to the World Wide Web as used in collaborative projects such as wikis and social networking websites. Version Numbering Conventions The following article discusses the conventions related to version numbering of the various artifacts produced by the OpenXData project. Much of this is a rough summary of the version numbering system used by most maven-based projects and other Apache Software Foundation projects. However, due to some restrictions with the JavaME specification's notion of version numbers, there is some deviation from this convention. The Basic Version Format The basic makeup of a version number is the following: Major.Minor.Incremental Examples of such numbers are: 1.0, 1.0.0, 1.1, 1.1.2, 1.2, etc. The major number is commonly changed when there is a major change in the software. Users can expect behavior that is wildly different or potentially incompatible with releases sharing other major version numbers. The minor number is often used when changes are augmentation of prior major.minor version of the software. Changes that prompt incrementing the minor version number are typically additional features. Users should not expect changes that intentionally break prior functionality. Lastly, the incremental number is normally used to indicate a bug-fix or maintenance release. This is typically used when bugs are found in existing releases of the software, and a maintenance release is made to fix the behavior. User should not expect new features or additional incompatibilities when moving from software differing only in the incremental identifier. It is common to omit the incremental number until it is needed. For instance, rather than saying 1.0.0 (which is perfectly legitimate), you commonly see 1.0. Rarely, will you see omission of the minor number. Additional Version Component: Qualifiers This basic format described above accounts for most of the version numbers you'll see. However, there is an additional component that sometimes comes in handy. It's called the qualifier and included in the numbering scheme it becomes: Major.Minor.Incremental-Qualifier Examples of such numbers are: 1.0.0-beta-1, 1.2-alpha-2, etc. Unlike the major, minor and incremental numbers, which are compared based on their numeric values to determine the proper version ordering, the qualifier is compared textually. This means 1.0-alpha comes before 1.0-beta because the qualifier 'alpha' sorts before 'beta' alphabetically. Again, this is different than the 1.0 portion of the number, it is compared numerically for each component value (major, minor, incremental). The qualifier can be used to denote milestones releases, but generally, one can go without using them. Snapshot Versions A snapshot version is a version number that ends with '-SNAPSHOT'. It denotes that the the project or dependency is under active development. When installing or deploying artifacts from projects specifying snapshot versions, the installed or deployed artifacts will end up with special version numbers. These numbers enable determination of the last built snapshot. Projects that declare dependencies with snapshot versions will get periodic updates for that artifact (the frequency is configurable). This enables independent projects to integrate continuously without requiring them to share source code. Using this method, the dependent project can track with the dependency as changes are made. When it is determined that the projects are to be released, the project providing the dependency is released. The dependent project changes its declaration to the base version by removing the -SNAPSHOT from the version. So, 1.0-SNAPSHOT would turn into 1.0. The dependent project is verified to work properly with the release and then it, in turn, can be released. It is important to note that release versions can never be a snapshot. Additionally, release versions should not depend on snapshots. Snapshots change every time the project is built. Because they change, building projects with snapshot dependencies can not be guaranteed to produce the same result on subsequent builds (even without code changes). Since the purpose of a release is capturing and preserving known configurations, non-repeatable builds are should be avoided. The mavenrelease-plugin provides checks to ensure that your project meets these standards. J2ME or JavaME Issues Unfortunately, unlike Maven, the JavaME specification doesn't allow for open version formats. This means that using unorthodox version numbers is not allowed. The MIDP specification states the following about version numbering of applications: Version numbers have the format Major.Minor[.Micro] (X.X[.X]), where the .Micro portion MAY be omitted. (If the .Micro portion is not omitted, then it defaults to zero). In addition, each portion of the version number is allowed a maximum of two decimal digits (i.e., 0-99). ... For example, 1.0.0 can be used to specify the first version of a MIDlet suite. For each portion of the version number, leading zeros are not significant. For example, 08 is equivalent to 8. Also, 1.0 is equivalent to 1.0.0. However, 1.1 is equivalent to 1.1.0, and not 1.0.1. A missing MIDlet-Version tag is assumed to be 0.0.0, which means that any non-zero version number is considered as a newer version of the MIDlet suite. You may notice that convention is very similar to the one described above. However, without the ability to use a snapshot designation, there is no way of determining whether an artifact built during active development is final or an intermediate build made during active development. This may seem like an insignificant detail, but it means you could confuse two applications as being from the same source code and they could be completely different! This can be counteracted by introducing some designation of the revision it comes from, but it introduces a dependency on the SCM system (like Subversion) to get the revision number. "Versioning" redirects here. For other uses, see Version (disambiguation). Software versioning is the process of assigning either unique version names or uniqueversion numbers to unique states of computer software. Within a given version number category (major, minor), these numbers are generally assigned in increasing order and correspond to new developments in the software. At a fine-grained level, revision control is often used for keeping track of incrementally different versions of electronic information, whether or not this information is actually computer software. Contents 1 Schemes 1.1 Sequence-based identifiers 1.1.1 Change significance 1.1.2 Designating development stage 1.1.3 Separating sequences 1.1.4 Number of sequences 1.1.5 Incrementing sequences 1.1.6 Using negative numbers 1.1.7 Degree of compatibility 1.2 Date 1.3 Year of release 1.4 Alphanumeric codes 1.5 TeX 1.6 Apple 1.7 Other schemes 2 Internal version numbers 3 Pre-release versions 4 Modifications to the numeric system 4.1 Odd-numbered versions for development releases 4.2 Apple 5 Political and cultural significance of version numbers 5.1 Version 1.0 as a milestone 5.2 To describe program history 5.3 Keeping up with competitors 5.4 Superstition 5.5 Popular culture 6 Overcoming perceived marketing difficulties 7 Significance in software engineering 8 Significance in technical support 9 Version numbers for files and documents 10 Version number ordering systems 11 Use in other media 12 See also 13 References 14 External links Schemes A variety of version numbering schemes have been created to keep track of different versions of a piece of software. The ubiquity of computers has also led to these schemes being used in contexts outside computing . Sequence-based identifiers In sequence-based software versioning schemes, each software release is assigned a unique identifier that consists of one or more sequences of numbers or letters. This is the extent of the commonality, however, schemes vary widely in areas such as the quantity of sequences, the attribution of meaning to individual sequences, and the means of incrementing the sequences. Change significance In some schemes, sequence-based identifiers are used to convey the significance of changes between releases: changes are classified by significance level, and the decision of which sequence to change between releases is based on the significance of the changes from the previous release, whereby the first sequence is changed for the most significant changes, and changes to sequences after the first represent changes of decreasing significance. For instance, in a scheme that uses a four-sequence identifier, the first sequence may be incremented only when the code is completely rewritten, while a change to the user interface or the documentation may only warrant a change to the fourth sequence. This practice permits users (or potential adopters) to evaluate how much real-world testing a given software release has undergone. If changes are made between, say, 1.3rc4 and the production release of 1.3, then that release, which asserts that it has had a production-grade level of testing in the real world, in fact contains changes which have not necessarily been tested in the real world at all.This approach commonly permits the third level of numbering ("change"), but does not apply this level of rigor to changes in that number: 1.3.1, 1.3.2, 1.3.3, 1.3.4... 1.4b1, etc. In principle, in subsequent releases, the major number is increased when there are significant jumps in functionality, the minor number is incremented when only minor features or significant fixes have been added, and the revision number is incremented when minor bugs are fixed. A typical product might use the numbers 0.9 (for beta software), 0.9.1, 0.9.2, 0.9.3, 1.0, 1.0.1, 1.0.2, 1.1, 1.1.1, 2.0, 2.0.1, 2.0.2, 2.1, 2.1.1, 2.1.2, 2.2, etc. Developers have at times jumped (for example) from version 5.0 to 5.5 to indicate that significant features have been added, but not enough to warrant incrementing the major version number, though this is improper. A different approach is to use the major and minor numbers, along with an alphanumeric string denoting the release type, i.e. "alpha", "beta" or "release candidate". A release train using this approach might look like 0.5, 0.6, 0.7, 0.8, 0.9 == 1.0b1, 1.0b2 (with some fixes), 1.0b3 (with more fixes) == 1.0rc1 (which, if it is stable enough) == 1.0. If 1.0rc1 turns out to have bugs which must be fixed, it turns into 1.0rc2, and so on. The important characteristic of this approach is that the first version of a given level (beta, RC, production) must be identical to the last version of the release below it: you cannot make any changes at all from the last beta to the first RC, or from the last RC to production. If you do, you must roll out another release at that lower level. However, since version numbers are human-generated, not computer-generated, there is nothing that prevents arbitrary changes that violate such guidelines: for example, the first sequence could be incremented between versions that differ by not even a single line of code, to give the (false) impression that very significant changes were made. Other schemes impart meaning on individual sequences: major.minor[.build[.revision]] or major.minor[.maintenance[.build]] Again, in these examples, the definition of what constitutes a "major" as opposed to a "minor" change is entirely arbitrary and up to the author, as is what defines a "build", or how a "revision" differs from a "minor" change. In most proprietary software, the first released version of a software product has version 1. Designating development stage Some schemes use a zero in the first sequence to designate alpha or beta status for releases that are not stable enough for general or practical deployment and are intended for testing or internal use only. It can be used in the third position: 0 for alpha (status) 1 for beta (status) 2 for release candidate 3 for (public) release For instance: 1.2.0.1 instead of 1.2-a 1.2.1.2 instead of 1.2-b2 (beta with some bug fixes) 1.2.2.3 instead of 1.2-rc (release candidate) 1.2.3.0 instead of 1.2-r (commercial distribution) 1.2.3.5 instead of 1.2-r5 (commercial distribution with many bug fixes) Separating sequences When printed, the sequences may be separated with characters. The choice of characters and their usage varies by scheme. The following list shows hypothetical examples of separation schemes for the same release (the thirteenth third-level revision to the fourth second-level revision to the second first-level revision): A scheme may use the same character between all sequences: 2.4.13, 2/4/13, 2-4- 13 A scheme choice of which sequences to separate may be inconsistent, separating some sequences but not others: 2.413 A scheme's choice of characters may be inconsistent within the same identifier: 2.4_13 When a period is used to separate sequences, it does not represent a decimal point, and the sequences do not have positional significance. An identifier of 2.5, for instance, is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision. Number of sequences There is sometimes a fourth, unpublished number which denotes the software build (as used byMicrosoft). Adobe Flash is a notable case where a 4-part version number is indicated publicly, as in 10.1.53.64. Some companies also include the build date. Version numbers may also include letters and other characters, such as Lotus 1-2-3 Release 1a. Incrementing sequences There are two schools of thought regarding how numeric version numbers are incremented: Mostfree software packages treat numbers as a continuous stream, therefore a free software or open source product may have version numbers 1.7.0, 1.8.0, 1.8.1, 1.9.0, 1.10.0, 1.11.0, 1.11.1, 1.11.2, etc. An example of such a software package is MediaWiki. However, many programs treat version numbers in another way, generally as decimal numbers, and may have version numbers such as 1.7, 1.8, 1.81, 1.82, 1.9, etc. In software packages using this way of numbering 1.81 is the next minor version after 1.8. Maintenance releases (i.e. bug fixes only) would generally be denoted as 1.81a, 1.81b, etc. The standard GNU version numbering scheme is major.minor.revision, but emacs is a notable example using another scheme where the major number ("1") was dropped and a "user site" revision was added which is always zero in original emacs packages but increased by distributors.[1] Similarly, Debian package numbers are prefixed with an optional "epoch", which is used to allow the versioning scheme to be changed.[2] Using negative numbers There exist some projects that use negative version numbers. One example is the smalleiffelcompiler which started from -1.0 and counted upwards to 0.0.[1] Degree of compatibility Some projects use the major version number to indicate incompatible releases. Two examples are Apache APR[3] and the FarCry CMS.[4] Date The Wine project used a date versioning scheme, which uses the year followed by the month followed by the day of the release; for example, "Wine 20040505". Wine is now on a "standard" release track; the most current stable version (as of 2010) is 1.2. Ubuntu Linux uses a similar versioning scheme—Ubuntu 10.04, for example, was released April 2010. When using dates in versioning, for instance, file names, it is common to use the ISO scheme[5]: YYYY-MM-DD, as this is easily string sorted to increasing/decreasing order. The hyphens are sometimes omitted. Microsoft Office build numbers are actually an encoded date.[6] Year of release Other examples that identify versions by year include Adobe Illustrator 88 and WordPerfect Office2003. When a date is used to denote version, it is generally for marketing purposes, and an actual version number also exists. For example, Microsoft Windows 2000 Server is internally versioned as Windows NT 5.0 ("NT" being a reference to the original product name). Alphanumeric codes Examples: Macromedia Flash MX Adobe Photoshop CS2 TeX TeX has an idiosyncratic version numbering system. Since version 3, updates have been indicated by adding an extra digit at the end, so that the version number asymptotically approaches π; this is a form of unary numbering – the version number is the number of digits. The current version is 3.1415926. This is a reflection of the fact that TeX is now very stable, and only minor updates are anticipated. TeX developer Donald Knuth has stated that the "absolutely final change (to be made after my death)" will be to change the version number to π, at which point all remaining bugs will become permanent features.[7] In a similar way, the version number of METAFONT asymptotically approaches e. Apple Apple has a formalised version number structure based around the NumVersion struct, which specifies a one- or two-digit major version, a one-digit minor version, a one-digit "bug" (i.e. revision) version, a stage indicator (drawn from the set development/prealpha, alpha, beta and final/release), and a one-byte (i.e. having values in the range 0–255) pre-release version, which is only used at stages prior to final. In writing these version numbers as strings, the convention is to omit any parts after the minor version whose value are zero (with "final" being considered the zero stage), thus writing 1.0.2b12, 1.0.2 (rather than 1.0.2f0), and 1.1 (rather than 1.1.0f0). Other schemes Some software producers use different schemes to denote releases of their software. For example, the Microsoft Windows operating system was first labelled with standard numerical version numbers (Windows 1.0 through Windows 3.11). Later, Microsoft started using separate version names for marketing purposes, first using years (Windows 95 (4.0), Windows 98 (4.10),Windows 2000 (5.0)), then using alphanumeric codes (Windows Me (4.90), Windows XP (5.1)), then using brand names (Windows Vista (6.0)). With the release of Windows 7 it appears that Microsoft has returned to using numerical version numbers, although the official version number for Windows 7 is 6.1.[8] The Debian project uses a major/minor versioning scheme for releases of its operating system, but uses code names from the movie Toy Story during development to refer to stable, unstable and testing releases. Internal version numbers Software may have an "internal" version number which differs from the version number shown in the product name (and which typically follows version numbering rules more consistently). Java SE5.0, for example, has the internal version number of 1.5.0, and versions of Windows from NT 4 on have continued the standard numerical versions internally: Windows 2000 is NT 5.0, XP is Windows NT 5.1, Windows Server 2003 is NT 5.2, Vista is NT 6.0 and 7 is NT 6.1. Note, however, that Windows NT is only on its third major revision, as its first release was numbered 3.1 (to match the then-current Windows release number). Pre-release versions In conjunction with the various versioning schemes listed above, a system for denoting prerelease versions is generally used, as the program makes its way through the stages of the software release life cycle. Programs that are in an early stage are often called "alpha" software, after the first letter in the Greek alphabet. After they mature but are not yet ready for release, they may be called "beta" software, after the second letter in the Greek alphabet. Generally alpha software is tested by developers only, while beta software is distributed for community testing. Alpha- and beta-version software is often given numerical versions less than 1 (such as 0.9), to suggest their approach toward a public "1.0" release. However, if the pre-release version is for an existing software package (e.g. version 2.5), then an "a" or "alpha" may be appended to the version number. So the alpha version of the 2.5 release might be identified as 2.5a or 2.5.a. Software packages which are soon to be released as a particular version may carry that version tag followed by "rc-#", indicating the number of the release candidate. When the version is actually released, the "rc" tag disappears. This can apparently cause trouble for some package managers, though. The Rivendell radio automation package, for example, is about to have to release its first full production release package... v1.0.1, because if they called it v1.0.0, RPM would refuse to install it, thinking that version is *older* than "1.0.0rc2". Modifications to the numeric system Odd-numbered versions for development releases Between the 1.0 and the 2.6.x series, the Linux kernel used odd minor version numbers to denote development releases and even minor version numbers to denote stable releases; see Linux kernel: Version numbering. For example, Linux 2.3 was a development family of the second major design of the Linux kernel, and Linux 2.4 was the stable release family that Linux 2.3 matured into. After the minor version number in the Linux kernel is the release number, in ascending order; for example, Linux 2.4.0 → Linux 2.4.22. Since the 2004 release of the 2.6 kernel, Linux no longer uses this system, and has a much shorter release cycle, instead now simply incrementing the third number, using a fourth number as necessary. The same odd-even system is used by some other software with long release cycles, such asGNOME. Apple Apple had their own twist on this habit during the era of the classic MacOS: although there were minor releases, they rarely went beyond 1, and when they did, they twice jumped straight to 5, suggesting a change of magnitude intermediate between a major and minor release (thus, 8.5 really means 'eight and a half', and 8.6 is 'eight and a half point one'). The complete sequence of versions (neglecting revision releases) is 1.0, 1.1, 2.0, 2.1, 3.0, 3.2 (skipping 3.1), 4.0, 4.1, 5.0, 5.1, 6.0, 7.0, 7.1, 7.5, 7.6, 8.0, 8.1, 8.5, 8.6, 9.0, 9.1, 9.2. Mac OS X has departed from this trend, having gone more conventionally from 10.0 to 10.6, one minor release at a time. However, note that the 10.4.10 update does not follow the previously-indicated approach of having a "one- or two-digit major version, a one-digit minor version, a one-digit 'bug' (i.e. revision) version…". The bug-fix value is not a decimal indicator, but is an incremental whole value; while it is not expected, there would be nothing preventing a distant-future "X.4.321" release. Political and cultural significance of version numbers Version 1.0 as a milestone Proprietary software developers often start at version 1 for the first release of a program and increment the major version number with each rewrite. This can mean that a program can reach version 3 within a few months of development, before it is considered stable or reliable. In contrast to this, the free-software community tends to use version 1.0 as a major milestone, indicating that the software is "complete", that it has all major features, and is considered reliable enough for general release. In this scheme, the version number slowly approaches 1.0 as more and more bugs are fixed in preparation for the 1.0 release. The developers of MAME do not intend to release a version 1.0 of their emulator program. The argument is that it will never be truly "finished" because there will always be more arcade games. Version 0.99 was simply followed by version 0.100 (minor version 100 > 99). In a similar fashion Xfire 1.99 was followed by 1.100. After 6 years of development,eMule has not even reached version 0.50 yet. To describe program history Winamp released an entirely different architecture for version 3 of the program. Due to lack ofbackwards compatibility with plugins and other resources from the major version 2, a new version was issued that was compatible with both version 2 and 3. The new version was set to 5 (2+3), skipping version 4. The developers also humorously joked that they skipped version 4 because "nobody wants to see a Winamp 4 skin", referencing the foreskin of a penis.[9] A similar thing happened with UnixWare 7, which was the combination of UnixWare 2 andOpenServer 5. Keeping up with competitors There is a common habit in the proprietary software industry (usually, though not always, spurned by free software programmers) to make major jumps in numeric major or minor version numbers for reasons which do not seem (to many members of the program's audience) to merit the "marketing" version numbers. This can be seen in several Microsoft and America Online products, as well as Sun Solaris and Java Virtual Machine numbering, SCO Unix version numbers, and Corel Word Perfect, as well as the filePro DB/RAD programming package, which went from 2.0 to 3.0 to 4.0 to 4.1 to 4.5 to 4.8 to 5.0, and is about to go to 5.6, with no intervening release. A slightly different version can be seen in AOL's PC client software, which tends to have only major releases (5.0, 6.0, 7.0, etc.). Likewise,Microsoft Access jumped from version 2.0 to version 7.0, to match the version number of Microsoft Word. Microsoft has also been the target of 'catch-up' versioning, with the Netscape browser skipping version 5 to 6, in line with Microsoft's Internet Explorer, but also because the Mozilla application suite inherited version 5 in its user agent string during pre-1.0 development and Netscape 6.x was built upon Mozilla's code base. Sun's Java has at times had a hybrid system, where the actual version number has always been 1.x but three times has been marketed by reference only to the x: JDK 1.0.3 JDK 1.1.2 through 1.1.8 J2SE 1.2.0 ("Java 2") through 1.4.2 Java 1.5.0 ("Java 5") Java 1.6.0 ("Java 6") Sun also dropped the first digit for Solaris, where Solaris 2.8 (or 2.9) is referred to as Solaris 8 (or 9) in marketing materials. Another example of keeping up with competitors is when Slackware Linux jumped from version 4 to version 7 in 1999.[10] Superstition The Office 2007 release of Microsoft Office has an internal version number of 12. The next version Office 2010 has an internal version of 14, due to superstitions surroundingthe number 13.[11] Corel's WordPerfect Office, version 13 is marketed as "X3" (Roman number 10 and "3"). The procedure has continued into the next version, X4. The same has happened with Corel's Graphic Suite (i.e. CorelDRAW, Corel Photo-Paint) as well as its Video editing software "Video Studio". Popular culture The S.u.S.E Linux distribution started at version 4.2, to reference "the answer to life, the universe and everything" mentioned in The Hitchhiker's Guide To The Galaxy. Overcoming perceived marketing difficulties In the mid-1990s, the rapidly growing CMMS, Maximo, moved from Maximo Series 3 directly to Series 5, skipping Series 4 due to that number's perceived marketing difficulties in the Chinese market, where pronunciation of the number 4 (四) in Chinese rhymes with “death” or “failure”. This did not, however, stop Maximo Series 5 version 4.0 being released. (It should be noted the "Series" versioning has since been dropped, effectively resetting version numbers after Series 5 version 1.0's release.) Significance in software engineering Version numbers are used in practical terms by the consumer, or client, by being able to compare their copy of the software product against another copy, such as the newest version released by the developer. For the programmer team or company, versioning is often used on a file-by-file basis, where individual parts or sectors of the software code are compared and contrasted with newer or older revisions, often in a collaborative version control system. There is no absolute and definite software version schema; it can often vary from software genre to genre, and is very commonly based on the programmer's personal preference. Significance in technical support Version numbers allow people providing support to ascertain exactly what code a user is running, so that they know what bugs might affect a problem, and the like. This occurs when a program has a substantial user community, especially when that community is large enough that the people providing technical support are not the people who wrote the code. Version numbers for files and documents Some computer file systems, such as the OpenVMS Filesystem, also keep versions for files. Versioning amongst documents is relatively similar to the routine used with computers and software engineering, where with each small change in the structure, contents, or conditions, the version number is incremented by 1, or a smaller or larger value, again depending on the personal preference of the author and the size or importance of changes made. Version number ordering systems Version numbers very quickly evolve from simple integers (1, 2, ...) to rational numbers (2.08, 2.09, 2.10) and then to non-numeric "numbers" such as 4:3.4.3-2. These complex version numbers are therefore better treated as character strings. Operating systems that include package management facilities (such as all non-trivial Linux or BSD distributions) will use a distribution-specific algorithm for comparing version numbers of different software packages. For example, the ordering algorithms of Red Hat and derived distributions differ to those of the Debian-like distributions. As an example of surprising version number ordering implementation behavior, in Debian, leading zeroes are ignored in chunks, so that 5.0005 and 5.5 are considered as equal, and 5.5<5.0006. This can confuse users; string-matching tools may fail to find a given version number; and this can cause subtle bugs in package management if the programmers use string-indexed data structures such as version-number indexed hash tables. In order to ease sorting, some software packages will represent each component of themajor.minor.release scheme with a fixed width. Perl represents its version numbers as a floating-point number, for example, Perl's 5.8.7 release can also be represented as 5.008007. This allows a theoretical version of 5.8.10 to be represented as 5.008010. Other software packages will pack each segment into a fixed bit width, for example, 5.8.7 could be represented in 24 bits: ( 5 << 16 |8 << 8 | 7; hexadecimal: 050807; for version 12.34.56 in hexadecimal: 0C2238). The floating-point scheme will break down if any segment of the version number exceeds 1,000; a packed-binary scheme employing 8 bits apiece after 256. Use in other media Software-style version numbers may be used in other media, playing on associations of version numbers with high technology. Examples include: The X-Men Two-Disc Special Edition DVD was released as X-Men 1.5. Live Free or Die Hard was released as Die Hard 4.0 outside North America. The title of the computer game Tron 2.0 implies that the motion picture (or previous arcade games) Tron was version 1.0. The rock band Garbage's second album is entitled Version 2.0. David Gerrold's revised version of his novel When HARLIE Was One was subtitledRelease 2.0. The re-issue of the Mexican pop band Belanova's second album Dulce Beat was released as Dulce Beat 2.0, which includes a different version of Te Quedas o Te Vas and a second CD with acoustic versions, re-mixes and two music videos. Wizards of the Coast released Dungeons & Dragons 3.5 to demonstrate that significant rules changes had occurred, but not so significant that a new edition number was warranted. This has caused many to retroactively refer to the "Black Books" of 2nd Edition Advanced Dungeons & Dragons as version 2.5. Web 2.0 referring to the World Wide Web as used in collaborative projects such as wikisand social networking websites The Net 2.0 is the name of a sequel to the movie The Net The first series of The IT Crowd was Version 1.0; the second series was Version 2.0. The independent record label Transmission set by the progressive rock band Porcupine Tree release their records imitating the software versioning to identify them. The original name selected by Kraft for a new food spread containing Vegemite and cream cheese was iSnack 2.0 Fan-reedited versions of the fourth and fifth Star Wars films were called Star Wars I.I: the Phantom Edit, and Star Wars II.I: Attack of the Phantom How to Find Out What Is on Your Computer Updated 19. September 2011 - 6:32 by v.laurie I often help people with computer problems and very frequently it turns out that they know very little about what is actually on their computer. If you want to know things such as how much RAM you have, what hardware and software are installed, and many other interesting details about your PC, you can use a built-in Windows utility called System Information. Here is how to access it. Windows XP On most XP systems System Information can be found in Start-All ProgramsAccessories-System Tools. Another route is: 1. 2. 3. 4. Open the Start menu Click “Run” Enter “msinfo32" (without quotes) Click “OK” Windows Vista/7 1. Open the Start menu 2. Enter “msinfo32” (without quotes) in the box labeled "Start search" (Vista) or "Search programs and files" (Windows 7) 3. Click “msinfo32” or “msinfo32.exe” at the top of the menu Open System Information from the command line Another way to access this utility is to open the command line and enter "start msinfo32" (without quotes). This works in Windows XP, Vista, and 7. How to use System Information System Information opens in a two-pane view. The left pane contains the entries “System Summary”, “Hardware Resources”, “Components”, and “Software Environment”. To see the details of any category except “System Summary”, click the + by its name to expand the list and then click a desired sub-category. The right pane will show the details. System information freeware There are also a number of free programs that provide considerably more details than the built-in applicationSystem Information. Such helpful additional information as license keys for software are given. My own favorite is Belarc Advisor, which works on all current Windows versions, both 32-bit and 64-bit. However, when I installed it on Windows 7, I did get the message, “This software may not have installed correctly”, but there was not actually any problem. I have also used System Information for Windows, which comes in a portable version. It works on Windows XP on up. Added later: the installer for this software is now being bundled with Open Candy. See Gizmo's articleabout Open Candy. Go to the link Best Free System Information Utility for more details on this type of application. Get your own favorite tip published! Know a neat tech tip or trick? Then why not have it published here and receive full credit? Click here to tell us your tip. Software audit can mean: a software licensing audit, where a user of software is audited for licence compliance software quality assurance, where a piece of software is audited for quality a software audit review, where a group of people external to a software development organisation examines a software product a physical configuration audit a functional configuration audit For a summary of software audits as defined in IEEE Std. 1028-1997, IEEE Standard on Software Reviews, see software audit review Software licensing audit From Wikipedia, the free encyclopedia This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (July 2007) Software Asset Management is an organization process, which is outlined in ISO/IEC 19770-1. It is also now embraced within # ISO 27001:2005 Information Technology - Security Techniques Information Security Management Systems - Requirements[1] and ISO/IEC 17799:2005 Information Technology - Security Techniques - Code of Practice for Information Security Management.[2] Software Asset Management is a comprehensive strategy that has to be addressed from top to bottom in an organization to be effective, to minimize risk. A software compliance audit is an important sub-set of Software Asset Management and is covered in the above referenced standards. At its simplest it involves the following: 1. Identification of Software Assets. 2. Verifying the Software Assets including licenses, usage, and rights. 3. Identifying gaps that may exist between what exists on the installations, and the licenses possessed, and the rights of usage. 4. Taking action to close any gaps. 5. Recording the results in a centralized location with Proof Of Purchase records. The audit process itself should be a continuing action, and modern SAM software identifies what is installed, where it is installed, its usage, and provides a reconciliation of this discovery against usage. This is a very useful means of controlling software installations and lowering the costs of licensing. Large organisations could not do this without discovery and inventory applications. From time to time internal or external audits may take a forensic approach to establish what is installed on the computers in an organisation with the purpose of ensuring that it is all legal and authorised and to ensure that its process of processing transactions or events is correct. Software audits should not be confused with code audits, which are carried out on the source code of a software project. Software quality assurance From Wikipedia, the free encyclopedia This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (January 2010) Software quality assurance (SQA) consists of a means of monitoring the software engineering processes and methods used to ensure quality. The methods by which this is accomplished are many and varied, and may include ensuring conformance to one or more standards, such as ISO 9000 or a model such as CMMI. Contents [hide] 1 Overvie w 2 See also 3 Referen ces 4 External links [edit]Overview SQA encompasses the entire software development process, which includes processes such as requirements definition, software design, coding, source code control, code reviews, change management, configuration management, testing, release management, and product integration. SQA is organized into goals, commitments, abilities, activities, measurements, and verifications. [1] The American Society for Quality offers a Certified Software Quality Engineer (CSQE) certification with exams held a minimum of twice a year. Software audit review From Wikipedia, the free encyclopedia A software audit review, or software audit, is a type of software review in which one or more auditors who are not members of the software development organization conduct "An independent examination of a software product, software process, or set of software processes to assess compliance with specifications, standards, contractual agreements, or other criteria" [1] . "Software product" mostly, but not exclusively, refers to some kind of technical document. IEEE Std. 1028 offers a list of 32 "examples of software products subject to audit", including documentary products such as various sorts of plan, contracts, specifications, designs, procedures, standards, and reports, but also non-documentary products such as data, test data, and deliverable media. Software audits are distinct from software peer reviews and software management reviews in that they are conducted by personnel external to, and independent of, the software development organization, and are concerned with compliance of products or processes, rather than with their technical content, technical quality, or managerial implications. The term "software audit review" is adopted here to designate the form of software audit described in IEEE Std. 1028. [edit]Objectives and participants This section is in a list format that may be better presented using prose. You can help by converting this section to prose, if appropriate.Editing help is available. (September 2008) "The purpose of a software audit is to provide an independent evaluation of conformance of software products and processes to applicable regulations, standards, guidelines, plans, and procedures" [2] . The following roles are recommended: The Initiator (who might be a manager in the audited organization, a customer or user representative of the audited organization, or a third party), decides upon the need for an audit, establishes its purpose and scope, specifies the evaluation criteria, identifies the audit personnel, decides what follow-up actions will be required, and distributes the audit report. The Lead Auditor (who must be someone "free from bias and influence that could reduce his ability to make independent, objective evaluations") is responsible for administrative tasks such as preparing the audit plan and assembling and managing the audit team, and for ensuring that the audit meets its objectives. The Recorder documents anomalies, action items, decisions, and recommendations made by the audit team. The Auditors (who must be, like the Lead Auditor, free from bias) examine products defined in the audit plan, document their observations, and recommend corrective actions. (There may be only a single auditor.) The Audited Organization provides a liaison to the auditors, and provides all information requested by the auditors. When the audit is completed, the audited organization should implement corrective actions and recommendations. [edit]Tools Parts of Software audit could be done using static analysis tools that analyze application code and score its conformance with standards, guidelines, best practices. From the List of tools for static code analysis some are covering a very large spectrum from code to architecture review, and could be use for benchmarking. Physical configuration audit From Wikipedia, the free encyclopedia A Physical Configuration Audit (PCA) is the formal examination of the "as-built" configuration of a configuration item against its technical documentation to establish or verify the configuration item's product baseline. The PCA is used to examine the actual configuration of the Configuration Item (CI) that is representative of the product configuration in order to verify that the related design documentation matches the design of the deliverable CI. It is also used to validate many of the supporting processes that the contractor uses in the production of the CI. The PCA is also used to verify that any elements of the CI that were redesigned after the completion of the Functional Configuration Audit (FCA) also meet the requirements of the CI's performance specification. Additional PCAs may be accomplished later during CI production if circumstances such as the following apply: The original production line is "shut down" for several years and then production is restarted The production contract for manufacture of a CI with a fairly complex, or difficult-tomanufacture, design is awarded to a new contractor or vendor. This re-auditing in these circumstances is advisable regardless of whether the contractor or the government controls the detail production design.[1] Contents [hide] 1 Softwar e 2 See also 3 Referen ces 4 External links [edit]Software PCA is one of the practices used in Software Configuration Management for Software Configuration Auditing. The purpose of the software PCA is to ensure that the design and reference documentation is consistent with the as-built software product. Software testing From Wikipedia, the free encyclopedia Software development process Activities and steps Requirements Specification Architecture Design Implementation Testing Deployment Maintenance Methodologies Agile Cleanroom Iterative RAD RUP Spiral Waterfall XP Lean Scrum V-Model TDD Supporting disciplines Configuration management Documentation Quality assurance (SQA) Project management User experience design Tools Compiler Debugger Profiler GUI designer IDE v·d·e Software testing is an investigation conducted to provide stakeholders with information about the quality of the product or service under test.[1] Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. Test techniques include, but are not limited to, the process of executing a program or application with the intent of finding software bugs(errors or other defects). Software testing can be stated as the process of validating and verifying that a software program/application/product: 1. meets the requirements that guided its design and development; 2. works as expected; and 3. can be implemented with the same characteristics. Software testing, depending on the testing method employed, can be implemented at any time in the development process. However, most of the test effort occurs after the requirements have been defined and the coding process has been completed. As such, the methodology of the test is governed by the software development methodology adopted. Different software development models will focus the test effort at different points in the development process. Newer development models, such as Agile, often employ test driven development and place an increased portion of the testing in the hands of the developer, before it reaches a formal team of testers. In a more traditional model, most of the test execution occurs after the requirements have been defined and the coding process has been completed. Contents [hide] 1 Overview 2 History 3 Software testing topics o 3.1 Scope o 3.2 Functional vs non-functional testing o 3.3 Defects and failures o 3.4 Finding faults early o 3.5 Compatibility o 3.6 Input combinations and preconditions o 3.7 Static vs. dynamic testing o 3.8 Software verification and validation o 3.9 The software testing team o 3.10 Software quality assurance (SQA) 4 Testing methods o 4.1 The box approach 4.1.1 White box testing 4.1.2 Black box testing 4.1.3 Grey box testing 5 Testing levels o 5.1 Test target 5.1.1 Unit testing 5.1.2 Integration testing 5.1.3 System testing o 5.1.4 System integration testing 5.2 Objectives of testing 5.2.1 Regression testing 5.2.2 Acceptance testing 5.2.3 Alpha testing 5.2.4 Beta testing 6 Non-functional testing o 6.1 Software performance testing and load testing o 6.2 Stability testing o 6.3 Usability testing o 6.4 Security testing o 6.5 Internationalization and localization o 6.6 Destructive testing 7 The testing process o 7.1 Traditional CMMI or waterfall development model o 7.2 Agile or Extreme development model o 7.3 A sample testing cycle 8 Automated testing o 8.1 Testing tools o 8.2 Measurement in software testing 9 Testing artifacts 10 Certifications 11 Controversy 12 See also 13 References 14 External links [edit]Overview Testing can never completely identify all the defects within software.[2] Instead, it furnishes a criticism or comparison that compares the state and behavior of the product against oracles— principles or mechanisms by which someone might recognize a problem. These oracles may include (but are not limited to) specifications, contracts,[3] comparable products, past versions of the same product, inferences about intended or expected purpose, user or customer expectations, relevant standards, applicable laws, or other criteria. Every software product has a target audience. For example, the audience for video game software is completely different from banking software. Therefore, when an organization develops or otherwise invests in a software product, it can assess whether the software product will be acceptable to its end users, its target audience, its purchasers, and other stakeholders. Software testing is the process of attempting to make this assessment. A study conducted by NIST in 2002 reports that software bugs cost the U.S. economy $59.5 billion annually. More than a third of this cost could be avoided if better software testing was performed. [4] [edit]History The separation of debugging from testing was initially introduced by Glenford J. Myers in 1979.[5] Although his attention was on breakage testing ("a successful test is one that finds a bug" [5][6]) it illustrated the desire of the software engineering community to separate fundamental development activities, such as debugging, from that of verification. Dave Gelperin and William C. Hetzel classified in 1988 the phases and goals in software testing in the following stages: [7] Until 1956 - Debugging oriented[8] 1957–1978 - Demonstration oriented[9] 1979–1982 - Destruction oriented[10] 1983–1987 - Evaluation oriented[11] 1988–2000 - Prevention oriented[12] [edit]Software testing topics [edit]Scope A primary purpose of testing is to detect software failures so that defects may be discovered and corrected. Testing cannot establish that a product functions properly under all conditions but can only establish that it does not function properly under specific conditions.[13] The scope of software testing often includes examination of code as well as execution of that code in various environments and conditions as well as examining the aspects of code: does it do what it is supposed to do and do what it needs to do. In the current culture of software development, a testing organization may be separate from the development team. There are various roles for testing team members. Information derived from software testing may be used to correct the process by which software is developed. [14] [edit]Functional vs non-functional testing Functional testing refers to activities that verify a specific action or function of the code. These are usually found in the code requirements documentation, although some development methodologies work from use cases or user stories. Functional tests tend to answer the question of "can the user do this" or "does this particular feature work." Non-functional testing refers to aspects of the software that may not be related to a specific function or user action, such as scalability or other performance, behavior under certain constraints, orsecurity. Non-functional requirements tend to be those that reflect the quality of the product, particularly in the context of the suitability perspective of its users. [edit]Defects and failures Not all software defects are caused by coding errors. One common source of expensive defects is caused by requirement gaps, e.g., unrecognized requirements, that result in errors of omission by the program designer.[15] A common source of requirements gaps is non-functional requirements such as testability, scalability, maintainability, usability, performance, and security. Software faults occur through the following processes. A programmer makes an error (mistake), which results in a defect (fault, bug) in the software source code. If this defect is executed, in certain situations the system will produce wrong results, causing a failure.[16] Not all defects will necessarily result in failures. For example, defects in dead code will never result in failures. A defect can turn into a failure when the environment is changed. Examples of these changes in environment include the software being run on a new hardware platform, alterations in source data or interacting with different software.[16] A single defect may result in a wide range of failure symptoms. [edit]Finding faults early It is commonly believed that the earlier a defect is found the cheaper it is to fix it. [17] The following table shows the cost of fixing the defect depending on the stage it was found.[18] For example, if a problem in the requirements is found only post-release, then it would cost 10–100 times more to fix than if it had already been found by the requirements review. Time detected Cost to fix a defect Requirements Architecture Construction System test Post-release Time introduced Requirements 1× 3× 5–10× 10× 10–100× Architecture - 1× 10× 15× 25–100× Construction - - 1× 10× 10–25× [edit]Compatibility A common cause of software failure (real or perceived) is a lack of compatibility with other application software, operating systems (or operating system versions, old or new), or target environments that differ greatly from the original (such as a terminal or GUI application intended to be run on the desktop now being required to become a web application, which must render in a web browser). For example, in the case of a lack of backward compatibility, this can occur because the programmers develop and test software only on the latest version of the target environment, which not all users may be running. This results in the unintended consequence that the latest work may not function on earlier versions of the target environment, or on older hardware that earlier versions of the target environment was capable of using. Sometimes such issues can be fixed by proactively abstracting operating system functionality into a separate program module or library. [edit]Input combinations and preconditions A very fundamental problem with software testing is that testing under all combinations of inputs and preconditions (initial state) is not feasible, even with a simple product.[13][19] This means that the number of defects in a software product can be very large and defects that occur infrequently are difficult to find in testing. More significantly, non-functional dimensions of quality (how it is supposed tobe versus what it is supposed to do)—usability, scalability, performance, compatibility, reliability— can be highly subjective; something that constitutes sufficient value to one person may be intolerable to another. [edit]Static vs. dynamic testing There are many approaches to software testing. Reviews, walkthroughs, or inspections are considered as static testing, whereas actually executing programmed code with a given set of test cases is referred to as dynamic testing. Static testing can be (and unfortunately in practice often is) omitted. Dynamic testing takes place when the program itself is used for the first time (which is generally considered the beginning of the testing stage). Dynamic testing may begin before the program is 100% complete in order to test particular sections of code (modules or discrete functions). Typical techniques for this are either using stubs/drivers or execution from a debugger environment. For example, spreadsheet programs are, by their very nature, tested to a large extent interactively ("on the fly"), with results displayed immediately after each calculation or text manipulation. [edit]Software verification and validation Software testing is used in association with verification and validation:[20] Verification: Have we built the software right? (i.e., does it match the specification). Validation: Have we built the right software? (i.e., is this what the customer wants). The terms verification and validation are commonly used interchangeably in the industry; it is also common to see these two terms incorrectly defined. According to the IEEE Standard Glossary of Software Engineering Terminology: Verification is the process of evaluating a system or component to determine whether the products of a given development phase satisfy the conditions imposed at the start of that phase. Validation is the process of evaluating a system or component during or at the end of the development process to determine whether it satisfies specified requirements. According to the IS0 9000 standard: Verification is confirmation by examination and through provision of objective evidence that specified requirements have been fulfilled. Validation is confirmation by examination and through provision of objective evidence that the requirements for a specific intended use or application have been fulfilled. [edit]The software testing team Software testing can be done by software testers. Until the 1980s the term "software tester" was used generally, but later it was also seen as a separate profession. Regarding the periods and the different goals in software testing,[21] different roles have been established: manager, test lead, test designer, tester, automation developer, and test administrator. [edit]Software quality assurance (SQA) Though controversial, software testing is a part of the software quality assurance (SQA) process.[13] In SQA, software process specialists and auditors are concerned for the software development process rather than just the artifacts such as documentation, code and systems. They examine and change the software engineering process itself to reduce the amount of faults that end up in the delivered software: the so-called defect rate. What constitutes an "acceptable defect rate" depends on the nature of the software; A flight simulator video game would have much higher defect tolerance than software for an actual airplane. Although there are close links with SQA, testing departments often exist independently, and there may be no SQA function in some companies. Software testing is a task intended to detect defects in software by contrasting a computer program's expected results with its actual results for a given set of inputs. By contrast, QA (quality assurance) is the implementation of policies and procedures intended to prevent defects from occurring in the first place. [edit]Testing [edit]The methods box approach Software testing methods are traditionally divided into white- and black-box testing. These two approaches are used to describe the point of view that a test engineer takes when designing test cases. [edit]White box testing Main article: White box testing White box testing is when the tester has access to the internal data structures and algorithms including the code that implement these. Types of white box testing The following types of white box testing exist: API testing (application programming interface) - testing of the application using public and private APIs Code coverage - creating tests to satisfy some criteria of code coverage (e.g., the test designer can create tests to cause all statements in the program to be executed at least once) Fault injection methods - improving the coverage of a test by introducing faults to test code paths Mutation testing methods Static testing - White box testing includes all static testing Test coverage White box testing methods can also be used to evaluate the completeness of a test suite that was created with black box testing methods. This allows the software team to examine parts of a system that are rarely tested and ensures that the most important function points have been tested.[22] Two common forms of code coverage are: Function coverage, which reports on functions executed Statement coverage, which reports on the number of lines executed to complete the test They both return a code coverage metric, measured as a percentage. [edit]Black box testing Main article: Black box testing Black box testing treats the software as a "black box"—without any knowledge of internal implementation. Black box testing methods include: equivalence partitioning, boundary value analysis, all-pairs testing, fuzz testing, model-based testing, exploratory testing and specification-based testing. Specification-based testing: Specification-based testing aims to test the functionality of software according to the applicable requirements.[23] Thus, the tester inputs data into, and only sees the output from, the test object. This level of testing usually requires thorough test cases to be provided to the tester, who then can simply verify that for a given input, the output value (or behavior), either "is" or "is not" the same as the expected value specified in the test case. Specification-based testing is necessary, but it is insufficient to guard against certain risks. [24] Advantages and disadvantages: The black box tester has no "bonds" with the code, and a tester's perception is very simple: a code must have bugs. Using the principle, "Ask and you shall receive," black box testers find bugs where programmers do not. On the other hand, black box testing has been said to be "like a walk in a dark labyrinth without a flashlight," because the tester doesn't know how the software being tested was actually constructed. As a result, there are situations when (1) a tester writes many test cases to check something that could have been tested by only one test case, and/or (2) some parts of the back-end are not tested at all. Therefore, black box testing has the advantage of "an unaffiliated opinion", on the one hand, and the disadvantage of "blind exploring", on the other. [25] [edit]Grey box testing Grey Box Testing (American spelling: gray box testing) involves having knowledge of internal data structures and algorithms for purposes of designing the test cases, but testing at the user, or black-box level. The tester is not required to have a full access to the software's source code.[26][not in citation given] Manipulating input data and formatting output do not qualify as grey box, because the input and output are clearly outside of the "black-box" that we are calling the system under test. This distinction is particularly important when conducting integration testing between two modules of code written by two different developers, where only the interfaces are exposed for test. However, modifying a data repository does qualify as grey box, as the user would not normally be able to change the data outside of the system under test. Grey box testing may also include reverse engineering to determine, for instance, boundary values or error messages. By knowing the underlying concepts of how the software works, the tester makes better-informed testing choices while testing the software from outside. Typically, a grey box tester will be permitted to set up his testing environment; for instance, seeding a database; and the tester can observe the state of the product being tested after performing certain actions. For instance, he/she may fire an SQLquery on the database and then observe the database, to ensure that the expected changes have been reflected. Grey box testings implements intelligent test scenarios, based on limited information. This will particularly apply to data type handling, exception handling, and so on.[27] [edit]Testing levels Tests are frequently grouped by where they are added in the software development process, or by the level of specificity of the test. The main levels during the development process as defined by theSWEBOK guide are unit-, integration-, and system testing that are distinguished by the test target without implying a specific process model.[28] Other test levels are classified by the testing objective.[29] [edit]Test target [edit]Unit testing Main article: Unit testing Unit testing, also known as component testing, refers to tests that verify the functionality of a specific section of code, usually at the function level. In an object-oriented environment, this is usually at the class level, and the minimal unit tests include the constructors and destructors.[30] These types of tests are usually written by developers as they work on code (white-box style), to ensure that the specific function is working as expected. One function might have multiple tests, to catch corner cases or other branches in the code. Unit testing alone cannot verify the functionality of a piece of software, but rather is used to assure that the building blocks the software uses work independently of each other. [edit]Integration testing Main article: Integration testing Integration testing is any type of software testing that seeks to verify the interfaces between components against a software design. Software components may be integrated in an iterative way or all together ("big bang"). Normally the former is considered a better practice since it allows interface issues to be localised more quickly and fixed. Integration testing works to expose defects in the interfaces and interaction between integrated components (modules). Progressively larger groups of tested software components corresponding to elements of the architectural design are integrated and tested until the software works as a system.[31] [edit]System testing Main article: System testing System testing tests a completely integrated system to verify that it meets its requirements.[32] [edit]System integration testing Main article: System integration testing System integration testing verifies that a system is integrated to any external or third-party systems defined in the system requirements.[citation needed] [edit]Objectives of testing [edit]Regression testing Main article: Regression testing Regression testing focuses on finding defects after a major code change has occurred. Specifically, it seeks to uncover software regressions, or old bugs that have come back. Such regressions occur whenever software functionality that was previously working correctly stops working as intended. Typically, regressions occur as an unintended consequence of program changes, when the newly developed part of the software collides with the previously existing code. Common methods of regression testing include re-running previously run tests and checking whether previously fixed faults have reemerged. The depth of testing depends on the phase in the release process and the risk of the added features. They can either be complete, for changes added late in the release or deemed to be risky, to very shallow, consisting of positive tests on each feature, if the changes are early in the release or deemed to be of low risk. [edit]Acceptance testing Main article: Acceptance testing Acceptance testing can mean one of two things: 1. A smoke test is used as an acceptance test prior to introducing a new build to the main testing process, i.e. before integration or regression. 2. Acceptance testing performed by the customer, often in their lab environment on their own hardware, is known as user acceptance testing (UAT). Acceptance testing may be performed as part of the hand-off process between any two phases of development.[citation needed] [edit]Alpha testing Alpha testing is simulated or actual operational testing by potential users/customers or an independent test team at the developers' site. Alpha testing is often employed for off-the-shelf software as a form of internal acceptance testing, before the software goes to beta testing.[33] [edit]Beta testing Beta testing comes after alpha testing and can be considered a form of external user acceptance testing. Versions of the software, known as beta versions, are released to a limited audience outside of the programming team. The software is released to groups of people so that further testing can ensure the product has few faults or bugs. Sometimes, beta versions are made available to the open public to increase the feedback field to a maximal number of future users.[citation needed] [edit]Non-functional testing Special methods exist to test non-functional aspects of software. In contrast to functional testing, which establishes the correct operation of the software (correct in that it matches the expected behavior defined in the design requirements), non-functional testing verifies that the software functions properly even when it receives invalid or unexpected inputs. Software fault injection, in the form offuzzing, is an example of non-functional testing. Non-functional testing, especially for software, is designed to establish whether the device under test can tolerate invalid or unexpected inputs, thereby establishing the robustness of input validation routines as well as error-management routines. Various commercial non-functional testing tools are linked from the software fault injection page; there are also numerous open-source and free software tools available that perform non-functional testing. [edit]Software performance testing and load testing Performance testing is executed to determine how fast a system or sub-system performs under a particular workload. It can also serve to validate and verify other quality attributes of the system, such as scalability, reliability and resource usage. Load testing is primarily concerned with testing that can continue to operate under a specific load, whether that be large quantities of data or a large number of users. This is generally referred to as software scalability. The related load testing activity of when performed as a non-functional activity is often referred to as endurance testing. Volume testing is a way to test functionality. Stress testing is a way to test reliability. Load testing is a way to test performance. There is little agreement on what the specific goals of load testing are. The terms load testing, performance testing, reliability testing, and volume testing, are often used interchangeably. [edit]Stability testing Stability testing checks to see if the software can continuously function well in or above an acceptable period. This activity of non-functional software testing is often referred to as load (or endurance) testing. [edit]Usability testing Usability testing is needed to check if the user interface is easy to use and understand. It is concerned mainly with the use of the application. [edit]Security testing Security testing is essential for software that processes confidential data to prevent system intrusion by hackers. [edit]Internationalization and localization The general ability of software to be internationalized and localized can be automatically tested without actual translation, by using pseudolocalization. It will verify that the application still works, even after it has been translated into a new language or adapted for a new culture (such as different currencies or time zones).[34] Actual translation to human languages must be tested, too. Possible localization failures include: Software is often localized by translating a list of strings out of context, and the translator may choose the wrong translation for an ambiguous source string. Technical terminology may become inconsistent if the project is translated by several people without proper coordination or if the translator is imprudent. Literal word-for-word translations may sound inappropriate, artificial or too technical in the target language. Untranslated messages in the original language may be left hard coded in the source code. Some messages may be created automatically at run time and the resulting string may be ungrammatical, functionally incorrect, misleading or confusing. Software may use a keyboard shortcut which has no function on the source language's keyboard layout, but is used for typing characters in the layout of the target language. Software may lack support for the character encoding of the target language. Fonts and font sizes which are appropriate in the source language, may be inappropriate in the target language; for example, CJK characters may become unreadable if the font is too small. A string in the target language may be longer than the software can handle. This may make the string partly invisible to the user or cause the software to crash or malfunction. Software may lack proper support for reading or writing bi-directional text. Software may display images with text that wasn't localized. Localized operating systems may have differentlynamed system configuration files and environment variables and different formats for date and currency. To avoid these and other localization problems, a tester who knows the target language must run the program with all the possible use cases for translation to see if the messages are readable, translated correctly in context and don't cause failures. [edit]Destructive testing Main article: Destructive testing Destructive testing attempts to cause the software or a sub-system to fail, in order to test its robustness. [edit]The testing process [edit]Traditional CMMI or waterfall development model A common practice of software testing is that testing is performed by an independent group of testers after the functionality is developed, before it is shipped to the customer.[35] This practice often results in the testing phase being used as a project buffer to compensate for project delays, thereby compromising the time devoted to testing.[36] Another practice is to start software testing at the same moment the project starts and it is a continuous process until the project finishes.[37] Further information: Capability Maturity Model Integration and Waterfall model [edit]Agile or Extreme development model In contrast, some emerging software disciplines such as extreme programming and the agile software development movement, adhere to a "test-driven software development" model. In this process,unit tests are written first, by the software engineers (often with pair programming in the extreme programming methodology). Of course these tests fail initially; as they are expected to. Then as code is written it passes incrementally larger portions of the test suites. The test suites are continuously updated as new failure conditions and corner cases are discovered, and they are integrated with any regression tests that are developed. Unit tests are maintained along with the rest of the software source code and generally integrated into the build process (with inherently interactive tests being relegated to a partially manual build acceptance process). The ultimate goal of this test process is to achieve continuous deployment where software updates can be published to the public frequently.[38] [39] [edit]A sample testing cycle Although variations exist between organizations, there is a typical cycle for testing.[40] The sample below is common among organizations employing the Waterfall development model. Requirements analysis: Testing should begin in the requirements phase of the software development life cycle. During the design phase, testers work with developers in determining what aspects of a design are testable and with what parameters those tests work. Test planning: Test strategy, test plan, testbed creation. Since many activities will be carried out during testing, a plan is needed. Test development: Test procedures, test scenarios, test cases, test datasets, test scripts to use in testing software. Test execution: Testers execute the software based on the plans and test documents then report any errors found to the development team. Test reporting: Once testing is completed, testers generate metrics and make final reports on their test effort and whether or not the software tested is ready for release. Test result analysis: Or Defect Analysis, is done by the development team usually along with the client, in order to decide what defects should be assigned, fixed, rejected (i.e. found software working properly) or deferred to be dealt with later. Defect Retesting: Once a defect has been dealt with by the development team, it is retested by the testing team. AKA Resolution testing. Regression testing: It is common to have a small test program built of a subset of tests, for each integration of new, modified, or fixed software, in order to ensure that the latest delivery has not ruined anything, and that the software product as a whole is still working correctly. Test Closure: Once the test meets the exit criteria, the activities such as capturing the key outputs, lessons learned, results, logs, documents related to the project are archived and used as a reference for future projects. [edit]Automated testing Main article: Test automation Many programming groups are relying more and more on automated testing, especially groups that use testdriven development. There are many frameworks to write tests in, and continuous integrationsoftware will run tests automatically every time code is checked into a version control system. While automation cannot reproduce everything that a human can do (and all the ways they think of doing it), it can be very useful for regression testing. However, it does require a well-developed test suite of testing scripts in order to be truly useful. [edit]Testing tools Program testing and fault detection can be aided significantly by testing tools and debuggers. Testing/debug tools include features such as: Program monitors, permitting full or partial monitoring of program code including: Instruction set simulator, permitting complete instruction level monitoring and trace facilities Program animation, permitting step-by-step execution and conditional breakpoint at source level or in machine code Code coverage reports Formatted dump or symbolic debugging, tools allowing inspection of program variables on error or at chosen points Automated functional GUI testing tools are used to repeat system-level tests through the GUI Benchmarks, allowing run-time performance comparisons to be made Performance analysis (or profiling tools) that can help to highlight hot spots and resource usage Some of these features may be incorporated into an Integrated Development Environment (IDE). A regression testing technique is to have a standard set of tests, which cover existing functionality that result in persistent tabular data, and to compare prechange data to post-change data, where there should not be differences, using a tool like diffkit. Differences detected indicate unexpected functionality changes or "regression". [edit]Measurement in software testing Usually, quality is constrained to such topics as correctness, completeness, security,[citation needed] but can also include more technical requirements as described under the ISO standard ISO/IEC 9126, such as capability, reliability, efficiency, portability, maintainability , compatibility, and usability. There are a number of frequently-used software measures, often called metrics, which are used to assist in determining the state of the software or the adequacy of the testing. [edit]Testing artifacts The software testing process can produce several artifacts. Test plan A test specification is called a test plan. The developers are well aware what test plans will be executed and this information is made available to management and the developers. The idea is to make them more cautious when developing their code or making additional changes. Some companies have a higher-level document called a test strategy. Traceability matrix A traceability matrix is a table that correlates requirements or design documents to test documents. It is used to change tests when the source documents are changed, or to verify that the test results are correct. Test case A test case normally consists of a unique identifier, requirement references from a design specification, preconditions, events, a series of steps (also known as actions) to follow, input, output, expected result, and actual result. Clinically defined a test case is an input and an expected result.[41] This can be as pragmatic as 'for condition x your derived result is y', whereas other test cases described in more detail the input scenario and what results might be expected. It can occasionally be a series of steps (but often steps are contained in a separate test procedure that can be exercised against multiple test cases, as a matter of economy) but with one expected result or expected outcome. The optional fields are a test case ID, test step, or order of execution number, related requirement(s), depth, test category, author, and check boxes for whether the test is automatable and has been automated. Larger test cases may also contain prerequisite states or steps, and descriptions. A test case should also contain a place for the actual result. These steps can be stored in a word processor document, spreadsheet, database, or other common repository. In a database system, you may also be able to see past test results, who generated the results, and what system configuration was used to generate those results. These past results would usually be stored in a separate table. Test script A test script is a procedure, or programing code that replicates user actions. Initially the term was derived from the product of work created by automated regression test tools. Test Case will be a baseline to create test scripts using a tool or a program. Test suite The most common term for a collection of test cases is a test suite. The test suite often also contains more detailed instructions or goals for each collection of test cases. It definitely contains a section where the tester identifies the system configuration used during testing. A group of test cases may also contain prerequisite states or steps, and descriptions of the following tests. Test data In most cases, multiple sets of values or data are used to test the same functionality of a particular feature. All the test values and changeable environmental components are collected in separate files and stored as test data. It is also useful to provide this data to the client and with the product or a project. Test harness The software, tools, samples of data input and output, and configurations are all referred to collectively as a test harness. [edit]Certifications Several certification programs exist to support the professional aspirations of software testers and quality assurance specialists. No certification currently offered actually requires the applicant to demonstrate the ability to test software. No certification is based on a widely accepted body of knowledge. This has led some to declare that the testing field is not ready for certification.[42] Certificati on itself cannot measure an individual's productivity, their skill, or practical knowledge, and cannot guarantee their competence, or professionalism as a tester.[43] Software testing certification types Exam-based: Formalized exams, which need to be passed; can also be learned by selfstudy [e.g., for ISTQB or QAI][44] Education-based: Instructor-led sessions, where each course has to be passed [e.g., International Institute for Software Testing (IIST)]. Testing certifications Certified Associate in Software Testing (CAST) offered by the QAI [45] CATe offered by the International Institute for Software Testing[46] Certified Manager in Software Testing (CMST) offered by the QAI [45] Certified Software Tester (CSTE) offered by the Quality Assurance Institute (QAI)[45] Certified Software Test Professional (CSTP) offered by the International Institute for Software Testing[46] CSTP (TM) (Australian Version) offered by K. J. Ross & Associates[47] ISEB offered by the Information Systems Examinations Board ISTQB Certified Tester, Foundation Level (CTFL) offered by the International Software Testing Qualification Board [48][49] ISTQB Certified Tester, Advanced Level (CTAL) offered by the International Software Testing Qualification Board [48][49] TMPF TMap Next Foundation offered by the Examination Institute for Information Science[50] TMPA TMap Next Advanced offered by the Examination Institute for Information Science[50] Quality assurance certifications CMSQ offered by the Quality Assurance Institute (QAI).[45] CSQA offered by the Quality Assurance Institute (QAI)[45] CSQE offered by the American Society for Quality (ASQ)[51] CQIA offered by the American Society for Quality (ASQ)[51] [edit]Co ntrover sy Some of the major soft ware testing controversi es include: What constitute s responsib le software testing? Members of the "context-driven" school of testing[52] believe that there are no "best practices" of testing, but rather that testing is a set of skills that allow the tester to select or invent testing practices to suit each unique situation.[53] Agile vs. traditi onal Should testers learn to work under conditions of uncertainty and constant change or should they aim at process "maturity"? The agile testing movement has received growing popularity since 2006 mainly in commercial circles,[54][55] whereas government and military[56] software providers use this methodology but also the traditional test-last models (e.g. in the Waterfall model).[citation needed] E x pl or at or y te st v s. s cr ip te d[ 57] Should tests be designed at the same time as they are executed or should they be designed beforehand? M a n u a l t e s t i n g v s . a u t o m a t e d Some writers believe that test automation is so expensive relative to its value that it should be used sparingly.[58] More in particular, test-driven development states that developers should write unit-tests of the XUnit type before coding the functionality. The tests then can be considered as a way to capture and implement the requirements. S o f t w a r e d e s i g n v s . s o f t w a r e i m p l e m e n t a t i o n [ 5 9 ] Should testing be carried out only at the end or throughout the whole process? W h o w a t c h e s t h e w a t c h m e n ? The idea is that any form of observation is also an interaction—the act of testing can also affect that which is being tested.[60] Software Installation One of the main jobs of the home sysad is to install software - which to the novice can seem quite tricky. Fortunately, the task becomes easier once you understand the three main issues involved. The first issue is to understand how software is installed. Basically, here is how to do it in three or four steps: First, you create a folder to house the new software. By convention, this folder is located in the ‘Program Files’ folder within C: Drive … but it can be placed anywhere else if you prefer. You may also need to create other folders, which may or may not go in the original folder; Next, you place the program files in the right places. Depending on the software you are installing, this may involve placing just one single file in the folder you just created, or sprinkling hundreds of different files around the computer, each in exactly the right folder; Optionally, you might have to tell the Windows operating system that you are installing new software, which you do by adjusting various system files and Registry files; Finally, you place shortcuts to your new software on the Desktop, in the Start Menu programs list, and anywhere else you like. The second issue is whether the software manufacturer provides you with an automatic installation wizard (known as an ‘installer’), or whether you have to do all of this manually. Most manufacturers, but not all, give you an installer. This installer is a program in its own right, but one that only has one job: it installs you software, and then you can throw it away (or at very least, save it to a CD, and then delete it from your computer). When you download software from the Internet, most times you will actually be downloading installers. The third issue is whether the new software you install is going to conflict with previously installed software. Some new software never causes conflicts; others will almost always do so unless you take special steps by shutting down any other programs during the installation process. Usually (but not always), the software manufacturer will warn you when a conflict is likely to happen. They do this by recommending that you close all Windows programs before installing the new program. Closing these other programs will usually prevent the chance of conflicts. Taking all of these issues into account, we will end up with four main types of installation: o Type A: There is no installer: you have to install your software yourself, manually. The good news is that usually you do not have to close other programs. o Type B: The software arrives as an installer program. Its key feature is that it ’strongly recommends’ that you shut down other Windows programs. After you have done that, the installer Wizard walks you through the installation process. o Type C: The software arrives as an installer program. This time, it does not recommend shutting down other programs, but immediately walks you through the installation process. o Type D: The software uses Windows’ built-in installer, and installs itself automatically, doing no more than perhaps asking you to agree to the End User License Agreement (EULA). So when you first decide to install some software, how do you tell which type it is? Simple: you run it and see what happens next. o If the program you want to use immediately runs, with no sign of installing, it is not an installer; it is Type A; o If the program immediately begins to installs itself, without suggesting that you close down other programs, it is either Type C or Type D. The main practical difference between Types C and D is that Type D software cannot be installed in Safe Mode. o Anything else is a Type B installer. Type A: Manual installation When you download, what you get is the software program itself, complete and readyto run. This software will run from anywhere - from the Desktop, from a floppy, orfrom a USB memory stick. Unless you only want to use it the once, ‘install’ it thus:1. Create a folder for the software in C:\\\\\\\\\\\\\\\\Program Files\\\\\\\\\\\\\\\\. To do this, open the C:\\\\\\\\\\\\\\\\Programs Files\\\\\\\\\\\\\\\\ folder, create a new folder there, and name it after the program.2. Move the program and any associated files into that folder.3. Right-click on the program file (the .exe program) and choose ‘copy’;4. If you would like a shortcut on your Desktop, right-click on some clear space onthe Desktop, and choose ‘paste shortcut’. Rename this shortcut if you wish;5. If you would like a link in your Start Menu Programs list, open the link to the StartMenu’s Programs folder (see Topic 11), and paste a shortcut there. Type B: First shut down other programs When you run Type B installers, a message will soon appear to say that it isrecommended that you shut down all other Windows programs before proceedingwith the installation. There are two ways to do this: The Safe Mode Method: To minimize the risk of software conflicts, the safestmethod is to install in Safe Mode: 1. Enter Safe Mode (see Topic 10). This will automatically (though only temporarily)disconnect the Internet, and disable all other programs; 2. Run the Installer either by double-clicking on it, or by right-clicking, and choosing‘Open’. 3. Install the program (see Installation Tips on next page); 4. Ignore all requests to run the program, or to visit the program’s home page; 5. Shut down and restart the computer.. The Normal Mode Method: This method is second-best, but sometimes quicker. 1. Make sure that the Internet is disconnected. If in doubt, pull out the Internet cable.Under no circumstances use this method while connected to the Internet; 2. Shut down all other programs. To do this, first look in the Task Bar, and shut downall programs (other than the installer if it is running). Next, look in the SystemTray (right bottom of screen), and shut down everything you can find there. To shutdown System Tray items, right-click on each icon, one by one, and choose anycommands that hint at shutting down, such as ‘quit’, ‘close’, ‘disable’ or‘shutdown’. (You will probably find one or two System Tray items that you won’tbe able to shut down; this is normal); 3. Run the Installer, and install the program (see Installation Tips opposite); 4. Ignore all requests to run the program, or to visit the program’s Internet homepage; 5. Shut down and restart the computer.. Type C: Simple Installer In this case, the installer does not require you to shut down other programs. To use aType C installer, just follow the prompts (see Installation Tips opposite). You caninstall in Normal Mode or Safe Mode. Type D: Windows Installer Once again, the installer does not require you to shut down other programs. Thistime, however, you can only install in Normal Mode. Installation Tips Legal Agreement: Unless you know the program to be safe, read the legal stuff(End User License Agreement, or EULA) carefully. Better still, copy and paste it intoEULAlyser, a free program you can get from javacoolsoftware.com. This will highlightany troublesome aspects. If still in doubt, ask a lawyer, or get a different program; Finding a home for the program (1): the usual home for program software is inits own folder within C:Program Files. Some programs will only work properly ifthey are kept there; others don’t care where you put them. Feel free to experiment… but don’t be surprised if you find a program that only works properly in CDrive; Finding a home for the program (2): some software manufacturers think theirsoftware works best if it is hidden buried within strangely-named folders. Forexample, the people who make the TimeSyncro program think the best place for it isinside a folder called ‘Tools for selling’. Logical? Maybe. But if you don’t think so, feelfree to rename or reorganize the folders so that you can easily find the software whenyou want to. It will not make any difference at all to the way the programs work;h3>After the installation is complete: many installers will ask you - even try to trickyou - into immediately running the program, and/or going online to visit theirwebpage, register the software, or update it. For instance, the program will display adialog box telling you that the installation is complete, and giving you just one button,labeled ‘Finished’, to press. On the dialog box, however, will be a ticked box saying,sometimes in small print, something like ’Run this program now’ or ’Visit ourwebsite now’. In all cases, you should untick these boxes! Installing an antivirus program: before installing an antivirus program, alwayscheck to be sure that there is no other antivirus program already installed on thecomputer. To do this, check the System Tray for an antivirus program icon, look in‘Add/Remove Programs’ (in the Control Panel) to see if there are any antivirusprograms you recognize, and check the Security Centre (in the Control Panel) to seeif XP thinks you have an antivirus program. Having two antivirus programs on theone computer is almost always disastrous; Installing an firewall program: Just like antivirus programs, computers do notlike having two different firewalls. If using XP, disable XP’s own firewall beforeinstalling a new one (do this at Firewall in Security Center), and then use the samemethods as for antivirus programs to make sure you never have two firewalls installedat once. Uninstalling Software Another of the main jobs of the home sysad is to uninstall software which to the novice can seem quite tricky, but is usually quite easy. To remove unwanted software: 1. Go to the Control Panel , and choose ‘Add/Remove Programs’; 2. Select the program you wish to remove; 3. Click on ‘Remove’; 4. Wait for the program to be uninstalled. During this process, you may be asked to confirm the uninstalling; 5. Restart your computer. There are two major types of data backup. System Backup: It can take a long time - many hours, even days - to set up an operating system, if one counts the time installing all the programs that you use.If you wish, you can set things up so that if system and programs become damaged, you can repair them all in a jiffy. Data Backup: Your emails, music, photos, movies and all your personal projects can be backed up to floppies, CDs or DVDs. This can have the twin benefits of keeping them safe, and freeing up hard disk space. Almost all modern backup systems begin by dividing your hard disk into two divisions or ‘partitions’, one, called ’CDrive’, for the operating system and programs, and the other, called ‘DataDrive’, for personal data. This procedure is both and difficult to learn, and only rarely needed, so we suggest you have it done by a technician or an experienced person at a computer club. System Backup Having partitioned your hard disk, your next task is to decide whether or not to backup your CDrive, which is where your operating and programs are kept. If you think installing operating systems and programs is fun, and look forward to hard disk failures, then skip to the next section. Otherwise, read on.There are many different ways to backup your operating system and programs, each with its own advantages and disadvantages. Here we will look briefly at two of the more popular systems. Both require your hard disk to be partitioned into two. The Image Method: Using Acronis True Image (www.acronis.com), you copy CDrive onto some CDs, a DVD, or another part of your hard disk - or all of them. Thereafter, whenever you need or want to, you use this copy to restore it to the way it used to be. There are many advantages to using this method. One is that it is a fairly easy method to use; it allows you to make many versions of your CDrive (for instance, different versions with different software installed); and it is very quick to switch between versions. Furthermore, you can make a whole host of changes experimentally - such as installing many new programs - but easily return to an earlier version saved months before if you don’t like the changes. The Freeze Method: using virtual disk software, you lock CDrive in place. Thereafter, viruses and computer users can make whatever changes they like, and it won’t matter; the very next time the computer is restarted, the changes disappear. <liBoth: you use both methods. Data Backup To some people, the data on their computer is of very minor importance. “If it were all lost tomorrow”, they say. “Who would care? Not me!” For such people, the failure of a hard disk, or the attack of a virus would be the most minor of inconveniences.Such people rarely bother with data backup.For other people, however, losing data can be a catastrophe. Imagine that you have spent six years writing a book, and just as you are about to type the last full stop onthe last page, the computer crashes. Six years of work disappears … and along with it goes years of music, emails and family photos. The loss can, for some people, be devastating.So the question of whether or not to backup is of highest importance.If you decide to backup, the major part of your task as sysad is to discover what your computer’s users want backed up, and then to learn how to back it up. For instance, do your family members want to their emails backed up? If so, then you need todiscover how to do this. Each computer - or even each user - can require a different method, depending on what email software is used. The best time sometimes the only time - to do this is before the computer crashes or the virus hits! </li Single user/ site licence Home | Compositional Analysis | How to Order Compos Analysis | Ecological Consultan cy | About Us | Useful Links Compos Analysis software from Smith Ecology Limited The distinction between the single user and site (multiuser) licence and the student licence: Single user licence: You may install and use one copy of the software product, or in its place, any prior version, on a single computer. You may also store or install a copy of the software product on a storage device, such as a network server, used only to install or run the software product on your other computers over an internal network; however, you must acquire and dedicate a licence for each separate computer on which the software product is installed or run from the storage device. A licence for the software product may not be shared or used concurrently on different computers. The licence is valid for 3 years. At expiry the licence may be renewed at a discount to the full price. Multi-user site licence: A site licence permits use of multiple copies of the software product by the single entity that holds the licence, at the single entity’s sites. You may make the number of copies of the software product authorised by the licence agreement and you may use each copy at the licensed sites in the manner specified for single users above. The single entity is the licensed organisation, such as a university department. The software may be copied by (i) the salaried employees of the organisation, or (ii) students under direct supervision of such employees at the organisation’s sites (including field sites) or at home, but not for use by contractors or students elsewhere, and only provided that the number of copies does not exceed the number permitted by the licence. The licence is valid for 3 years. At expiry the licence may be renewed at a discount to the full price. Student licence: Available for students, normally defined as someone having a current student identity card. State if you are a student buying for yourself when ordering. A student licence covers your own use as a student and does not extend to use by others. It is only available for the standard version of the software, not the plus version and is not upgradeable to an alternative licence. The software supplied is the full standard version. The licence is valid for 6 years but is non-renewable. To continue use after 6 years you should purchase a regular single user or site licence. Software license From Wikipedia, the free encyclopedia It has been suggested that Software license agreement be merged into this article or section. (Discuss) Proposed since November 2010. This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed. (September 2009) A software license (or software licence in commonwealth usage) is a legal instrument (usually by way of contract law) governing the usage or redistribution of software. All software is copyrightprotected, except material in the public domain. Contractual confidentiality is another way of protecting software. A typical software license grants an end-user permission to use one or more copies of software in ways where such a use would otherwise potentially constitute copyright infringement of the software owner's exclusive rights under copyright law. Some software comes with the license when purchased off the shelf or an OEM license when bundled with hardware. Software can also be in the form of freeware or shareware. Software licenses can generally be fit into the following categories: proprietary licenses and free and open source licenses, which include free software licenses and other open source licenses. The features that distinguishes them are significant in terms of the effect they have on the end-user's rights. A free open source license makes software free for inspection of its code, modification, and distribution. Some free licenses, such as the GNU General Public License (GPL), allow the product and/or derivative to be commercially sold. Contents [hide] 1 Proprietary software 2 Free and open source software 3 Other characteristics 4 Software licenses and copyright law 5 See also 6 References 7 External links [edit]Proprietary software Main article: Proprietary software The hallmark of proprietary software licenses is that the software publisher grants the use of one or more copies of software under the end-user license agreement (EULA), but ownership of those copies remains with the software publisher (hence use of the term "proprietary"). This feature of proprietary software licenses means that certain rights regarding the software are reserved by the software publisher. Therefore, it is typical of EULAs to include terms which define the uses of the software, such as the number of installations allowed or the terms of distribution. The most significant effect of this form of licensing is that, if ownership of the software remains with the software publisher, then the end-user must accept the software license. In other words, without acceptance of the license, the end-user may not use the software at all. One example of such a proprietary software license is the license for Microsoft Windows. As is usually the case with proprietary software licenses, this license contains an extensive list of activities which are restricted, such as: reverse engineering, simultaneous use of the software by multiple users, and publication of benchmarks or performance tests. [edit]Free and open source software Main article: Free and open source software A primary consequence of the free software form of licensing is that acceptance of the license is essentially optional — the end-user may use the software without accepting the license. However, if the end-user wishes to exercise any of the additional rights granted by a free software license (such as the right to redistribute the software), then the end-user must accept, and be bound by, the software license. Open source licenses generally fall under two categories: Those that aim to preserve the openness of the software itself (copyleft licenses), and those that aim to give freedoms to the users of that software (permissive licenses). An example of a copyleft free software license is the GNU General Public License (GPL). This license is aimed at giving the end-user permission to redistribute, reverse engineer, or otherwise modify the software under the terms of the license. These permissions are not entirely free of obligations for the end-user, however. The end-user must comply with certain terms if the end-user wishes to exercise these extra permissions granted by the GPL. For instance, any modifications made and redistributed by the end-user must include the source code for these, and the end-user is not allowed to re-assert the removed copyright back over their derivative work. The modified software is therefore also publicly available for further modification by any user. Examples of permissive free software licenses are the BSD license and the MIT license, which essentially grant the end-user permission to do anything they wish with the source code in question, including the right to take the code and use it as part of closed-source software or software released under a proprietary software license. [edit]Other characteristics In addition to granting rights and imposing restrictions on the use of software, software licenses typically contain provisions which allocate liability and responsibility between the parties entering into the license agreement. In enterprise and commercial software transactions these terms (such as limitations of liability, warranties and warranty disclaimers, and indemnity if the software infringes intellectual property rights of others) are often negotiated by attorneys specialized in software licensing. The legal field has seen the growth of this specialized practice area due to unique legal issues with software licenses, and the desire of software companies to protect assets which, if licensed improperly, could diminish their value. [edit]Software licenses and copyright law In the United States, Section 117 of the Copyright Act gives the owner of a particular copy of software the explicit right to use the software with a computer, even if use of the software with a computer requires the making of incidental copies or adaptations (acts which could otherwise potentially constitute copyright infringement). Therefore, the owner of a copy of computer software is legally entitled to use that copy of software. Hence, if the end-user of software is the owner of the respective copy, then the end-user may legally use the software without a license from the software publisher. As many proprietary "licenses" only enumerate the rights that the user already has under 17 U.S.C. § 117, and yet proclaim to take rights away from the user, these contracts may lackconsideration. Proprietary software licenses often proclaim to give software publishers more control over the way their software is used by keeping ownership of each copy of software with the software publisher. By doing so, Section 117 does not apply to the end-user and the software publisher may then compel the end-user to accept all of the terms of the license agreement, many of which may be more restrictive than copyright law alone. It should be noticed that the form of the relationship determines if it is a lease or a purchase, for example UMG v. Augusto,[1] Vernor v. Autodesk, Inc..[2][3] How to License Software When developers sell software they are actually not selling the software, they are selling a license that allows the user to use the software. Software licensing can take a number of different forms. Software can be licensed based on the number of computers that the software is loaded on or, as is common with network software the software can be licensed based on the number of users accessing the application. EULA = End User License Agreement Most applications require users to agree to the EULA terms during the installation process. The EULA limits the developers liability and explains how the software is licensed. Single License - A single user license is generally defined as a software license that can only be installed on a single system. Per Computer - One license for each computer the software is loaded on. Per User - Allows users to use software on "home" and "work" computers. Multi-User License - A multi-user license means that the license can be installed on multiple systems or possibly a network. Site License - All computers at a single physical location are licensed to run the software. Site licenses are popular with corporations and schools. Enterprise Site License - All computers within all offices of a company or school. Enterprise site license cover multiple locations or satellite offices of a company. Considerations When Licensing These issues could come up, so make sure you know how you want to handle them before they do. 1. Some developers expand a single user license to include a secondary system, like a notebook. For your software users will require a second license, if so is there a discount? 2. Can a single license be used on different computers if they are not used simultaneously? This is a "backup" installation for redundancy. Do customers need to purchase a second backup license. 3. If you have both a Windows and Mac version, can the purchaser use their license in the opposite operating system than the one that they purchased? 4. Is the license transferable or assignable? If the company is sold are the software licenses transferable to the new owners and computers? If a user no longer uses the software can they sell their license on ebay? Sample EULA EULA stands for End User Licensing Agreement. This is the agreement through which the software is licensed to the software user. Sample EULA END-USER LICENSE AGREEMENT FOR {INSERT PRODUCT NAME} IMPORTANT PLEASE READ THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT CAREFULLY BEFORE CONTINUING WITH THIS PROGRAM INSTALL: {INSERT COMPANY NAME's } End-User License Agreement ("EULA") is a legal agreement between you (either an individual or a single entity) and {INSERT COMPANY NAME}. for the {INSERT COMPANY NAME} software product(s) identified above which may include associated software components, media, printed materials, and "online" or electronic documentation ("SOFTWARE PRODUCT"). By installing, copying, or otherwise using the SOFTWARE PRODUCT, you agree to be bound by the terms of this EULA. This license agreement represents the entire agreement concerning the program between you and {INSERT COMPANY NAME}, (referred to as "licenser"), and it supersedes any prior proposal, representation, or understanding between the parties. If you do not agree to the terms of this EULA, do not install or use the SOFTWARE PRODUCT. The SOFTWARE PRODUCT is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE PRODUCT is licensed, not sold. 1. GRANT OF LICENSE. The SOFTWARE PRODUCT is licensed as follows: (a) Installation and Use. {INSERT COMPANY NAME} grants you the right to install and use copies of the SOFTWARE PRODUCT on your computer running a validly licensed copy of the operating system for which the SOFTWARE PRODUCT was designed [e.g., Windows 95, Windows NT, Windows 98, Windows 2000, Windows 2003, Windows XP, Windows ME, Windows Vista]. (b) Backup Copies. You may also make copies of the SOFTWARE PRODUCT as may be necessary for backup and archival purposes. 2. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS. (a) Maintenance of Copyright Notices. You must not remove or alter any copyright notices on any and all copies of the SOFTWARE PRODUCT. (b) Distribution. You may not distribute registered copies of the SOFTWARE PRODUCT to third parties. Evaluation versions available for download from {INSERT COMPANY NAME}'s websites may be freely distributed. (c) Prohibition on Reverse Engineering, Decompilation, and Disassembly. You may not reverse engineer, decompile, or disassemble the SOFTWARE PRODUCT, except and only to the extent that such activity is expressly permitted by applicable law notwithstanding this limitation. (d) Rental. You may not rent, lease, or lend the SOFTWARE PRODUCT. (e) Support Services. {INSERT COMPANY NAME} may provide you with support services related to the SOFTWARE PRODUCT ("Support Services"). Any supplemental software code provided to you as part of the Support Services shall be considered part of the SOFTWARE PRODUCT and subject to the terms and conditions of this EULA. (f) Compliance with Applicable Laws. You must comply with all applicable laws regarding use of the SOFTWARE PRODUCT. 3. TERMINATION Without prejudice to any other rights, {INSERT COMPANY NAME} may terminate this EULA if you fail to comply with the terms and conditions of this EULA. In such event, you must destroy all copies of the SOFTWARE PRODUCT in your possession. 4. COPYRIGHT All title, including but not limited to copyrights, in and to the SOFTWARE PRODUCT and any copies thereof are owned by {INSERT COMPANY NAME} or its suppliers. All title and intellectual property rights in and to the content which may be accessed through use of the SOFTWARE PRODUCT is the property of the respective content owner and may be protected by applicable copyright or other intellectual property laws and treaties. This EULA grants you no rights to use such content. All rights not expressly granted are reserved by {INSERT COMPANY NAME}. 5. NO WARRANTIES {INSERT COMPANY NAME} expressly disclaims any warranty for the SOFTWARE PRODUCT. The SOFTWARE PRODUCT is provided 'As Is' without any express or implied warranty of any kind, including but not limited to any warranties of merchantability, noninfringement, or fitness of a particular purpose. {INSERT COMPANY NAME} does not warrant or assume responsibility for the accuracy or completeness of any information, text, graphics, links or other items contained within the SOFTWARE PRODUCT. {INSERT COMPANY NAME} makes no warranties respecting any harm that may be caused by the transmission of a computer virus, worm, time bomb, logic bomb, or other such computer program. {INSERT COMPANY NAME} further expressly disclaims any warranty or representation to Authorized Users or to any third party. 6. LIMITATION OF LIABILITY In no event shall {INSERT COMPANY NAME} be liable for any damages (including, without limitation, lost profits, business interruption, or lost information) rising out of 'Authorized Users' use of or inability to use the SOFTWARE PRODUCT, even if {INSERT COMPANY NAME} has been advised of the possibility of such damages. In no event will {INSERT COMPANY NAME} be liable for loss of data or for indirect, special, incidental, consequential (including lost profit), or other damages based in contract, tort or otherwise. {INSERT COMPANY NAME} shall have no liability with respect to the content of the SOFTWARE PRODUCT or any part thereof, including but not limited to errors or omissions contained therein, libel, infringements of rights of publicity, privacy, trademark rights, business interruption, personal injury, loss of privacy, moral rights or the disclosure of confidential information. Developers are responsible for the content of their EULA and this should only be used as a guide. What is software piracy? There are several kinds of software piracy. The bottom line is when software is pirated, the developer does not receive compensation for their work. Effects of Software Piracy When software is pirated, consumers, software developers, and resellers are harmed. Software piracy increases the risk consumer’s computers will be corrupted by defective software and infected with viruses. Those who provide defective and illegal software do not tend to provide sales and technical support. Pirated software usually has inadequate documentation, which prevents consumers from enjoying the full benefits of the software package. In addition, consumers are unable to take advantage of technical support and product upgrades, which are typically available to legitimate registered users of the software. Pirated software can cost consumers lost time and more money. Developers lose revenue from pirated software, from current products as well as from future programs. When software is sold most developers invest a portion of the revenue into future development and better software packages. When software is pirated, software developers lose revenue from the sale of their products, which hinders development of new software and stifles the growth of the software company. Kinds of Piracy End User Piracy Using multiple copies of a single software package on several different systems or distributing registered or licensed copies of software to others. Another common form of end user piracy is when a cracked version of the software is used. Hacking into the software and disabling the copy protection, or illegally generating key codes that unlocks the trial version making the software a registered version creates a cracked version. Reseller Piracy Reseller piracy occurs when an unscrupulous reseller distributes multiple copies of a single software package to different customers; this includes preloading systems with software without providing original manuals & diskettes. Reseller piracy also occurs when resellers knowingly sell counterfeit versions of software to unsuspecting customers. Indications of reseller piracy are multiple users with the same serial number, lack of original documentation or an incomplete set, and non-matching documentation. Trademark/Trade Name Infringement Infringement occurs when an individual or dealer claims to be authorized either as a technician, support provider or reseller, or is improperly using a trademark or trade name. BBS/Internet Piracy – BBS/ Internet Piracy occurs when there is an electronic transfer of copyrighted software. If system operators and/or users upload or download copyrighted software and materials onto or from bulletin boards or the Internet for others to copy and use without the proper license. Often hackers will distribute or sell the hacked software or cracked keys. The developer does not receive any money for the software the hacker distributed. This is an infringement on the developer’s copyright. Another technique used by software pirates is to illegally obtain a registered copy of software. Pirates purchase the software once and use it on multiple computers. Purchasing software with a stolen credit card is another form of software piracy. Unfortunately there are many kinds of software piracy that has hampered the software industry. These types of software piracy have hampered the software industry. For the software industry to prosper and further develop useful software for consumers please support and pay for software. This results in better software for all. Software Testing Carnegie Mellon University 18-849b Dependable Embedded Systems Spring 1999 Authors: Jiantao Pan [email protected] Abstract: Software testing is any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results. [Hetzel88] Although crucial to software quality and widely deployed by programmers and testers, software testing still remains an art, due to limited understanding of the principles of software. The difficulty in software testing stems from the complexity of software: we can not completely test a program with moderate complexity. Testing is more than just debugging. The purpose of testing can be quality assurance, verification and validation, or reliability estimation. Testing can be used as a generic metric as well. Correctness testing and reliability testing are two major areas of testing. Software testing is a tradeoff between budget, time and quality. Contents: Introduction Key Concepts Taxonomy Testing automation When to stop testing? Alternatives to testing Available tools, techniques, and metrics Relationship to other topics Conclusions Annotated Reference List & Further Reading Introduction Software Testing is the process of executing a program or system with the intent of finding errors. [Myers79] Or, it involves any activity aimed at evaluating an attribute or capability of a program or system and determining that it meets its required results. [Hetzel88] Software is not unlike other physical processes where inputs are received and outputs are produced. Where software differs is in the manner in which it fails. Most physical systems fail in a fixed (and reasonably small) set of ways. By contrast, software can fail in many bizarre ways. Detecting all of the different failure modes for software is generally infeasible. [Rstcorp] Unlike most physical systems, most of the defects in software are design errors, not manufacturing defects. Software does not suffer from corrosion, wear-andtear -- generally it will not change until upgrades, or until obsolescence. So once the software is shipped, the design defects -- or bugs -- will be buried in and remain latent until activation. Software bugs will almost always exist in any software module with moderate size: not because programmers are careless or irresponsible, but because the complexity of software is generally intractable -- and humans have only limited ability to manage complexity. It is also true that for any complex systems, design defects can never be completely ruled out. Discovering the design defects in software, is equally difficult, for the same reason of complexity. Because software and any digital systems are not continuous, testing boundary values are not sufficient to guarantee correctness. All the possible values need to be tested and verified, but complete testing is infeasible. Exhaustively testing a simple program to add only two integer inputs of 32-bits (yielding 2^64 distinct test cases) would take hundreds of years, even if tests were performed at a rate of thousands per second. Obviously, for a realistic software module, the complexity can be far beyond the example mentioned here. If inputs from the real world are involved, the problem will get worse, because timing and unpredictable environmental effects and human interactions are all possible input parameters under consideration. A further complication has to do with the dynamic nature of programs. If a failure occurs during preliminary testing and the code is changed, the software may now work for a test case that it didn't work for previously. But its behavior on pre-error test cases that it passed before can no longer be guaranteed. To account for this possibility, testing should be restarted. The expense of doing this is often prohibitive. [Rstcorp] An interesting analogy parallels the difficulty in software testing with the pesticide, known as the Pesticide Paradox [Beizer90]: Every method you use to prevent or find bugs leaves a residue of subtler bugs against which those methods are ineffectual. But this alone will not guarantee to make the software better, because the Complexity Barrier [Beizer90] principle states: Software complexity(and therefore that of bugs) grows to the limits of our ability to manage that complexity. By eliminating the (previous) easy bugs you allowed another escalation of features and complexity, but his time you have subtler bugs to face, just to retain the reliability you had before. Society seems to be unwilling to limit complexity because we all want that extra bell, whistle, and feature interaction. Thus, our users always push us to the complexity barrier and how close we can approach that barrier is largely determined by the strength of the techniques we can wield against ever more complex and subtle bugs. [Beizer90] Regardless of the limitations, testing is an integral part in software development. It is broadly deployed in every phase in the software development cycle. Typically, more than 50% percent of the development time is spent in testing. Testing is usually performed for the following purposes: To improve quality. As computers and software are used in critical applications, the outcome of a bug can be severe. Bugs can cause huge losses. Bugs in critical systems have caused airplane crashes, allowed space shuttle missions to go awry, halted trading on the stock market, and worse. Bugs can kill. Bugs can cause disasters. The so-called year 2000 (Y2K) bug has given birth to a cottage industry of consultants and programming tools dedicated to making sure the modern world doesn't come to a screeching halt on the first day of the next century. [Bugs] In a computerized embedded world, the quality and reliability of software is a matter of life and death. Quality means the conformance to the specified design requirement. Being correct, the minimum requirement of quality, means performing as required under specified circumstances. Debugging, a narrow view of software testing, is performed heavily to find out design defects by the programmer. The imperfection of human nature makes it almost impossible to make a moderately complex program correct the first time. Finding the problems and get them fixed [Kaner93], is the purpose of debugging in programming phase. For Verification & Validation (V&V) Just as topic Verification and Validation indicated, another important purpose of testing is verification and validation (V&V). Testing can serve as metrics. It is heavily used as a tool in the V&V process. Testers can make claims based on interpretations of the testing results, which either the product works under certain situations, or it does not work. We can also compare the quality among different products under the same specification, based on results from the same test. We can not test quality directly, but we can test related factors to make quality visible. Quality has three sets of factors -- functionality, engineering, and adaptability. These three sets of factors can be thought of as dimensions in the software quality space. Each dimension may be broken down into its component factors and considerations at successively lower levels of detail. Table 1 illustrates some of the most frequently cited quality considerations. Functionality Engineering (interior Adaptability (future (exterior quality) quality) quality) Correctness Efficiency Flexibility Reliability Testability Reusability Usability Documentation Maintainability Integrity Structure Table 1. Typical Software Quality Factors [Hetzel88] Good testing provides measures for all relevant factors. The importance of any particular factor varies from application to application. Any system where human lives are at stake must place extreme emphasis on reliability and integrity. In the typical business system usability and maintainability are the key factors, while for a one-time scientific program neither may be significant. Our testing, to be fully effective, must be geared to measuring each relevant factor and thus forcing quality to become tangible and visible. [Hetzel88] Tests with the purpose of validating the product works are named clean tests, or positive tests. The drawbacks are that it can only validate that the software works for the specified test cases. A finite number of tests can not validate that the software works for all situations. On the contrary, only one failed test is sufficient enough to show that the software does not work. Dirty tests, or negative tests, refers to the tests aiming at breaking the software, or showing that it does not work. A piece of software must have sufficient exception handling capabilities to survive a significant level of dirty tests. A testable design is a design that can be easily validated, falsified and maintained. Because testing is a rigorous effort and requires significant time and cost, design for testability is also an important design rule for software development. For reliability estimation [Kaner93] [Lyu95] Software reliability has important relations with many aspects of software, including the structure, and the amount of testing it has been subjected to. Based on an operational profile (an estimate of the relative frequency of use of various inputs to the program [Lyu95]), testing can serve as a statistical sampling method to gain failure data for reliability estimation. Software testing is not mature. It still remains an art, because we still cannot make it a science. We are still using the same testing techniques invented 20-30 years ago, some of which are crafted methods or heuristics rather than good engineering methods. Software testing can be costly, but not testing software is even more expensive, especially in places that human lives are at stake. Solving the software-testing problem is no easier than solving the Turing halting problem. We can never be sure that a piece of software is correct. We can never be sure that the specifications are correct. No verification system can verify every correct program. We can never be certain that a verification system is correct either. Key Concepts Taxonomy There is a plethora of testing methods and testing techniques, serving multiple purposes in different life cycle phases. Classified by purpose, software testing can be divided into: correctness testing, performance testing, reliability testing and security testing. Classified by life-cycle phase, software testing can be classified into the following categories: requirements phase testing, design phase testing, program phase testing, evaluating test results, installation phase testing, acceptance testing and maintenance testing. By scope, software testing can be categorized as follows: unit testing, component testing, integration testing, and system testing. Correctness testing Correctness is the minimum requirement of software, the essential purpose of testing. Correctness testing will need some type of oracle, to tell the right behavior from the wrong one. The tester may or may not know the inside details of the software module under test, e.g. control flow, data flow, etc. Therefore, either a white-box point of view or black-box point of view can be taken in testing software. We must note that the black-box and white-box ideas are not limited in correctness testing only. Black-box testing The black-box approach is a testing method in which test data are derived from the specified functional requirements without regard to the final program structure. [Perry90] It is also termed data-driven, input/output driven[Myers79], or requirements-based [Hetzel88] testing. Because only the functionality of the software module is of concern, black-box testing also mainly refers to functional testing -- a testing method emphasized on executing the functions and examination of their input and output data. [Howden87] The tester treats the software under test as a black box -- only the inputs, outputs and specification are visible, and the functionality is determined by observing the outputs to corresponding inputs. In testing, various inputs are exercised and the outputs are compared against specification to validate the correctness. All test cases are derived from the specification. No implementation details of the code are considered. It is obvious that the more we have covered in the input space, the more problems we will find and therefore we will be more confident about the quality of the software. Ideally we would be tempted to exhaustively test the input space. But as stated above, exhaustively testing the combinations of valid inputs will be impossible for most of the programs, let alone considering invalid inputs, timing, sequence, and resource variables. Combinatorial explosion is the major roadblock in functional testing. To make things worse, we can never be sure whether the specification is either correct or complete. Due to limitations of the language used in the specifications (usually natural language), ambiguity is often inevitable. Even if we use some type of formal or restricted language, we may still fail to write down all the possible cases in the specification. Sometimes, the specification itself becomes an intractable problem: it is not possible to specify precisely every situation that can be encountered using limited words. And people can seldom specify clearly what they want -- they usually can tell whether a prototype is, or is not, what they want after they have been finished. Specification problems contributes approximately 30 percent of all bugs in software. [Beizer95] The research in black-box testing mainly focuses on how to maximize the effectiveness of testing with minimum cost, usually the number of test cases. It is not possible to exhaust the input space, but it is possible to exhaustively test a subset of the input space. Partitioning is one of the common techniques. If we have partitioned the input space and assume all the input values in a partition is equivalent, then we only need to test one representative value in each partition to sufficiently cover the whole input space. Domain testing [Beizer95] partitions the input domain into regions, and consider the input values in each domain an equivalent class. Domains can be exhaustively tested and covered by selecting a representative value(s) in each domain. Boundary values are of special interest. Experience shows that test cases that explore boundary conditions have a higher payoff than test cases that do not. Boundary value analysis [Myers79] requires one or more boundary values selected as representative test cases. The difficulties with domain testing are that incorrect domain definitions in the specification can not be efficiently discovered. Good partitioning requires knowledge of the software structure. A good testing plan will not only contain black-box testing, but also white-box approaches, and combinations of the two. White-box testing Contrary to black-box testing, software is viewed as a white-box, or glass-box in white-box testing, as the structure and flow of the software under test are visible to the tester. Testing plans are made according to the details of the software implementation, such as programming language, logic, and styles. Test cases are derived from the program structure. White-box testing is also called glass-box testing, logic-driven testing [Myers79]or design-based testing [Hetzel88]. There are many techniques available in white-box testing, because the problem of intractability is eased by specific knowledge and attention on the structure of the software under test. The intention of exhausting some aspect of the software is still strong in white-box testing, and some degree of exhaustion can be achieved, such as executing each line of code at least once (statement coverage), traverse every branch statements (branch coverage), or cover all the possible combinations of true and false condition predicates (Multiple condition coverage). [Parrington89] Control-flow testing, loop testing, and data-flow testing, all maps the corresponding flow structure of the software into a directed graph. Test cases are carefully selected based on the criterion that all the nodes or paths are covered or traversed at least once. By doing so we may discover unnecessary "dead" code -- code that is of no use, or never get executed at all, which can not be discovered by functional testing. In mutation testing, the original program code is perturbed and many mutated programs are created, each contains one fault. Each faulty version of the program is called a mutant. Test data are selected based on the effectiveness of failing the mutants. The more mutants a test case can kill, the better the test case is considered. The problem with mutation testing is that it is too computationally expensive to use. The boundary between black-box approach and white-box approach is not clear-cut. Many testing strategies mentioned above, may not be safely classified into black-box testing or white-box testing. It is also true for transaction-flow testing, syntax testing, finite-state testing, and many other testing strategies not discussed in this text. One reason is that all the above techniques will need some knowledge of the specification of the software under test. Another reason is that the idea of specification itself is broad -- it may contain any requirement including the structure, programming language, and programming style as part of the specification content. We may be reluctant to consider random testing as a testing technique. The test case selection is simple and straightforward: they are randomly chosen. Study in [Duran84] indicates that random testing is more cost effective for many programs. Some very subtle errors can be discovered with low cost. And it is also not inferior in coverage than other carefully designed testing techniques. One can also obtain reliability estimate using random testing results based on operational profiles. Effectively combining random testing with other testing techniques may yield more powerful and cost-effective testing strategies. Performance testing Not all software systems have specifications on performance explicitly. But every system will have implicit performance requirements. The software should not take infinite time or infinite resource to execute. "Performance bugs" sometimes are used to refer to those design problems in software that cause the system performance to degrade. Performance has always been a great concern and a driving force of computer evolution. Performance evaluation of a software system usually includes: resource usage, throughput, stimulus-response time and queue lengths detailing the average or maximum number of tasks waiting to be serviced by selected resources. Typical resources that need to be considered include network bandwidth requirements, CPU cycles, disk space, disk access operations, and memory usage [Smith90]. The goal of performance testing can be performance bottleneck identification, performance comparison and evaluation, etc. The typical method of doing performance testing is using a benchmark -- a program, workload or trace designed to be representative of the typical system usage. [Vokolos98] Reliability testing Software reliability refers to the probability of failure-free operation of a system. It is related to many aspects of software, including the testing process. Directly estimating software reliability by quantifying its related factors can be difficult. Testing is an effective sampling method to measure software reliability. Guided by the operational profile, software testing (usually blackbox testing) can be used to obtain failure data, and an estimation model can be further used to analyze the data to estimate the present reliability and predict future reliability. Therefore, based on the estimation, the developers can decide whether to release the software, and the users can decide whether to adopt and use the software. Risk of using software can also be assessed based on reliability information. [Hamlet94] advocates that the primary goal of testing should be to measure the dependability of tested software. There is agreement on the intuitive meaning of dependable software: it does not fail in unexpected or catastrophic ways. [Hamlet94] Robustness testing and stress testing are variances of reliability testing based on this simple criterion. The robustness of a software component is the degree to which it can function correctly in the presence of exceptional inputs or stressful environmental conditions. [IEEE90] Robustness testing differs with correctness testing in the sense that the functional correctness of the software is not of concern. It only watches for robustness problems such as machine crashes, process hangs or abnormal termination. The oracle is relatively simple, therefore robustness testing can be made more portable and scalable than correctness testing. This research has drawn more and more interests recently, most of which uses commercial operating systems as their target, such as the work in [Koopman97] [Kropp98] [Ghosh98] [Devale99] [Koopman99]. Stress testing, or load testing, is often used to test the whole system rather than the software alone. In such tests the software or system are exercised with or beyond the specified limits. Typical stress includes resource exhaustion, bursts of activities, and sustained high loads. Security testing Software quality, reliability and security are tightly coupled. Flaws in software can be exploited by intruders to open security holes. With the development of the Internet, software security problems are becoming even more severe. Many critical software applications and services have integrated security measures against malicious attacks. The purpose of security testing of these systems include identifying and removing software flaws that may potentially lead to security violations, and validating the effectiveness of security measures. Simulated security attacks can be performed to find vulnerabilities. Testing automation Software testing can be very costly. Automation is a good way to cut down time and cost. Software testing tools and techniques usually suffer from a lack of generic applicability and scalability. The reason is straight-forward. In order to automate the process, we have to have some ways to generate oracles from the specification, and generate test cases to test the target software against the oracles to decide their correctness. Today we still don't have a full-scale system that has achieved this goal. In general, significant amount of human intervention is still needed in testing. The degree of automation remains at the automated test script level. The problem is lessened in reliability testing and performance testing. In robustness testing, the simple specification and oracle: doesn't crash, doesn't hang suffices. Similar simple metrics can also be used in stress testing. When to stop testing? Testing is potentially endless. We can not test till all the defects are unearthed and removed -- it is simply impossible. At some point, we have to stop testing and ship the software. The question is when. Realistically, testing is a trade-off between budget, time and quality. It is driven by profit models. The pessimistic, and unfortunately most often used approach is to stop testing whenever some, or any of the allocated resources -- time, budget, or test cases -- are exhausted. The optimistic stopping rule is to stop testing when either reliability meets the requirement, or the benefit from continuing testing cannot justify the testing cost.[Yang95] This will usually require the use of reliability models to evaluate and predict reliability of the software under test. Each evaluation requires repeated running of the following cycle: failure data gathering -- modeling -- prediction. This method does not fit well for ultra-dependable systems, however, because the real field failure data will take too long to accumulate. Alternatives to testing Software testing is more and more considered a problematic method toward better quality. Using testing to locate and correct software defects can be an endless process. Bugs cannot be completely ruled out. Just as the complexity barrier indicates: chances are testing and fixing problems may not necessarily improve the quality and reliability of the software. Sometimes fixing a problem may introduce much more severe problems into the system, happened after bug fixes, such as the telephone outage in California and eastern seaboard in 1991. The disaster happened after changing 3 lines of code in the signaling system. In a narrower view, many testing techniques may have flaws. Coverage testing, for example. Is code coverage, branch coverage in testing really related to software quality? There is no definite proof. As early as in[Myers79], the socalled "human testing" -- including inspections, walkthroughs, reviews -- are suggested as possible alternatives to traditional testing methods. [Hamlet94] advocates inspection as a cost-effect alternative to unit testing. The experimental results in [Basili85] suggests that code reading by stepwise abstraction is at least as effective as on-line functional and structural testing in terms of number and cost of faults observed. Using formal methods to "prove" the correctness of software is also an attracting research direction. But this method can not surmount the complexity barrier either. For relatively simple software, this method works well. It does not scale well to those complex, full-fledged large software systems, which are more error-prone. In a broader view, we may start to question the utmost purpose of testing. Why do we need more effective testing methods anyway, since finding defects and removing them does not necessarily lead to better quality. An analogy of the problem is like the car manufacturing process. In the craftsmanship epoch, we make cars and hack away the problems and defects. But such methods were washed away by the tide of pipelined manufacturing and good quality engineering process, which makes the car defect-free in the manufacturing phase. This indicates that engineering the design process (such as clean-room software engineering) to make the product have less defects may be more effective than engineering the testing process. Testing is used solely for quality monitoring and management, or, "design for testability". This is the leap for software from craftsmanship to engineering. Available tools, techniques, and metrics There are an abundance of software testing tools exist. The correctness testing tools are often specialized to certain systems and have limited ability and generality. Robustness and stress testing tools are more likely to be made generic. Mothora [DeMillo91] is an automated mutation testing tool-set developed at Purdue University. Using Mothora, the tester can create and execute test cases, measure test case adequacy, determine input-output correctness, locate and remove faults or bugs, and control and document the test. NuMega's Boundschecker [NuMega99] Rational's Purify [Rational99]. They are run-time checking and debugging aids. They can both check and protect against memory leaks and pointer problems. Ballista COTS Software Robustness Testing Harness [Ballista99]. The Ballista testing harness is an full-scale automated robustness testing tool. The first version supports testing up to 233 POSIX function calls in UNIX operating systems. The second version also supports testing of user functions provided that the data types are recognized by the testing server. The Ballista testing harness gives quantitative measures of robustness comparisons across operating systems. The goal is to automatically test and harden Commercial Off-TheShelf (COTS) software against robustness failures. Software Installation/Uninstallation Testing August 30th, 2007 — Automation Testing, Installation Testing, Types of testing Have you performed software installation testing? How was the experience? Well, Installation testing (Implementation Testing) is quite interesting part of software testing life cycle. Installation testing is like introducing a guest in your home. The new guest should be properly introduced to all the family members in order to feel him comfortable. Installation of new software is also quite like above example. If your installation is successful on the new system then customer will be definitely happy but what if things are completely opposite. If installation fails then our program will not work on that system not only this but can leave user’s system badly damaged. User might require to reinstall the full operating system. In above case will you make any impression on user? Definitely not! Your first impression to make a loyal customer is ruined due to incomplete installation testing. What you need to do for a good first impression? Test the installer appropriately with combination of both manual and automated processes on different machines with different configuration. Major concerned of installation testing is Time! It requires lot of time to even execute a single test case. If you are going to test a big application installer then think about time required to perform such a many test cases on different configurations. We will see different methods to perform manual installer testing and some basic guideline for automating the installation process. To start installation testing first decide on how many different system configurations you want to test the installation. Prepare one basic hard disk drive. Format this HDD with most common or default file system, install most common operating system (Windows) on this HDD. Install some basic required components on this HDD. Each time create images of this base HDD and you can create other configurations on this base drive. Make one set of each configuration like Operating system and file format to be used for further testing. How we can use automation in this process? Well make some systems dedicated for creating basic images (use software’s like Norton Ghost for creating exact images of operating system quickly) of base configuration. This will save your tremendous time in each test case. For example if time to install one OS with basic configuration is say 1 hour then for each test case on fresh OS you will require 1+ hour. But creating image of OS will hardly require 5 to 10 minutes and you will save approximately 40 to 50 minutes! You can use one operating system with multiple attempts of installation of installer. Each time uninstalling the application and preparing the base state for next test case. Be careful here that your uninstallation program should be tested before and should be working fine. Installation testing tips with some broad test cases: 1) Use flow diagrams to perform installation testing. Flow diagrams simplify our task. See example flow diagram for basic installation testing test case. Add some more test cases on this basic flow chart Such as if our application is not the first release then try to add different logical installation paths. 2) If you have previously installed compact basic version of application then in next test case install the full application version on the same path as used for compact version. 3) If you are using flow diagram to test different files to be written on disk while installation then use the same flow diagram in reverse order to test uninstallation of all the installed files on disk. 4) Use flow diagrams toautomate the testing efforts. It will be very easy to convert diagrams into automated scripts. 5) Test the installer scripts used for checking the required disk space. If installer is prompting required disk space 1MB, then make sure exactly 1MB is used or whether more disk space utilized during installation. If yes flag this as error. 6) Test disk space requirement on different file system format. Like FAT16 will require more space than efficient NTFS or FAT32 file systems. 7) If possible set a dedicated system for only creating disk images. As said above this will save your testing time. 8 ) Use distributed testing environment in order to carry out installation testing. Distributed environment simply save your time and you can effectively manage all the different test cases from a single machine. The good approach for this is to create a master machine, which will drive different slave machines on network. You can start installation simultaneously on different machine from the master system. 9) Try to automate the routine to test the number of files to be written on disk. You can maintain this file list to be written on disk in and excel sheet and can give this list as a input to automated script that will check each and every path to verify the correct installation. 10) Use software’s available freely in market to verify registry changes on successful installation. Verify the registry changes with your expected change list after installation. 11) Forcefully break the installation process in between. See the behavior of system and whether system recovers to its original state without any issues. You can test this “break of installation” on every installation step. 12) Disk space checking: This is the crucial checking in the installation-testing scenario. You can choose different manual and automated methods to do this checking. In manual methods you can check free disk space available on drive before installation and disk space reported by installer script to check whether installer is calculating and reporting disk space accurately. Check the disk space after the installation to verify accurate usage of installation disk space. Run various combination of disk space availability by using some tools to automatically making disk space full while installation. Check system behavior on low disk space conditions while installation. 13) As you check installation you can test for uninstallation also. Before each new iteration of installation make sure that all the files written to disk are removed after uninstallation. Some times uninstallation routine removes files from only last upgraded installation keeping the old version files untouched. Also check for rebooting option after uninstallation manually and forcefully not to reboot. I have addressed many areas of manual as well as automated installation testing procedure. Still there are many areas you need to focus on depending on the complexity of your software under installation. These not addressed important tasks includesinstallation over the network, online installation, patch installation, Database checking on Installation, Shared DLL installation and uninstallation etc. Pre-installation Tasks 2.3.1 Inventory Your Computer Before installing FreeBSD you should attempt to inventory the components in your computer. The FreeBSD installation routines will show you the components (hard disks, network cards, CDROM drives, and so forth) with their model number and manufacturer. FreeBSD will also attempt to determine the correct configuration for these devices, which includes information about IRQ and IO port usage. Due to the vagaries of PC hardware this process is not always completely successful, and you may need to correct FreeBSD's determination of your configuration. If you already have another operating system installed, such as Windows® or Linux, it is a good idea to use the facilities provided by those operating systems to see how your hardware is already configured. If you are not sure what settings an expansion card is using, you may find it printed on the card itself. Popular IRQ numbers are 3, 5, and 7, and IO port addresses are normally written as hexadecimal numbers, such as 0x330. We recommend you print or write down this information before installing FreeBSD. It may help to use a table, like this: Table 2-1. Sample Device Inventory Device Name IRQ IO port(s) Notes Device Name First hard disk CDROM Second hard disk First IDE controller Network card Modem ... IRQ N/A N/A N/A 14 N/A N/A IO port(s) N/A N/A N/A 0x1f0 N/A N/A Notes 40 GB, made by Seagate, first IDE master First IDE slave 20 GB, made by IBM, second IDE master Intel® 10/100 3Com® 56K faxmodem, on COM1 Once the inventory of the components in your computer is done, you have to check if they match the hardware requirements of the FreeBSD release you want to install. 2.3.2 Backup Your Data If the computer you will be installing FreeBSD on contains valuable data, then ensure you have it backed up, and that you have tested the backups before installing FreeBSD. The FreeBSD installation routine will prompt you before writing any data to your disk, but once that process has started it cannot be undone. 2.3.3 Decide Where to Install FreeBSD If you want FreeBSD to use your entire hard disk, then there is nothing more to concern yourself with at this point -- you can skip this section. However, if you need FreeBSD to co-exist with other operating systems then you need to have a rough understanding of how data is laid out on the disk, and how this affects you. 2.3.3.1 Disk Layouts for FreeBSD/i386 A PC disk can be divided into discrete chunks. These chunks are called partitions. Since FreeBSD internally also has partitions, the naming can become confusing very quickly, therefore these disk chunks are referred to as disk slices or simply slices in FreeBSD itself. For example, the FreeBSD utility fdisk which operates on the PC disk partitions, refers to slices instead of partitions. By design, the PC only supports four partitions per disk. These partitions are called primary partitions. To work around this limitation and allow more than four partitions, a new partition type was created, the extended partition. A disk may contain only one extended partition. Special partitions, called logical partitions, can be created inside this extended partition. Each partition has a partition ID, which is a number used to identify the type of data on the partition. FreeBSD partitions have the partition ID of 165. In general, each operating system that you use will identify partitions in a particular way. For example, DOS, and its descendants, like Windows, assign each primary and logical partition a drive letter, starting with C:. FreeBSD must be installed into a primary partition. FreeBSD can keep all its data, including any files that you create, on this one partition. However, if you have multiple disks, then you can create a FreeBSD partition on all, or some, of them. When you install FreeBSD, you must have one partition available. This might be a blank partition that you have prepared, or it might be an existing partition that contains data that you no longer care about. If you are already using all the partitions on all your disks, then you will have to free one of them for FreeBSD using the tools provided by the other operating systems you use (e.g.,fdisk on DOS or Windows). If you have a spare partition then you can use that. However, you may need to shrink one or more of your existing partitions first. A minimal installation of FreeBSD takes as little as 100 MB of disk space. However, that is a very minimal install, leaving almost no space for your own files. A more realistic minimum is 250 MB without a graphical environment, and 350 MB or more if you want a graphical user interface. If you intend to install a lot of third-party software as well, then you will need more space. You can use a commercial tool such as PartitionMagic®, or a free tool such as GParted, to resize your partitions and make space for FreeBSD. Both PartitionMagic and GPartedare known to work on NTFS. GParted is available on a number of Live CD Linux distributions, such as SystemRescueCD. Problems have been reported resizing Microsoft® Vista partitions. Having a Vista installation CDROM handy when attempting such an operation is recommended. As with all such disk maintenance tasks, a current set of backups is also strongly advised. Warning: Incorrect use of these tools can delete the data on your disk. Be sure that you have recent, working backups before using them. Example 2-1. Using an Existing Partition Unchanged Suppose that you have a computer with a single 4 GB disk that already has a version of Windows installed, and you have split the disk into two drive letters, C: andD:, each of which is 2 GB in size. You have 1 GB of data on C:, and 0.5 GB of data on D:. This means that your disk has two partitions on it, one per drive letter. You can copy all your existing data from D: to C:, which will free up the second partition, ready for FreeBSD. Example 2-2. Shrinking an Existing Partition Suppose that you have a computer with a single 4 GB disk that already has a version of Windows installed. When you installed Windows you created one large partition, giving you a C: drive that is 4 GB in size. You are currently using 1.5 GB of space, and want FreeBSD to have 2 GB of space. In order to install FreeBSD you will need to either: 1. Backup your Windows data, and then reinstall Windows, asking for a 2 GB partition at install time. 2. Use one of the tools such as PartitionMagic, described above, to shrink your Windows partition. 2.3.4 Collect Your Network Configuration Details If you intend to connect to a network as part of your FreeBSD installation (for example, if you will be installing from an FTP site or an NFS server), then you need to know your network configuration. You will be prompted for this information during the installation so that FreeBSD can connect to the network to complete the install. 2.3.4.1 Connecting to an Ethernet Network or Cable/DSL Modem If you connect to an Ethernet network, or you have an Internet connection using an Ethernet adapter via cable or DSL, then you will need the following information: 1. 2. 3. 4. 5. IP address IP address of the default gateway Hostname DNS server IP addresses Subnet Mask If you do not know this information, then ask your system administrator or service provider. They may say that this information is assigned automatically, using DHCP. If so, make a note of this. 2.3.4.2 Connecting Using a Modem If you dial up to an ISP using a regular modem then you can still install FreeBSD over the Internet, it will just take a very long time. You will need to know: 1. The phone number to dial for your ISP 2. The COM: port your modem is connected to 3. The username and password for your ISP account 2.3.5 Check for FreeBSD Errata Although the FreeBSD project strives to ensure that each release of FreeBSD is as stable as possible, bugs do occasionally creep into the process. On very rare occasions those bugs affect the installation process. As these problems are discovered and fixed, they are noted in the FreeBSD Errata, which is found on the FreeBSD web site. You should check the errata before installing to make sure that there are no late-breaking problems which you should be aware of. Information about all the releases, including the errata for each release, can be found on the release information section of the FreeBSD web site. 2.3.6 Obtain the FreeBSD Installation Files The FreeBSD installation process can install FreeBSD from files located in any of the following places: Local Media A CDROM or DVD A USB Memory Stick A DOS partition on the same computer A SCSI or QIC tape Floppy disks Network An FTP site, going through a firewall, or using an HTTP proxy, as necessary An NFS server A dedicated parallel or serial connection If you have purchased FreeBSD on CD or DVD then you already have everything you need, and should proceed to the next section (Section 2.3.7). If you have not obtained the FreeBSD installation files you should skip ahead to Section 2.13 which explains how to prepare to install FreeBSD from any of the above. After reading that section, you should come back here, and read on to Section 2.3.7. 2.3.7 Prepare the Boot Media The FreeBSD installation process is started by booting your computer into the FreeBSD installer--it is not a program you run within another operating system. Your computer normally boots using the operating system installed on your hard disk, but it can also be configured to use a “bootable” floppy disk. Most modern computers can also boot from a CDROM in the CDROM drive or from a USB disk. Tip: If you have FreeBSD on CDROM or DVD (either one you purchased or you prepared yourself), and your computer allows you to boot from the CDROM or DVD (typically a BIOS option called “Boot Order” or similar), then you can skip this section. The FreeBSD CDROM and DVD images are bootable and can be used to install FreeBSD without any other special preparation. To create a bootable memory stick, follow these steps: 1. Acquire the Memory Stick Image The memory stick image can be downloaded from the ISOIMAGES/ directory from ftp://ftp.FreeBSD.org/pub /FreeBSD/releases/arch/ISOIMAGES/version/FreeBSD-8.2RELEASE-arch-memstick.img. Replace arch and version with the architecture and the version number which you want to install, respectively. For example, the memory stick images for FreeBSD/i386 8.2-RELEASE are available fromftp://ftp.FreeBSD.org/pub/Fr eeBSD/releases/i386/ISOIMAGES/8.2/FreeBSD-8.2RELEASE-i386-memstick.img. The memory stick image has a .img extension. The ISOIMAGES/ directory contains a number of different images, and the one you will need to use will depend on the version of FreeBSD you are installing, and in some cases, the hardware you are installing to. Important: Before proceeding, back up the data you currently have on your USB stick, as this procedure will erase it. 2. Write The Image File to the Memory Stick Using FreeBSD To Write the Image Warning: The example below lists /dev/da0 as the target device where the image will be written. Be very careful that you have the correct device as the output target, or you may destroy your existing data. 1. Writing the Image with dd(1) The .img file is not a regular file you copy to the memory stick. It is an image of the complete contents of the disk. This means that you cannot simply copy files from one disk to another. Instead, you must use dd(1) to write the image directly to the disk: # dd if=FreeBSD8.2-RELEASE-i386- memstick.img of=/dev/da0 bs=64k If an Operation not permitted error is displayed, make certain that the target device is not in use, mounted, or being automounted by some wellintentioned utility program. Then try again. Using Windows® To Write the Image Warning: Make sure you use the correct drive letter as the output target, or you may overwrite and destroy existing data. 2. Obtaining Image Writer for Windows Image Writer for Windows is a free application that can correctly write an image file to a memory stick. Download it from https://la unchpad.net/w in32-imagewriter/ and extract it into a folder. 3. Writing The Image with Image Writer Double-click the Win32Dis kImager icon to start the program. Verify that the drive letter shown under Device is the drive with the memory stick. Click the folder icon and select the image to be written to the memory stick. Click Save to accept the image file name. Verify that everything is correct, and that no folders on the memory stick are open in other windows. Finally, click Write to write the image file to the drive. To create boot floppy images, follow these steps: 1. Acquire the Boot Floppy Images Important: Please note, as of FreeBSD 8.X, floppy disk images are no longer available. Please see above for instructions on how to install FreeBSD using a USB memory stick or just use a CDROM or a DVD. The boot disks are available on your installation media in the floppies/ directory, and can also be downloaded from the floppies directory,ftp://ftp.FreeBS D.org/pub/FreeBSD/releas es/arch/versionRELEASE/floppies/. Replace arch and version with the architecture and the version number which you want to install, respectively. For example, the boot floppy images for FreeBSD/i386 7.4RELEASE are available fromftp://ftp.FreeBSD.org/ pub/FreeBSD/releases/i386 /7.4-RELEASE/floppies/. The floppy images have a .flp extension. The floppies/ directory contains a number of different images, and the ones you will need to use depends on the version of FreeBSD you are installing, and in some cases, the hardware you are installing to. In most cases you will need four floppies, boot.flp, kern1.f lp, kern2.flp, andkern3.flp. Check README.TXT in the same directory for the most up to date information about these floppy images. Important: Your FTP program must use binary mode to download these disk images. Some web browsers have been known to use text (orASCII) mode, which will be apparent if you cannot boot from the disks. 2. Prepare the Floppy Disks You must prepare one floppy disk per image file you had to download. It is imperative that these disks are free from defects. The easiest way to test this is to format the disks for yourself. Do not trust preformatted floppies. The format utility in Windows will not tell about the presence of bad blocks, it simply marks them as “bad” and ignores them. It is advised that you use brand new floppies if choosing this installation route. Important: If you try to install FreeBSD and the installation program crashes, freezes, or otherwise misbehaves, one of the first things to suspect is the floppies. Try writing the floppy image files to new disks and try again. 3. Write the Image Files to the Floppy Disks The .flp files are not regular files you copy to the disk. They are images of the complete contents of the disk. This means that you cannot simply copy files from one disk to another. Instead, you must use specific tools to write the images directly to the disk. If you are creating the floppies on a computer running MSDOS®/Windows, then we provide a tool to do this called fdimage. If you are using the floppies from the CDROM, and your CDROM is the E: drive, then you would run this: E:\> tools\fdimage floppies\boot.flp A: Repeat this command for each .flp file, replacing the floppy disk each time, being sure to label the disks with the name of the file that you copied to them. Adjust the command line as necessary, depending on where you have placed the .flp files. If you do not have the CDROM, then fdimage can be downloaded from the toolsdirectory on the FreeBSD FTP site. If you are writing the floppies on a UNIX® system (such as another FreeBSD system) you can use the dd(1) command to write the image files directly to disk. On FreeBSD, you would run: # dd if=boot.flp of=/dev/fd0 On FreeBSD, /dev/fd0 refers to the first floppy disk (the A: drive). /dev/fd1 wo uld be the B: drive, and so on. Other UNIX variants might have different names for the floppy disk devices, and you will need to check the documentation for the system as necessary. How to Install Software on a Network f you have a network of computers, from time to time you will need to perform software upgrades and install new software onto the computers. Depending upon the size of your network, this can take anywhere from a few minutes to a few hours. Before installing software on a network, be sure to read the software licensing agreement. Most software programs only permit you to install the software on one computer per license. Difficulty: Moderate Instructions 1 Power on each computer within the network on which you would like to install the software. 2 Log on to each computer with the administrator username and password. If the network administrator has not established a username and password for the network, you will not be prompted for a username and password. 3 Check each computer to ensure that it meets the minimum system requirements for the software download (for example, the correct operating system, sufficient disk space and correct processor). 4 Insert the software CD into the CD ROM drive of each computer on which you want to install the software. Enter the software license number or product key code. This will be located in your software package. 5 Run the software installation wizard. Some software programs may require configuration after it has been installed. 6 Remove the software CD from the computer after the installation is complete. Restart the computer.
© Copyright 2024