What is software?

Chapter 1

What is software? Computer program with a set of documentation (system design and structure and user documentation), configuration data and all additional sources of information directly related to the program.

There are 2 types of software product:

  1. Generic product. Stand-alone systems, sold on open market to everyone. Examples – desktop operating system, office packs or graphical editors.
  2. Customized (bespoke) products. Developed for particular customers with special features. Examples – special systems for traffic control or airbus flight operations.

From developers’ stand of view, one of the main differences of those types is that for customized case the specifications for a software product is done mostly by the organization which buying it. For generic product development, specifications are created by the same development organization. Nowadays, there is no straight line between those types as there was several years ago.

Software engineers, as any other engineers, make things work by applying theories, methods and tools (created, mostly, by computer scientists, but when it comes to practical problems, there’s often need to change the solution and develop your own way, still, based on some theory). Software engineering is not all about coding programs, there are much more problems to solve during the work on project, for example project management, scheduling of work, testing and choosing the right way to go.

Software engineering is concerned with all aspects of the development and evolution of complex systems. System engineering is concerned with hardware development, policy and process design.

Software process consists of four fundamental activities:

  1. Software specification where engineers or/and customers define what the product should do and how should it operate.
  2. Software development is designing and actual coding.
  3. Software validation is generally testing. It is important to check if the system is designed and implemented correctly.
  4. Software evolution is modifying the system according to new needs of customer(s).

Different types of software need different development process.

Software process model is a simplified description of a software process that presents one view of a process. And again, choice of a view depends on the system developing, sometimes it is useful to apply a workflow model, sometimes, for example – a role/action model. Most software process models are based on one of three general models or paradigms of software development.

  1. The waterfall approach. In this case the development process and all activities are divided into phases such as requirement specification, software design, implementation, testing etc. Development goes phase-by-phase.
  2. Iterative development. An initial system is rapidly developed from very abstract specifications. Of course, it can be reimplemented according to new, probably more detailed specifications.
  3. Component-based software engineering (CBSE). The development process is done assuming some parts of the system is already exist, so the process focuses on integrating parts together rather than developing everything from scratch.

A software engineering method is a structured approach to software development whose aim is to facilitate the production of high-quality software in a cost-effective way. If not talking about history, today most common method is based on UML (Unified Modeling Language), which was created from different approaches from the past.

As any other thing related to software engineering, methods may vary depending on different situations.

For a software engineer it is always important to make sure the product is good, and there are different tools to analyze that. Overall, good piece of software should meet these attributes:

  1. Maintainability. Software should be developed in such way that it can be changed according to new specifications and needs of customers. This aspect is directly related to software evolution.
  2. Dependability. It includes reliability, security and safety. Good dependable system should make minimum (or no) economic damage in case of failure.
  3. Efficiency. Software should be efficient and should not waste system resources.
  4. Usability. With all hidden for an end-user requirements, first thing customer think of when they start using the program is how easy to do it and how good the documentation is. Software should be usable without too much effort from user. Therefore, developers should always keep in mind the type of an user system building for.

My thoughts

First chapter is introduction and most of things look familiar for me, especially after attending COMP3104 lectures. I think about software development as very complex process, which technically never ends because always has something to make better or add more features. While facing big problems and developing large systems, the necessity of every point of development become stronger. As such, I understand why maintainability is so important for both developers and customers. Software engineering is a lot of responsibility: to other engineers, to customers and society around the product. It is a big challenge – applying theoretical methods on practice.

 
software_engineering/what_is_software.txt · Последние изменения: 2009/09/13 06:18 От freetonik
 
За исключением случаев, когда указано иное, содержимое этой вики предоставляется на условиях следующей лицензии:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki