Introduction to Software Engineering

Submitted by sylvia.wong@up… on Wed, 02/02/2022 - 00:34
Sub Topics

Learn about some of the big changes that happened in the field of software engineering over the last hundred years in the History of Software Development (Helmes, 2019).

However, it was in the early 1960s that the term ‘software engineering’ was first heard. Margaret Hamilton is understood to have coined the term and recalls her manager at NASA asking “What is software? Is it soft clothing?”.

You see Hamilton was living and breathing the first chapters in the story of software engineering, when these terms so common and natural to us were new and not well understood.

Read What to know about the scientist who invented the term “Software Engineering” (Cameron, n.d.) to learn more about the coming of age of Software Engineering. Read about Hamilton’s work in writing the software that guided and navigated the Apollo spacecraft to the moon while she pushed hard for her work with software to be recognised as a sub-field of engineering, deserving of as much respect as hardware and other forms of engineering.

Since then and even still today, developments in the field continue to be dramatic. It has been some decades now since software became fully integrated in our daily lives.

During Grady Booch’s inspiring talk at the Computer History Museum (2016) he shared “Software is the invisible thread and hardware is the loom on which we weave the fabric of computing. Software in a way is a very fragile thing, the most fragile of things perhaps, because a single bit and the facade that you created will fall apart, and yet at the same time it is perhaps the most elegant of materials because from it I can weave tapestries that are beautiful, elegant, that move us.

Software is perhaps the most durable of materials it can literally move virtual as well as real mountains, it can move markets, and perhaps even more impressively, it can move the hearts and minds of individuals.

And yet at the same time software can also be a millstone around the neck of an organisation or an individual because it will accumulate over time, ossifying potentially that organisation in making it difficult to move forward. Software has no mass, but it does have weight in a sense.

Software is also perhaps the most creative of mediums - as with a blank page I can write anything. I can write the works of Shakespeare, I could right 50 Shades of grey, I could write haiku. If you're really creative, you take that page and you make it fly. That's the wonderful thing about software… that it can reach many dimensions.”

A person using a mobile phone to play a game

A short history of mobile game development

Mobile gaming debuted in the 1990s, with Nokia releasing the game ‘Snake’ on their new phone model. This game was such a success that developers began working in earnest on mobile game development.

It was a bit of a roller coaster ride with the lack of standards across phone manufacturers and their platforms. Come the mid-2000s, and with the App Store and the Google App Store developers had standards and an even platform for marketing their apps.

In the beginning, mobile games were all on a purchase up front model, but then the mobile gaming app story changed dramatically when the App Store added a new facility that allowed for free play, but with two new features: IAP – in-app purchases and IAA – in-app advertising. Only 3% of mobile gamers actually pay money for their apps, so this opened up the mobile game market far and wide getting a lot more users hooked in. All of a sudden app creators were able to earn a lot more revenue from their apps and from there the industry took off.

To get a good grasp on where mobile gaming is at right now, read Key Mobile Gaming Statistics: How Many People Play in 2022? (Galov, 2022).

Now watch The Evolution of Mobile Phone Games (Mrwhosetheboss, 2016) to follow the changes in the mobile gaming industry from conception through to 2016. This video tells us a lot about the early phases of the mobile gaming industry.

One might ask, ‘what is the difference between software development and software engineering?’. There are probably many ways to answer that question but reading common definitions of Software Engineering from different sources helps to make the distinction quite clear. Here we’ve presented one definition which seems to sum it up well.

Wikipedia Contributors (2019) agree that “Software Engineering is a systematic engineering approach to software development” and “a software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software.”

Therefore, a software developer might be a person who creates software without following a systematic, ordered, and engineered approach, this is an approach that does not require any education.

In day-to-day life you will surely find that these terms are pretty much used interchangeably, however, you may wish to use the more formal term of Software Engineering in your CV for its more professional connotations.

Another way of thinking of Software Engineering is ‘professional software development’.

