Showing posts with label software engineering. Show all posts
Showing posts with label software engineering. Show all posts

Friday, May 17, 2013

Similarities and Differences between Software and Systems Engineering


According to CMMI, Software engineering is defined as a discipline that covers the development of software systems. It focuses on applying systematic, disciplined and quantifiable approaches to the development, operation and maintenance of software. Systems engineering is defined as a discipline that covers the development of total systems, which may or may not include software. It focuses on transforming customer needs, expectations and constraints into product solutions and supporting those product solutions throughout the product life cycle. These definitions elicit the primary difference between systems and software engineering.

The differences between software and systems engineering can be further classified based on different parameters. For instance, in software engineering, the architecture can be dynamic and subject to change, based on emergent needs during the software development life cycle. Whereas in systems engineering, the architecture is established at the beginning of the systems development life cycle and usually remains stable. In order to develop high-quality software, software engineering lays emphasis on portability, adaptability, customizability and flexibility. Systems engineering, on the other hand, concentrates on the reliability, safety, availability and maintainability of the system.

Another distinction between software and systems engineering is that software engineering does not take into consideration physical wear and fatigue which are important criteria for consideration in building a system. Also, software engineering is not restricted by the laws of physics. Systems engineering needs to take into consideration the system environment, which greatly impacts the functionality of the system.


In software engineering, the interfaces between software components are typically conceptual such as protocols. Systems engineering interfaces, in contrast, are generally more tangible and well defined for the integration of components within the system. For example, the Security Alarm system consists of components such as sensor, telephone caller, actuator and interface. Systems engineering process frequently involves manufacturing and lead-time, whereas software engineering often involves rapid application development using prototyping.


In spite of the evident dissimilarities described previously, there are some noticeable commonalities between software and systems engineering. Both are complex processes involving people, facilities, processes, hardware, and policies. Both are undertaken for the purpose of meeting stakeholder requirements and accomplishing the defined performance. Both involve the generic practices of establishing requirements, involving relevant stakeholders, managing configurations, reviewing status with high-level management, rigorous testing procedures, defect analysis, defect prevention and correction, adhering to quality objectives, ensuring continuous performance in a changing environment and training people.

Software engineering is increasingly becoming a part of systems engineering. But it is sometimes seen as a problem, as it has caused delays in many large system development projects, an example being the Denver Airport Baggage Handling System. In conclusion, systems engineering can be considered as an interdisciplinary field of engineering, which could be a superset of software engineering and which considers both the technical needs and business needs of the customer, with the objective of delivering a quality product.

Wednesday, March 13, 2013

Software Engineering Body of Knowledge SWEBOK Reflection


The Software Engineering Body of Knowledge guide provides a detailed categorization of the software engineering discipline. The fact that it adopts the traditional waterfall model to begin the description of the knowledge areas in software engineering makes it easy to comprehend. An important feature of the guide is that concentrates on the software engineering process as a whole, instead of describing technologies. Thereby, it gives a thorough outlook of the functional components of the software engineering process. The organization of the document into knowledge areas, sub-areas and topics improves readability and understandability; so one can begin with the knowledge area of interest and then focus on a particular aspect.

Reading through each knowledge area and its topics refreshed my concepts of software engineering. Each knowledge area described in the guide provided great insight into the activities and processes involved in each phase of the software development life cycle. It introduced me to many new techniques, methodologies and concepts such as:
Ø  Emergent properties and FSM (Functional Size Measurement) in software requirements
Ø  Family pattern design, invention design, ADL (Architecture Description Language), and IDL (Interface Description Language) in software design
Ø  Extreme programming, scrum and static analysis in software construction
Ø  Oracle, mutation testing, fault seeding, and difference between fault and failure in software testing
Ø  Different types of maintenance categories in software maintenance
Ø  SCSA (Software Configuration Status Accounting) and SCSR (Software Configuration Status Reporting) in software configuration management
Ø  EF (Experience Factory), orthogonal defect classification and personal software process in software engineering process

An aspect of software engineering that I would like to have seen incorporated in the guide is Knowledge Management, which is gaining importance in organizations worldwide. Although KM is almost equivalent to the Experience Factory discussed in the software engineering process knowledge area, it also comprises of the knowledge and documents which are not part of the deliverables.

Since the guide is a dynamic document, it explains the evolving software engineering standards, best practices and processes and the inter-relationships between them and equips the software engineering professional with the necessary knowledge of what to do in a specified situation.