Software industry has always fancies for a day when software components will become true plug and play things. After all electronics industry has become a true plug and play arena for electronics components for a long time. You can always replace a faulty electronic component with a new one and your electronic gadget will never complain. Why software components have not become true plug and play things yet. Let us discuss.

Software products are essentially service oriented in nature. Especially in the era of the Internet, people do not buy software products. They use software products which are installed somewhere on the world wide web. Off course there are software products like word processors or spreadsheets which users still buy, install on their computers and use. But these kinds of software products will also be replaced by their cousins which can be installed somewhere on the world wide web and can be used from anywhere.

Thus this kind of scenario requires software products to be service oriented. This also means that a single software product installation should be able to service thousands if not millions of users. This is in direct contrast to the scenario for electronic products; which are overwhelmingly meant to be used by only a few people per installation.

Even if a software product vendor creates a true plug and play software component; it will not make much economic sense. How many people will actually buy such software components? Not many in fact! After all how many installations of such a software component will be there globally?

Thus it does not make any sense in developing such software components.

Advertisements
Posted by: ahmedashfaque | March 16, 2017

Refinement – The way to create beautiful software products

In a previous post; we had learned about abstraction for building powerful software products. Now let us learn about refinement.

Refinement is the opposite concept compared to abstraction. In abstraction, we try to aggregate dissimilar things by ignoring dissimilarities and aggregating them using the common thread running among them. When we are able to aggregate things for the purpose of building a software product which can be used by many types of users; then the next thing we need to do is to actually build different software product features which are useful for these different types of users. How we can do that? Let us learn here.

In the post on abstraction, we had seen how we can aggregate similar functionalities of categorizing text (numbered, tabulated, bulletted etc.) for a word processing software product, using abstraction. Now when we need to implement these functionalities then we need to implement them separately. How we can do that?

At the abstracted level we can create a common interface or class. This class will have the common functionalities implemented. Now we can create child classes which will implement the specific functionalities of each of the software features. For example, we can have a child class which can now implement functionality for formatting text in bullet form and another child class which can now implement functionality for numbered text. This way we can implement all functionalities needed by creating a separate child class for each functionality.

In the old programming languages; refinement used to be done using many if-else statements. The drawback of doing it this way was that you can end up having many nested programming statements. This would lead to unstable behavior of the software product during use and would lead to software defects. Using child classes overcomes this problem. Child classes allow easy maintenance of the software product as well.

 

I am happy to announce that Kindle edition of my book “Foundations of software engineering” is now available. You can download and read it on your favorite Kindle device. The web page for the Kindle edition is here.

My book “Foundations of software engineering” is primarily written as a textbook for University level courses related to software engineering. It is getting extremely good reviews from professors around the world; particularly from American and Indian universities.

Any professor who wants to adopt my book for his/her courses related to software engineering can get an evaluation copy of my book by clicking this link.

I have also provided a lot of additional material on software engineering page of this website. I hope my book

will become the best tool to teach software engineering to students.

What is abstraction? How it is used in designing software products? Let us learn about usefulness of abstraction in this post.

In popular parlance, abstraction is thought as filtering out unwanted information or substance and keeping only the information or substance which is needed. For example, in chemical industry we remove impurities from a substance to make the substance pure.

When we need to build a software product, we need to ensure that the software product can be used for many purposes. This way, it can be ensured that a large number of people can use the software product. For example, even though a word processing software program does word processing but different people need different kinds of word processing. Some people need to create tables to categorized their data in their word processing work. Some other set of people need to embed images in their word processing to emphasize their text. Some other set of people need to provide classification of their text using numbered or bulletted information. The point here is that there are many types of need in word processing.

A software vendor who wants to create a word processing software product must need to provide facilities in the software product so that all kinds of word processing needs of users can be met. At the same time, all these facilities should be provided in such a manner that the user can use them without much problem. So it is important that the user interface is well organized and all these facilities can be used easily by the user.

One way to provide a good interface is to provide similar facilities together in one place. For example numbering text or bulletting text are similar in nature. So they should be provided in one place – near to each other. This can be done by providing commands (tool icons or menus in graphical user interfaces) next to each other for these similar facilities. You can have a main menu to format text and then there could be sub-menus inside this main menu to do these similar tasks.

When software designers design the software product; they keep in mind that similar software product features can be created from the same base piece of software product. So they first build an abstract software component and later implement it in different ways to create software products which do similar but different tasks.

The method to find out similar product features is known as abstraction. Abstraction is important because it results in code reuse. The same base software component can be used to create many types of similar but different product features. Code reuse results not only in more productivity for software developers but it also helps in creating better software products with less number of software defects. Such software products are also easier to maintain.

Posted by: ahmedashfaque | February 13, 2017

Quiz on software engineering

I have created a quiz for my book “Foundations of software engineering“. There are some 450 questions in all. These questions are chapterwise.

These questions are available to people who have bought my software engineering book. Anybody want to have them should write me an email at ashfaque.a@gmail.com.

This quiz is also used by professors to test their students knowledge and for grading. So this quiz is not available to students who are enrolled in American universities.

Posted by: ahmedashfaque | January 31, 2017

Objects in programming part 2

In Part 1 of this series, we saw that all the information about life should be attributed to real life entities. If wrong information is attributed to an entity then there will be problems. Now we will discuss further as to how object oriented programming solves this problem.

