hits counter
  Create Free Blog | Random Blog »   Report Abuse | Login   

 
Feed on
Posts
Comments

Many of us consider ourselves to be somewhat efficient with search engine optimization. We tend to come on the Internet with the opinion that we need to be the jack of all trades as far as our Internet businesses concerned. For most of us, this is done out of necessity because we are not able to afford somebody to do the job for us at first. For others, it is the thrill of the challenge and watching our websites move up through the rankings in the search engines gives us a real boost. If you like to take care of these things yourself, here is an SEO checklist so that you don’t miss any part of the process.

Choose Your Keywords

This is the first step in the SEO checklist and one that should never be skipped. In order for us to get targeted traffic to our website, we need to target keywords and keyword phrases that are actually being searched for on the search engines. There are plenty of tools that will help us to do this and they really take the guesswork out of the process.

Check the Competition

At its most basic level, we would need to make sure that it was not too much competition for this keyword phrase in Google. The easiest way for us to do this is by searching on Google for the keyword phrase inside of quotes. There are some programs out there that automate this process and can do so for hundreds of different keyword phrases. Just knowing that there is a little bit of competition is enough for some people but others want to know how well the top listings are positioned. This will give you an idea as to whether you will be able to overtake them or not.

Build the Page

Make your page according to the keyword phrase that you are using and include it in the title, toward the top of the page and naturally throughout the page. Don’t worry too much about the keyword percentage, just make sure that you are using it wherever it fits into the content.

Get Some Links

You should not only be trying to get links to your main page, you should be trying to get links to every webpage on your site that you possibly can. Having links coming in to internal pages can greatly boost their rankings in the search engine and send you an unbelievable amount of traffic.

Don’t Stop - If you build a webpage and get a few links coming into it, you may get a handful of visitors to it every day. Don’t ever stop building new webpages because that is what is going to make you successful in the long run. Once you find something that is working as far as search engine optimization is concerned, make sure that you duplicate it with as many pages as possible. Only then will you understand exactly how powerful going through a SEO checklist can be.

Share SocialTwist Tell-a-Friend 

Code Review

Lightweight Code Review:

It was only supposed to take an hour.

The bad news was that we had a stack of customer complaints. The latest release had a nasty bug that slipped through QA. The good news was that some of those complaints included descriptions of the problem — an unexpected error dialog box — and one report had an attached log file. We just had to reproduce the problem using the log and add this case to the unit tests. Turn around a quick release from the stable branch and we’re golden.

Of course that’s not how it turned out. We followed the steps from the log and everything worked fine. QA couldn’t reproduce the problem either. Then it turned out the error dialog was a red herring — the real error happened long before the dialog popped up, somewhere deep in the code.

A week later with two developers on the task we finally discovered the cause of the problem. Once we saw the code it was painfully obvious — a certain subroutine didn’t check for invalid input. By the time we got the fix out we had twenty more complaints. One potential customer that was trialing the product was never heard from again.

All over a simple bug. Even a cursory glance over the source code would have prevented the wasted time and lost customers.

The worst part is that this isn’t an isolated incident. It happens in all development shops. The good news? A policy of peer code review can stop these problems at the earliest stages, before they reach the customer, before it gets expensive.

The case for review: Find bugs early & often

One of our customers set out to test exactly how much money the company would have saved had they used peer review in a certain three-month, 10,000-line project with 10 developers. They tracked how many bugs were found by QA and customers in the subsequent six months. Then they went back and had another group of developers peer-review the code in question. Using metrics from previous releases of this project they knew the average cost of fixing a defect at each phase of development, so they were able to measure directly how much money they would have saved.

The result: Code review would have saved half the cost of fixing the bugs. Plus they would have found 162 additional bugs.

Examine the following charts for the raw data.

Saving $150k: A real-world case study


(Critical readers might take issue with the given dollar amounts. These numbers came from the customer and of course they are arguable and differ between organizations. However, as long as you agree that “bugs found later in the process cost more than bugs found earlier” the argument for code review still holds.)

Why is the effect of code review so dramatic? A lack of collaboration in the development phase may be the culprit.

With requirements and design you always have meetings. You bring in input from customers, managers, developers, and QA and synthesize a result. You do this because mistakes in requirements or architecture are expensive, possibly leading to lost sales. You debate the relative priorities, difficulty, and long-term merits of your choices.

Not so with when actually writing the source code. Individual developers type away at the tasks assigned to them. Collaboration is limited to occasional whiteboard drawings and a few shared interfaces. No one is catching the obvious bugs; no one is making sure the documentation matches the code.

Peer code review adds back the collaborative element to this phase of the software development process.

