"Sales and Inventory Management System": Bachelor of Computer Application (BCA)
"Sales and Inventory Management System": Bachelor of Computer Application (BCA)
ON
Of
Submitted by-
Ananya Ruhela
Submitted to-
DIRECTOR OF COMPUTER SCIENCE AND TECHNOLOGY (RDSO)
LUCKNOW- 226011,
U.P., INDIA
JULY-2019
1
INDEX
2
ACKNOWLEDGEMENT
Secondly I would also like to thank my parents and friends who helped me a
lot in finalizing this project within a limited time frame and to Research Design
and Standards Organization for providing me an opportunity to undergo my
summer training under the department of research.
Further I would like to express my deep sense of gratitude to and for their
support, guidance and mentorship without which the completion of my project
would have been highly difficult.
3
ABSTRACT
This project is aimed at developing a desktop based application named Sales and
Inventory Management System for managing the inventory system of any
organization. This system can be used to store the details of the inventory, issuing
of products, sales details, bill generation. In this system we are solving different
problems affecting to direct sales management and purchase management.
Inventory Management System is also an important means of automatically
tracking large shipments. An automated Inventory Management System helps to
minimize the errors while recording the stock.
4
ABOUT RDSO
Central Standards Office (CSO) and the Railway Testing and Research Centre
(RTRC) were integrated into a single unit named Research Designs and
Standards Organisation (RDSO) in 1957, under Ministry of Railways at Lucknow.
5
Introduction
System Introduction
For optimal sales and inventory management processes, you need robust
functionality for managing your logistics facilities. Support for inventory
management helps you record and track materials on the basis of both quantity and
value.
Using this software we can reduce costs for warehousing, transportation, order
fulfillment, and material handling – while improving customer service.
You can significantly improve inventory turns, optimize the flow of goods, and
shorten routes within your warehouse or distribution center. Additional benefits of
inventory management include improved cash flow, visibility, and decision
making.
Employees can plan, enter, and document warehouse and internal stock movements
by managing goods receipts, goods issues, storage, picking and packing, physical
stock transfers, and transfer postings.
6
Problems In existing system
As we know manual system are quite tedious ,time consuming and less efficient
and accurate in comparison to the computerized system.
So following are some disadvantages of the old system:
1. Time consuming
2. Less accurate
3. Less efficient
7
Scope of Proposed System
The scope of this system is to provide user efficient working environment and
more output can be generated through this. This system provides user friendly
interface resulting in knowing each and every usability features of the system.
This system helps in tracking records so that past records can be verified through
them and one can make decisions based on the past records. This system completes
the work in a very less time resulting in less time consumption and high level of
efficiency.
This system is developed in such a way that even a naïve user can also operate the
system easily. The calculations are made very quickly and the records are directly
saved into databases and the databases can be maintained for a longer period of
time. Each record can be retrieved and can be verified for the future transactions.
Also this system provides high level of security for data leaking as only admin
people can access the database no changes can be made in it until it verifies the
user login id and password.
We also have operator login through which operator can take orders but can’t make
changes in the database. Limited access is available to the operator.
8
Feasibility Study
As we know each and every project needs to have a feasibility study for the
complete understandability of the project. We will consider 3 types of feasibility
study they are technical feasibility, operational feasibility and economical
feasibility.
Technical Feasibility:
This new system requires 6 fully trained people to run the system perfectly.
1 admin person to maintain database n other 5 to handle the system interface and
order making things.
As our existing system is purely manual, so we need a onetime investment of Rs 4
Lacs for the purchase of 6 computers, 5 invoice printers, a laser printer, AC and
networking etc. It requires apprx. 10 Lacks PA as a operating cost.
With the above details our system is technically feasible as after investing 14 Lacs
in a year, the company is still saving Rs 15 Lacs PA.
Operational Feasibility:
The new solution is feasible in all sense but operationally it is not. The new
system demands the expulsion of at least 15 people from the company. It creates an
environment of joblessness and fear among the employees. It can lead to an
indefinite strike in the company also. So the management must take corrective
actions prior in advance in order to start the further proceedings.
Economic Feasibility:
9
With the manual system the operating cost of the system is about 60 Lacks
P.A. This cost comprises salary of 25 people, stationary, building rent, electricity,
water, telephone etc. But with the new system this reoccurring cost comes out to be
about 20 Lacks P.A. Hence the new system is economically feasible.
10
Operating Environment – Hardware and
Software
HARDWARE REQUIREMENTS
SOFTWARE REQUIREMENTS
11
Proposed System
Objectives
It support for inventory management helps you record and track materials on
the basis of both quantity and value.
For warehouse management, you can track quantity and value of all your
materials, perform physical inventory, and optimize your warehouse
resources
12
User Requirements
FUNCTIONAL REQUIREMENTS
A. INPUT/OUTPUT
B. PROCESSING
1. System should automatically generate the bill.
2. System should inform the pending order and make changes if the order is
dispatched.
C. ERROR HANDLING
1. Should report any errors on duplicate primary keys.
2. Should report any ‘Out of Range’ values on numeric fields
3. Should report any data type mismatches any field on the forms.
4. Should report on any ‘Invalid dates’
5. Should report any violation of authorization of rights
13
6. Should report any Invalid Login errors
NON-FUNCTIONAL REQUIREMENTS
14
ANALYSIS & DESIGN
Use case Diagram for Supplier
Login
Customer
Item Selection
Supplier
Invoice
15
Use Case Diagram for Customer
Studies
Requirements
Makes payment
Customer Clerk
Invoice
Send GRN
16
ER-DIAGRAM OF INVENTORY SYSTEM
INVALID
DB
17
DATA FLOW DIAGRAM OF INVENTORY SYSTEM
CUSTOMER MANAGEMENT
CUSTOMER
SALES AND
ORDER
INVENTORY
REPORTS MANAGEMENT
MONITORIN-
RECIEPT G SYSTEM
DELIVERY
FUEL ORDER
SUPPLIER
18
CODE IMPLEMENTATION
/
******************************************************************************
**
**
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
******************************************************************************
**/
#ifndef WELCOMEPAGEHP6212_H
#define WELCOMEPAGEHP6212_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QFrame>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
19
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
public:
QWidget *centralwidget;
QLabel *label;
QFrame *frame;
QLabel *label_3;
QLabel *label_2;
QLabel *label_6;
QLabel *label_4;
QMenuBar *menubar;
QStatusBar *statusbar;
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QStringLiteral("MainWindow"));
MainWindow->resize(789, 611);
MainWindow->setLayoutDirection(Qt::LeftToRight);
20
centralwidget->setObjectName(QStringLiteral("centralwidget"));
label->setObjectName(QStringLiteral("label"));
QFont font;
font.setFamily(QStringLiteral("Monotype Corsiva"));
font.setPointSize(36);
font.setItalic(true);
label->setFont(font);
frame->setObjectName(QStringLiteral("frame"));
frame->setFrameShape(QFrame::StyledPanel);
frame->setFrameShadow(QFrame::Raised);
label_3->setObjectName(QStringLiteral("label_3"));
QFont font1;
font1.setPointSize(22);
font1.setBold(false);
font1.setWeight(50);
label_3->setFont(font1);
label_2->setObjectName(QStringLiteral("label_2"));
21
QFont font2;
font2.setPointSize(22);
label_2->setFont(font2);
label_6->setObjectName(QStringLiteral("label_6"));
label_6->setAutoFillBackground(false);
label_6->setPixmap(QPixmap(QString::fromUtf8(":/icon/Desktop/e3.png")));
label_4->setObjectName(QStringLiteral("label_4"));
QFont font3;
font3.setPointSize(18);
label_4->setFont(font3);
MainWindow->setCentralWidget(centralwidget);
menubar->setObjectName(QStringLiteral("menubar"));
MainWindow->setMenuBar(menubar);
statusbar->setObjectName(QStringLiteral("statusbar"));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
22
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "inventory.ui",
Q_NULLPTR));
label_6->setText(QString());
} // retranslateUi
};
namespace Ui {
} // namespace Ui
QT_END_NAMESPACE
23
#endif // WELCOMEPAGEHP6212_H
#ifndef LOGINFX6212_H
#define LOGINFX6212_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QLabel *label;
QLabel *label_2;
QLabel *label_3;
QLineEdit *lineEdit;
QLabel *label_4;
QLineEdit *lineEdit_2;
QPushButton *pushButton;
QPushButton *pushButton_2;
QMenuBar *menubar;
QStatusBar *statusbar;
24
label->setPixmap(QPixmap(QString::fromUtf8(":/icon/Desktop/image1.jpg")));
label->setScaledContents(true);
label_2 = new QLabel(centralwidget);
label_2->setObjectName(QStringLiteral("label_2"));
label_2->setGeometry(QRect(230, 20, 451, 131));
QFont font;
font.setFamily(QStringLiteral("Segoe Print"));
font.setPointSize(36);
font.setBold(true);
font.setItalic(false);
font.setWeight(75);
label_2->setFont(font);
label_3 = new QLabel(centralwidget);
label_3->setObjectName(QStringLiteral("label_3"));
label_3->setGeometry(QRect(120, 190, 151, 151));
label_3->setPixmap(QPixmap(QString::fromUtf8(":/icon/Desktop/user.svg")));
label_3->setScaledContents(true);
lineEdit = new QLineEdit(centralwidget);
lineEdit->setObjectName(QStringLiteral("lineEdit"));
lineEdit->setGeometry(QRect(360, 240, 391, 61));
QFont font1;
font1.setPointSize(24);
lineEdit->setFont(font1);
label_4 = new QLabel(centralwidget);
label_4->setObjectName(QStringLiteral("label_4"));
label_4->setGeometry(QRect(110, 370, 171, 171));
label_4->setPixmap(QPixmap(QString::fromUtf8(":/icon/Desktop/passicon.ico")));
label_4->setScaledContents(true);
lineEdit_2 = new QLineEdit(centralwidget);
lineEdit_2->setObjectName(QStringLiteral("lineEdit_2"));
lineEdit_2->setGeometry(QRect(362, 450, 381, 51));
lineEdit_2->setFont(font1);
pushButton = new QPushButton(centralwidget);
pushButton->setObjectName(QStringLiteral("pushButton"));
pushButton->setGeometry(QRect(630, 30, 161, 31));
QFont font2;
font2.setPointSize(11);
pushButton->setFont(font2);
pushButton_2 = new QPushButton(centralwidget);
pushButton_2->setObjectName(QStringLiteral("pushButton_2"));
pushButton_2->setGeometry(QRect(630, 80, 161, 31));
pushButton_2->setFont(font2);
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QStringLiteral("menubar"));
menubar->setGeometry(QRect(0, 0, 800, 21));
25
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QStringLiteral("statusbar"));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // LOGINFX6212_H
#ifndef PRODUCTDETAILSSV6212_H
#define PRODUCTDETAILSSV6212_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
26
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QLabel *label;
QLabel *label_2;
QLabel *label_3;
QLabel *label_4;
QLineEdit *lineEdit_2;
QLineEdit *lineEdit;
QLabel *label_5;
QLineEdit *lineEdit_3;
QLineEdit *lineEdit_4;
QLabel *label_6;
QPushButton *pushButton;
QMenuBar *menubar;
QStatusBar *statusbar;
27
font.setPointSize(28);
label_2->setFont(font);
label_2->setStyleSheet(QStringLiteral(""));
label_2->setFrameShadow(QFrame::Plain);
label_3 = new QLabel(centralwidget);
label_3->setObjectName(QStringLiteral("label_3"));
label_3->setGeometry(QRect(450, 170, 121, 31));
QFont font1;
font1.setFamily(QStringLiteral("Leelawadee UI"));
font1.setPointSize(12);
label_3->setFont(font1);
label_4 = new QLabel(centralwidget);
label_4->setObjectName(QStringLiteral("label_4"));
label_4->setGeometry(QRect(450, 230, 131, 61));
label_4->setFont(font1);
lineEdit_2 = new QLineEdit(centralwidget);
lineEdit_2->setObjectName(QStringLiteral("lineEdit_2"));
lineEdit_2->setGeometry(QRect(600, 250, 191, 31));
lineEdit_2->setFont(font1);
lineEdit = new QLineEdit(centralwidget);
lineEdit->setObjectName(QStringLiteral("lineEdit"));
lineEdit->setGeometry(QRect(600, 180, 191, 31));
lineEdit->setFont(font1);
label_5 = new QLabel(centralwidget);
label_5->setObjectName(QStringLiteral("label_5"));
label_5->setGeometry(QRect(450, 310, 141, 61));
label_5->setFont(font1);
lineEdit_3 = new QLineEdit(centralwidget);
lineEdit_3->setObjectName(QStringLiteral("lineEdit_3"));
lineEdit_3->setGeometry(QRect(600, 330, 191, 31));
lineEdit_3->setFont(font1);
lineEdit_4 = new QLineEdit(centralwidget);
lineEdit_4->setObjectName(QStringLiteral("lineEdit_4"));
lineEdit_4->setGeometry(QRect(600, 410, 191, 31));
lineEdit_4->setFont(font1);
label_6 = new QLabel(centralwidget);
label_6->setObjectName(QStringLiteral("label_6"));
label_6->setGeometry(QRect(450, 380, 121, 81));
label_6->setFont(font1);
pushButton = new QPushButton(centralwidget);
pushButton->setObjectName(QStringLiteral("pushButton"));
pushButton->setGeometry(QRect(644, 500, 131, 41));
QFont font2;
font2.setFamily(QStringLiteral("MS Reference Sans Serif"));
font2.setPointSize(14);
font2.setBold(false);
28
font2.setWeight(50);
pushButton->setFont(font2);
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QStringLiteral("menubar"));
menubar->setGeometry(QRect(0, 0, 800, 21));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QStringLiteral("statusbar"));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // PRODUCTDETAILSSV6212_H
#ifndef INVOICEBG6212_H
#define INVOICEBG6212_H
29
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTableWidget>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QLabel *label;
QLabel *label_2;
QTableWidget *tableWidget;
QMenuBar *menubar;
QStatusBar *statusbar;
30
tableWidget->setColumnCount(5);
QFont font1;
font1.setFamily(QStringLiteral("Segoe UI"));
font1.setPointSize(10);
font1.setBold(true);
font1.setItalic(true);
font1.setWeight(75);
QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
__qtablewidgetitem->setFont(font1);
tableWidget->setHorizontalHeaderItem(0, __qtablewidgetitem);
QFont font2;
font2.setFamily(QStringLiteral("Segoe UI"));
font2.setPointSize(11);
font2.setBold(true);
font2.setItalic(true);
font2.setWeight(75);
QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem();
__qtablewidgetitem1->setFont(font2);
tableWidget->setHorizontalHeaderItem(1, __qtablewidgetitem1);
QTableWidgetItem *__qtablewidgetitem2 = new QTableWidgetItem();
__qtablewidgetitem2->setFont(font2);
tableWidget->setHorizontalHeaderItem(2, __qtablewidgetitem2);
QTableWidgetItem *__qtablewidgetitem3 = new QTableWidgetItem();
__qtablewidgetitem3->setFont(font2);
tableWidget->setHorizontalHeaderItem(3, __qtablewidgetitem3);
QTableWidgetItem *__qtablewidgetitem4 = new QTableWidgetItem();
__qtablewidgetitem4->setFont(font2);
tableWidget->setHorizontalHeaderItem(4, __qtablewidgetitem4);
if (tableWidget->rowCount() < 14)
tableWidget->setRowCount(14);
QFont font3;
font3.setPointSize(11);
font3.setItalic(false);
QTableWidgetItem *__qtablewidgetitem5 = new QTableWidgetItem();
__qtablewidgetitem5->setFont(font3);
tableWidget->setVerticalHeaderItem(0, __qtablewidgetitem5);
QFont font4;
font4.setPointSize(11);
QTableWidgetItem *__qtablewidgetitem6 = new QTableWidgetItem();
__qtablewidgetitem6->setFont(font4);
tableWidget->setVerticalHeaderItem(1, __qtablewidgetitem6);
QTableWidgetItem *__qtablewidgetitem7 = new QTableWidgetItem();
__qtablewidgetitem7->setFont(font4);
tableWidget->setVerticalHeaderItem(2, __qtablewidgetitem7);
QTableWidgetItem *__qtablewidgetitem8 = new QTableWidgetItem();
__qtablewidgetitem8->setFont(font4);
31
tableWidget->setVerticalHeaderItem(3, __qtablewidgetitem8);
QTableWidgetItem *__qtablewidgetitem9 = new QTableWidgetItem();
__qtablewidgetitem9->setFont(font4);
tableWidget->setVerticalHeaderItem(4, __qtablewidgetitem9);
QTableWidgetItem *__qtablewidgetitem10 = new QTableWidgetItem();
__qtablewidgetitem10->setFont(font4);
tableWidget->setVerticalHeaderItem(5, __qtablewidgetitem10);
QTableWidgetItem *__qtablewidgetitem11 = new QTableWidgetItem();
__qtablewidgetitem11->setFont(font4);
tableWidget->setVerticalHeaderItem(6, __qtablewidgetitem11);
QTableWidgetItem *__qtablewidgetitem12 = new QTableWidgetItem();
__qtablewidgetitem12->setFont(font4);
tableWidget->setVerticalHeaderItem(7, __qtablewidgetitem12);
QTableWidgetItem *__qtablewidgetitem13 = new QTableWidgetItem();
__qtablewidgetitem13->setFont(font4);
tableWidget->setVerticalHeaderItem(8, __qtablewidgetitem13);
QTableWidgetItem *__qtablewidgetitem14 = new QTableWidgetItem();
__qtablewidgetitem14->setFont(font4);
tableWidget->setVerticalHeaderItem(9, __qtablewidgetitem14);
QTableWidgetItem *__qtablewidgetitem15 = new QTableWidgetItem();
__qtablewidgetitem15->setFont(font4);
tableWidget->setVerticalHeaderItem(10, __qtablewidgetitem15);
QTableWidgetItem *__qtablewidgetitem16 = new QTableWidgetItem();
__qtablewidgetitem16->setFont(font4);
tableWidget->setVerticalHeaderItem(11, __qtablewidgetitem16);
QTableWidgetItem *__qtablewidgetitem17 = new QTableWidgetItem();
__qtablewidgetitem17->setFont(font4);
tableWidget->setVerticalHeaderItem(12, __qtablewidgetitem17);
QTableWidgetItem *__qtablewidgetitem18 = new QTableWidgetItem();
__qtablewidgetitem18->setFont(font4);
tableWidget->setVerticalHeaderItem(13, __qtablewidgetitem18);
tableWidget->setObjectName(QStringLiteral("tableWidget"));
tableWidget->setGeometry(QRect(150, 140, 521, 391));
QFont font5;
font5.setPointSize(10);
tableWidget->setFont(font5);
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QStringLiteral("menubar"));
menubar->setGeometry(QRect(0, 0, 800, 21));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QStringLiteral("statusbar"));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
32
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // INVOICEBG6212_H
#ifndef ENDVZ6212_H
#define ENDVZ6212_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
33
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QLabel *label;
QLabel *label_2;
QLabel *label_3;
QMenuBar *menubar;
QStatusBar *statusbar;
34
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QStringLiteral("menubar"));
menubar->setGeometry(QRect(0, 0, 800, 21));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QStringLiteral("statusbar"));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
QT_END_NAMESPACE
#endif // ENDVZ6212_H
35
PROJECT SCREENSHOTS
36
37
38
39
40
Test Procedures and Implementation
Introduction
Testing presents an interesting anomaly for the software engineer. During
earlier software engineering activities, the engineer attempts to build software from
an abstract concept to a tangible product. Now comes testing. The engineer creates
a series of test cases that are intended to “demolish” the software that has been
built. In fact, testing is the one step in the software process that could be viewed
(psychologically, at least) as destructive rather than constructive.
Only that software errors and defects are present. It is important to keep this
(rather gloomy) statement in mind as testing is being conducted.
41
Testing principles
Before applying methods to design effective test cases, a software engineer must
understand the basic principle that guide software testing:
All tests should be traceable to customer requirements
Tests should be planned long before testing begins
80 percent of all errors uncovered during testing will likely be traceable to
20 percent of all program components. The problem, of course, is to isolate these
suspect components and to thoroughly test them.
Testing should being “in the small” and progress toward testing “in the
large”.
Exhaustive testing is not possible
To be most effective an independent third party should conduct testing
A rich variety of test case design methods have evolved for software. These
methods provide the developer with a systematic approach to testing. More
important, methods provide a mechanism that can help to ensure the completeness
of tests and provide the highest likelihood for uncovering errors in software.
Any engineered product (and most other things) can be tested in one of
two ways:
Knowing the specified function that a product has been designed to perform,
tests can be conducted that demonstrate each function is fully operational
While at the same time searching for errors in each function; (2) knowing
the internal
Working of a product, tests can be conducted to ensure that “all gears mesh,”
that is, internal operations are performed according to specifications and all
42
internal components have been adequately exercised. The first test approach is
called black box testing and the second, white-box testing.
Sometimes called glass-box testing is a test case design method that uses the
control structure of the procedural design to derive test cases. Using white-box
testing methods, the software engineer can derive test cases that (1) guarantee that
all independent paths within a module have been exercised at least once, (2)
exercise all logical decisions on their true and false sides, (3) execute all loops at
their boundaries and within their operational bounds, and (4) exercise internal data
structures to ensure their validity.
White-box testing of software is predicated on close examination of procedural
detail. Providing test cases that exercise specific sets of conditions and/or loops
tests logical paths through the software. The “status of the program” may be
examined at various points to determine if the expected or asserted status
corresponds to the actual status. Basis path testing is a white-box testing technique
first proposed by Tom McCabe. The basis path method enables the test case
designer to derive a logical complexity measure of a procedural design and use this
measure as a guide for defining a basis set of execution paths. Test cases derived to
exercise the basis set are guaranteed to execute every statement in the program at
least one time during testing.
In this system, the system was tested for the calculation matters were the
data provided for giving the right output or not. If wrong data was provided then
what it is throwing error or accepting.
43
Black box testing
Properly accepted and output is correctly produced and that the integrity of
external information is maintained. A black-box test examines some fundamental
aspect of a system with a little regard for the internal logical structure of the
software. Black-box testing attempts to find errors in the following categories:
1. Incorrect or missing functions,
2. Interface errors,
3. Errors in data structures or external database access,
4. Behavior or performance errors, and
5. Initialization and termination errors. By applying back-box techniques,
we derive a set of test cases that satisfy the following criteria:
Test cases that reduce, by a count that is greater than one, the number of
additional test cases that must be designed to achieve reasonable testing and
Test cases that tell us something about the presence or absence of classes of
errors, rather than an error associated only with the specific test at hand.
44
White-box testing should not, however, be dismissed as impractical. A
limited number of important logical paths can be selected and exercised. Important
data structures can be probed for validity. The attributes of both black and white
box testing can be combined to provide an approach that validates the software
interface and selectively ensures that the internal workings of the software are
correct.
Black box testing for this system was done to check the internal testing i.e,
the system is working properly in each case or no. What kind of errors are there in
database design.
45
Proposed Enhancements
Future Scope:
The scope of the project includes that what all future enhancements can be done in
this system to make it more feasible to use
Databases for different products range and storage can be provided.
Benefits
Manages Track sales
Manages contacts
Manages accounts
Manages opportunities
Track product issues
Manage issue priorty
46
Conclusion
While developing the system a conscious effort has been made to create and
develop a software package, making use of available tools, techniques and
resources – that would generate a proper System
While making the system, an eye has been kept on making it as user-
friendly, as cost-effective and as flexible as possible. As such one may hope that
the system will be acceptable to any user and will adequately meet his/her needs.
As in case of any system development processes where there are a number
of shortcomings, there have been some shortcomings in the development of this
system also. The project is still under modification.
47
BIBLIOGRAPHY
BOOKS REFERRED
By John Guttag
WEB LINK
https://www.python.org/
https://www.geeksforgeeks.org/python-programming-examples/
48