In the old days of Database management Systems (DBMS), there used to be simple interface through which data can be entered and then will be saved in the database. Once the data used to get permanently saved then it was used to generate management reports.

These kinds of computer systems used to be simple in nature. They are even used today. Here the programming used to do 2 things. First, it would help in doing computation on the input data to store data permanently in the database. Second, Some programs used to be written which could generate management reports. Programming involved for these kinds of systems thus were simple. In those days, object oriented programming was not used much. Simple procedural programming languages could do all this stuff.

Now a days, computer programs are not that simple. Users not only provide input; they want to interact with the computer system more. For example, a virtual shopping cart on an online web store can do a lot of things. You can select some items from various web pages to keep them in your shopping cart. You can also remove them from the shopping cart. You can keep browsing the web store for prolonged periods of time. During this entire time, the information about the things which are inside a shopping cart is temporary in nature. So you can not store information about a shopping cart permanently until the a user wants to check out. Only after check out and payment, you can generate permanent data. At this point you can store the purchase data in a database permanently. But before that, all the information is stored temporarily. At the same time, there can be thousands of users visiting the same web store and each user will have its own shopping cart. What if information about a specific shopping cart gets wrong? It can happen if information about a shopping cart is attributed to some wrong shopping cart.

Programming involved in this kind of scenario needs different kind of handling compared to the situation we discussed about a typical DBMS system. Object oriented programming comes handy in these situations. In object oriented programming, each shopping cart becomes an object. All information about a shopping cart is always attributed correctly to the right shopping cart.

We will learn about wonders of object oriented programming further; in our next post.

Posted by: ahmedashfaque | January 28, 2017

Objects in programming part 1

We all very well know about object oriented programming. But most people have limited knowledge about objects. What are objects really? Let us understand it here.

In real world we understand about objects well. All of us are human beings. Each person is a human first. Then a person has a religion. The person can be a Christian, Hindu, Muslim Or Jew etc. Then a person can be a male or a female. Then a person is of certain age. Then a person has some specific education like a college degree etc. Then a person has some specific skills like plumbing, painting etc. Then a person can have a family. The person may have fallen sick many times in its life and so will have a medical history. Then a person may have been working and will have a job history.

In fact, there is going to be too much information about a person. If all this information can be stored by writing books then there can be thousands of books just for storing all the information related to just one person!

When it comes to programming, storage of data related to one entity (e.g. a person) becomes a challenge. What if information about one person is attributed to some other person by mistake? For example, if a crime is attributed to the wrong person due to mistake in data, then the other person will get punished for none of its fault.

So it is important to attribute information about an entity correctly so that no wrong can happen to the other entity by mistake. A software program is used by a large number of people. A software program can be used to store information about thousands of people. How to ensure that each piece of data about each entity is correctly computed and stored?

Here comes the concept of objects. In object oriented programming, all the data about each object is directly linked to the object itself. Even the activities which an entity is currently performing (e.g. doing exercise or traveling etc.) is also directly linked to the object. This ensures that data related to an object (entity) is linked correctly and so there are no mistakes.

We will learn more about objects in out next post.

 

 

Posted by: ahmedashfaque | January 17, 2017

Explanations for my book “Foundations of software engineering”

Most authors publish errata for their books. But i am not content only with errata. I have decided to publish explanations for parts of my book. I admit, at places, the explanations provided to explain a concept is not enough. Some explanations can be understood almost all people. But some explanations provided in the book are not enough for some people.

For this reason, I am inviting all readers of my book to send a note to me with either the explanation or need for an explanation for a part of my book which needs more explanation.

I have put a file with all the explanations on my site https://ahmedashfaque.wordpress.com/software-engineering/ titled “explanation-se.doc”. Anybody looking for further explanations can download this file and find explanations. People who are interested to include some explanation can send me an email at ashfaque.a@gmail.com and i will do the needful.

Reader’s have the option to get their names published. If they opt for it then their name with affiliations will appear below the explanation provided by them. If they wish their names not to appear then the explanation will be added as anonymous contribution.

I am completely open for all explanations and errata found in my book. I have also been maintaining the errata file on my site https://ahmedashfaque.wordpress.com/software-engineering with file name “errata-se1.doc”.

Dear Mr. Ahmed

Thank you very much.

The review of your book as follows :

The book published by you Foundation of Software Engineering gives visibility for the Software Engineering Method and Theory initiative to a larger audience. I liked this book. This book was very well written. People who are interested in Software Design and SPM  as well as Software Testing and release will most probably be interested in reading this book. Readers can gain details knowledge about real development of software and its release.

 

The chapters 5, 6, 7 and 8 described in this book are something that is useful in software development organizations/researcher to understand and improve their way of working/thinking.

This book gives much attention to the testing principles and ways of software test case design, test preparation, test life cycle etc. You have included the case study for all the major phases of software development that help to bridge the gap between the research on software engineering and application with industry practices. You also mentioned one of the new things in the book – the software release. This gives us a better idea about the all aspects of software development in industrial.

with kind regards.

Dr. Prabhat Ranjan
Assistant Professor & Head Incharge
Department of Computer Science, Central University of Bihar,
Patna
Camp Office: BIT Campus, P.O. – B.V. College, Patna – 800014
Mobile Number: 08809448862, Phone/Fax: 0612-2226538
E-mail :prabhatranjan@cub.ac.in, prabhat_r28@hotmail.com
Website: http://www.cub.ac.in

« Newer Posts - Older Posts »

Categories