In this era of social networking websites, software vendors invest money to develop these websites and offer their users to use their software product (in form of these websites) for free. Why a software vendor like Twitter or Facebook will spend millions of dollars to develop their software product and then allow their users to use their software products for free? How they earn their money so that they get a good return on their investment? Let us learn about how this business model works?

These software vendors earn their money from many sources. For example Twitter allows its customers to have a business account. Using a business account, a customer can tweet about their products and services and these tweets are visible throughout the entire community of twitter account holders. This is in contrast to the tweets which are made from twitter accounts which are not business accounts. Here a tweet is visible only to the followers of that twitter account. Thus having a business account on twitter is a good way to advertise your products and services to millions of people.

Facebook has a different business model. It allows its users to advertise on its website free of cost. It charges the customer who has placed its advertisement when any user clicks on the advertisement.

The most important consideration for these software vendors is the number of users who use their software product. If number of users for their software product is very limited then their business model will not work. For example if a software product has only some thousand users then any advertisement on their web pages will be seen by only these thousands odd people. This will not result in good sales for the advertiser. But if number of users of a software product number in millions then defnitely an advertisement will result in good sales for the advertiser.

So number of users matter for this type of business model. If a software vendor is not able to make its software product popular among its users then the software vendor will never be able to make any money from its software product. On the other hand popular software vendors like Faceook are minting money to the tune of billions of dollars annually.

Posted by: ahmedashfaque | July 23, 2015

Software release management in the agile era

Before agile methodology was adopted for software projects, most projects were following waterfall model. In waterfall model, a software product is released after the software product is designed, developed and tested. This software product is released so that it can be deployed and then used by end users. Thus we used to see very few software product releases. Once per software product development project!

In agile methodology, we see many releases of a software product. It is because software product is developed incrementally in agile methodology. Whenever a new increment is added to an existing software product, we can have a new release of that product. With each new release, we see some additional product features get added to the software product.

In between the agile and waterfall era; there used to be a transition era where software product vendors used to release there software proructs more than once. In this era we used to see alpha and beta releases of a software proruct apart from the usual final release. Even today many software vendors adopt this release strategy. Alpha and beta releases of a software product are used for 2 purposes. First the software vendor wants to create awareness about its product in the market by giving free evaluation copies to its customers. For example Microsoft makes alpha or beta releases of its software products in the market.

The other reason for creating alpha and beta releases of a software product is to get it tested by customers themselves. When customers install and use alpha releases of a software product, they may find some software defects. They will report these defects to the software vendor. The software vendor will fix these defects. If too many defects were reported then the software vendor may create a beta release so that the software product is tested further by customers.

Alpha and beta releases are great tools to get a software product tested quickly and free of cost. If the software vendor had decided to get the software product tested inhouse then it would had to hire a team of software testers. This approach is not only costly but it is also slow. Afterall there is a limit to the number of software testers who can be hired. In contrast, an alpha release can be installed, used and tested by thouands of customers.

Posted by: ahmedashfaque | July 22, 2015

Why programming is difficult?

On any software project, the software designer creates the software design and hands it over to the software programmer to write the source code. Generally the software design contains design for every business logic which need to be implemented. The detailed design is generally good enough for a software programmer to understand how the business logic works. But still implementing the business logic in the source code is not easy as many software programmers will vouch.

What are the factors which lead to such a situation? One problem could be difficulty in implementing a business logic using a programming construct. Many looping constructs are difficult to implement. For example looping through an array and finding some value of an element of the array is a cumbrsome task which many programmers find difficult. Looping through records stored inside a database and finding some value is again a difficult task. Linking a user interface element like a drop down box with values stored inside a database is again a difficult task.

Another programming task which is difficult to implement is maintaining user sessions for web based software applications. In fact developing a web based software product itself is a difficult task. The reason is that you need to create and pass values from user interface elements to some variables to session variables to a database. Since you need to pass values to variables at many layers and levels, the entire programming task becomes difficult.

There are some more programming constructs like thread management, memory management, performance management which are even more difficult to implement. So even though a prrogrammer is given all the software design information, implenting the design into source code is still a challenging and difficult task.

