Posted by: ahmedashfaque | August 16, 2016

if software engineering is only for students?

On software projects, people with specialized skills work. Some people have experience in gathering software requirements and creating software requirement specifications. So they work in software requirement engineering parts of the software project. Some other people have experience in creating software designs like object diagrams, statechart diagrams etc. So they work with tasks associated with software designs. Similarly people with skills and experience in other tasks related to developing software products work in their respective domains on software projects.

All of these activities of software requirement engineering, software design, software construction, software testing, software release, software project management etc. come under software engineering. Students who learn software engineering, learn about all these disciplines which are part of software engineering. But what about software professionals? If they have to learn all of software engineering and its constituent parts?

Generally a software professional acquires skills and experience in any one discipline of software engineering and gets a job. The software professional keeps working on the same discipline for his/her entire career. But not all software professionals keep working in the same discipline during their entire career. Many software professionals move from one discipline to another at some time in their career. Many more software professionals acquire expertise in more than one discipline.

One other consideration to understand other disciplines of software engineering is that it helps in understanding your own tasks. If a software requirement engineer understands how software designs are built then he/she will be able to create better software requirement specifications. It is because, a software design requires good software requirement specifications. Likewise software construction requires good software designs. Understanding other disciplines of software engineering definitely helps project team members to do their own jobs better.

Posted by: ahmedashfaque | August 12, 2016

The great industry academia disconnect – the solution Part 3

In part 2 of this series, we have seen how software engineering methodology plays an instrumental role in software development life cycle. In this post, we will see how software requirement engineering is done on software projects and how practical considerations are involved during software requirement engineering.

Imagine a software engineer who has no practical knowledge of software requirement engineering has been assigned to gather customer requirements. First of all, the software engineer will not be able to understand what are the crucial requirements of the customer. The software engineer will also be not capable of understanding the relationship among the customer requirements. Thus the software requirements gathered by the software engineer will not be considered good. If a software design is built using this set of requirements then the software product will have lots of problems and software defects.

An experienced software engineer on the other hand knows the ins and outs of gathering software requirements from customers. An experienced software engineer also knows how to manage software requirements. An experienced software engineer also will convert software requirements into good software requirements specifications. He/she will create good use cases using UML (Unified Modeling Language). This will ensure that there will be no defect in the software requirement specifications and these specifications will lead to creating good software designs.

So how budding software engineers can get good experience in software requirement engineering, even when they are studying at the university? The answer lies in how they are being taught software engineering. If they are being taught only theory of software engineering then they will have no practical experience. On the other hand, if they are being subjected to build software products as a part of their curriculum then they will have some good exposure to practical considerations involved in software engineering.

This is the most important factor which plays an important role in effectiveness of teaching software engineering.

 

Posted by: ahmedashfaque | August 7, 2016

The great industry academia disconnect – the solution Part 2

In the first part of this series, we learned that expectations of the software industry is not fulfilled as new graduates lack solid and practical software engineering skills. Let us analyze this situation further.

Software engineering methodology plays a central role in any software development project. But most new graduates fail to understand this aspect. For example if the software project is following any agile software engineering methodology then all aspects about the software project will be different as compared to when a waterfall methodology is chosen for the project.

The software feasibility study can be conducted using evolutionary prototype here. The software requirement engineering can be done for only a bunch of software requirements at a time (for each iteration). The software design and construction can be done only for this bunch of software requirements at a time during an iteration. Software testing can be done again only for the bunch of software features which were designed and constructed during the iteration. The software product built so far (using incremental method which is possible using any iterative (agile) software engineering methodology) can be released in the market.

The software project management also get impacted depending on which software engineering methodology is being used for developing a software product. Agile project management is very different from waterfall project management. Project management for Waterfall methodology based software projects depend heavily on a solid project plan. On the contrary, agile methodology based software projects do not use extensive project planning at all. Whatever planning is done mostly at iteration level. At project level, planning is only at rough level.

Thus we can see, software engineering methodologies play central role in any software project.

We will learn about each software engineering component in subsequent posts.

Posted by: ahmedashfaque | August 2, 2016

The great industry academia disconnect – the solution Part 1

There is often a complaint by industry people that the fresh graduates from universities lack employable skills. This is also true for software engineers. When they are hired after they graduate from universities, they are unable to perform many software engineering tasks on the job like creating software designs, writing source code, testing software products, performing feasibility studies etc.

The reason for this disconnect is that students are taught only theory of software engineering subjects. Thus software engineering students never get exposed to practical aspects of software engineering. This results in software engineers having only theoretical knowledge. When these software engineering graduates get employed, their theoretical knowledge is useless.

A good strategy for teaching software engineering is to expose students to practical aspects of software engineering.

The best way to expose practical aspects of software engineering is to engage students in building software products in a professional way.

“Foundations of software engineering” has been written with this goal of exposing students to real world problems faced in designing, building and testing software products. This book covers all aspects of software engineering. Each area of software engineering is covered in a separate chapter. Theory of a field of software engineering is discussed at the beginning of each chapter. The theory part is interspersed with many relevant examples. At the end of each chapter, covering core area of software engineering; a running case study is provided. This case study is about how to build a mid-sized software product.

We will learn how there is disconnect between theory and practical aspect in each area of software engineering in many continuing parts of this series.

Posted by: ahmedashfaque | July 29, 2016

Foundations of software engineering

Most people find it difficult to learn software engineering. It is because; most concepts of software engineering are abstract in nature. For example, it is difficult to visualize as to how to create a software design for a shopping cart component for a web based book store. Compared to a physical shopping cart, a virtual shopping cart does not contain metal frames, wheels etc. When people browse a physical book store, they see real books in book shelves and then evaluate the books by seeing book information. When they like book information then they may place the book in their shopping cart.

In contrast, a virtual shopping cart has no physical parts. Only an image of a shopping cart can be shown on the user screen. The behind the screen business logic takes care of books which are placed or removed from the shopping cart. This business logic is the lifeblood of the virtual shopping cart. Designing and writing this business logic is very abstract and thus a difficult task.

The best way to learn software engineering thus is to have lots of examples which demonstrate as to how to design and build software products. “Foundations of software engineering” has been written based on this assumption that the best way to learn an abstract subject is to have lots of concrete examples. The authors have provided concrete examples on most of the topics covered in the book. The readers will definitely find these examples extremely useful.

Software engineering is a vast subject. Covering all areas of software engineering in a single book is difficult. The authors have carefully chosen the areas of software engineering; knowledge of which are required to build mid sized software products. Thus advanced topics in software engineering, such as security, performance improvement etc. have not been covered in the book. Covering advanced topics may also confuse the readers.

The authors have carefully chosen easy to understand language in writing this book. This style will suite all kinds of readers to understand software engineering concepts easily.

A case study has been provided in the book to build a complete mid range software product called “OBAAS”. The software requirement specifications, software designs, and software implementation considerations have been included in the book for OBAAS. The source code for OBAAS has been provided at https://ahmedashfaque.wordpress.com/software-engineering. Videos for downloading and setting up the source code files is also provided at this website. This case study will help the readers to understand inner workings in building a software product. This case study will also serve as a class project for students.

Posted by: ahmedashfaque | July 7, 2016

Learn JSP programming in 5 days! Part #2 (JSP syntax)

Posted by: ahmedashfaque | July 4, 2016

Learn JSP (Java Server Pages) programming – Part #1

Posted by: ahmedashfaque | June 28, 2016

Learn Java programming in 5 day! Part #11

Older Posts »

Categories

Follow

Get every new post delivered to your Inbox.

Join 184,566 other followers