Consider this: Nothing is commercially published without corrections from several professional editors. Find the acknowledgments in any book and you’ll find reviewers who helped “remove defects.” No matter how smart or diligent the author, the review process is necessary to produce a high-quality work. (And even then, what author hasn’t found five more errors after seeing the first edition?)

Why do we think it’s any different in software development? Why should we expect our developers to write pages of detailed code (and prose) without mistakes?

We shouldn’t. If review works with novels and software design it can also work when writing code. Peer code review adds a much-needed collaborative element to the development phase of the software development process.

The $1 billion bug

In 2005, Adobe attributed $1 billion in revenue to their stronghold on the PDF format (see Adobe Systems Incorporated Letter to Stockholders FY 2005).

Why is PDF worth $1 billion? Because it’s the one format that everyone can view and print (see same document). It just works. If it loses that status, Adobe loses the edifice built on that format, to which the fiscal year 2005 income statement attributes $1 billion.

Now imagine you are a development manager for Acrobat Reader, Windows Edition. The next major release is due in 9 months and you are responsible for adding five new features. You know how much is riding on Reader and how much revenue — and jobs — depends on its continued success.

So now the question: Which of those five features is so compelling, it would be worth introducing a crash-bug in Reader just to have that feature?

Answer: None!

Nothing is worth losing your position in the industry. But you still must implement new features to keep the technology fresh and competition at bay. You must employ every possible technique in your development process to ensure that no bugs get introduced.

Only code review will ensure that this code base — already over ten years old — remains maintainable for the next ten. Only code review will ensure that new hires don’t make mistakes that veterans would avoid. Static code analysis and black-box QA will not do this for you. And every defect found in code review is another bug that might have gotten through QA and into the hands of a customer.

This doesn’t mean they implement code review no matter what the costs; developer time is still an expensive commodity. It does mean that they’re taking the time to understand this process which, if implemented properly, is a proven method for significantly reducing the number of delivered bugs, keeping code maintainable, and getting new hires productive quickly and safely.

But you don’t need to have $1 billion at stake to be interested in code quality and maintainability. Delivering bugs to QA costs money; delivering bugs to customers costs a lot of money and loss of goodwill.

But if code review works this well, why don’t more people talk about it? Is anyone really doing it?

Why code review is a secret

In 1991, OOP was the Next Big Thing. But strangely, at OOPSLA there were precious few papers, light on content, and yet the attendees admitted to each other in hallway talk that their companies were fervently using the new techniques and gaining significant improvements in code reusability and in breaking down complex systems.

So why weren’t they talking publicly? Because the development groups that truly understood the techniques of OOP had a competitive advantage. OOP was new and everyone was learning empirically what worked and what didn’t; why give up that hard-earned knowledge to your competitors?

A successfully-implemented code review process is a competitive advantage. No one wants to give away the secret of how to release fewer defects efficiently.

When we got started no one was talking about code review in the press, so we didn’t think many people were doing it. But our experience has made it clear that peer code review is widespread at companies who are serious about code quality.

But the techniques are still a secret! Peer code review has the potential to take too much time to be worth the gain in bug-fixing, code maintainability, or in mentoring new developers. The techniques that provide the benefits of peer code review while mitigating the pitfalls and managing developers’ time are competitive advantages that no one wants to reveal.

Unfortunately for these successful software development organizations, we make a living making lightweight, agile code review accessible and efficient for everyone. And that’s the subject of this CM Crossroads Article Series.

I’m interested. Gimme the details!

So code review works, but what if developers waste too much time doing it? What if the social ramifications of personal critiquing ruin morale? How can review be implemented in a measurable way so you can identify process problems?

In this article series we will cover case studies of review in the real world and show which conclusions you can draw from them (and which you can’t). We will give our own case study of 2500 reviews. We will give pro’s and con’s for the five most common types of review. We will explain how to take advantage of the positive social and personal aspects of review as well as ways managers can mitigate negative emotions that can arise. We will explain how to implement a review within a CMMI/PSP/TSP context. We will give specific advice on how to construct a peer review process that meets specific goals. Finally, we will describe a tool that our customers have used to make certain kinds of reviews as painless and efficient as possible.

Share SocialTwist Tell-a-Friend 

