Software engineering is no less than an art, yes a mystic one. It is a process of creating software applications, with less bugs (debatable) and causing less trouble to the software developer. It is the practice of starting the process of software development with concise and well-known and understood requirements, and then keeping a track of what is expected from the software, and how can that change — that change must somehow reflect in your present codebase. The practices in software engineering require the product, which is to be built, to be known before you start developing procedure and the drafts must be built on which you then have to write the application.
Just like engineering practices, a software engineering team considers thorough research, feasibility report, design, approach and then procedural development through well-defined and tested methodologies and tools. And once a software has been developed, software engineering defines the steps and practices to perform in order to keep the software up and running and to maintain any problems with it or the expectations.
Software engineering requires the software development teams to understand the requirements before starting to develop the software so that there are less faults in the product, and there are less ah, we missed that sort of thing. There is a complete software development life cycle, that gets introduced depending on the software that you need to build and each time a software has to be developed the life cycle is what has to be shifted from one side to another to ensure that you get what you need. As in, you bring more days to the requirement understanding phase, and sometimes you give more time to development phase, or sometimes both.
But the practice remains the same, you work hard to ensure that you only take a step, if it's on a solid ground.
As mentioned, the software development life cycle is the iterative process (or in some cases, a sprint race) toward the software development. The process comprises of multiple stages where teams organize themselves, and communicate within the team or with the customer and stakeholders to understand what they have to build and what they are building to understand whether they are on the right track or not.
There are multiple (and even more than many) methodologies of SDLC,
These methodologies have their own design, procedures, shape and requirements that they expect the team to embrace before implementing them in their software design and development process.
|Method||Easy to learn||Flexibility||Good practices||Iterative approach|
|Waterfall||Yes||No||Sort-of||No — yes, if considering from start again|
|V-shaped model||Yes||Yes||Yes, as it enforces testing of each phase||Same as above|
|Iterative and Spiral||Yes||Yes, as software is not developed in a single go.||Yes — no if each iteration has to be and rewritten||Yes|
|Big Bang||Yes||No||No, and makes debugging tough due to lack of understanding||Yes, you need to rewrite the software if things go wrong|
I will discuss them all in a good detail and share my recommendations/suggestions to you in their own chapters as we go deep in the learning process. The benefit of a software development lifecycle is that it helps us to,
Most of the times, software development teams need to document their product, so that end users can understand how to perform a specific task in their tool/product. An SDLC also takes this aspect into account to support the team in their entire development process, and enforces them to also document every feature, requirements and outputs.
Software development tools are used to develop the software, which aid the developers in their software development processes. These tools come in all shapes and sizes, depending on the software being built, the software development methodology and design being used — for instance, some tools support DevOps principles, and some do not — and they all help the software developer in their processes. A tool that helps the software developer in developing the software is called an Integrated development environment, or an IDE for short. The IDE takes care of most of the hard principles, processes, tasks and activities. Although the following list is not complete, but it is a concise list of what an IDE is expected to provide,
Long story short, the tool must provide and serve the developer with everything that he needs to use for the development. There are some tools that are specific to a category of software development, such as web development IDEs, which include Visual Studio Code, then there are enterprise grade software development tools that support development of web applications, or desktop applications such as NetBeans, Visual Studio etc. and then there are some tools that support mobile development, such as Android Studio. The thing is, there is a tool for everything and you have to decide which tool better serves you and your team for the development of the software product you are assigned to.
Desktop application development is the most general and most widely used format of software development, in which you build a software application for a customer's computer device. Since the learning days of students, all the way to initial internship programs, everyone is taught to develop and test their software programs on the computer. This is one of the reasons why, desktop application development — be that as a terminal based application, a backend service, or a graphical application that provides a customer with a set of services that they can perform — is the form of development that everyone knows, and has tried once in their lives. Other formats of software development, the web, mobile, or cloud application development are more specific cases of development and require different approaches to be implemented.
There are various methodologies for development, deployment and maintaining a desktop application. Various frameworks are supported to be used for desktop application development, .NET framework for instance. NetBeans for instance supports GUI development with Java, through the platforms such as Java Swing or JavaFX etc that provide a wide variety and range of control over the development processes. Qt, is another framework that supports desktop development and they have their own IDE, Qt Creator. You can find an IDE for your own platform with a simple Google query.
Mobile applications are compact applications, with less or similar features that are offered in a desktop application. I did emphasis and tried to do a lot, that the mobile in mobile application development is not the term to explain the Android or iOS or Windows Mobile development. Instead, it means anything, that can allow support and services to the users on-the-go. Mobile applications can be installed on mobile devices, that a user can take with them or when they are not in front of their desktop systems. Mobile devices can range from simple mobile phones, to smart watches, to holographic devices and tablets/phablets. The difficulty in the mobile development is the consideration of different hardware in mobile,
And several other problems/considerations arise, that you must take into accountability and then start writing a software for mobile platform. As I have mentioned on the mobile application development category, there is another approach at writing mobile applications, which is progressive web apps, they are installable web apps with the meta information about the web app. It takes care of majority of these for you, and you write a single application: your web application.
The tools for mobile application development are also different, and sometimes expensive to purchase too. Mobile applications need to take into account the amount of computation that an application will consume, the amount of data it will present on the device screen, how large the elements would be and how the interaction would be — animations, transitions and much more. Several platforms, frameworks and IDEs are used by developers to develop their applications, each depending on the platform and the approach you are taking.
Aside from these, the debugging/testing and execution of a mobile application is also costly and expensive sometimes, because you need to purchase a specific device in order to run tests on it. There are some vendors out there who do support cloud-based testing, but that is also not an option to some.
I have covered most of the web application development part in the link above, but I want to discuss the differences in the project type of a web application compared to those of the other types. The basic difference is the way users use your application. A web application is a network based application, where your users connect to your server to request resources, publish items (uploading) or capture the items for their own use (downloading). This requires that your software developers understand and take the network problems and features into account.
A web application can serve many benefits, and it can bring many problems to the software development team as well in that, it does not necessarily is a close-source application — remember those questions, how can I prevent user from having my HTML code? — and these are the problems that a developer/team must understand and take necessary steps to properly proceed. In a typical web application, you focus on the
You are provided with the control over all of them, and then you have to properly take care of them. Now think of the way a software development team would go about tackling them, in a typical software development team, there is a group of people building the software. However, in a web development path, there are multiple groups, each tackling their own problem,
Then they tackle the problem at their own side, such as validation of user input, or authorization of data access, or even something more appropriate such as displaying a table of entries, or returning the data from the tables. Each have their own aspects and they continue to build their part of the web application and then integrate the parts, to generate a web application.
Each of the design methodologies that we have talked about has its own benefits, and the degradation reasons, each of the development type requires a different approach based on several different factors and this is what makes software engineering a much wider topic in computer science because it is not just about compiling the source code, it is writing some sense in the code, and making it do what we want it to do, while taking care of the future needs and growth.
All of the specific development categories have their own need, and their own design practices and approaches which I will walk you through in the chapters.