At this stage you might like to return to CS102 Topic 2 – Introduction to Software Development to recall what we covered there on Software Development in general.

The processes or methods of software engineering

It is important to note that Software Engineering is not just about the actual writing of code, but project management through all the phases of the project, starting with inception, requirements gathering, design, development, testing, release, maintenance, and that includes managing the resources, budget, and timeline throughout all these phases.

All these steps can be summarised by these four points (Sommerville, 2016):

  • Software specification: Customers and engineers define the software to be produced and the constraints on its operation.
  • Software development: The software is designed and programmed.
  • Software validation: The software is checked to ensure its what the customer requires.
  • Software evolution: The software is modified to reflect changing customer and market requirements.

In a later topic we will be recapping the common software engineering processes or methodologies that will help you to work through these phases in the most effective and efficient way, looking more depth at the main ones such as Waterfall and Agile.

The Standish group produce an annual CHAOS report based on their research into over 50,000 software projects world-wide. “A bright note from the research is that with the take up of agile development methods in recent years, agile approaches resulted in more successful projects and fewer outright failures across all project sizes.” (Dominguez, 2021)

Using Software Engineering methods will usually save money and time in the long run. The methods used however will not be the same for every project, engineers must remain flexible and learn how to best mold and shape the methods they use to suit the customer and environment.

As we mentioned earlier, software has been integrated into our daily lives for decades now. Businesses, schools, shops, governments, and entire economies all can’t operate without their software systems.

Most retail businesses are forced to shut their doors when their software systems crash, because they are that vital.

Try spending 24 hours without your phone. You will miss appointments, forget to make payments, miss phone calls, not make that booking at the doctor, forget what you needed to get at the grocery store, get lost or stuck in an avoidable traffic jam driving somewhere, have no way to entertain the little ones in a waiting room, have no background music while cooking and no recipe for dinner, and finally no shows to cast from your phone to the TV in the evening.

Cost of software

For the consumer, the cost of software for a computer is often far greater than the cost of the hardware. Frailey (n.d.) says “software is more expensive because it is considerably more complex, has fewer constraints (thus more degrees of freedom), and because it is modified a lot more (sometimes to avoid spending enormous sums to modify hardware).”

And for development, it’s a well-known assumption that once an application has been developed and livened that that is the end of all costs. However, it has a lot to do with the expected life of the application. Sure, a small, rather insignificant game app might not require many bug fixes after it has been released, and the engineer may move on to the next game, and not spend any more time on it, making the cost of the software remain stagnant. But for an application that is expected to live on for some time, there will need to be a commitment to ongoing maintenance, as it has been proven time and again that the cost of maintaining a product quickly overtakes the cost of engineering it.

In fact, by 2019 annual global spend on software had already almost reached USD$ 750 billion (Sujay Vailshery, 2022).

Therefore, cost-effective software development and maintenance is an important factor of software engineering, as well as time and scope. These are the three cornerstones of project management. Change one and one of the others must change too. For example, if the timeline is shortened, then the costs will end up going up to allow for more resources.

Be careful though, “nine women cannot make a baby in one month.”
Fred Brooks
The best way to get a project done faster is to start sooner.
Jim Highsmith

“According to Standish Group’s Annual CHAOS report, 66% of technology projects (based on the analysis of 50,000 projects globally) end in partial or total failure.” (Swords, 2020)

Read Why Most IT Projects Fail. And How Agile Principles Help (Walters, 2007) to learn about a wide variety of reasons that software projects fail, and how using Agile principles can help in many of these areas.

In his article “Why Software Projects Fail & 6 Strategies to Make Them Succeed”, Swords (2020) discusses the following 6 strategies to avoid software project failure:

  1. Define a software product vision
  2. Define roles and responsibilities from the outset
  3. Prioritise & budget but keep your score flexible
  4. Use wireframes and prototypes to your advantage
  5. Traditional (Waterfall) VS Agile project management
  6. Expect and plan for changes in requirements

