In order to understand Software Complexity we need know other Complex System that nature has organized. Such as a child learning to read, structure of plant and animal or even walking process and many more. When we look these systems they appears to be very simple but there is organised complexity hidden behind it. So Complexity is an essential part these.
“Software is product that Software professionals build and provides support for over a long term of time. It encompasses programs that executes in a computer of any memory size and architecture“. Computer software is single most important thing in a world stage. In these modern world ,Software application are so blended with normal life of individual, one can rarely think of living without it. There is a mutual dependency between us and software applications.
Applications that exhibits rich set of behaviors, as, in reactive systems which drive or driven by events in physical world such as social media applications, applications that maintains integrity of thousands of records of information while allowing concurrent updates and queries such as Banking applications, Employees managements systems and many more. And Systems those commands and controls real world entities such as Air traffic or Railway traffic control system. Software Of these kind tend have long life span and many user depends on their proper functioning. Again Complexity is an essential part these.
How do you define Complexity?
“Complexity can be defined as the degree of chaos that any system offers”. And Software Complexity is an Inherent nature. Complexity in software is an inevitable but we may master over it.
Software Complexity occurs due to many reasons and important among them is
- Complexity in problem Domain
- Communication gap between user of the system and developers. Users find it difficult to precisely tell what they want from developers.
- Difficulty in maintaining Development process
- It is not impossible for one person to understand million lines of code and a system requirements and design. We need a team of developers and having more developers means more complex to communicate, coordinate to maintain unity and integrity of design.
- Flexibility offered by Software Systems
- A builder rarely thinks of adding new basement to an existing building it always leads to breakdown. But in case of software users always come with new ideas and asking software engineers to add those new features to existing software applications. User thinks it is just a few lines of code that’s it. In reality it is not easy, but it is possible only if the system is engineered.
- Difficulty in characterizing behaviours of Discrete Systems
- Applications are executed in computers which has discrete states. Applications have thousands of variables and more than one thread of control. So Execution of one application should not affect the other applications which are running in system.
Software complexity is an essential part and we cannot remove a Complexity from software but we can master it via Decomposition i.e. Divide and Rule. Complex system is divided into smaller pieces which are in turn refined to achieving one task at time.
The Author is currently associated with ISM UNIV.