Basics of software engineering

Discuss software evolution. give Lehman’s law of software evolution.

The process of developing a software product using software engineering principles and methods is referred to as software evolution. This includes the initial development of software and its maintenance and updates, till desired software product is developed, which satisfies the expected requirements.

Evolution starts from the requirement gathering process. After which developers create a prototype of the intended software and show it to the users to get their feedback at the early stage of software product development. The users suggest changes, on which several consecutive updates and maintenance keep on changing too. This process changes to the original software, till the desired software is accomplished.

Even after the user has desired software in hand, the advancing technology and the changing requirements force the software product to change accordingly. Re-creating software from scratch and to go one-on-one with requirement is not feasible. The only feasible and economical solution is to update the existing software so that it matches the latest requirements.

Lehman has given laws for software evolution. He divided the software into three different categories:

  • S-type (static-type) – This is a software, which works strictly according to defined specifications and solutions. The solution and the method to achieve it, both are immediately understood before coding. The s-type software is least subjected to changes hence this is the simplest of all. For example, calculator program for mathematical computation.
  • P-type (practical-type) – This is a software with a collection of procedures. This is defined by exactly what procedures can do. In this software, the specifications can be described but the solution is not obvious instantly. For example, gaming software.
  • E-type (embedded-type) – This software works closely as the requirement of real-world environment. This software has a high degree of evolution as there are various changes in laws, taxes etc. in the real world situations. For example, Online trading software

Discuss eight laws for E-Type software evolution.

Lehman has given eight laws for E-Type software evolution –

  • Continuing change – An E-type software system must continue to adapt to the real world changes, else it becomes progressively less useful.
  • Increasing complexity – As an E-type software system evolves, its complexity tends to increase unless work is done to maintain or reduce it.
  • Conservation of familiarity – The familiarity with the software or the knowledge about how it was developed, why was it developed in that particular manner etc. must be retained at any cost, to implement the changes in the system.
  • Continuing growth- In order for an E-type system intended to resolve some business problem, its size of implementing the changes grows according to the lifestyle changes of the business.
  • Reducing quality – An E-type software system declines in quality unless rigorously maintained and adapted to a changing operational environment.
  • Feedback systems- The E-type software systems constitute multi-loop, multi-level feedback systems and must be treated as such to be successfully modified or improved.
  • Self-regulation – E-type system evolution processes are self-regulating with the distribution of product and process measures close to normal.
  • Organizational stability – The average effective global activity rate in an evolving E-type system is invariant over the lifetime of the product.

Discuss the software development, design and programming Paradigm

software development Paradigm is known as software engineering paradigms where all the engineering concepts pertaining to the development of software are applied. It includes various researches and requirement gathering which helps the software product to build. It consists of –

  • Requirement gathering
  • Software design
  • Programming

software design paradigm is a part of Software Development and includes –

  • Design
  • Maintenance
  • Programming

programming paradigm is related closely to programming aspect of software development. This includes –

  • Coding
  • Testing
  • Integration

Why we need software engineering?

The need of software engineering arises because of higher rate of change in user requirements and environment on which the software is working.

  • Large software – It is easier to build a wall than to a house or building, likewise, as the size of software become large engineering has to step to give it a scientific process.
  • Scalability- If the software process were not based on scientific and engineering concepts, it would be easier to re-create new software than to scale an existing one.
  • Cost- As hardware industry has shown its skills and huge manufacturing has lower down he price of computer and electronic hardware. But the cost of software remains high if proper process is not adapted.
  • Dynamic Nature- The always growing and adapting nature of software hugely depends upon the environment in which user works. If the nature of software is always changing, new enhancements need to be done in the existing one. This is where software engineering plays a good role.
  • Quality Management- Better process of software development provides better and quality software product.

Discuss the characteristics of good software

A software product can be judged by what it offers and how well it can be used. This software must satisfy on the following grounds:

  • Operational
  • Transitional
  • Maintenance

Well-engineered and crafted software is expected to have the following characteristics:


This tells us how well software works in operations. It can be measured on:

  • Budget
  • Usability
  • Efficiency
  • Correctness
  • Functionality
  • Dependability
  • Security
  • Safety


This aspect is important when the software is moved from one platform to another:

  • Portability
  • Interoperability
  • Reusability
  • Adaptability


This aspect briefs about how well a software has the capabilities to maintain itself in the ever-changing environment:

  • Modularity
  • Maintainability
  • Flexibility
  • Scalability

In short, Software engineering is a branch of computer science, which uses well-defined engineering concepts required to produce efficient, durable, scalable, in-budget and on-time software products.

Next post will be on software development life cycle and software project management


The International Conference on Software Engineering, Mobile Computing and Media Informatics (SEMCMI2015)

You are invited to participate in The International Conference on Software Engineering, Mobile Computing and Media Informatics (SEMCMI2015) that will be held in Asia Pacific University of Technology and Innovation (APU), Kuala Lumpur, Malaysia on September 8-10, 2015 as part of The Fourth World Congress on Computing, Engineering and Technology (WCET). The event will be held over three days, with presentations delivered by researchers from the international community, including presentations from keynote speakers and state-of-the-art lectures.