Posted by: ahmedashfaque | July 15, 2015

Why accesor methods are still bad?

In object oriented programming, accessor methods are used to provide access to hidden (private) class variables. If accessor methods are good?

Using get accessor methods, a private class variable can be seen from outside a class and its value can be known. Though you can not change the value of the private class variable. So it is safe. When you really need to set value of a private class variable then you use set accessor methods. These methods allow a mechanism to change value of a private class variable from outside a class. This mechanism can be locked for unsecured connections to a class so that unauthorized access to the private class variable can be totally avoided.

So it seems that accessor methods are good. But the fact is that they are still not good enough. Why?

Any class variable is created for the purpose of exposing it to other classes. Otherwise there is no use of declaring a class variable. But we know that excessive use of class variables will lead to tight coupling between software components. There will be too many connections and too much information exchange among classes. This is a bad software design. Remember the software design mantra of loose coupling and high cohesion.

There should not be too many connections among classes. This means there should not be too many public methods and variables inside a class. Most of the methods and vaariables should be created to be used only inside a class. A public method or a variable should be used only when a connection is neeeded with another class for getting or sending any data.

For this reason use of too many private class variables and their accessor methods is a bad design.

Posted by: ahmedashfaque | July 6, 2015

Difference between product quality & process quality

When we talk about software quality assurance, we often discuss process measurements, process improvements, productivity increase, quality improvement etc. And when we talk about quality improvement, mostly people think about product quality improvement. Most of the time people forget about process quality improvement. In fact, people find it difficult to differentiate between product quality and process quality. Let us find out the difference!

During software development we have work products like requirement specifications, software design, software code, user documentation, etc. Quality of any of these work products can be done by measuring its attributes and finding of they are good enough. For instance, a requirement specification may be ambiguous or even wrong. In that case, quality of that requirement specification is bad. So during quality assurance audit (peer review, inspection etc.), this defect can be caught so that it can be rectified.

During software development project, a lot of processes are followed. The top processes are the project processes like project initiation, project planning, project monitoring, and project closure. Then we have development processes like requirement development, software design, software coding, software testing and software release.

All of these processes are not executed perfectly on any project. Improvement in these processes can be achieved if we have audits of these processes. For instance, these audits are done by using standards like CMM (Capability Maturity Model). These standards dictate as to how any project or development process needs to be executed on any project. If any process step is deviating too much from these standards then that process step needs to be improved. The most important job of any software quality assurance department is to audit and ensure that all processes on projects being executed in that organization adhere to these standards and so quality of these processes (project & development) is good enough.

Posted by: ahmedashfaque | July 5, 2015

More university list for software project management

I am delighted to share the information that more universities have adopted my book “Software project management: a process driven approach” as the textbook.

Here is the new universities:

1. Mercu Buana University, Indonesia
2. King Mongkut’s University of Technology, North Bangkok, Thailand
3. Indian Institute of Technology, Jodhpur, India
4.Soongsil University, South Korea

Posted by: ahmedashfaque | July 4, 2015

process standards & software development methodologies

Software engineering is all about building commercial and mission critical software products cost effectively, within time limits & with good quality. This is achieved by using proven software development processes. These software development processes are also known as methodologies because they try to build a model of the user requirements into a software product (the requirements are the actual reality and its corresponding software product is a model of these requirements).

Some of the popular software engineering methodologies include Scrum, eXtreme Programming, Unified Process etc. Some older methodologies include waterfall model and Rational Unified process.

These methodologies present a standard way of developing a software product. The difference between any of these methodologies is the approach taken. For example in Scrum, the requirements are converted into product features and are kept as a feature backlog. During any iteration, some of the features are selected from this backlog and then they are used to develop the features in that iteration.

If these methodologies are standards themselves then what is the need of process standards? As you might know, some organizations like ISO, IEEE, Software Engineering Institute etc. develop process standards for software development processes.

