All software engineers always employ a software architecture in their programs, very often without realizing that. Software architecture has been proved essential in software engineering because it addresses the issues identified by practitioners and researchers. It helps to reuse a software. Software Architecture addresses software engineering difficulties.
Software Engineering Difficulties
Software engineering is a young field where software engineers deal with very complex set of problems and build complex but intangible systems. Software is not useful on its own but it has to conform itself to the changes in other engineering areas. We classified SE difficulties into two types.
Some problems can be eliminated. Those problems that can be eliminated are called accidental difficulties. Solution for these exist. Some solutions have been discovered and some needs to be discovered. e.g. Inadequate programming ways have been remedied by using high-level languages and pre-built libraries. As complexity is not an inherent property, so with the passage of time, computer scientists are finding ways to overcome these difficulties. e.g. to view some decisions in programming took long time for users but this issue was solved by using time-sharing in which turn around time had made near to human perception. Different types of programs were difficult to use, integration of different codes were difficult, but this issue was resolved with integrated software development.
Some problems can’t be eliminated completely because sometimes increase in one thing force us to decrease other to create a balance, so these problems can be lessened only.
Only partial solutions can be found for essential difficulties. These solutions can’t be abstracted away. Essential difficulties are
Software is a complex intangible system. A software has a wide range of functionalities and mostly no two parts of a software are similar, if there are any similar parts, they are abstracted away into one so that we can make our code short and optimized. Complexity grows non-linearly with size.
A software is only useful it works well in its compatible environment. Software must be compatible with operating systems on which it will be used and hardware that is the minimum requirement to run that software.
As time passes, changes are required in software. New machines, users, applications, laws and standards force us to make changes in our software to increase its compatibility with system and resolve issues with hardware. Software never completes, it require changes due to its malleable behavior.
Software does not have any physical representation, that means we can’t touch software so we don’t have any physical law for software. Software does not have any obvious representation.