Thursday, 23 July 2015

continuous integration (CI)

Continuous integration (CI) is the practice, in software engineering, of merging all developer working copies with a shared mainline several times a day. It was first named and proposed by Grady Booch in his 1991 method,[1] although practices at this time did not yet support full automation, or the performance of integrations more than a few times a day. It was adopted as part of extreme programming (XP), which did advocate integrating more than once per day, perhaps as many as tens of times per day. The main aim of CI is to prevent integration problems, referred to as "integration hell" in early descriptions of XP. CI isn't universally accepted as an improvement over frequent integration, so it is important to distinguish between the two as there is disagreement about the virtues of each.[citation needed]
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 in the developer's local environment 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 ran 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. Nowadays, many organisations have adopted CI without adopting all of XP.
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. In addition to running the unit and integration tests, such processes run additional static and dynamic tests, measure and profile performance, extract and format documentation from the source code and facilitate manual QA processes. This continuous application of quality control aims to improve the quality of software, and to reduce the time taken to deliver it, by replacing the traditional practice of applying quality control after completing all development. This is very similar to the original idea of integrating more frequently to make integration easier, only applied to QA processes.
In the same vein, the practice of continuous delivery further extends CI by making sure the software checked in on the mainline is always in a state that can be deployed to users and makes the actual deployment process very rapid.

Continuous integration (CI) is a software engineering practice in which isolated changes are immediately tested and reported on when they are added to a larger code base. The goal of CI is to provide rapid feedback so that if a defect is introduced into the code base, it can be identified and corrected as soon as possible.
Continuous integration (CI) is a software engineering practice in which isolated changes are immediately tested and reported on when they are added to a larger code base. The goal of CI is to provide rapid feedback so that if a defect is introduced into the code base, it can be identified and corrected as soon as possible. Continuous integration software tools can be used to automate the testing and build a document trail.
Continuous integration has evolved since its conception. Originally, a daily build was the standard. Now, the usual rule is for each team member to submit work on a daily (or more frequent) basis and for a build to be conducted with each significant change. When used properly, continuous integration provides various benefits, such as constant feedback on the status of the software. Because CI detects deficiencies early on in development, defects are typically smaller, less complex and easier to resolve.
According to Paul Duvall, co-author of Continuous Integration: Improving Software Quality and Reducing Risk, best practices of CI include:
  • Committing code frequently.
  • Categorizing developer tests.
  • Using a dedicated integration build machine.
  • Using continuous feedback mechanisms.
  • Staging builds.


ist of build automation software

From Wikipedia, the free encyclopedia
Build automation involves scripting or automating the process of compiling computer source code into binary code. Below is a list of notable tools associated with automating build processes.

Make-based tools[edit]

  • distcc
  • GNU make, a widely used make implementation with a large set of extensions
  • make, a classic Unix build tool
  • mk, developed originally for Version 10 Unix and Plan 9, and ported to Unix as part of plan9port
  • MPW Make, developed for Mac OS Classic and similar to but not compatible with Unix make; OS X comes with both GNU make and BSD make; available as part of Macintosh Programmer's Workshop as a free, unsupported download from Apple
  • nmake
  • PVCS-make, basically follows the concept of make but with a noticeable set of unique syntax features[1]
  • Rake, a Ruby-based build tool
  • ElectricMake, a replacement for make and gmake that implements build parallelization with ElectricAccelerator. Produced by Electric Cloud Inc.

