Outsourced Software Product Development Company. Pivotal Tracker. Farhan Thawar, VP Engineering of Pivotal Labs, giving a talk in Toronto Pivotal Labs is an agile software development consulting firm with headquarters in San Francisco and offices in Manhattan and Boulder, Colorado.
Pivotal is a wholly owned subsidiary of EMC Corporation. Pivotal promotes Ruby on Rails, pair programming, test-driven development and behavior driven development. Clients include Groupon, Best Buy, EMI Music, Zendesk, Mavenlink, Twitter, and Urban Dictionary. The company was founded in 1989 by Rob Mee and Sherry Erskine. In 2008, Pivotal Labs released Pivotal Tracker, which it had been using as their internal project management and collaboration software, to the Ruby on Rails community. Pivotal Tracker Pivotal Tracker is Pivotal Labs' software as a service product for agile project management and collaboration. References External links Get Agile With Pivotal Tracker by Dan Podsedly on Vimeo.
Cucumber (software) A feature definition, with a single scenario: Feature: Division In order to avoid silly mistakes Cashiers must be able to calculate a fraction Scenario: Regular numbers * I have entered 3 into the calculator * I press divide * I have entered 2 into the calculator * I press equal * The result should be 1.5 on the screen The execution of the test implicit in the feature definition above requires the definition, using the Ruby language, of a few "steps": Before do @calc = Calculator.newend After doend Given /I have entered (\d+) into the calculator/ do |n| @calc.push n.to_iend When /I press (\w+)/ do |op| @result = @calc.send op end Then /the result should be (.*) on the screen/ do |result| @result.should == result.to_fend.
Continuous integration. CI was originally intended to be used in combination with automated unit tests written through the practices of test-driven development.
Initially this was conceived of as running all unit tests and verifying they all passed before committing to the mainline. This helps avoid one developer's work in progress breaking another developer's copy. If necessary, partially complete features can be disabled before committing using feature toggles. Later elaborations of the concept introduced build servers, which automatically run the unit tests periodically or even after every commit and report the results to the developers. The use of build servers (not necessarily running unit tests) had already been practised by some teams outside the XP community. In addition to automated unit tests, organisations using CI typically use a build server to implement continuous processes of applying quality control in general — small pieces of effort, applied frequently.
Theory Principles Regression testing. The intent of regression testing is to ensure that a change such as those mentioned above has not introduced new faults. One of the main reasons for regression testing is to determine whether a change in one part of the software affects other parts of the software. Common methods of regression testing include rerunning previously completed tests and checking whether program behavior has changed and whether previously fixed faults have re-emerged.
Regression testing can be performed to test a system efficiently by systematically selecting the appropriate minimum set of tests needed to adequately cover a particular change. Background Experience has shown that as software is fixed, emergence of new and/or reemergence of old faults is quite common. Sometimes reemergence occurs because a fix gets lost through poor revision control practices (or simple human error in revision control). Regression testing is an integral part of the extreme programming software development method. Unit testing. In computer programming, unit testing is a method by which individual units of source code, sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures are tested to determine if they are fit for use. Intuitively, one can view a unit as the smallest testable part of an application.
In procedural programming, a unit could be an entire module, but it is more commonly an individual function or procedure. In object-oriented programming, a unit is often an entire interface, such as a class, but could be an individual method. Unit tests are short code fragments created by programmers or occasionally by white box testers during the development process. Ideally, each test case is independent from the others. Substitutes such as method stubs, mock objects, fakes, and test harnesses can be used to assist testing a module in isolation.
Benefits Find problems early Facilitates change Documentation Integration testing. Purpose The purpose of integration testing is to verify functional, performance, and reliability requirements placed on major design items.
These "design items", i.e. assemblages (or groups of units), are exercised through their interfaces using black box testing, success and error cases being simulated via appropriate parameter and data inputs. Simulated usage of shared data areas and inter-process communication is tested and individual subsystems are exercised through their input interface. Test cases are constructed to test whether all the components within assemblages interact correctly, for example across procedure calls or process activations, and this is done after testing individual modules, i.e. unit testing. The overall idea is a "building block" approach, in which verified assemblages are added to a verified base which is then used to support the integration testing of further assemblages. Big Bang Top-down and Bottom-up Limitations References
System testing. System testing of software or hardware is testing conducted on a complete, integrated system to evaluate the system's compliance with its specified requirements.
System testing falls within the scope of black box testing, and as such, should require no knowledge of the inner design of the code or logic.  As a rule, system testing takes, as its input, all of the "integrated" software components that have passed integration testing and also the software system itself integrated with any applicable hardware system(s). The purpose of integration testing is to detect any inconsistencies between the software units that are integrated together (called assemblages) or between any of the assemblages and the hardware. System testing is a more limited type of testing; it seeks to detect defects both within the "inter-assemblages" and also within the system as a whole.
Testing the whole system Types of tests to include in system testing See also References Acceptance testing. In systems engineering it may involve black-box testing performed on a system (for example: a piece of software, lots of manufactured mechanical parts, or batches of chemical products) prior to its delivery. Software developers often distinguish acceptance testing by the system provider from acceptance testing by the customer (the user or client) prior to accepting transfer of ownership.
In the case of software, acceptance testing performed by the customer is known as user acceptance testing (UAT), end-user testing, site (acceptance) testing, or field (acceptance) testing. Overview Testing generally involves running a suite of tests on the completed system. Each individual test, known as a case, exercises a particular operating condition of the user's environment or feature of the system, and will result in a pass or fail outcome. Acceptance Tests/Criteria (in Agile Software Development) are usually created by business customers and expressed in a business domain language.