Software engineering is the application of a systematic, disciplined, quantifiable approach to the design, development, operation, and maintenance of software, and the study of these approaches; that is, the application of engineering to software.

My instructor, when explaining this definition has told me that the terms "systematic", "disciplined" and "quantifiable" imply "one after another, structured", "repeatable", and "measurable" among various other possible interpretations. However, it's the second part of the definition that confuses me. When talking about what "operation" implies, he described it this way: "it's the process of maintaining the software, like updating or patching pieces of it. Earlier we used to remove the whole software and change the source, recompile it and install it back. This part of definition is more or less of historical significance - the way engineering was thought of in other disciplines like Mechanical Engineering."

Question

I am really confused about what the definition implies about SE.

If "operation" was just the process of maintaining the software, why include it in the definition independently?

If not, What do the terms "Operation" and "Maintenance" imply in the definition?

Don't maintenance and Operation and everything come under development?
Let's say we are developing an automatic updater component of a software for maintenance, doesn't that mean we are "developing" the "maintenance" part too? Why include the other two in definition then?

Not to disagree with your esteemed professor, but "operation" is most certainly not "maintenance."
–
Robert HarveyJan 15 '13 at 17:45

@RobertHarvey: Well, he actually said that it was more about the "process of maintenance" rather than "maintenance"
–
Forbidden OverseerJan 16 '13 at 9:21

1

"Earlier we used to remove the whole software and change the source, recompile it and install it back." - We still do exactly this even today Your professor's definition of operation is clearly wrong, since maintenance is already listed, it would actually be more "operating" the software your maintaning and developing.
–
RamhoundJan 16 '13 at 15:45

@Ramhound: We still do that even today? All those automatic updates, don't seem to even uninstall my software?!
–
Forbidden OverseerJan 17 '13 at 6:23

@ForbiddenOverseer - I do that daily when I maintain software that is being updated because a defect was reported against it.
–
RamhoundJan 17 '13 at 11:53

2 Answers
2

"Operation" has to do with deploying, configuring, starting/stopping, and monitoring the software. For example, at my shop, development builds a tarball of the application and stages it to a specific location on the production server. Another group takes the tarball, expands it into the target directory, sets up Kerberos credentials, adds entries to several databases, etc. We have several utilities that monitor the applications; one gathers statistics, one issues an alert if an application has gone down, one bounces the app if a connection's been dropped or we need to get a new Kerberos ticket, one archives and rotates log files, one looks for and identifies core files, etc. There's also a configuration file that can be updated if an IP address or port number changes, or if some application-specific configuration parameter needs to be enabled/disabled, etc.

None of these things involve touching the source code, so it's a separate activity from maintenance and development. All of these activities have well-defined processes and procedures1 associated with them.

Software Engineering isn't about writing code. Software Engineering is about developing processes and procedures that make the act of writing and running code more reliable and repeatable.

Edit

Maintenance (at least in my head) encompasses all the non-coding activities involved with managing an application over its lifetime. This includes (but is not limited to) managing defect and incident reports, deciding which defects are fixed in the next patch, scheduling and staging patches, etc. Some other examples from my shop are migrating applications from one server to another, migrating a customer from one backend application to another, doing performance and traffic analysis and spawning additional instances to handle increased traffic or minimize response times, etc.

Development (again, in my head, "official" definitions may vary) is anything that touches code, whether it's writing new code from scratch or patching existing code.

That was nice! What exactly is maintenance in this regard? and What does maintenance have to do with development of software? (I mean does it include developing or not?)
–
Forbidden OverseerJan 16 '13 at 9:19

Let me summarize what I understood: SE is more than just writing code, "operation" is about maintenance activities that have nothing to do with the code of software whereas "maintenance" is about maintenance activities that may have something to do with the code inside our software. The boundaries between these three terms are not that clear, meaning some of the activities we perform may come under more than one of them. Was I right in my understanding? BTW, "Maintenance encompasses all the non-coding activities involved with managing an ..." is confusing because of that "all non-coding".
–
Forbidden OverseerJan 16 '13 at 14:56

Again, these are definitions I use, not necessarily what you'd find in a SE textbook. "All non-coding tasks" simply mean anything that doesn't involve modifying the source code. Assigning defects to developers is a maintenance task, but not a coding task, it that makes things more clear. Migrating a customer from one server to another is also a maintenance task, but not a coding task.
–
John BodeJan 16 '13 at 15:14

So, writing specification/ planning the features required also comes under SE and not just development? what "enivironment" do you mean there? Is it the maintenance environment/ support related/ something else?
–
Forbidden OverseerJan 15 '13 at 15:47