Non-Make-based tools[edit]

  • Apache Ant, popular for Java platform development and uses an XML file format
  • Apache Buildr, open-source build system, Rake-based, gives full power of scripting in Ruby with integral support for most abilities wanted in a build system
  • Apache Maven, a Java platform tool for project management and automated software build
  • A-A-P, a Python based build tool
  • Boost.Build from Boost C++ libraries
  • BitBake, a Python-based tool with the special focus of distributions and packages for embedded Linux cross compilation
  • Cabal, common architecture for building applications and libraries in the programming language Haskell
  • FinalBuilder, for Windows software developers. FinalBuilder provides a graphical IDE to both create and run your build projects in a single application. Final builder also includes the ability the execute unit test, deploy web projects or install and test your application.
  • Flowtracer
  • Gradle, an open-source build and automation system with a Groovy Rake domain specific language (DSL), combining the advantages of Ant and Apache Maven with additional features like a reliable incremental build
  • Grunt (http://gruntjs.com/), an open-source JavaScript-based build automation framework, which runs on Node.js
  • Gulp (http://gulpjs.com/), an open-source JavaScript-based streaming build system, which runs on Node.js
  • Leiningen, a tool providing commonly performed tasks in Clojure projects, including build automation
  • MSBuild, the Microsoft build engine
  • NAnt, a tool similar to Ant for the .NET Framework
  • Ninja, created in 2010 as a Make replacement to speedup Google Chrome compilation[2] (can be used by CMake and GYP)
  • Perforce Jam, a generally enhanced, ground-up tool which is similar to Make
  • Psake, domain-specific language and build automation tool written in PowerShell
  • sbt (Simple Build Tool), a build tool built on a Scala-based DSL
  • SCons, Python-based, with integrated functionality similar to autoconf/automake
  • Tup, Lua based, make-like DSL with a pure focus on speed and scalability
  • Tweaker, allowing task definitions to be written in any languages (or intermixed languages) while providing a consistent interface for them all
  • Visual Build, a graphical user interface software for software builds
  • Waf is a Python-based tool for configuring, compiling and installing applications. It is a replacement for other tools such as AutotoolsSconsCMake or Ant
  • Pants is a multi language supporting build tool (Java, Python, Scala) that is primarily aimed at a multiple project with interdependencies development environment. This system is in very early (beta?) release as of September 2014.
  • TinyBuilder, a distributed build system designed to provide consistent build results.

Build script generation tools[edit]

  • configure
  • CMake, a cross-platform tool that generates files for the native build environment, such as makefiles for Unix or Workspace files for Visual Studio
  • GNU build system (aka autotools), a collection of tools for portable builds. These in particular include Autoconf and Automake, cross-platform tools that together generate appropriate localized makefiles.
  • GYP (Generate Your Projects) - Created for Chromium; it is another tool that generates files for the native build environment
  • imake
  • Premake, a Lua based tool for making makefiles, Visual Studio files, Xcode projects, and more
  • qmake

Continuous integration tools[edit]

  • AnthillPro, build automation with pipeline support for deployment automation and testing. Cross-platform, cross-language
  • Bamboo, continuous integration software
  • Automated BuildStudio, a system for automating and managing software build, test and deploy processes, with build scheduling and continuous integration support
  • Apache Continuum
  • Buildbot, a Python-based software development continuous integration tool which automates the compile/test cycle
  • BuildIT, a free graphical build or task tool for Windows with an emphasis on simplicity and ease of use
  • Buildout, a Python-based build system for creating, assembling and deploying applications from multiple parts
  • CABIE Continuous Automated Build and Integration Environment, open source, written in Perl
  • Cascade, a continuous integration tool that builds and tests software components after each change is committed to the repository. Also provides a "checkpointing" facility by which changes can be built and tested before they are committed
  • CruiseControl, for Java and .NET
  • DeployBot, a hosted continous integration service
  • Hudson, an extensible continuous integration engine
  • Jenkins, an extensible continuous integration engine, forked from Hudson
  • Team Foundation Server, an extensible continuous integration engine from Microsoft
  • TeamCity
  • Travis CI, a hosted continuous integration service

Configuration management tools[edit]


back-end languages and front-end languages

back-end languages (in order of my ability to recall):
  • Java (and other JVM languages like Scala, Groovy, Clojure)
  • PHP
  • .NET (C#, VB)
  • Ruby
  • Python
  • Perl
  • Javascript  (Node JS)
  • Actionscript (Flash Media Server)
  • CoffeeScript
  • C (CGI)
  • Erlang
  • oh, and SQL for db queries

For browser-based front-end languages, you're somewhat limited in what the browser can support (excluding launching out-of-browser applications). We could talk about:
  • HTML
  • Javascript
  • CSS
  • Actionscript
  • CoffeeScript (compiled to Javascript)
  • XML-based languages (X3D, SMIL, SVG, DITA, some interpreted by the browser, others transformed using XSL)
  • VBScript
  • Silverlight
  • Java (applets)

For native PC desktop front-ends, most popular front-end languages would probably be (I'm guessing, in no order): 
  • Visual Basic 6 (from my experience with big enterprises, I bet a lot of those are still out there, just like Windows Vista)
  • .NET
  • Java (Swing apps)

But just about every language that can create desktop apps also has some net code library that lets you write n-tiered applications (Kivy (Python), Tcl/Tk, ...).

For native mobile application front-ends, most popular would probably be: 
  • Objective C (for iOS apps)
  • Java (Android apps)

But if you just want most popular (browser-based) web application development stacks, that would probably some combination of the following:

Front-end: HTML / Javascript / CSS
Back-end: PHP / Java / Javascript / Ruby / .NET / Python

Back end developer

Back end developer

This developer is focused on managing the interchange of data between the application and the browser. This developer focuses on the server-side of programming for the web, yet also understands the programming languages which control the display of content in the browser.
Existing Knowledge
  • Custom web application development.
  • Developed with at least one CMS framework or web application framework.
  • Employed a framework or extended an existing CMS with custom coding.
  • Knowledgeable about accessibility or security compliance relevant in client’s sector and geographic location.
  • Understands the underlying systems on which web applications are developed.
  • Understands the technologies and languages which power the web such as HTML, CSS and JavaScript.
  • Understands key server-side web development concepts such as:
    • Integrating data or user accounts between multiple systems for a client.
    • Integrating multiple databases and/or database types into one system.
    • Managing a hosting environment, and has administered databases.
    • Scaling an application and/or its hosting environment to support increases in traffic.
    • Setting up or using a version control system, and manage control with file based assets and data.
    • Implementing or working with content approval and staging workflows.
    • Migrating data, scripting migration of data.
    • Implementing, managing or using a backup system and disaster recovery.
    • Securing data or access to applications with multiple user levels, or has the ability to customize based on user levels.
    • Implementing or working with a template driven system with a clear separation between content and display. *comment.
    • Outputting data in multiple document formats.
    • Using XMLHTTPRequest and Javascript to create web applications.
    • Working with multiple delivery platforms such as mobile versus desktop.
    • Creating multilingual websites or applications.
    • Creating and implementing database schemas that represent and support business processes.
    • Ensuring the quality of applications through unit testing.

Image frontend developer


Skills of a successful front-end web developer

Everyone wants to hire the perfect Drupal developer - but you need a way to identify future potential Drupal front-end developers. What previous experiences and transferable skills are going to help someone make the switch to Drupal and excel on a busy team for a typical Drupal site owner.
What are the transferable skills and characteristics someone could look for in a potential Drupal developer? To put it another way, if you have a group of 10 people how would you narrow down your choices?
There are many roles recognized in the Drupal community, yet for the purposes of this discussion, we are grouping them into two roles:Back-end developer, and Front-end developer.

Front end developer

Previous experience

  • Understands key server-side web development concepts through experiences such as:
  • Interpreting graphic visual or interaction designs in HTML, CSS and Javascript.
  • Creating visually appealing web pages or interfaces.
  • Creating, editing or modifying templates for a CMS or web development framework.
  • Programming interaction with JavaScript and/or a library such as jQuery, YUI or Prototype.
  • Testing cross-browser, cross-platform, and/or cross-device compatibility for inconsistencies.
  • Testing for compliance to specified standards such as accessibility standards in the clients region or domain.
  • Conducting observational user testing, or reviewing designs against usability heuristics.

Domain specific knowledge or transferable skills

Experience with web development languages of HTML, CSS and JavaScript/jQuery.
  • HTML
    • Familiarity of HTML syntax for multiple specifications, including HTML 5.
    • Knowledge of the semantic meaning of all HTML elements.
    • Familiarity with the semantic markup for display of lists, tabular data, forms, articles, etc.
    • Knowledge of markup used for layout such as dividers.
    • Knowledge at the level to be able to hand-code markup.
    • Including media and images.
  • PHP
    • Familiarity with modifying Drupal Theme hooks to display data
    • Understanding how to utilize PHP to filter, process and output html, json, xml
  • CSS
    • Specifying different CSS for various media, devices and displays.
    • Best practices in CSS file organization and structure.
    • Methods for including CSS inline, internal and external via linked style sheets.
    • How to define, combine and group CSS selectors for HTML elements, ID, classes, pseudo classes, child or sibling.
    • Syntax of CSS declarations, properties and attributes.
    • CSS box model and methods for CSS positioning, absolute and relative.
    • Knowledge of properties and attributes to control the display.
    • Familiarity with differences in CSS 2 and CSS 3.
    • Proficient with a CSS Preprocessor such as Sass or LESS.
  • Best practices
    • Methods to ensure browser & device compatibility
    • Methods for degrading gracefully for older browsers and displays.
    • Methods to ensure accessibility.
    • File compression techniques for improving speed.
  • JavaScript
    • Knowledge of the operators, variables, datatypes, objects, properties and methods.
    • Familiarity with control structures such as objects, functions, conditional statements, arrays, loops and expressions.
    • Forms and regular expression validation and submitting data.
    • Knowledge of how to apply logical operators and conditional statements.
    • Knowledge of the DOM HTML objects and their properties.
  • Event handling.
    • Creating and controlling windows and dialogs.
    • Processes for troubleshooting and debugging
    • Familiarity with development and debugging tools for cross-browser issues.
  • jQuery
    • Knowledge of how to employ the jQuery library for visual effects, event handling, and document manipulation.