Friday, May 16, 2014

Software Engineering Tools

Tools in general, are the things that make life easier.Software engineering tools, makes the life of a software engineer easier whether it may be a developer, tester or a designer.Software developer make use of the software engineering tools to create, debug, maintain, or otherwise support other programs and applications.

Software tools come in many form :
  • Build tools
  • Debugger
  • Disassembler
  • Memory debugger
  • Integration tools
  • GUI interface generators
  • Library interface generators
  • Source code editor
  • Static code analysis and many more.



Some of the commonly used tools are :
  • Jeera is a project management tool which keeps track of tasks, defects, work items and deadlines to complete the tasks or fix a defect.
  • There are version control software like GIT, SVN and CVS. These maintain code history and allow multiple team members to coordinate and work on a project.
  • There are testing frameworks such as Junit for unit testing modules.
  • There are user interface testing tools like Selenium.
  • There is Jmeter for RESTful system testing.
Integrated development environment combine the features of many tools into one package.Eclipse is an IDE which is used by the developer to compile and execute programs. Eclipse also has debuggers, which can be used by the developers to set breakpoints and step through the code.


References

  • http://www.sparxsystems.com/platforms/software_development.html
  • http://en.wikipedia.org/wiki/Programming_tool


Using zookeeper in distributed systems

Apache Zookeeper is a crucial component used for coordination in distributed systems. It can be deployed as a highly available centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.

Deployment:
The usual deployment is to have a ensemble (quorum) of odd number of zookeeper servers, depending on the number of clients it is servicing. The rationale is that, in case of failure of a few servers, the zookeeper service can still continue to function if there is still a majority.

For example, a 3 node ensemble will tolerate failure of 1 node because the other 2 form a majority. Compare this with a 4 node ensemble, which can still tolerate failure of just 1 node.

Based on a "leader election algorithm", one of the nodes is designated leader. All requests from clients go to this elected leader, which synchronizes the data with the remaining nodes

Data model:
The data model of zookeeper resembles the tree structure of unix filesystem. Each path refers to a zookeeper node (znode). Znodes are allowed to have data as well as metadata associated with them. Further, clients can create ephemeral znodes, which are deleted when the client terminates its session.



Watches:
The power of zookeeper comes with the concept of watches on znodes. A watch will be triggered when a znode changes. We will see watches in action in the example below.

Example:
Here is an algorithm to implement global locking. Clients wishing to obtain a lock do the following:

1. Call create( ) with a pathname of "_locknode_/guid-lock-" and the sequence and ephemeral flags set. The guid is needed in case the create() result is missed. See the note below.
2. Call getChildren( ) on the lock node without setting the watch flag (this is important to avoid the herd effect).
3. If the pathname created in step 1 has the lowest sequence number suffix, the client has the lock and the client exits the protocol.
4. The client calls exists( ) with the watch flag set on the path in the lock directory with the next lowest sequence number.
5. if exists( ) returns false, go to step 2. Otherwise, wait for a notification for the pathname from the previous step before going to step 2.

The unlock protocol is very simple: clients wishing to release a lock simply delete the node they created in step 1.


References:
1. http://zookeeper.apache.org

Beta Testing


All the applications and products are tested thoroughly before releasing it to the customer so that the developers can  verify whether a computer program/application/product:
  • Meets the requirements that guided its design and development,
  • Works as expected,
  • Can be implemented with the same characteristics,
  • And satisfies the needs of stakeholders.
 There are different types of testing :
  • Installation testing
  • Compatibility testing
  • Smoke and sanity testing
  •  Regression testing
  • Acceptance testing
  • Alpha testing
  • Beta testing
  • Functional vs non-functional testing
  • Destructive testing
  • Software performance testing
  • Usability testing
  • Accessibility testing and many more
Beta testing comes after the alpha testing and is used to test the product before releasing it commercially.It can be considered as a form of external user acceptance testing.

Beta versions, which are the versions of software are released only to a limited audience so that further testing will apprise the developers with existing bugs or new faults so that he can take corrective actions.This will ensure that the final product released will be bug free.Beta versions are sometimes made available to the open public to increase the feedback field to a maximum number of future users.There are few online websites which offers us a chance to participate in Beta Tests of unreleased products. 



References
  • http://en.wikipedia.org/wiki/Software_testing#Beta_testing
  • http://www.opineinfosolutions.com/beta_testing.php

Monday, March 17, 2014

Open Source World

It is fascinating to look at the history of open source movement. It shares its roots with the free software movement pioneered by Linus Torvalds and Richard Stallman, who have been supporting free and open software since the 1980's. 

In 1998, with the release of Netscape navigator code and the founding of the "Open Source Initiative" organization, the term "open source" became popular. One may wonder why the alienation from the "free software foundation". According to wikipedia, one of the reasoning behind using the term was that "the advantage of using the term open source is that the business world usually tries to keep free technologies from being installed.".  

                   
Linux operating system is a classic example of open source software. The linux kernel is licensed under GNU General Public License (GPL). To give an idea of how much linux benefited from being open source, here is an extract from wikipedia. A 2001 study of Red Hat Linux 7.1 found that this distribution contained 30 million source lines of code.[120] Using the Constructive Cost Model, the study estimated that this distribution required about eight thousand man-years of development time. According to the study, if all this software had been developed by conventional proprietary means, it would have cost about $1.48 billion (2014 US dollars) to develop in the United States.

Given that the ideals of the two movements are not so different, the term "Free and Open-Source software" (FOSS) is a common classification of many modern open source software. Apache License is one such FOSS license. We will take a brief look at the impact of a software product "Hadoop" under this license and the impact it has made.
                      
Apache Hadoop is an open source implementation of google's Map-Reduce paradigm. It makes use of commodity hardware to do distributes processing of data. A number of software projects have grown around hadoop. The "Big Data" buzzword in today's world hinges on the Hadoop's ecosystem of software. This huge impact was possible only through the large open source community backing for Hadoop.



References
  • http://en.wikipedia.org/wiki/Open_source
  • http://opensource.org/
  • http://en.wikipedia.org/wiki/Apache_Hadoop