While any organization may be using any standard methodologies, the organization may not know, how well they are using the methodology. So they may engage a consultant who will assess their processes and conclude how well they are using the processes as compared to industry standards. Their review report may indicate which processes are good and which processes need improvement. Once the organization gets this detailed analysis, it can improve its processes so that they will be at par with industry standards.

 

Posted by: ahmedashfaque | June 3, 2015

Software design fundamentals – What is component diagram?

In the previous post we have seen what is a use case and how a use case is related to a component diagram. Today we will learn about component diagrams and how they are related to classes.

A component diagram is based on use cases. For example we can create a component diagram based on the use cases we had seen in the previous post about a order management system for a restaurant.

  1. The sales rep logins into the order management system. –> we can create a login page for the system.
  2. The sales rep takes customer order. –> We can create an order page.
  3. The sales rep confirms the order. The system comes up with the amount to be paid by the customer for the order. –> We can create a confirmation page.
  4. The sales rep collects the amount from the customer. –> We can create a payment page.
  5. The sales rep delivers the order to the customer. –> We can create a delivery page.
  6. The sales rep closes the order. –> We can create an order closing page.
  7. The sales rep logs out of the order management system. –> We can create log out page.

A page (a web page or a user screen) is easy to think about when you create corresponding pages for each use case. You can already see it in the above example. A page is a component in software designing. Once you are able to design components, designing other component level diagrams is easy. Generally drawing a data flow diagram is enough at the component level.

The next level of software design deals at low level or detail level software designs. It is at this level that you need to provide complete details about each component of your software product. This level is the class and object level in object oriented programming. This we will learn in next post.

One more aspect about component level. Since software development field is a relatively new field, there are no established engineering processes which can be applied during software development. This area will mature in future when more domain knowledge about software product development is acquired. However there are some standard templates which have been developed by software industry for component level design. This area is known as software design patterns.

Software design patterns can be used as templates to develop a component level design for a software product. For example there is a template for creating model view controller architecture based software product. So you need not have to create this architecture from scratch and instead can use this template to build your software product. There are many such templates available.

Posted by: ahmedashfaque | June 2, 2015

Software design fundamentals – What is use cases?

When you write requirement specifications, you also create use cases. These use cases describe how a system should behave to interaction with agents like the user or another software products. In reality these use cases are simple explanations of behavior of the system against events which are triggered outside but have effect on the system under consideration.

Even though Use cases belong to requirement specifications, they can be considered as the first building blocks for designing a software product. It is because the use cases can be the input for creating software component diagrams. Use cases are described in terms of some simple diagrams and also in form of some text explanations.

Suppose a series of use cases describe about activities carried out by a sales representative of a restaurant in regard to taking orders for customers. Let us see some of the activities here.

  1. The sales rep logins into the order management system.
  2. The sales rep takes customer order.
  3. The sales rep confirms the order. The system comes up with the amount to be paid by the customer for the order.
  4. The sales rep collects the amount from the customer.
  5. The sales rep delivers the order to the customer.
  6. The sales rep closes the order.
  7. The sales rep logs out of the order management system.

The above activities are use cases for the order management system. Now if the software designers are handed this set of use cases then they definitely will be able to create a component diagram for the order management system.

So you can see use cases are powerful tools for designing software products.

Posted by: ahmedashfaque | May 19, 2015

practical considerations for software testing – 3

In my previous post we had considered the challenges of unit testing where databases are involved. In this post we will see how to overcome those challenges.

The first challenge is about the fact that a database is an external entity. You can only manipulate a database if you have a connection with the databaase. For any reason if the connection with the database gets broken then you can not do anything with the database. This means the first thing you need to do is to test if a connection with the database is available and it is working. This kind of testing is essentially an integration testing and not a unit testing. Once your database connection test passes then you can write a query which will do some data manipulation in the database. This query will actually change data in the database. On a software project, lot of database testing is performed. This may result in lots of testing data will be created and manipulated in the database. This is not a good practice.

A better approach will be to create a record containing test data in the database and then delete this test data once your testing is complete.

When you follow these principles then you can do your unit teesting with database comfortably.

 

Older Posts »

Categories

Follow

Get every new post delivered to your Inbox.

Join 115,825 other followers