1.  Definitions.  “Software” means (a) all of the contents of the files, disk(s), CD-ROM(s) or other media with which this Agreement is provided, including but not limited to (i) Adobe or third party computer information or software; (ii) related explanatory written materials or files (”Documentation”); and (iii) fonts; and (b) upgrades, modified versions, updates, additions, and copies of the Software, if any, licensed to you by Adobe (collectively, “Updates”).  “Use” or “Using” means to access, install, download, copy or otherwise benefit from using the functionality of the Software in accordance with the Documentation.  “Permitted Number” means one (1) unless otherwise indicated under a valid license (e.g. volume license) granted by Adobe.  “Computer” means an electronic device that accepts information in digital or similar form and manipulates it for a specific result based on a sequence of instructions.  “Adobe” means Adobe Systems Incorporated, a Delaware corporation, 345 Park Avenue, San Jose, California 95110, if subsection 9(a) of this Agreement applies; otherwise it means Adobe Systems Software Ireland Limited, Unit 3100, Lake Drive, City West Campus, Saggart D24, Republic of Ireland, a company organized under the laws of Ireland and an affiliate and licensee of Adobe Systems Incorporated.

2. Software License. As long as you comply with the terms of this Software License Agreement (this “Agreement”), Adobe grants to you a non-exclusive license to Use the Software for the purposes described in the Documentation.

2.1  General Use.  You may install and Use a copy of the Software on your compatible computer, up to the Permitted Number of computers.

2.2  Server Use and Distribution.

2.2.1  Subject to the terms of this Agreement, you may install one copy of the Software on a computer file server within your internal network for the sole and exclusive purpose of (a) using the Software (from an unlimited number of client computers on your internal network) via (i) the Network File System (NFS) for UNIX versions of the Software or (ii) Windows Terminal Services, and (b) allowing for printing within your internal network. Unless otherwise expressly permitted hereunder, no other server or network use of the Software is permitted, including but not limited to use of the Software (i) either directly or through commands, data or instructions from or to another computer or (ii) for internal network, internet or web hosting services.

2.2.2  For information on how to distribute the Software on tangible media or through an internal network please refer to the sections entitled “How to Distribute Adobe Reader” at http://www.adobe.com/products/acrobat/distribute.html.

2.3  Backup Copy.  You may make one backup copy of the Software, provided your backup copy is not installed or used on any computer. You may not transfer the rights to a backup copy unless you transfer all rights in the Software as provided under Section 4.

2.4  Portable or Home Computer Use.  In addition to the single copy permitted under Sections 2.2.1 and 2.3, the primary user of the computer on which the Software is installed may make a second copy of the Software for his or her exclusive use on either a portable Computer or a Computer located at his or her home, provided the Software on the portable or home Computer is not used at the same time as the Software on the primary computer.

2.5  No Modification.  You may customize or extend the functionality of the installer for the Software as specifically allowed by instructions found at http://www.adobe.com/support/main.html or http://partners.adobe.com (e.g., installation of additional plug-in and help files).  You may not otherwise alter or modify the Software or create a new installer for the Software.   The Software is licensed and distributed by Adobe for viewing, distributing and sharing PDF files.  You are not authorized to integrate or use the Software with any other software, plug-in or enhancement which uses or relies upon the Software when converting or transforming PDF files into other file formats (e.g., a PDF file into a TIFF, JPEG, or SVG file).  You are not authorized to integrate or use the Software with any (a) plug-in software not developed in accordance with the Adobe Integration Key License Agreement or (b) other software or enhancement to programmatically interface with the Software for the purpose of (i) saving data locally (on the same Computer), except when allowed through the use of Document Feature(s) that have been activated using enabling technology from Adobe, (ii) creating a file that contains data (e.g., an XML or comments file), or (iii) saving modifications to a PDF file.

2.6  Third Party Website Access.  The Software allows you to access third party websites (”Third Party Sites”). Your access to and use of any Third Party Sites, including any goods, services or information made available from such sites, is governed by the terms and conditions found at each Third Party Site, if any.  Third Party Sites are not owned or operated by Adobe.  YOUR USE OF THIRD PARTY SITES IS AT YOUR OWN RISK.  ADOBE MAKES NO WARRANTIES, CONDITIONS, INDEMNITIES, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, WHETHER BY STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE AS TO ANY OTHER MATTERS, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT OF THIRD PARTY RIGHTS, TITLE, INTEGRATION, ACCURACY, SECURITY, AVAILABILITY, SATISFACTORY QUALITY, MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE WITH RESPECT TO THE THIRD PARTY SITES.

2.7  Certified Documents.

2.7.1  Certified Documents and CD Services.  The Software allows you to validate Certified Documents.  A “Certified Document” or “CD” is a PDF file that has been digitally signed using (a) a certificate, and (b) a “private” encryption key that corresponds to the “public” key in the certificate.  Validation of a CD requires CD Services from the CD Service Provider that issued the certificate.  “CD Service Provider” is an independent third party service vendor listed at http://www.adobe.com/security/partners_cds.html. “CD Services” are services provided by CD Service Providers, including without limitation (a) certificates issued by such CD Service Provider for use with the Software’s CD feature set, (b) services related to issuance of certificates, and (c) other services related to certificates, including without limitation verification services.

