Programmiermethoden - Kurzanleitung
Wenn Programme entwickelt werden, um reale Probleme wie Bestandsverwaltung, Lohn- und Gehaltsabrechnung, Zulassung von Studenten, Verarbeitung von Prüfungsergebnissen usw. zu lösen, sind sie in der Regel sehr umfangreich und komplex. Der Ansatz zur Analyse derart komplexer Probleme, zur Planung der Softwareentwicklung und zur Steuerung des Entwicklungsprozesses wird genanntprogramming methodology.
Arten von Programmiermethoden
Es gibt viele Arten von Programmiermethoden, die unter Softwareentwicklern vorherrschen -
Verfahrensprogrammierung
Das Problem ist in Prozeduren oder Codeblöcke unterteilt, die jeweils eine Aufgabe ausführen. Alle Verfahren zusammen bilden das gesamte Programm. Es ist nur für kleine Programme mit geringer Komplexität geeignet.
Example- Für ein Taschenrechnerprogramm, das Addition, Subtraktion, Multiplikation, Division, Quadratwurzel und Vergleich ausführt, kann jede dieser Operationen als separate Prozeduren entwickelt werden. Im Hauptprogramm würde jede Prozedur auf der Grundlage der Wahl des Benutzers aufgerufen.
Objekt orientierte Programmierung
Hier dreht sich die Lösung um Entitäten oder Objekte, die Teil des Problems sind. Die Lösung befasst sich mit dem Speichern von Daten, die sich auf die Entitäten beziehen, wie sich die Entitäten verhalten und wie sie miteinander interagieren, um eine zusammenhängende Lösung zu erhalten.
Example - Wenn wir ein Lohn- und Gehaltsabrechnungssystem entwickeln müssen, werden wir Einheiten wie Mitarbeiter, Gehaltsstruktur, Urlaubsregeln usw. haben, um die herum die Lösung aufgebaut werden muss.
Funktionale Programmierung
Hier wird das Problem oder die gewünschte Lösung in funktionale Einheiten unterteilt. Jede Einheit erfüllt ihre eigene Aufgabe und ist autark. Diese Einheiten werden dann zusammengenäht, um die vollständige Lösung zu bilden.
Example - Eine Lohn- und Gehaltsabrechnung kann Funktionseinheiten wie die Pflege von Mitarbeiterdaten, die Berechnung des Grundgehalts, die Berechnung des Bruttogehalts, die Urlaubsabwicklung, die Abwicklung der Kreditrückzahlung usw. umfassen.
Logische Programmierung
Hier wird das Problem eher in logische Einheiten als in funktionale Einheiten unterteilt. Example:In einem Schulverwaltungssystem haben Benutzer sehr definierte Rollen wie Klassenlehrer, Fachlehrer, Laborassistent, Koordinator, verantwortlicher Akademiker usw. Daher kann die Software abhängig von den Benutzerrollen in Einheiten unterteilt werden. Jeder Benutzer kann unterschiedliche Benutzeroberflächen, Berechtigungen usw. haben.
Softwareentwickler können eine oder eine Kombination von mehr als einer dieser Methoden auswählen, um eine Software zu entwickeln. Beachten Sie, dass bei jeder der besprochenen Methoden das Problem in kleinere Einheiten unterteilt werden muss. Zu diesem Zweck verwenden Entwickler einen der beiden folgenden Ansätze:
- Top-Down-Ansatz
- Bottom-up-Ansatz
Top-down oder modularer Ansatz
Das Problem wird in kleinere Einheiten unterteilt, die möglicherweise weiter in noch kleinere Einheiten unterteilt werden. Jede Einheit heißt amodule. Jedes Modul ist eine autarke Einheit, die über alles verfügt, was zur Erfüllung ihrer Aufgabe erforderlich ist.
Die folgende Abbildung zeigt ein Beispiel dafür, wie Sie bei der Entwicklung eines Abrechnungsverarbeitungsprogramms modular vorgehen können, um verschiedene Module zu erstellen.
Bottom-up-Ansatz
Beim Bottom-up-Ansatz beginnt das Systemdesign mit der niedrigsten Ebene von Komponenten, die dann miteinander verbunden werden, um Komponenten höherer Ebene zu erhalten. Dieser Prozess wird fortgesetzt, bis eine Hierarchie aller Systemkomponenten generiert wird. Im realen Szenario ist es jedoch sehr schwierig, alle Komponenten der untersten Ebene zu Beginn zu kennen. Der Bottoms-up-Ansatz wird daher nur für sehr einfache Probleme verwendet.
Schauen wir uns die Komponenten eines Taschenrechnerprogramms an.
Ein typischer Softwareentwicklungsprozess folgt diesen Schritten -
- Anforderungserfassung
- Problem Definition
- System-Design
- Implementation
- Testing
- Documentation
- Schulung und Unterstützung
- Maintenance
Die ersten beiden Schritte helfen dem Team, das Problem zu verstehen. Dies ist der wichtigste erste Schritt, um eine Lösung zu finden. Die Person, die für das Sammeln der Anforderungen, das Definieren des Problems und das Entwerfen des Systems verantwortlich ist, wird angerufensystem analyst.
Anforderungserfassung
Normalerweise können Kunden oder Benutzer ihre Probleme oder Anforderungen nicht klar definieren. Sie haben eine vage Vorstellung davon, was sie wollen. Daher müssen Systementwickler die Clientanforderungen erfassen, um das Problem zu verstehen, das gelöst werden muss oder was geliefert werden muss. Ein detailliertes Verständnis des Problems ist nur möglich, wenn Sie zuerst den Geschäftsbereich verstehen, für den die Lösung entwickelt wird. Einige wichtige Fragen, die zum Verständnis eines Unternehmens beitragen, sind:
- Was wird getan?
- Wie wird es gemacht?
- Wie häufig ist eine Aufgabe?
- Wie groß sind die Entscheidungen oder Transaktionen?
- Welche Probleme treten auf?
Einige Techniken, die beim Sammeln dieser Informationen helfen, sind:
- Interviews
- Questionnaires
- Vorhandene Systemdokumente studieren
- Geschäftsdaten analysieren
Systemanalysten müssen ein klares und präzises, aber gründliches Anforderungsdokument erstellen, um SMART-spezifische, messbare, vereinbarte, realistische und zeitbasierte Anforderungen zu identifizieren. Andernfalls werden -
- Unvollständige Problemdefinition
- Falsche Programmziele
- Überarbeiten Sie, um dem Kunden das erforderliche Ergebnis zu liefern
- Erhöhte Kosten
- Verspätete Lieferung
Aufgrund der erforderlichen Informationstiefe wird das Sammeln von Anforderungen auch als bezeichnet detailed investigation.
Problem Definition
Nach dem Sammeln und Analysieren der Anforderungen muss die Problemstellung klar angegeben werden. Die Problemdefinition sollte eindeutig angeben, welches Problem oder welche Probleme gelöst werden müssen. Eine klare Problemstellung ist notwendig, um -
- Projektumfang definieren
- Konzentrieren Sie das Team
- Halten Sie das Projekt auf Kurs
- Überprüfen Sie, ob das gewünschte Ergebnis am Ende des Projekts erzielt wurde
Oft soll die Codierung der wichtigste Bestandteil eines jeden Softwareentwicklungsprozesses sein. Die Codierung ist jedoch nur ein Teil des Prozesses und kann tatsächlich die minimale Zeit in Anspruch nehmen, wenn das System korrekt ausgelegt ist. Bevor das System entworfen werden kann, muss eine Lösung für das jeweilige Problem gefunden werden.
Das erste, was beim Entwerfen eines Systems zu beachten ist, ist, dass der Systemanalytiker anfangs möglicherweise mehr als eine Lösung findet. Die endgültige Lösung oder das Produkt kann jedoch nur eine sein. Eine eingehende Analyse der Daten, die während der Anforderungserfassungsphase gesammelt wurden, kann zu einer einzigartigen Lösung beitragen. Die korrekte Definition des Problems ist auch entscheidend, um zur Lösung zu gelangen.
Wenn Analysten mit dem Problem mehrerer Lösungen konfrontiert werden, suchen sie nach visuellen Hilfsmitteln wie Flussdiagrammen, Datenflussdiagrammen, Entitätsbeziehungsdiagrammen usw., um jede Lösung eingehend zu verstehen.
Flussdiagramm
Flussdiagramme sind der Prozess der Darstellung von Workflows und Datenflüssen in einem System durch Symbole und Diagramme. Es ist ein wichtiges Werkzeug, um den Systemanalysten bei der Suche nach einer Lösung für das Problem zu unterstützen. Es zeigt die Komponenten des Systems visuell.
Dies sind die Vorteile von Flussdiagrammen -
Visuelle Darstellung hilft beim Verständnis der Programmlogik
Sie dienen als Blaupausen für die eigentliche Programmcodierung
Flussdiagramme sind wichtig für die Programmdokumentation
Flussdiagramme sind eine wichtige Hilfe bei der Programmwartung
Dies sind die Nachteile von Flussdiagrammen -
Komplexe Logik kann nicht mithilfe von Flussdiagrammen dargestellt werden
Im Falle einer Änderung der Logik oder des Daten- / Arbeitsablaufs muss das Flussdiagramm vollständig neu gezeichnet werden
Datenflussdiagramm
Das Datenflussdiagramm oder DFD ist eine grafische Darstellung des Datenflusses durch ein System oder Subsystem. Jeder Prozess hat seinen eigenen Datenfluss und es gibt Ebenen von Datenflussdiagrammen. Stufe 0 zeigt die Eingabe- und Ausgabedaten für das gesamte System. Anschließend wird das System in Module unterteilt und DFD der Ebene 1 zeigt den Datenfluss für jedes Modul separat an. Module können bei Bedarf weiter in Untermodule unterteilt und DFD der Stufe 2 gezeichnet werden.
Pseudocode
Nachdem das System entworfen wurde, wird es dem Projektmanager zur Implementierung, dh zur Codierung, übergeben. Die eigentliche Codierung eines Programms erfolgt in einer Programmiersprache, die nur von Programmierern verstanden werden kann, die in dieser Sprache geschult sind. Bevor jedoch die eigentliche Codierung erfolgt, werden die grundlegenden Funktionsprinzipien, Arbeitsabläufe und Datenflüsse des Programms unter Verwendung einer Notation geschrieben, die der zu verwendenden Programmiersprache ähnlich ist. Eine solche Notation heißtpseudocode.
Hier ist ein Beispiel für einen Pseudocode in C ++. Der Programmierer muss nur jede Anweisung in die C ++ - Syntax übersetzen, um den Programmcode zu erhalten.
Mathematische Operationen identifizieren
Alle Anweisungen an den Computer werden schließlich als arithmetische und logische Operationen auf Maschinenebene implementiert. Diese Operationen sind wichtig, weil sie -
- Speicherplatz belegen
- Nehmen Sie sich Zeit für die Ausführung
- Bestimmen Sie die Softwareeffizienz
- Beeinflussen die gesamte Softwareleistung
Systemanalysten versuchen, alle wichtigen mathematischen Operationen zu identifizieren und gleichzeitig die eindeutige Lösung für das jeweilige Problem zu finden.
Ein reales Problem ist komplex und groß. Wenn eine monolithische Lösung entwickelt wird, wirft dies folgende Probleme auf:
Es ist schwierig, ein großes Programm zu schreiben, zu testen und zu implementieren
Änderungen nach Lieferung des Endprodukts sind nahezu unmöglich
Programmpflege sehr schwierig
Ein Fehler kann das gesamte System zum Stillstand bringen
Um diese Probleme zu überwinden, sollte die Lösung in kleinere Teile unterteilt werden modules. Die Technik, eine große Lösung in kleinere Module zu zerlegen, um die Entwicklung, Implementierung, Änderung und Wartung zu vereinfachen, wird genanntmodular technique der Programmierung oder Softwareentwicklung.
Vorteile der modularen Programmierung
Modulare Programmierung bietet diese Vorteile -
Ermöglicht eine schnellere Entwicklung, da jedes Modul parallel entwickelt werden kann
Module können wiederverwendet werden
Da jedes Modul einzeln getestet werden soll, ist das Testen schneller und robuster
Debugging und Wartung des gesamten Programms einfacher
Module sind kleiner und weniger komplex, sodass sie leicht zu verstehen sind
Identifizierung der Module
Das Identifizieren von Modulen in einer Software ist eine umwerfende Aufgabe, da es keinen richtigen Weg gibt, dies zu tun. Hier sind einige Hinweise zur Identifizierung von Modulen -
Wenn Daten das wichtigste Element des Systems sind, erstellen Sie Module, die verwandte Daten verarbeiten.
Wenn der vom System bereitgestellte Service unterschiedlich ist, teilen Sie das System in Funktionsmodule auf.
Wenn alles andere fehlschlägt, teilen Sie das System nach Ihrem Verständnis des Systems während der Anforderungserfassungsphase in logische Module auf.
Zur Codierung muss jedes Modul zur Erleichterung der Programmierung erneut in kleinere Module zerlegt werden. Dies kann wiederum mithilfe der drei oben genannten Tipps in Kombination mit bestimmten Programmierregeln erfolgen. Beispielsweise könnte für eine objektorientierte Programmiersprache wie C ++ und Java jede Klasse mit ihren Daten und Methoden ein einzelnes Modul bilden.
Schritt-für-Schritt Lösung
Um die Module zu implementieren, muss der Prozessablauf jedes Moduls Schritt für Schritt beschrieben werden. Die schrittweise Lösung kann mit entwickelt werdenalgorithms oder pseudocodes. Die schrittweise Lösung bietet diese Vorteile -
Jeder, der die Lösung liest, kann sowohl das Problem als auch die Lösung verstehen.
Es ist für Programmierer und Nicht-Programmierer gleichermaßen verständlich.
Während des Codierens muss jede Anweisung einfach in eine Programmanweisung konvertiert werden.
Es kann Teil der Dokumentation sein und bei der Programmwartung helfen.
Details auf Mikroebene wie Bezeichnernamen, erforderliche Vorgänge usw. werden automatisch berechnet
Schauen wir uns ein Beispiel an.
Kontrollstrukturen
Wie Sie im obigen Beispiel sehen können, muss keine Programmlogik ausgeführt werden sequentially. In der Programmiersprachecontrol structuresTreffen Sie Entscheidungen über den Programmablauf basierend auf bestimmten Parametern. Sie sind sehr wichtige Elemente jeder Software und müssen identifiziert werden, bevor mit der Codierung begonnen wird.
Algorithmen und pseudocodes Unterstützung von Analysten und Programmierern bei der Ermittlung, wo Kontrollstrukturen erforderlich sind.
Es gibt folgende Kontrollstrukturen:
Entscheidungskontrollstrukturen
Entscheidungskontrollstrukturen werden verwendet, wenn der nächste auszuführende Schritt von einem Kriterium abhängt. Dieses Kriterium ist normalerweise ein oder mehrere boolesche Ausdrücke, die ausgewertet werden müssen. Ein boolescher Ausdruck wird immer als "wahr" oder "falsch" ausgewertet. Ein Satz von Anweisungen wird ausgeführt, wenn das Kriterium "wahr" ist, und ein anderer Satz wird ausgeführt, wenn das Kriterium "falsch" ergibt. Zum Beispiel if-Anweisung
Auswahlkontrollstrukturen
Auswahlsteuerungsstrukturen werden verwendet, wenn die Programmsequenz von der Antwort auf eine bestimmte Frage abhängt. Zum Beispiel hat ein Programm viele Optionen für den Benutzer. Die Anweisung, die als nächstes ausgeführt werden soll, hängt von der gewählten Option ab. Zum Beispiel,switch Erklärung, case Erklärung.
Wiederholungs- / Schleifensteuerungsstrukturen
Die Wiederholungssteuerungsstruktur wird verwendet, wenn eine Reihe von Anweisungen viele Male wiederholt werden soll. Die Anzahl der Wiederholungen ist möglicherweise vor dem Start bekannt oder hängt vom Wert eines Ausdrucks ab. Zum Beispiel,for Erklärung, while Erklärung, do while Aussage usw.
Wie Sie im obigen Bild sehen können, werden sowohl Auswahl- als auch Entscheidungsstrukturen in einem Flussdiagramm ähnlich implementiert. Die Auswahlkontrolle ist nichts anderes als eine Reihe von aufeinanderfolgenden Entscheidungserklärungen.
Hier sind einige Beispiele aus Programmen, die zeigen, wie diese Anweisungen funktionieren -
Eine endliche Reihe von Schritten, die befolgt werden müssen, um ein Problem zu lösen, wird als bezeichnet algorithm. Der Algorithmus wird im Allgemeinen entwickelt, bevor die eigentliche Codierung durchgeführt wird. Es ist in englischer Sprache geschrieben, so dass es auch für Nicht-Programmierer leicht verständlich ist.
Manchmal werden Algorithmen mit geschrieben pseudocodesdh eine Sprache ähnlich der zu verwendenden Programmiersprache. Der Schreibalgorithmus zur Lösung eines Problems bietet diese Vorteile:
Fördert eine effektive Kommunikation zwischen Teammitgliedern
Ermöglicht die Analyse des vorliegenden Problems
Dient als Blaupause für die Codierung
Hilft beim Debuggen
Wird Teil der Softwaredokumentation zur späteren Bezugnahme während der Wartungsphase
Dies sind die Merkmale eines guten und korrekten Algorithmus -
Hat eine Reihe von Eingängen
Schritte sind eindeutig definiert
Hat eine endliche Anzahl von Schritten
Erzeugt die gewünschte Ausgabe
Beispielalgorithmen
Nehmen wir zunächst ein Beispiel für eine reale Situation zur Erstellung eines Algorithmus. Hier ist der Algorithmus, um auf den Markt zu gehen und einen Stift zu kaufen.
Schritt 4 in diesem Algorithmus ist an sich eine vollständige Aufgabe und es kann ein separater Algorithmus dafür geschrieben werden. Lassen Sie uns nun einen Algorithmus erstellen, um zu überprüfen, ob eine Zahl positiv oder negativ ist.
Flowchartist eine schematische Darstellung der Abfolge logischer Schritte eines Programms. Flussdiagramme verwenden einfache geometrische Formen zur Darstellung von Prozessen und Pfeile zur Darstellung von Beziehungen und Prozess- / Datenfluss.
Flussdiagrammsymbole
Hier ist ein Diagramm für einige der allgemeinen Symbole, die beim Zeichnen von Flussdiagrammen verwendet werden.
Symbol | Symbolname | Zweck |
---|---|---|
|
Start stop | Wird am Anfang und Ende des Algorithmus verwendet, um den Beginn und das Ende des Programms anzuzeigen. |
|
Prozess | Zeigt Prozesse wie mathematische Operationen an. |
|
Input-Output | Wird zur Kennzeichnung von Programmeingängen und -ausgängen verwendet. |
|
Entscheidung | Steht für Entscheidungsaussagen in einem Programm, wobei die Antwort normalerweise Ja oder Nein lautet. |
|
Pfeil | Zeigt Beziehungen zwischen verschiedenen Formen. |
|
On-Page-Connector | Verbindet zwei oder mehr Teile eines Flussdiagramms, die sich auf derselben Seite befinden. |
|
Off-Page-Anschluss | Verbindet zwei Teile eines Flussdiagramms, die auf verschiedene Seiten verteilt sind. |
Richtlinien für die Entwicklung von Flussdiagrammen
Dies sind einige Punkte, die Sie bei der Entwicklung eines Flussdiagramms beachten sollten:
Das Flussdiagramm kann nur ein Start- und ein Stoppsymbol haben
On-Page-Konnektoren werden mit Nummern referenziert
Off-Page-Konnektoren werden mit Alphabeten referenziert
Der allgemeine Ablauf der Prozesse erfolgt von oben nach unten oder von links nach rechts
Arrows should not cross each other
Example Flowcharts
Here is the flowchart for going to the market to purchase a pen.
Here is a flowchart to calculate the average of two numbers.
As you know, computer does not have intelligence of its own; it simply follows the instructions given by the user. Instructions are the building blocks of a computer program, and hence a software. Giving clear instructions is crucial to building a successful program. As a programmer or software developer, you should get into the habit of writing clear instructions. Here are two ways to do that.
Clarity of Expressions
Expression in a program is a sequence of operators and operands to do an arithmetic or logical computation. Here are some examples of valid expressions −
- Comparing two values
- Defining a variable, object or class
- Arithmetic calculations using one or more variables
- Retrieving data from database
- Updating values in database
Writing unambiguous expressions is a skill that must be developed by every programmer. Here are some points to be kept in mind while writing such expressions −
Unambiguous Result
Evaluation of the expression must give one clear cut result. For example, unary operators should be used with caution.
Avoid Complex Expressions
Do not try to achieve many things in a single expression. Break into two or more expressions the moment things start getting complicated.
Simplicity of Instructions
It’s not just for computers that you need to write clear instructions. Any one reading the program later (even you yourself!!) should be able to understand what the instruction is trying to achieve. It is very common for programmers not to get a hang of their own programs when they revisit it after some time has passed. This indicates that maintenance and modification of such programs would be quite difficult.
Writing simple instructions helps in avoiding this problem. Here are some tips to write simple instructions −
Avoid clever instructions − Clever instructions might not look that clever later if no one is able to understand it properly.
One instruction per task − Trying to do more than one thing at a time complicates instructions.
Use standards − Every language has its standards, follow them. Remember you are not working alone on the project; follow project standards and guidelines for coding.
In this chapter, we will cover how to write a good program. But before we do that, let us see what the characteristics of a good program are −
Portable − The program or software should run on all computers of same type. By same type we mean a software developed for personal computers should run on all PCs. Or a software for written for tablets should run on all tablets having the right specifications.
Efficient − A software that does the assigned tasks quickly is said to be efficient. Code optimization and memory optimization are some of the ways of raising program efficiency.
Effective − The software should assist in solving the problem at hand. A software that does that is said to be effective.
Reliable − The program should give the same output every time the same set of inputs is given.
User friendly − Program interface, clickable links and icons, etc. should be user friendly.
Self-documenting − Any program or software whose identifier names, module names, etc. can describe itself due to use of explicit names.
Here are some ways in which good programs can be written.
Proper Identifier Names
A name that identifies any variable, object, function, class or method is called an identifier. Giving proper identifier names makes a program self-documenting. This means that name of the object will tell what it does or what information it stores. Let’s take an example of this SQL instruction:
Look at line 10. It tells anyone reading the program that a student’s ID, name and roll number are to be selected. The names of the variables make this self-explanatory. These are some tips to create proper identifier names −
Use language guidelines
Don’t shy from giving long names to maintain clarity
Use uppercase and lowercase letters
Don’t give same name to two identifiers even if the language allows it
Don’t give same names to more than one identifier even if they have mutually exclusive scope
Comments
In the image above, look at line 8. It tells the reader that the next few lines of code will retrieve list of students whose report card is to be generated. This line is not part of the code but given only to make the program more user friendly.
Such an expression that is not compiled but written as a note or explanation for the programmer is called a comment. Look at the comments in the following program segment. Comments start with //.
Comments can be inserted as −
Prologue to the program to explain its objective
At the beginning and/or end of logical or functional blocks
Make note about special scenarios or exceptions
You should avoid adding superfluous comments as that may prove counterproductive by breaking the flow of code while reading. Compiler may ignore comments and indentations but the reader tends to read each one of them.
Indentation
Distance of text from left or right margin is called indent. In programs, indentation is used to separate logically separated blocks of code. Here’s an example of indented program segment:
As you can see, indented program is more understandable. Flow of control from for loop to if and back to for is very clear. Indentation is especially useful in case of control structures.
Inserting blank spaces or lines is also part of indentation. Here are some situations where you can and should use indentation −
Blank lines between logical or functional blocks of code within the program
Blank spaces around operators
Tabs at the beginning of new control structures
Identifying and removing errors from a program or software is called debugging. Debugging is ideally part of testing process but in reality it is done at every step of programming. Coders should debug the smallest of their modules before moving on. This decreases the number of errors thrown up during the testing phase and reduces testing time and effort significantly. Let us look at the types of errors that can crop up in a program.
Syntax Errors
Syntax errors are the grammatical errors in a program. Every language has its own set of rules, like creating identifiers, writing expressions, etc. for writing programs. When these rules are violated, the errors are called syntax errors. Many modern integrated development environments can identify the syntax errors as you type your program. Else, it will be shown when you compile the program. Let us take an example −
In this program, the variable prod has not been declared, which is thrown up by the compiler.
Semantic Errors
Semantic errors are also called logical errors. The statement has no syntax errors, so it will compile and run correctly. However, it will not give the desired output as the logic is not correct. Let us take an example.
Look at line 13. Here programmer wants to check if the divisor is 0, to avoid division by 0. However, instead of using the comparing operator ==, assignment operator = has been used. Now every time the “if expression” will evaluate to true and program will give output as “You cannot divide by 0”. Definitely not what was intended!!
Logical errors cannot be detected by any program; they have to be identified by the programmer herself when the desired output is not achieved.
Runtime Errors
Runtime errors are errors that occur while executing the program. This implies that the program has no syntax errors. Some of the most common run time errors your program may encounter are −
- Infinite loop
- Division by '0'
- Wrong value entered by user (say, string instead of integer)
Code Optimization
Any method by which code is modified to improve its quality and efficiency is called code optimization. Code quality determines life span of code. If the code can be used and maintained for a long period of time, carried over from product to product, its quality is deemed to be high and it has a longer life. On the contrary, if a piece of code can be used and maintained only for short durations, say till a version is valid, it is deemed to be of low quality and has a short life.
Reliability and speed of a code determines code efficiency. Code efficiency is an important factor in ensuring high performance of a software.
There are two approaches to code optimization −
Intuition based optimization (IBO) − Here the programmer tries to optimize the program based on her own skill and experience. This might work for small programs but fails miserably as complexity of the program grows.
Evidence based optimization (EBO) − Here automated tools are used to find out performance bottlenecks and then relevant portions optimize accordingly. Every programming language has its own set of code optimization tools. For example, PMD, FindBug and Clover are used to optimize Java code.
Code is optimized for execution time and memory consumption because time is scarce and memory expensive. There has to be a balance between the two. If time optimization increases load on memory or memory optimization makes the code slower, purpose of optimization will be lost.
Execution Time Optimization
Optimizing code for execution time is necessary to provide fast service to the users. Here are some tips for execution time optimization −
Use commands that have built-in execution time optimization
Use switch instead of if condition
Minimize function calls within loop structures
Optimize the data structures used in the program
Memory Optimization
As you know, data and instructions consume memory. When we say data, it also refers to interim data that is the result of expressions. We also need to keep a track of how many instructions are making up the program or the module we are trying to optimize. Here are some tips for memory optimization −
Use commands that have built-in memory optimization
Keep the use of variables that need to be stored in registers minimum
Avoid declaring global variables inside loops that are executed many times
Avoid using CPU intensive functions like sqrt()
Any written text, illustrations or video that describe a software or program to its users is called program or software document. User can be anyone from a programmer, system analyst and administrator to end user. At various stages of development multiple documents may be created for different users. In fact, software documentation is a critical process in the overall software development process.
In modular programming documentation becomes even more important because different modules of the software are developed by different teams. If anyone other than the development team wants to or needs to understand a module, good and detailed documentation will make the task easier.
These are some guidelines for creating the documents −
Documentation should be from the point of view of the reader
Document should be unambiguous
There should be no repetition
Industry standards should be used
Documents should always be updated
Any outdated document should be phased out after due recording of the phase out
Advantages of Documentation
These are some of the advantages of providing program documentation −
Keeps track of all parts of a software or program
Maintenance is easier
Programmers other than the developer can understand all aspects of software
Improves overall quality of the software
Assists in user training
Ensures knowledge de-centralization, cutting costs and effort if people leave the system abruptly
Example Documents
A software can have many types of documents associated with it. Some of the important ones include −
User manual − It describes instructions and procedures for end users to use the different features of the software.
Operational manual − It lists and describes all the operations being carried out and their inter-dependencies.
Design Document − It gives an overview of the software and describes design elements in detail. It documents details like data flow diagrams, entity relationship diagrams, etc.
Requirements Document − It has a list of all the requirements of the system as well as an analysis of viability of the requirements. It can have user cases, reallife scenarios, etc.
Technical Documentation − It is a documentation of actual programming components like algorithms, flowcharts, program codes, functional modules, etc.
Testing Document − It records test plan, test cases, validation plan, verification plan, test results, etc. Testing is one phase of software development that needs intensive documentation.
List of Known Bugs − Every software has bugs or errors that cannot be removed because either they were discovered very late or are harmless or will take more effort and time than necessary to rectify. These bugs are listed with program documentation so that they may be removed at a later date. Also they help the users, implementers and maintenance people if the bug is activated.
Program maintenance is the process of modifying a software or program after delivery to achieve any of these outcomes −
- Correct errors
- Improve performance
- Add functionalities
- Remove obsolete portions
Despite the common perception that maintenance is required to fix errors that come up after the software goes live, in reality most of the maintenance work involves adding minor or major capabilities to existing modules. For example, some new data is added to a report, a new field added to entry forms, code to be modified to incorporate changed government laws, etc.
Types of Maintenance
Maintenance activities can be categorized under four headings −
Corrective maintenance − Here errors that come up after on-site implementation are fixed. The errors may be pointed out by the users themselves.
Preventive maintenance − Modifications done to avoid errors in future are called preventive maintenance.
Adaptive maintenance − Changes in the working environment sometimes require modifications in the software. This is called adaptive maintenance. For example, if government education policy changes, corresponding changes have to be made in student result processing module of school management software.
Perfective maintenance − Changes done in the existing software to incorporate new requirements from the client is called perfective maintenance. Aim here is to be always be up-to-date with the latest technology.
Maintenance Tools
Software developers and programmers use many tools to assist them in software maintenance. Here are some of the most widely used −
Program slicer − selects a part of the program that would be affected by the change
Data flow analyzer − tracks all possible flows of data in the software
Dynamic analyzer − traces program execution path
Static analyzer − allows general viewing and summarizing of the program
Dependency analyzer − assists in understanding and analyzing interdependence of different parts of the program