Read the article above to find out more about these strategies for success along with some informative case studies.

In summary, as the tools of the trade continue to improve, we are expected to deliver more and more complex applications - bigger, smarter, better, and faster! Here lies the ever-increasing challenge!

Arm yourselves as best you can with the software engineering methods that can so often make the difference between failure or success!

At this point, we recommend returning to refresh yourself on CS103 Topic 4 – Teamwork and Communication, specifically the professionalism and code of ethics content. Read again software development code of ethics and professional practices (IEEE Computer Society/ACM, 1999) to familiarise yourself with these principles which will help lay a strong foundation for all your future projects.

A diagram showing software issues

In his book Software Engineering, Sommerville (2016) lists these general issues that affect software, to be aware of and mitigate for:

  • Heterogeneity: Increasingly, systems are required to operate as distributed systems across networks that include different types of computer and mobile devices.
  • Business and social change: Business and society are changing incredibly quickly as emerging economies develop and new technologies become available. They need to be able to change their existing software and to rapidly develop new software.
  • Security and trust: As software is intertwined with all aspects of our lives, it is essential that we can trust software.
  • Scale: Software must be developed across a very wide range of scales, from very small embedded systems in portable or wearable devices through to Internet-scale, cloud-based systems that serve a global community.

Tip #1 – reuse, reuse, reuse! Take every opportunity to reuse code or programs that have already been written that are available to you. This has the potential to save you many days, weeks, or even months of development time on any single project.

It is common to have three deployment environments running – dev, test, and prod.

Dev is your development environment, Test is for testing of course, and Prod is your live environment.

As you engineer your application, your changes move through the three environments. Dev is where the code is written and changed, it could be on the developer’s local machine, or if working in a development team this might be hosted on a server, and each developer’s changes are synced with the central repository regularly, as we discussed while learning about Git and GitHub earlier in the course.

Test is a copy of the production/live environment and is refreshed regularly, every night at midnight for example.

So, it looks a bit like this:

  • Step 1 – develop your changes in Dev
  • Step 2 – apply changes to Test, perform testing
  • Step 3 – release changes into Prod.

Of course, Steps 1 and 2 might repeat several times before the changes are ready to go into Prod.

As you can imagine, this system is vital when you’re maintaining/updating a live system.

For this activity, you will need to research and write a 100–200-word answer to each of the following questions, referring to at least one external source of information for each answer. Please cite your references using APA 7 style.

  1. Why are software development projects so long?
  2. Why does the final product still have bugs in it when it is released?
  3. Why does it take so much money and time to maintain software after it is already built?
  4. Why is it so hard to measure the exact progress of the project?
  5. What are the benefits of having dev, test, and prod environments?

Peruse the following common questions about software engineering and their answers, as found in Chapter 1 of Ian Sommerville’s book titled Software Engineering.

Question Answer
What is software? Computer programs and associated documentation. Software products may be developed for a particular customer or may be developed for a general market.
What are the attributes of good software? Good software should deliver the required functionality and performance to the user and should be maintainable, dependable, and usable.
What is software engineering? Software engineering is an engineering discipline that is concerned with all aspects of software production.
What are the fundamental software engineering activities? Software specification, software development, software validation and software evolution.
What is the difference between software engineering and computer science? Computer science focuses on theory and fundamentals; software engineering is concerned with the practicalities of developing and delivering useful software.
What is the difference between software engineering and system engineering? System engineering is concerned with all aspects of computer-based systems development including hardware, software, and process engineering. Software engineering is part of this more general process.
What are the key challenges facing software engineering? Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software.
What are the costs of software engineering? Roughly 60% of software costs are development costs, 40% are testing costs. For custom software, evolution costs often exceed development costs.
What are the best software engineering techniques and methods? While all software projects must be professionally managed and developed, different techniques are appropriate for different types of system. For example, games should always be developed using a series of prototypes whereas safety critical control systems require a complete and analysable specification to be developed. You can’t, therefore, say that one method is better than another.
What differences has the web made to software engineering? The web has led to the availability of software services and the possibility of developing highly distributed service-based systems. Web-based systems development has led to important advances in programming languages and software reuse.

