The document Software Development Basics gives you an overview of the whole software development process including subjects like Software Engineering and Software Project Management in order to get the whole picture.
Software development signifies the whole process to find a solution for a given problem in using appropriate methods and tools to create a software product. Software development encompasses the phases of the Software Design Life Cycle (SDLC) including the use of Software Development Models.
Software development does not necessarily subsume the engineering paradigm !
Software Engineering is an engineering branch associated with development of software products; using well-defined scientific principles and methods. The outcome of Software Engineering is an efficient and reliable software product.
Software Engineering cares also about all the phases of Software Design Life Cycle (SDLC) from requirement gathering and analysis to maintenance. It cares also about the Software Development Models.
The generally accepted concepts of Software Engineering as an engineering discipline have been specified in the Guide to the Software Engineering Body of Knowledge (SWEBOK). The SWEBOK has become an internationally accepted standard ISO/IEC TR 19759:2005.
Software Project Management is the art and science of planning and leading software projects.
It encompasses among other elements all the phases of Software Design Life Cycle (SDLC) from requirement gathering and analysis to maintenance. It includes also the Software Development Models.
If you have to develop a large and complex software project, it is recommended to apply methods and use the tools for Software Project Management in order to have a controlled and guided software development process.
The tasks are carried out according to the used methodologies and in a specified period of time to achieve the intended software product.
The basic purpose of the Software Development Models is to provide a smooth software development process, according to the project requirements.
These models are frameworks, which are used to structure, plan and control the process of developing a software product. The Software Development Models are only concerned with the software development process, so it does not involve any technical aspect of developing the software product itself.
All Software Development Models follow the SDLC phases (see next chapter), but the method of execution varies vastly between models.
The The Software Design Life Cycle (SDLC) contains the phases in the life cycle of a software product. The SDLC phases are the “core” of software development. Usually you will apply the appropriate Software Development Model to the SDLC in order to have a smooth development of your software product.
This phase is the main focus of the project managers and stake holders. It is critical to the success of the project. Expectations (whether of the client or your team) need to be fleshed out in great detail and documented. This is an iterative process with much communication taking place between stakeholders, end users and the project team.
The choice of the appropriate Software Development Model like : Waterfall, Incremental, Agile, Spiral, etc is made in this phase.
Technical design requirements are prepared in this phase by lead development staff that can include architects and lead developers. Technical details like database tables, transactions, security processes as well as hardware and system requirements are defined here.
The choice of the programming paradigms and the programming language are made here.
This phase is the actual coding by the development team. After each stage, the developer may demonstrate the work accomplished to the business analysts. Tweaks and enhancements may be required. This is normally the longest phase of the SDLC. The finished product is the input to the testing phase. Following the coding conventions helps to make code better understandable and easier to maintain.
Once the application is migrated to a test environment, different types of testing will be performed including integration and system testing. User acceptance testing is the last part of testing and is performed by the end users to ensure the system meets their expectations. Once sign-off is obtained by all relevant parties, deployment can begin.
The size of the project will determine the complexity of the deployment. Training may be required for end users, operations and the IT staff. Roll-out of the system may be performed in stages starting with one branch, then slowly adding all locations or it could be a full deployment.
Once the customers starts using the developed system, the actual problems come up and need to be solved from time to time. This process is called maintenance.
Refactoring is also a usual maintenance task.
This chapter presents you some Tools and Methods for each SDLC phase.
The HIPO (Hierarchical Input Process Output) diagram represents the hierarchy of modules in the software system. Analysts use HIPO diagram in order to obtain high-level view of system functions. It decomposes functions into sub-functions in a hierarchical manner.
The Data Flow Diagram is a graphical representation of the flow of data in an information system. It is capable of depicting incoming data flow, outgoing data flow and stored data. The DFD does not mention anything about how data flows through the system.
SADT has proven to be successful in the development of software systems, specifically in the requirements gathering phase. Structured Analysis and Design Technique (SADT) is a diagrammatic notation designed specifically to help people describe and understand systems. It offers building blocks to represent entities and activities and a variety of arrows to relate boxes. These boxes and arrows have an associated informal semantic. SADT can be used as a functional analysis tool of a given process, using successive levels of details.
The Flowchart depicts the control flow in program modules.
The Unified Modeling Language (UML) is a graphical language that gives a standard way to write a software system’s blueprint. It helps to visualize, specify, construct and document the artifacts of a software system. It is used to depict the structures and the relationships in a complex system.
The Top-Down design (also called stepwise refinement) takes the whole software system as one entity and then decomposes it into sub-systems. Each sub-system, also called component, is then treated as a system and decomposed further. This process keeps on running until the lowest level of system in the top-down hierarchy is achieved.
Pseudo Code is a non-formal language, a way to create a logical structure. It describes the actions, which will be executed by the application. Using Pseudo Code, the developer describes the application logic using his native language, without applying the structural rules of a specific programming language.
Following a top-down design, the problem at hand is reduced into smaller and smaller subproblems, until only simple statements and control flow constructs remain. Nassi–Shneiderman Diagrams reflect this top-down decomposition in a straightforward way, using nested boxes to represent subproblems. Consistent with the philosophy of structured programming, Nassi–Shneiderman Diagrams have no representation for a GOTO statement. Nassi–Shneiderman Diagrams are only rarely used for formal programming. Their abstraction level is close to structured program code and modifications require the whole diagram to be redrawn.
Jackson structured programming (JSP) is a method for structured programming based on correspondences between data stream structure and program structure. JSP structures programs and data in terms of sequences, iterations and selections. As a consequence it is applied when designing a program’s detailed control structure. The method applies to processing of any data structure or data stream that is describable as a hierarchical structure of sequential, optional and iterated elements.
The Flowchart depicts flow of control in program modules.
The Unified Modeling Language (UML) is a graphical language that gives a standard way to write a software system’s blueprint. It helps to visualize, specify, construct, and document the artifacts of a software system. It is used to depict the structures and the relationships in a complex system.
Source Code Editors have built in functionalities to help the programmer to write the code more efficiently and error free.
Libraries are pre-built code blocks you can use in your program. You don’t have to reinvent the wheel, so you can use libraries!
Frameworks normally gather multiple libraries. Frameworks are reusable abstractions of code wrapped in a well-defined Application Programming Interface (API).
An Integrated Development Environment (IDE) is a programming environment that typically consists of a source code editor, a compiler/interpreter, a debugger and other useful tools.
Static Testing is a technique by which we can check for errors in software without actually executing it. Its counter-part is Dynamic Testing. Static testing is done to avoid errors at an early stage of development because it is easier to find sources of failures then failures themselves.
Review is a way of static testing technique done before dynamic testing. Review is manual examination of the software product (including code) without execution of the software. Review is mostly a manual activity.
Walk-Through is a form of peer review in which a programmer leads the review process. The other team members ask questions and spot possible errors against development standards and other issues.
Dynamic Testing is done when the code is in operation mode. It is performed in runtime environment. When the code being executed with an input value, the result or the output of the code is checked and compared with the expected output. This allows to observe the functional behavior of the software and also to monitor the system memory, CPU response time and the performance of the system. Dynamic testing is also known as validation testing.
A debugger is a computer program used by programmers to test and debug a target program. Debuggers may use instruction-set simulators, rather than running a program directly on the processor to achieve a higher level of control over its execution. This allows debuggers to stop the program according to specific conditions.
An Integrated Development Environment (IDE) is a programming environment that consists of a source code editor, a compiler/interpreter, a debugger and other useful tools for testing software.
Monitoring Software observes and tracks the operations and activities of users, applications and network services on a computer systems. This type of software provides a way to supervise the overall processes that are performed on a computing system and provides reporting services to the system and/or network administrator.
The Cross Reference Generator assures that the changes in code are in compliance with the existing code. If a change is requested, this tool enables to know which other requirements, design and code components will be affected.
Monitoring Software observes and tracks the operations and activities of users, applications and network services on a computer systems. This type of software provides a way to supervise the overall processes that are performed on a computing system and it provides reporting services to the system and/or network administrator.
“Software Engineering” and “Software Project Management” are a kind of superstructure or umbrella for the software development process in order to have the maximum benefit (for the software product to be developed).
The software engineer has to apply management aspects to his work while the project leader has to apply engineering aspects to his work.
The “Software Development Models” and the “Software Development Live Cycle” are the basic structures to develop a software product efficiently.