software_engineering

Software Engineering

WHAT IS SOFTWARE ENGINEERING?

“A formal definition of software engineering might sound something like, “An organized, analytical approach to the design, development, use, and maintenance of software.”

More intuitively, software engineering is everything you need to do to produce [successful software. It includes the steps that take a raw, possibly nebulous idea and turn it into a powerful and intuitive application that can be enhanced to meet changing customer needs for years to come. You might be tempted to restrict software engineering to mean only the beginning of the process, when you perform the application’s design. After all, an aerospace engineer designs planes but doesn’t build them or tack on a second passenger cabin if the fi rst one becomes full. (Although I guess a space shuttle riding piggyback on a 747 sort of achieved that goal.) One of the big differences between software engineering and aerospace engineering (or most other kinds of engineering) is that software isn’t physical. It exists only in the virtual world of the computer. That means it’s easy to make changes to any part of a program even after it is completely written. In contrast, if you wait until a bridge is fi nished and then tell your structural engineer that you’ve decided to add two extra lanes, there’s a good chance he’ll cackle wildly and offer you all sorts of creative but impractical suggestions for exactly what you can do with your two extra lanes. The fl exibility granted to software by its virtual nature is both a blessing and a curse. It’s a blessing because it lets you refi ne the program during development to better meet user needs, add new features to take advantage of opportunities discovered during implementation, and make modifi cations to meet evolving business needs. It even allows some applications to let users write scripts to perform new tasks never envisioned by developers. That type of fl exibility isn’t possible in other types of engineering. Unfortunately, the fl exibility that allows you to make changes throughout a software project’s life cycle also lets you mess things up at any point during development. Adding a new feature can break existing code or turn a simple, elegant design into a confusing mess. Constantly adding, removing, and modifying features during development can make it impossible for different parts of the system to work together. In some cases, it can even make it impossible to tell when the project is fi nished. Because software is so malleable, design decisions can be made at any point up to the end of the project. Actually, successful applications often continue to evolve long after the initial release. Microsoft Word, for example, has been evolving for roughly 30 years. (Sometimes for the better, sometimes for the worse. Remember Clippy? I’ll let you decide whether that change was for the better or for the worse, but I haven’t seen him in a while.) The fact that changes can come at any time means you need to consider the whole development process as a single, long, complex task. You can’t simply “engineer” a great design, turn the programmers loose on it, and walk off into the sunset wrapped in the warm glow of a job well done. The biggest design decisions may come early, and software development certainly has stages, but those stages are linked, so you need to consider them all together.

Fair Use Source: B00UANX0E0

External sites

Wikipedia

Snippet from Wikipedia: Software engineering

Software engineering is an engineering-based approach to software development. A software engineer is a person who applies the engineering design process to design, develop, test, maintain, and evaluate computer software. The term programmer is sometimes used as a synonym, but may emphasize software implementation over design and can also lack connotations of engineering education or skills.

Engineering techniques are used to inform the software development process, which involves the definition, implementation, assessment, measurement, management, change, and improvement of the software life cycle process itself. It heavily uses software configuration management, which is about systematically controlling changes to the configuration, and maintaining the integrity and traceability of the configuration and code throughout the system life cycle. Modern processes use software versioning.


Cloud Monk is Retired (for now). Buddha with you. © 2005 - 2024 Losang Jinpa or Fair Use. Disclaimers

SYI LU SENG E MU CHYWE YE. NAN. WEI LA YE. WEI LA YE. SA WA HE.


software_engineering.txt · Last modified: 2022/11/17 19:58 by 127.0.0.1