The conference welcomes paper on software engineering, mobile computing and media informatics.  The proceedings will be submitted for indexing in ResearchBib, ProQuest, ResearchGate, Academia and  google scholar index.

Quick facts:

When Sep 8, 2015 – Sep 10, 2015
Where Kuala Lumpur
Submission Deadline Aug 8, 2015
Notification Due Aug 18, 2015
Final Version Due Aug 29, 2015


Have you met Netty? by Mafinar Rashid Khan

Project Management Teams Illustrated

Different project setups. Projects with (a) traditional collocated teams, (b) collocated teams with onsite consultants, (c) nondistributed outsourcing projects, and (d) nondistributed insourcing projects aren’t distributed, whereas projects with (e) distributed insourcing with two teams, (f) distributed outsourcing with two teams, (g) distributed insourcing with one virtual team, and (h) distributed outsourcing with one virtual team are considered distributed project arrangements. The projects described in (e) and (f) rely on loosely coupled teams, whereas (g) and (h) have dispersed or virtual teams.

Source: Virtual Teams,Published by the IEEE Computer Society

One of many things I have learned from Nascenia IT
“Write migrations, and you don’t have to go to the database server again”

How to write comments and an introduction to CDD

Read the following wikipedia page :

Written well enough for me 🙂

about using TODO, here is an example:

// TODO:2008-12-06:johnc:Add support for negative offsets.

// While it is unlikely that we get a negative offset, it can

// occur if the garbage collector runs out of space.


see that the todo tag is followed by date then developer name, as it will help other developers to understand who is writing this todo and why.

level of details: The level of detail in the documentation is an important element. Too much detail renders the documentation ina ctive; rather the tool should generate documentation as intended by the author and not as produced by an exhaustive parsing tool.

alright, lets talk about comment driven development (CDD). Comment programming, also known as comment-driven development (CDD) is a software development technique that is based on the regular use of comment tags. In comment programming the comment tags are not used to describe what a certain piece of code is doing, but rather to stop some parts of the code from being executed. The aim is to have the commented code at the developer’s disposal at any time he might need it. This is especially useful when the requirements change rapidly. In this case they happen to revert to older versions of themselves, thus making the programmer either write the code again, or revert parts of the code from the versioning repository, which would be more time-consuming. With comment programming, when such a request for reverting to an old implementation arises, the developer just comments the current implementation and uncomments the previous. It is advisable to add short descriptive comments to blocks of commented code.

another good definition i found: This is a programming methodology that encourages the developer to start out complex projects by building a wireframe of their procedures using little more than comments – and basic pseudocode – to describe each step of the algorithm. CDD helps the developer encounter and work out problems before they write a line of actual code; it also has the advantage of helping clearly delineate the routes between the high-level problem and the many small-picture fractals it is composed of. The comments created using CDD may survive the process of actual coding and development as line comments throughout the programming unit; however, it will sometimes make sense to delete them after their purpose has been served. (better then wikipedia i hope)

here is the video from MSDN sweden, hope that helps you, will write more about it.

reference and read more: (a good article, i would suggest you to read it)

Type of software documents

Documentation is an important part of software engineering. Types of documentation include:
1. Requirements – Statements that identify attributes, capabilities, characteristics, or qualities of a system. This is the foundation for what shall be or has been implemented.
2. Architecture/Design – Overview of software. Includes relations to an environment and construction principles to be used in design of software components.
3. Technical – Documentation of code, algorithms, interfaces, and APIs.
4. End User – Manuals for the end-user, system administrators and support staff.
5. Marketing – How to market the product and analysis of the market demand.

Service Oriented Modeling Framework

Service Oriented Modeling Framework

Service-oriented modeling is the discipline of modeling business and software systems, for the purpose of designing and specifying service-oriented business systems within a variety of architectural styles, such as enterprise architecture, application architecture, service-oriented architecture, and cloud computing.

Software Design Document Template

Here is the link of a template of a software design document.


A Short review on Collabtive


Well, first thing is I am writing blog. It is a good thing, is not it?

Today I want to talk about a Collaborative application. I am currently using it at my office. As we are communicating with our client so frequently and we need to keep him up to date, so we decide to use a collaborative application.

We are using collabtive (


Fig: Collabtive web site

Now it is a groupware, Collaborative software (also referred to as groupware) is computer software designed to help people involved in a common task achieve goals. One of the earliest definitions of “collaborative software” is, “intentional group processes plus software to support them.” [1]

Now it is an alternative of BaseCamp, written in PHP and JavaScript. It started in November 2007. And it is good for small to medium-sized businesses and freelancers.

The application is currently available in sourceforge and google code. This project is last modified at 19/1/2012 (Fresh enough!)

Now you can download and test it in your local server.

If you are using cpanel and which support softaculous, you can install it via softaculous.

Fig: Collabtive in cpanel/ softaculous

Now if you don’t have this support in your cpanel, don’t worry, upload the application in your server. Install it manually.

I installed it via cpanel. Now here is the login page of the application


Now this is the landing page (called Desktop)


This application is really cool. Usefull if you are a freelancer, or you need to control your small to mid level projects.