System Analysis and Design: Overview

Information system

  • A system to process, collect, store and produce result to fulfil business needs
  • Software/application and information system might be used interchangeably but they are not the same entity.
  • Software is a subset of an information system, an information system consists of software, hardware, storage, people components.
  • Information system is built for people’s need to solve problem, opportunity and/or directive
  • Motivation to have an information system

  • The jargon is Initiation in SDLC definition
  • Problem – events that hinders the functionality of an organization.
  • Opportunity – Although there is no problem with the current system, but people have the desire to improve the system
  • Directive – requirements, orders, policies by higher executives, managers, directors or government
  • (personal comment: usually it is really hard to get budget for a new project motivated by opportunity, sometime it was approved but the process was arduous. However if the project was initiated by a directive, approval could be as fast as immediate; (as good as rubber stamping without even looking at the official proposal)initially there could be budget constraint suddenly an influx of budget would be teleported magically!)

    System development life cycle

  • Initiation – The trigger or motivation to build an information system
  • Planning – Outsourcing for people to do the work, seeking quotation from vendors, plan for budget
  • Analysis – Identify the problem, seeking client’s requirement, finding out the stakeholders
  • (In a nutshell analysis sought to understand a system’s requirement to solve the current problem, to fulfil future opportunities, to comply with directives)

  • Design – Based on requirements gathered from Analysis, sought for a solution to piece components together to form a system
  • Construction – To build an information system based on design specification
  • Implementation – Testing the built system, coaching operation stakeholders to work on the new system. System goes live, stakeholders start to use the system.
  • Support – Maintenance, patching softwares of the information system, improve on security, resiliency and performance
  • (Personal comment: AS the information system gets older and more stakeholders use this system, the performance naturally deteriorates, this system will be used until it is end of support by external providers or there is no possibility of improving the resiliency and performance anymore which triggers the cycle from initiation again…)

    Detailed definition of SDLC
    Reference: System Analysis and design in a changing world by John Satzinger, Robert Jackson and Stephen Burd, page 7, Chapter 2 From Beginning to End: An Overview of Systems Analysis and Design.

    Core process

  • Initiation – Identifying the problem and obtain specification
  • (Personal comment: This should be initiation and analysis together)

  • Plan – Plan and monitor the project
  • (Personal comment: Monitor the project should be from start of design until implementation.)

  • Analysis – Discover and understand the details
  • (Personal comment: How do you get the specification when you have not discovered and understood the details?)

  • Design – Design system components
  • Construction – Build, test and integrate the system
  • Implementation – Complete system tests and deploy the solution
  • Advertisements
    Posted in Study notes, System Analysis and Design in a changing world | Tagged | Leave a comment

    [python]Insert a xml block to an existing base xml document

    Took me a while to understand how this Element Tree works.. I have a specific requirement to insert a block of xml into a base xml document, this document will then be encoded in utf-8 and send to the API server.

    import xml.etree.ElementTree as ET
    
    from copy import copy
    
    access_request = []
    with open("config.xml", "r") as file:
        base = file.read()
    
    body = ET.fromstring(base)
    
    ar_field = body.find('.//field')
    
    ar = ET.Element('access_request')
    ET.SubElement(ar, 'sources')
    ET.SubElement(ar, 'destinations')
    ET.SubElement(ar, 'services')
    ET.SubElement(ar, 'action')
    
    for i in range(0, 3):
        access_request.append(copy(ar))
    
    for ar_tag in access_request:
        ar_field.append(ar_tag)
    
    print(ET.tostring(body, encoding='utf-8').decode('utf-8'))
    
    Posted in Python, Scripting | Tagged , , , | Leave a comment

    Must read: REad and write json with python

    This was what i was looking for:

    http://gowrishankarnath.com/read-write-json-python/

    Posted in General stuffs | Leave a comment

    [tufin]Caution on posting xml to tufin securechange

    You need to remember to encode your xml body to utf-8, otherwise the requests module will throw in weird exceptions like this: 2018-05-04 16:53:57,068 ERROR:'NoneType' object is not callable
    2018-05-04 16:54:21,816 ERROR:too many values to unpack (expected 2)
    2018-05-04 17:22:20,238 ERROR:'NoneType' object is not callable
    2018-05-04 17:39:07,737 ERROR:'NoneType' object is not callable
    2018-05-04 17:42:03,475 ERROR:'NoneType' object is not callable
    2018-05-04 17:45:56,628 ERROR:'NoneType' object is not callable

    Do not use prettify() as the xml body, using prettify() method will cause \n to be added on every line, tufin SC will complain about workflow not found or anything not found.

    You need to post like this:

        try:
            response = tufin_sc.post(TUFIN_BASE + TICKET_URI, data=base_content.encode('utf-8'))
            print(response.text)
        except Exception as e:
            logging.error(e)
            exit(1)
    
    Posted in Python, Scripting | Tagged , , | Leave a comment

    [python]Python function passing more than one value

    Reference: https://stackoverflow.com/questions/354883/how-do-you-return-multiple-values-in-python

    I just realize the python function can pass multiple values through dictionary!

    Here’s the code which I tried:

    import sqlite3
    
    
    def connect_db():
        conn = sqlite3.connect("lite.db")
        cur = conn.cursor()
        return {'conn': conn, 'cursor': cur}
    
    
    def create_table(conn):
        conn['cursor'].execute("CREATE TABLE IF NOT EXISTS store (item TEXT, quantity INTEGER, price REAL)")
        conn['conn'].commit()
        conn['conn'].close()
    
    
    def insert(conn, item, quantity, price):
        conn['cursor'].execute("INSERT INTO store VALUES(?,?,?)", (item, quantity, price))
        conn['conn'].commit()
        conn['conn'].close()
    
    
    def view(conn):
        conn['cursor'].execute("SELECT * FROM store")
        rows = conn['cursor'].fetchall()
        conn['conn'].close()
        return rows
    
    
    if __name__ == '__main__':
        print(view(connect_db()))
    
    Posted in Python, Scripting | Tagged , , | Leave a comment

    [python]Simple graphic display of kilogram conversion

    This is a simple graphic user interface for converting kilogram to grams, pounds and ounces.

    from tkinter import *
    
    
    def convert_kg():
        gram_label.set(str(int(user_input_entry.get()) * 1000)+"g")
        pound_label.set(str(float(user_input_entry.get()) * 2.20462)+"pounds")
        ounce_label.set(str(float(user_input_entry.get()) * 35.274)+"ounces")
    
    
    win = Tk()
    
    kg_label = Label(win, text="KG")
    kg_label.grid(row=0, column=0)
    
    user_input_entry = StringVar()
    user_input = Entry(win, textvariable=user_input_entry)
    user_input.grid(row=0, column=1)
    
    convert_button = Button(win, text="Convert", height=1, width=10, command=convert_kg)
    convert_button.grid(row=0, column=2)
    
    gram_label = StringVar()
    gram_text = Label(win, height=1, width=20, textvariable=gram_label)
    gram_text.grid(row=1, column=0)
    
    
    pound_label = StringVar()
    pound_text = Label(win, height=1, width=20, textvariable=pound_label)
    pound_text.grid(row=1, column=1)
    
    ounce_label = StringVar()
    ounce_text = Label(win, height=1, width=20, textvariable=ounce_label)
    ounce_text.grid(row=1, column=2)
    
    win.mainloop()
    
    

    This is how it looks like:
    Screen Shot 2018-05-01 at 10.37.42 PM.png

    Posted in Python, Scripting | Tagged , | Leave a comment

    [postgres]Installing postgres bigsql on MAC

    Here’s the link https://www.openscg.com/bigsql/package-manager.jsp/

    First install pgc as indicated in the link.

    Go to the bigsql folder and type ./pgc list, I am installing a proven version 9.6.8, ./pgc install pg96
    Then install the gui for managing the database which is pgadmin3 ./pgc install pgadmin3. Run the pgadmin3 by doing ./pgc start pgadmin3, prior to launching pgadmin3, start the pg96 ./pgc start pg96, stop the service by using ./pgc stop pg96

    Posted in General stuffs | Tagged | Leave a comment