Let’s look at these two main types of software development projects before delving deeper into the various types of applications.

Custom software Generic software
Software application that is specific to a customer and their requirements. Software application that is created to meet the needs of many potential customers. Sold to any customer who wants it.
Customer approaches a software engineer or team with their requests and specifications. Customer pays for the entire development process. Product is created to developer’s specifications. Software engineering business pays for development and then markets it and sells it.
Bespoke, one-off, standalone systems such as when Sainsburys hired Accenture to build them a custom stock-management system. Seesaw created an application for schools, with an emphasis on family engagement, messaging and announcements, a learning journal area for students to upload and keep a record of their work as well as share their schoolwork with family members, and an activities section where teachers can upload fun schoolwork activities for the kids to complete on a device at school or at home. This generic product is used by over 10M users monthly.

Application diversity

There are many kinds of applications that you may be required to build, have a look at the list below:

  • Stand-alone
    An application that doesn’t connect to any other and doesn’t require a connection to the internet. For example: offline games, Microsoft Word.
  • Interactive transaction-based
    The program is running on one computer and is accessed by other computers/devices. For example: database systems such as a flight-booking system.
  • Embedded control
    Software applications that control hardware. For example: dishwasher control panel software, printer software, or car computer.
  • Batch processing
    A system that is designed to process large groups (batches) of data very quickly. For example, a system that takes data from all weather stations, runs algorithms on that data and produces reports on it, or a system that scans thousands of paper election forms, reading and recording the responses, and producing reports on that data.
  • Entertainment
    Personal applications for leisure. For example: In-flight entertainment system, home theatre system, or Google Chromecast.
  • Modeling and Simulation
    Created by scientists and engineers to represent real life situations, often used for training, especially for situations where training on the job might be high risk, such as certain flying maneuvers. For example: Flight simulation, civil engineering designs, military simulations.
  • Data collection
    Uses sensors of various kinds to record data which is then sent to a different system for processing. For example: Weather stations, security cameras, tide recorders.
  • Systems of systems
    A system that is made up of many other systems. For example: Smart homes (might comprise of lights, security, cooling/heating, entertainment, water/power usage tracking systems), enterprise systems (might comprise of customer management, product management, HR, and payroll systems), power grid, or traffic control systems.

It is always important to stay up to date with developments in your field. For this activity, research online and find an article that is less than three months old related to Software Engineering. Read the article, digest the information, research further anything in the article that is of particular interest, and then write a summary of the article’s main points in 300 words or less. Remember to cite references in APA 7 format.

Review the following explanations of the four main characteristics of good software products as recorded by Sommerville (2016).

characteristics description
Maintainable Software should be written in such a way so that it can evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable requirement of a changing business environment. 
Dependable and secure Software dependability includes a range of characteristics, including reliability, security, and safety. Dependable software should not cause physical or economic damage in the event of a system failure. Malicious users should not be able to access or damage the system.
Efficient Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency, therefore, includes responsiveness, processing times, memory utilisation etc.
Acceptable Software must be acceptable to the type of user for which it is designed. This means that it must be understandable, usable, and compatible with other systems that they use.

For this activity, search online for ISO 9126 - McCall's Software Quality Model, and then write a 2-page report on your blog briefly explaining the Models in your own words.

Don’t forget to reference all your sources, in APA 7 style.

For this activity, write a blog about

  • the difference between engineering generic software as opposed to custom software
  • what this means in practice for a customer using a generic software application.

Please remember to reference all your sources in APA 7 style.

Module Linking
Main Topic Image
A designer working on a coding project
Is Study Guide?
Off
Is Assessment Consultation?
Off