Latest Replies
Tuesday
Jun162009

Software Development Body of Knowledge - ABC 02

In this Software Development ABC article we'll walk over the development terms that were quite a paradigm shift for me in the first years of my software-related career.

There will be a short intro, followed by the compact definitions of 3 terms with the links leading to full articles (and even more links).

The first paradigm shift has happened while I was coding forecasting algorithms for my diploma in economics (back in Delphi and Pascal these days). It was about Version Control Systems. They have allowed to stop worrying about manual backups or doing something wrong. Ability to instantly roll back to the previous working copy (or any other previous moment in history) gave an invaluable sense of confidence and flexibility. I also was finally able to get rid of incremental archives scattered across the hard drives (all these "copy2.zip" and "copy2version4.zip").

The second paradigm shift was about Unit Testing which is an extremely simple concept on its own - split the code in units and write assertions to rapidly verify correct behavior of these units. Unit testing has allowed to concentrate on the development by significantly reducing the risk of breaking something with a change (which is often the case with mathematical code). Green became my favorite color afterwards.

The third paradigm shift took place some time later, when I started working remotely in my first development project. It was .NET 1.1 with a lot of fragile and complex legacy code. Changes there rarely went without breaking something else.

Yet, the sales people didn't care about things like development friction and constantly demanded new features. They often went directly to the developers in order to get them. Planning and schedules were often sacrificed for the sake of moving forward with an important customer (which actually made sense in that project).

The only way to deliver reliable functionality in such a brittle and fast paced environment was about using some methods from the Agile Software Development. And, as it has turned out later, they did work and made development process more efficient and stable.

So let's get into these three terms in a more detail.

You can either continue reading through expanded definitions (which have links leading to even more material) or subscribe to receive updates on this topic.

Software Development Body of Knowledge ABC

Version Control System - VCS


Version Control System (VCS) is a software that allows to manage changes of documents, programs, images and other information that is stored in form of computer files. Changes are usually identified by an incrementing number or letter code also known as revision number or revision.

The simplest usage of versioning is - you can easily go back to the previous working version of your files, should you mess something up with the latest changes.

Changes could range from fixing a typo in a text file up to a huge refactoring in a software project, spanning hundreds of files. Each change usually has name of the person introduced it, time of the change and an optional description message.

Proceed to the full article on Version Control Systems

Unit Testing


Unit Testing in software development is a way to quickly verify that smallest blocks of software (units) behave as expected even as the software changes and evolves.

Here's how it works.

Any program could be logically separated into distinct units (in object-oriented programming the smallest unit usually being a class). Developers, while coding these program units, also create tests for them (code blocks containing some assertions and expectations about units). These tests could be used to rapidly verify behavior of the code being tested.

When some other developer introduces new units or changes something in existing units, he can run all the tests available for the program and verify that everything is still operating as expected. Usually running unit tests is a fast operation (less than 30 seconds), so developers are encouraged to do that often.

Proceed to the full article on Unit Testing

Agile Software Development


Agile Software Development is an iterative and incremental approach in software development, where requirements and solutions evolve through a tight collaboration of self-organizing cross-functional teams.

Agile works quite well in situations when some unique software project has to be delivered really fast in order to seize the market opportunity. This works because Agile software methodologies allow development teams to adapt quickly to the rapidly changing business requirements. This happens because of:

  • short development iterations allowing to start getting feedback early in the project's life-cycle and incorporate it into the product fast by delivering working software repeatedly and in a timely manner;
  • continuous integration helping to reduce development friction and improve quality of a rapidly developing project in self-organizing environment;
  • feature-driven development focusing development on delivering features (functionality) bringing real business value to the client (and the project);
  • lean software development laying out common principles for efficient software development process;
  • eXtreme Programming pushing lightweight software development methodologies to the extreme.

Proceed to the full article on Agile Software Development

Interested in the series? You can stay tuned by subscribing to the RSS feed of this Journal.

« Cloud Bursting Scenarios For Small Companies | Main | Software Development Body of Knowledge - ABC 01 »

References (1)

References allow you to track sources for this article, as well as articles that were written in response to this article.
  • Response
    Search Tags Family and Community Development (4) Maternal and Infant Health (2) Nutrition (2) Extension Learning Farm (2) Sheep Program (1) 4- H Youth Development (2) Uncategorized (1) Archives June 2009 December 2007 October 2007 December 1969 Pages 4-