28 Kasım 2013 Perşembe

Rlationship between System Engineering and Software Engineering


Introduction:

Systems engineers and software engineers work together in the development of modern complex systems.
The two engineering cultures, the concepts, and the best practices have developed independently over four decades.

The present record of success for complex computer intensive systems is that for every six systems put in operation two are canceled; on the average projects are 50% over schedule; and three quarters are failures that do not function as intended or are not used at all, (Gibbs 1994). Incomplete specifications, ambiguous specifications, and misunderstood specifications are a major contributor to these problems.

Applying system engineering principles specifically to the development of large, complex software systems provides a powerful tool for process and product management.

The application of system engineering principles to the development of a computer software system produces activities, tasks, and procedures called software system engineering, or SwSE. Many practitioners consider SwSE to be a special case of system engineering, and others consider it to be part of software engineering. However, we can argue that SwSE is a distinct and powerful tool for managing the technical development of large software projects.

The need for synergism between systems engineering which develops specifications to meet user need and software engineering is particularly important because software portions of systems are increasingly complex and are often being coded in countries far from the country where the system is defined and utilized.


1.       Definitions:
Software Engineering:
Software engineering is the application of science and mathematics by which the capabilities of computer equipment are made useful to man via computer programs, procedures, and associated documentation. 

Software engineering is the systematic application of methods, tools, and knowledge to achieve stated technical, economic, and human objectives for a software-intensive system.

System Engineering:
Systems engineering is the application of scientific and engineering efforts to
(a) transform operational need into a description of system performance parameters and a system configuration through the use of an iterating process of definition, synthesis, analysis, design, test, and evaluation;
(b) integrate related technical parameters and ensure compatibility of all physical, functional, and program interfaces in a manner that optimizes the total system definition and design;
(c) integrate reliability, maintainability, safety, survivability, human, and other such factors into the total engineering effort to meet cost, schedule, and technical performance objectives.

Another definition: An iterative process of top down synthesis, development, and operation of a real-world system that satisfies, in a near optimal manner, the full range of requirements for the system. In fact, most definitions of systems engineering focus on the process by which operational needs and specific requirements are converted into working systems against a backdrop of cost, time and talent constraints.

Software System Engineering:
Software engineering is
1. The practical application of computer science, management, and other sciences to the analysis, design, construction, and maintenance of software and its associated documentation;
2. An engineering science that applies the concepts of analysis, design, coding, testing, documentation, and management to the successful completion of large, custom-built computer programs under time and budget constraints; and
3. The systematic application of methods, tools, and techniques that achieve a stated requirement or objective for an effective and efficient software system.
4. The establishment and use of sound engineering principles in order to obtain economically software that is reliable and works efficiently on real machines.
5. Software engineering is the application of science and mathematics by which the capabilities of computer equipment are made useful to man via computer programs, procedures, and associated documentation.


Both SwSE and SwE are technical and management processes, but SwE produces software components and their supporting documentation.

Figure 2 illustrates the engineering relationships between system engineering, SwSE, and SwE.





Traditional system engineering does initial analysis and design as well as final system integration and testing.

During the initial stage of software development, SwSE is responsible for software requirements analysis and architectural design. SwSE also manages the final testing of the software system.

Finally, SwE manages what system engineers call component engineering.


2.       My Thoughts on the Relationship Between Software Engineering and System Engineering

In the modern world, complex systems are commonly required. Software intensive systems are among the most complex systems and systems engineering is commonly used in those systems. Both system engineering and software engineering address the creating of complex software intensive systems from two different perspectives.

Software engineering is not a deep discipline in some aspects and system engineering can make some contributions for them. Creating software intensive systems require both fields to cooperate.

Software systems are usually designed, developed and maintained by professionals with narrow disciplinary perspectives. Complex systems cannot be designed by one person. System engineering is a horizontal field, not deep in one field but wide in many fields. System engineering borrows from a wide range of areas and formal disciplines. Without these contributions, the field cannot exist.  Without the organizing systems engineering life cycle, they remain uncoordinated expertise fields. Systems engineering is also domain independent. The design and development principles are generic. They can be applied to any problem.

So a system engineer is probably the right person for creating complex systems. Software engineering is deep in its field but not wide in other disciplines. In this aspect, software systems engineering comes to play which joins systems engineering and software engineering in creating complex software systems.


Comparison Involvement in a System’s Life Cycle

In the lifecycle of a software system, Systems engineering places relatively more interest on the front end requirements analysis, modeling and validation processes. System analysis spend more time spend much more time and effort on requirements than software engineers. But it is certainly true that software engineers
have begun to appreciate the importance of needs analysis, user requirements modeling, and organizational requirements profiling.



1.       Comparative advantages

Usually software engineers does not spent a great deal of time on front-end system and user requirements identification, definition, or validation. Instead, there is usually a desire to ‘get coding’ as soon as possible.

Consequently, there are a large number of ‘failures’ that can be traced directly to inadequate requirements analyses. Software engineers usually avoid the systematic development and evaluation of alternative definitions and designs throughout the software engineering process. Criteria-based alternative design evaluation, for example, is seldom conducted by software engineers; nor is there much emphasis on prioritising requirements with reference to constraints in formal (or even informal) trade-off analyses. All such activity is automatic to systems engineering; without such activity, software engineers risk proceeding prematurely to design and coding (as has often been the case).



Software engineering needs an infusion from systems engineering of effectiveness measures, early formalized trade-off applied throughout the work, and sequential build and test. It needs consistent application of hierarchy.

Systems engineering needs to receive from software engineering an infusion of rigorous modeling and information hiding, the use of generators, and application of the classification relationship in modeling. It is critical for reuse, for consistent definitions, and for rigorous communication with software engineering.


The mutual infusion of best practices from the other discipline strengthens both, and ameliorates existing problems of providing specifications to software engineering on large projects.

Hiç yorum yok:

Yorum Gönder