2.7.2  CD Service Providers.  Although the Software provides validation features, Adobe does not supply the necessary CD Services required to use these features.  Purchasing, availability and responsibility for the CD Services are between you and the CD Service Provider.  Before you rely upon any CD, any digital signature applied thereto, and/or any related CD Services, you must first review and agree to the applicable Issuer Statement and this Agreement.  “Issuer Statement” means the terms and conditions under which each CD Service Provider offers CD Services (see the links on http://www.adobe.com/security/partners_cds.html), including for example any subscriber agreements, relying party agreements, certificate policies and practice statements, and Section 2.7 of this Agreement.  By validating a CD using CD Services, you acknowledge and agree that (i) the certificate used to digitally sign a CD may be revoked at the time of verification, making the digital signature on the CD appear valid when in fact it is not, (ii) the security or integrity of a CD may be compromised due to an act or omission by the signer of the CD, the applicable CD Service Provider, or any other third party; and (iii) you must read, understand, and be bound by the applicable Issuer Statement.

2.7.3  Warranty Disclaimer.  CD Service Providers offer CD Services solely in accordance with the applicable Issuer Statement. ACCESS TO THE CD SERVICES THROUGH THE USE OF THE SOFTWARE IS MADE AVAILABLE ON AN “AS IS” BASIS ONLY AND WITHOUT ANY WARRANTY OR INDEMNITY OF ANY KIND (EXCEPT AS SUPPLIED BY A CD SERVICES PROVIDER IN ITS ISSUER STATEMENT).  ADOBE AND EACH CD SERVICE PROVIDER (EXCEPT AS EXPRESSLY PROVIDED IN ITS ISSUER STATEMENT) MAKE NO WARRANTIES, CONDITIONS, INDEMNITIES, REPRESENTATIONS OR TERMS, EXPRESS OR IMPLIED, WHETHER BY STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE AS TO ANY OTHER MATTERS, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT OF THIRD PARTY RIGHTS, TITLE, INTEGRATION, ACCURACY, SECURITY, AVAILABILITY, SATISFACTORY QUALITY, MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE WITH RESPECT TO THE CD SERVICES.

2.7.4  Indemnity.  You agree to hold Adobe and any applicable CD Service Provider (except as expressly provided in its Issuer Statement) harmless from any and all liabilities, losses, actions, damages, or claims (including all reasonable expenses, costs, and attorneys fees) arising out of or relating to any use of, or reliance on, any CD Service, including, without limitation (a) reliance on an expired or revoked certificate; (b) improper verification of a certificate; (c) use of a certificate other than as permitted by any applicable Issuer Statement, this Agreement or applicable law; (d) failure to exercise reasonable judgment under the circumstances in relying on the CD Services; or (e) failure to perform any of the obligations as required in an applicable Issuer Statement.

2.7.5  Limit of Liability.  UNDER NO CIRCUMSTANCES WILL ADOBE OR ANY CD SERVICE PROVIDER (EXCEPT AS EXPRESSLY SET FORTH IN ITS ISSUER STATEMENT) BE LIABLE TO YOU, OR ANY OTHER PERSON OR ENTITY, FOR ANY LOSS OF USE, REVENUE OR PROFIT, LOST OR DAMAGED DATA, OR OTHER COMMERCIAL OR ECONOMIC LOSS OR FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, STATUTORY, PUNITIVE, EXEMPLARY OR CONSEQUENTIAL DAMAGES WHATSOEVER RELATED TO YOUR USE OR RELIANCE UPON CD SERVICES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES OR IF SUCH DAMAGES ARE FORESEEABLE.  THIS LIMITATION SHALL APPLY EVEN IN THE EVENT OF A FUNDAMENTAL OR MATERIAL BREACH OR A BREACH OF THE FUNDAMENTAL OR MATERIALTERMS OF THIS AGREEMENT.

2.7.6  Third Party Beneficiaries.  You agree that any CD Service Provider you utilize shall be a third party beneficiary with respect to this Section 2.7 of this Agreement, and that such CD Service Provider shall have the right to enforce such provisions in its own name as if the CD Service Provider were Adobe.

3. Intellectual Property Ownership, Copyright Protection. The Software and any authorized copies that you make are the intellectual property of and are owned by Adobe Systems Incorporated and its suppliers. The structure, organization and code of the Software are the valuable trade secrets and confidential information of Adobe Systems Incorporated and its suppliers. The Software is protected by law, including without limitation the copyright laws of the United States and other countries, and by international treaty provisions.  Except as expressly stated herein, this Agreement does not grant you any intellectual property rights in the Software and all rights not expressly granted are reserved by Adobe and its suppliers.

4.   Restrictions.

4.1  Notices.  You shall not copy the Software except as set forth in Section 2.  Any copy of the Software that you make must contain the same copyright and other proprietary notices that appear on or in the Software.

4.2  No Modifications.  You shall not modify, adapt or translate the Software. You shall not reverse engineer, decompile, disassemble or otherwise attempt to discover the source code of the Software except to the extent you may be expressly permitted to decompile under applicable law, it is essential to do so in order to achieve operability of the Software with another software program, and you have first requested Adobe to provide the information necessary to achieve such operability and Adobe has not made such information available. Adobe has the right to impose reasonable conditions and to request a reasonable fee before providing such information. Any such information supplied by Adobe and any information obtained by you by such permitted decompilation may only be used by you for the purpose described herein and may not be disclosed to any third party or used to create any software which is substantially similar to the expression of the Software. Requests for information should be directed to the Adobe Customer Support Department.

4.3  Document Features.  The Software may contain features and functionality that appear disabled or “grayed out” (the “Document Features”).  The Document Features will only activate when opening certain PDF documents that have been created using corresponding enabling technology available only from Adobe (“Keys”).  You agree not to access, or attempt to access, disabled Document Features or otherwise circumvent the permissions that control activation of such Document Features.  You may only use the Document Features with PDF documents that have been enabled using Keys obtained under a valid license from Adobe. No other use is permitted.

4.4  Transfer. You may not, rent, lease, sublicense, assign or transfer your rights in the Software, or authorize all or any portion of the Software to be copied onto another user’s computer except as may be expressly permitted herein. You may, however, transfer all your rights to Use the Software to another person or legal entity provided that: (a) you also transfer (i) this Agreement, and (ii) the Software and all other software or hardware bundled or pre-installed with the Software, including all copies, Updates and prior versions, to such person or entity;  (b) you retain no copies, including backups and copies stored on a computer; and (c) the receiving party accepts the terms and conditions of this Agreement and any other terms and conditions upon which you legally purchased a license to the Software. Notwithstanding the foregoing, you may not transfer education, pre-release, or not for resale copies of the Software.

5.  Updates. If the Software is an Update to a previous version of the Software, you must possess a valid license to such previous version in order to Use such Update.  All Updates are provided to you on a license exchange basis.  You agree that by Using an Update you voluntarily terminate your right to use any previous version of the Software.  As an exception, you may continue to Use previous versions of the Software on your Computer after you Use the Update but only to assist you in the transition to the Update, provided that:  (a) the Update and the previous versions  are installed on the same computer; (b) the previous versions or copies thereof are not transferred to another party or Computer unless all copies of the Update are also transferred to such party or Computer; and (c) you acknowledge that any obligation Adobe may have to support the previous versions of the Software may be ended upon availability of the Update.

6.  NO WARRANTY.  The Software is being delivered to you “AS IS” and Adobe makes no warranty as to its use or performance.  ADOBE AND ITS SUPPLIERS DO NOT AND CANNOT WARRANT THE PERFORMANCE OR RESULTS YOU MAY OBTAIN BY USING THE SOFTWARE.  EXCEPT FOR ANY WARRANTY, CONDITION, REPRESENTATION OR TERM TO THE EXTENT TO WHICH THE SAME CANNOT OR MAY NOT BE EXCLUDED OR LIMITED BY LAW APPLICABLE TO YOU IN YOUR JURISDICTION, ADOBE AND ITS SUPPLIERS MAKE NO WARRANTIES CONDITIONS, REPRESENTATIONS, OR TERMS (EXPRESS OR IMPLIED WHETHER BY STATUTE, COMMON LAW, CUSTOM, USAGE OR OTHERWISE) AS TO ANY MATTER INCLUDING WITHOUT LIMITATION NONINFRINGEMENT OF THIRD PARTY RIGHTS, MERCHANTABILITY, INTEGRATION, SATISFACTORY QUALITY, OR FITNESS FOR ANY PARTICULAR PURPOSE.  The provisions of Section 6 and Section 7 shall survive the termination of this Agreement, howsoever caused, but this shall not imply or create any continued right to Use the Software after termination of this Agreement.

7.  LIMITATION OF LIABILITY. IN NO EVENT WILL ADOBE OR ITS SUPPLIERS BE LIABLE TO YOU FOR ANY DAMAGES, CLAIMS OR COSTS WHATSOEVER OR ANY CONSEQUENTIAL, INDIRECT, INCIDENTAL DAMAGES, OR ANY LOST PROFITS OR LOST SAVINGS, EVEN IF AN ADOBE REPRESENTATIVE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, DAMAGES, CLAIMS OR COSTS OR FOR ANY CLAIM BY ANY THIRD PARTY.  THE FOREGOING LIMITATIONS AND EXCLUSIONS APPLY TO THE EXTENT PERMITTED BY APPLICABLE LAW IN YOUR JURISDICTION.  ADOBE’S AGGREGATE LIABILITY AND THAT OF ITS SUPPLIERS  UNDER OR IN CONNECTION WITH THIS AGREEMENT SHALL BE LIMITED TO THE AMOUNT PAID FOR THE SOFTWARE, IF ANY. Nothing contained in this Agreement limits Adobe’s liability to you in the event of death or personal injury resulting from Adobe’s negligence or for the tort of deceit (fraud). Adobe is acting on behalf of its suppliers for the purpose of disclaiming, excluding and/or limiting obligations, warranties and liability as provided in this Agreement, but in no other respects and for no other purpose. For further information, please see the jurisdiction specific information at the end of this Agreement, if any, or contact Adobe’s Customer Support Department.

8.  Export Rules. You agree that the Software will not be shipped, transferred or exported into any country or used in any manner prohibited by the United States Export Administration Act or any other export laws, restrictions or regulations (collectively the “Export Laws”). In addition, if the Software is identified as export controlled items under the Export Laws, you represent and warrant that you are not a citizen, or otherwise located within, an embargoed nation (including without limitation Iran, Iraq, Syria, Sudan, Libya, Cuba, North Korea, and Serbia) and that you are not otherwise prohibited under the Export Laws from receiving the Software.   All rights to Use the Software are granted on condition that such rights are forfeited if you fail to comply with the terms of this Agreement.

9.  Governing Law. This Agreement will be governed by and construed in accordance with the substantive laws in force: (a) in the State of California, if a license to the Software is obtained when you are in the United States, Canada, or Mexico; or (b) in Japan, if a license to the Software is obtained when you are in Japan, China, Korea, or other Southeast Asian country where all official languages are written in either an ideographic script (e.g., hanzi, kanji, or hanja), and/or other script based upon or similar in structure to an ideographic script, such as hangul or kana; or (c) England, if a license to the Software is purchased when you are in any other jurisdiction not described above. The respective courts of Santa Clara County, California when California law applies, Tokyo District Court in Japan, when Japanese law applies, and the competent courts of England, when the law of England applies, shall each have non-exclusive jurisdiction over all disputes relating to this Agreement. This Agreement will not be governed by the conflict of law rules of any jurisdiction or the United Nations Convention on Contracts for the International Sale of Goods, the application of which is expressly excluded.

10.  General Provisions. If any part of this Agreement is found void and unenforceable, it will not affect the validity of the balance of this Agreement, which shall remain valid and enforceable according to its terms.  This Agreement shall not prejudice the statutory rights of any party dealing as a consumer. This Agreement may only be modified by a writing signed by an authorized officer of Adobe. Updates may be licensed to you by Adobe with additional or different terms. This is the entire agreement between Adobe and you relating to the Software and it supersedes any prior representations, discussions, undertakings, communications or advertising relating to the Software.

11.  Notice to U.S. Government End Users. The Software and Documentation are “Commercial Items,” as that term is defined at 48 C.F.R. §2.101, consisting of “Commercial Computer Software” and “Commercial Computer Software Documentation,” as such terms are used in 48 C.F.R. §12.212 or 48 C.F.R. §227.7202, as applicable. Consistent with 48 C.F.R. §12.212 or 48 C.F.R. §§227.7202-1 through 227.7202-4, as applicable, the Commercial Computer Software and Commercial Computer Software Documentation are being licensed to U.S. Government end users (a) only as Commercial Items and (b) with only those rights as are granted to all other end users pursuant to the terms and conditions herein. Unpublished-rights reserved under the copyright laws of the United States. Adobe Systems Incorporated, 345 Park Avenue, San Jose, CA 95110-2704, USA. For U.S. Government End Users, Adobe agrees to comply with all applicable equal opportunity laws including, if appropriate, the provisions of Executive Order 11246, as amended, Section 402 of the Vietnam Era Veterans Readjustment Assistance Act of 1974 (38 USC 4212), and Section 503 of the Rehabilitation Act of 1973, as amended, and the regulations at 41 CFR Parts 60-1 through 60-60, 60-250, and 60-741.  The affirmative action clause and regulations contained in the preceding sentence shall be incorporated by reference in this Agreement.

12.  Compliance with Licenses. If you are a business or organization, you agree that upon request from Adobe or Adobe’s authorized representative, you will within thirty (30) days fully document and certify that use of any and all Software at the time of the request is in conformity with your valid licenses from Adobe.

13.  Specific Exceptions.

13.1  Limited Warranty for Users Residing in Germany or Austria. If you obtained the Software in Germany or Austria, and you usually reside in such country, then Section 6 does not apply, instead, Adobe warrants that the Software provides the functionalities set forth in the Documentation (the “agreed upon functionalities”) for the limited warranty period following receipt of the Software when used on the recommended hardware configuration.  As used in this Section, “limited warranty period” means one (1) year if you are a business user and two (2) years if you are not a business user.  Non-substantial variation from the agreed upon functionalities shall not be considered and does not establish any warranty rights. THIS LIMITED WARRANTY DOES NOT APPLY TO SOFTWARE PROVIDED TO YOU FREE OF CHARGE, FOR EXAMPLE, UPDATES, PRE-RELEASE, TRYOUT, PRODUCT SAMPLER, NOT FOR RESALE (NFR) COPIES OF SOFTWARE, OR SOFTWARE THAT HAS BEEN ALTERED BY YOU, TO THE EXTENT SUCH ALTERATIONS CAUSED A DEFECT. To make a warranty claim, during the limited warranty period you must return, at our expense, the Software and proof of purchase to the location where you obtained it.  If the functionalities of the Software vary substantially from the agreed upon functionalities, Adobe is entitled — by way of re-performance and at its own discretion — to repair or replace the Software.  If this fails, you are entitled to a reduction of the purchase price (reduction) or to cancel the purchase agreement (rescission).  For further warranty information, please contact Adobe’s Customer Support Department

13.2  Limitation of Liability for Users Residing in Germany and Austria.

13.2.1  If you obtained the Software in Germany or Austria, and you usually reside in such country, then Section 7 does not apply, Instead, subject to the provisions in Section 13.2.2, Adobe’s statutory liability for damages shall be limited as follows:  (i) Adobe shall be liable only up to the amount of damages as typically foreseeable at the time of entering into the purchase agreement in respect of damages caused by a slightly negligent breach of a material contractual obligation and (ii) Adobe shall not be liable for damages caused by a slightly negligent breach of a non-material contractual obligation.

13.2.2  The aforesaid limitation of liability shall not apply to any mandatory statutory liability, in particular, to liability under the German Product Liability Act, liability for assuming a specific guarantee or liability for culpably caused personal injuries.

13.2.3  You are required to take all reasonable measures to avoid and reduce damages, in particular to make back-up copies of the Software and your computer data subject to the provisions of this Agreement.

13.3  Pre-release Product Additional Terms.  If the product you have received with this license is pre-commercial release or beta Software (”Pre-release Software”), then the following Section applies.  To the extent that any provision in this Section is in conflict with any other term or condition in this Agreement, this Section shall supercede such other term(s) and condition(s) with respect to the Pre-release Software, but only to the extent necessary to resolve the conflict. You acknowledge that the Software is a pre-release version, does not represent final product from Adobe, and may contain bugs, errors and other problems that could cause system or other failures and data loss. Consequently, the Pre-release Software is provided to you “AS-IS”, and Adobe disclaims any warranty or liability obligations to you of any kind. WHERE LIABILITY CANNOT BE EXCLUDED FOR PRE-RELEASE SOFTWARE, BUT IT MAY BE LIMITED, ADOBE’S LIABILITY AND THAT OF ITS SUPPLIERS SHALL BE LIMITED TO THE SUM OF FIFTY DOLLARS (U.S. $50) IN TOTAL. You acknowledge that Adobe has not promised or guaranteed to you that Pre-release Software will be announced or made available to anyone in the future, Adobe has no express or implied obligation to you to announce or introduce the Pre-release Software and that Adobe may not introduce a product similar to or compatible with the Pre-release Software. Accordingly, you acknowledge that any research or development that you perform regarding the Pre-release Software or any product associated with the Pre-release Software is done entirely at your own risk. During the term of this Agreement, if requested by Adobe, you will provide feedback to Adobe regarding testing and use of the Pre-release Software, including error or bug reports. If you have been provided the Pre-release Software pursuant to a separate written agreement, such as the Adobe Systems Incorporated Serial Agreement for Unreleased Products, your use of the Software is also governed by such agreement. You agree that you may not and certify that you will not sublicense, lease, loan, rent, assign or transfer the Pre-release Software. Upon receipt of a later unreleased version of the Pre-release Software or release by Adobe of a publicly released commercial version of the Software, whether as a stand-alone product or as part of a larger product, you agree to return or destroy all earlier Pre-release Software received from Adobe and to abide by the terms of the license agreement for any such later versions of the Pre-release Software. Notwithstanding anything in this Section to the contrary, if you are located outside the United States of America, you agree that you will return or destroy all unreleased versions of the Pre-release Software within thirty (30) days of the completion of your testing of the Software when such date is earlier than the date for Adobe’s first commercial shipment of the publicly released (commercial) Software.

If you have any questions regarding this Agreement or if you wish to request any information from Adobe please use the address and contact information included with this product to contact the Adobe office serving your jurisdiction.

Adobe and Reader are either registered trademarks or trademarks of Adobe Systems Incorporated in the United States and/or other countries.

********************************************************************************************

Why Code Review:

Code Review is the single greatest way of noticing and killing bugs, increasing overall understanding, fixing design problems, and learning from one another.
—Graydon Hoare

Authors need editors to catch mistakes. It is human nature that one cannot adequately proof-read one’s own work. Authors of software need the same assistance as authors of novels to achieve the goals of the software organization.

The purposes for code review are as diverse as the environments in which they are conducted. However, almost all code reviews have these goals in common:

  • Defect-free, well-documented software
  • Software that complies with enterprise coding standards
  • Teaching and sharing knowledge between developers

Other objectives often include: maintainability, security, consistent end-user documentation, adequate comments in code, complete unit tests, and scalability.

How code review works

A code review involves one or more developers examining source code they didn’t write and providing feedback to the authors, both negative and positive. Ideally the reviewers are completely disengaged from the project they are reviewing as this maximizes objectivity and ensures the code is readable and maintainable even by those not already well-versed in that project. Typically the reviewers will have a standard checklist as a guide for finding common mistakes and to validate the code against the company’s coding standards.

Code review takes place during all stages of development, except with small projects such as demos and experiments that are designed to be written quickly and probably thrown away. Even during the final stages of development when everyone is trying to meet a deadline, code reviews greatly reduce the number of regression bugs and ensure that company coding practices are not abandoned.

Our software saves time in almost every aspect of the code review process.

Inspection of a 20,000 line program at IBM saved more than 85% of programmer effort by detecting major defects through code review instead of testing.
—IEEE Trans. on Software Engineering, SE-12(7):744-751, July 1986.     more…….

Finding bugs on the cheap

It is well-documented that the earlier a bug is found the cheaper it is to fix. Fixing a bug in QA is more than twice as expensive as finding it in development. Just as we have trouble seeing “obvious” mistakes in our writing, developers frequently make simple errors that are easily and quickly caught by external review. In fact, a NASA study found that code review detected almost twice as many defects per hour as testing.

A code reviewer will look for common bugs, especially those that are notoriously difficult to find after-the-fact. These include proper thread synchronization, dealing with error conditions correctly and completely, correct accounting for reference-counting and other potential resource leaks, security problems, and ensuring that unit tests cover all code paths, error cases, and limit cases.

Shell Research saved an average of 30 hours of maintenance work for every hour invested in inspections.
—Software Practice and Experience, 22(2):173-182, Feb. 1992.

Ensuring maintainability

The expense of developing software is not just in its initial creation but in the ability of developers to use and modify existing code in the future. Software is notoriously difficult and expensive to maintain. This is especially true when a developer leaves a project and a new developer arrives, but it is even true with a single developer looking back on code he wrote six months ago.

Maintainability is generally achieved by code organization and adequate comments. A person uninvolved in the project should be able to read a portion of code and understand what it does, see the constraints and preconditions of its use and contextual information (e.g. the author used a peculiar technique because of a bug in the OS). In addition, software organizations often have coding guidelines ranging from whitespace conventions to the maximum size of a function. A reviewer can provide the ignorance and objectivity necessary to ensure these goals.

Learning and sharing

Every project has a host of unwritten rules and tacit understandings. This “institutional knowledge” must be transmitted to all new arrivals on a project. By definition it is impossible (and perhaps not even cost effective) to write down this information or to convey it all in one sitting. The inductee must acquire this information in the first months on the project, usually elicited from experienced developers when he does something wrong.

Code review can facilitate the communication of institutional knowledge as it relates to code written by the newbie. Experienced team members have the opportunity to impart their wisdom and advice.

************************************************************************************************************************************



Share SocialTwist Tell-a-Friend