SE

SE#1.1 Introduction to Software Engineering

Reference: Sommerville, Software Engineering, 10 ed., Chapter 1

თანამედროვე ეპოქის ძირითად მამოძრავებელ ძალას წარმოადგენენ ინფორმაციული სიტემები. ქვეყნების ეკონომიკური განვითარება დამოკიდებულია, მაღალი ტექნოლოგიების მიღწევების შესაძლებლობების შემჩნევაზე და მათ ეფექტურ,  დროულ გამოყენებაზე. ინფორმაციული სიტემეის  (IT – Information Technology Systems) განვითარებას განსაზღვრავს, მათი ფუნქციონირების მართვის  საშუალება, რომელიც იქმნება ადამიანის მიერ და ეწოდება ინფორმაციული სისტემის მართვის პროგრამული უზრუნველყოფა (S- Software).

Software (S) – პროგრამული უზრუნველყოფა

პროგრამული უზრუნველყოფა გამოიყენება, ციფრული სამყაროს ფართო დიაპაზონში: ბიზნესი, ინჟინერია, მეცნიერება, სამხედრო მრეწველობა. მარტივ თუ კომპლექსურ, პერსონალურ თუ საზოგადო, კორპორატიულ თუ ერთ მომხმარებლიან, სივრცეში გავრცობილ თუ ავტომატურ/ რეალურ დროში,  რეაგირების დროის მიხედვით ფუნქციონირებად კრიტიკულ სისტემებში.

პროგრამული უზრუნველყოფა ასე შეგვიძლია განვმარტოთ:

  1. წარმოადგენს კომპიუტერული კოდების ერთობლიობას, რომელიც ასრულებს წინასწარ დადგენილ  ფუნქციებს, განსაზღვრული  შემავალი და გამომავალი მონაცემების წარმოდგენის  კრიტერიუმებით;
  2. პროგრამული კიდების საშუალების წარმოებს, სისტემაში არსებული მონაცემებზე მანიპულაციები (შექმნა, შეცვლა, წაშლა …);
  3. გააჩნია დოკუმენტაცია რომელიც აღწერს, სისტემაში არსებული ბიზნეს პროცესებს, სისტემის პროდუქტის არქიტექურას და მისი მოხმარების წესებს.
  1. Software consists of computer programs that when executed provide desired function and performance.
  2. It includes data structures that enable the programs to adequately manipulate information.
  3. It has a documentation that describes the operation and use of the programs.

ზოგადად პროგრამული უზრუნველყოფა 2 სახისაა:

  1. Generic software – სტანდარტული პროგრამული უზრუნველყოფა – მწარმოებლისგან შექმნილია ზოგადი, მის მიერ შემუშავებული მიზნებისთვის. მომხმარებლები პროდუქტით სარგებლობენ არსებული შესაძლებლობების ფარგლებში.  მომხმარებლის მიერ ახალი საჭირობის დადგენის შემთხვევაში, მისი მოდიფიცრება ძალიან რთულია და ზოგ შემთხვევაში შეუძლებელი.
  2.  Customized software –  არასტანდარტული პროგრამული უზრუნველყოფა – მწარმოებლისგან შექმნილია კონკრეტული მომხმარებლის ბიზნეს ამოცანის დასაკმაყოფილებლად.  მომხმარებლის მიერ ახალი საჭირობის დადდგენის შემთხვევაში,   მარტივად შესაძლებელია მისი მოდიფიცრება.

software applications can be indicated by the following software areas: system software, real-time software, business software, engineering and scientific software, embedded software, personal computer software, web-based software and artificial intelligence software. #1

ინფორაციულ სისტემების ფუნქციონირებაში, პროგრამული უზრუნველყოფის როლის ზრდასთან ერთად, იზრდება მათი შექმნის პროცესის მიმართ  მოთხოვნები. ამ საკითხის ეფექტურად წარმართვას ემსახურება, პროგრამული უზრუნველყოფის შექმნის სისტემატიზირებული პროცესი –   პროგრამული უზრუნველყოფის ინჟინერია (SE – Software Engineering),  რომელიც ცალსახად არ ნიშნავს პროგრამული უზრუნველყოფის კოდების შექმნას.

პროგრამული უზრუნველყოფის ინჟინერია (SE – Software Engineering)

Software Enginering –   პროგრამული უზრუნველყოფის ინჟინერია, არის დისციპლინა რომელიც კონცენტრირებულია პროგრამული უზრუნველყოფის წარმოების პროცესებზე, ინფორმაციული სისტემის ფუნქციონირების მოთხოვნების ადრეულ ეტაპზე დადგენიდან, პროგრამული უზრუნველყოფის დანერგვის შემდგომ მომსახურეობამდე. ინჟინერიის წესების თანახმად, შეიმუშავებს და იყენებს კონრეტულ, სტანდარტიზირებულ მეთოდებს და ინსტრუმენტებს, პროგრამული უზრუნველყოფის  შექმნის პროცესის გამარტივების, პროდუქტის შექმნის და ოპერირების თანმდევი ხარჯების, შესრულების დროის შემცირების და საბოლოო პროდუქტის ხარისხის (Software Quality Management) უზრუნველყოფის მიზნით.თანამედროვე გამოწვევებზე პროაქტიული რეაგირებისთვის, აღნიშნულ პროცესში მნიშვნელოვანი ადგილი ეთმობა რისკების მართვის (Risk Management) და  ინფორმაციული უსაფრთხოების (Information Security) საკითხებს.

პროგრამული უზრუნველყოფის ინჟინერიიის  გამოყენება, გრძელვადიან პესპექტივაში, საშუალებას იძლევა მიღწეული იქნეს აღნიშნული მიზნები, რადგან ხარჯების ძირითადი წილი მოდის, შექმნილი პროდუქტების დანერგვის შემდგომ ცვლილებებზე, რომლებიც აუცილებელი ხდება იმ შემთხვევებში სადაც პროგრამული უზრუნველყოფის ინჟინერიიის  გამოყენება გამოყენება არ მოხდა.

პროგრამული უზრუნველყოფის ინჟინერიიის მიხედვით, პროგრამული უზრუნველყოფა არ  წარმოადგენს ცალკე მდგომ კოდს, არამედ ის არის:

  1. წინასწარ დადგენილი მიზნების მისაღწევად, პროგრამული კოდების ინტეგრირებული  ერთობლიობა;
  2. სისტემის დოკუმენტაცია რომელიც აღწერს პროგრამული უზრუნველყოფის არქიტექტურას;
  3. მომხმარებლის დოკუმენტაცია, რომელიც აღწერს როგორ ვისარგებლოთ სისტემით;
  4. პროგრამული უზრუნველყოფის განახლების ინსტრუმენტები და მათი აღწერა.

პროგრამული უზრუნველყოფის სისტემების შექმნის პროცესი

SE მეთოდოლოგიით შექმნილი პროგრამული უზრუნველყოფის შექმნის პროცესები და მათი თანმიმდევრობა შესაძლებელია განსხვავებული იყოს, მაგრამ შეიცავენ 4 საერთო აქტივობას:

  1. Software specification- პროგრამული უზრუნველყოფის  სპეციფიკაცია – შემკვეთის და შემსრულებლის ერთობლივი მუშაობით განისაზღვრება, სისტემის ფუნქციონალური მახასიათებლები და შესრულების საზღვრები (Software Requirements);
  2. Software development – პროგრამული უზრუნველყოფის დიზაინის და  პროგრამული კოდის შექმნა;
  3. Software validation- შექმნილი პროგრამული უზრუნველყოფის შედარება, შეთანხმებულ სპეციფიკაციებთან;
  4. Software evolution – შექმნილი პროგრამული უზრუნველყოფის შესაბამისობაში მოყვანა, შემკვეთის დანერგვის შემდგომ გამოვლენილ ახალ ან მოდიფიცირებულ მოთხოვნებთან.(Software Evolution).

Any software process includes four types of activities:

  • Software specification, where customers and engineers define the software that is to be produced and the constraints on its operation.
  • Software development, where the software is designed and programmed.
  • Software validation, where the software is checked to ensure that it is what the customer requires.
  • Software evolution, where the software is modified to reflect changing customer and market requirements. #1

პროგრამული უზრუნველყოფის შექმნის  მეთოდები –  Software Engineering  Approaches

აქ მოკლედ ავღნიშნავთ, რომ პროგნოზირებადი შედეგების მიღებისთვის, პროგრამული უზრუნველყოფაის შექმნის პროცესში, გამოიყენება სამი პრინციპულად განსხვავებული და მნიშვნელობით თანაბარუფლებიანი მეთოდოლოგია: The waterfall approach, Iterative development, Component-based software engineering რომლებსაც განვიხილავთ სპეციალურად მიძღვნილ  სტატიაში (Waterfall and Agile Software Development)

Most software process models are based on one of the next general models of software development:

  1. The waterfall approach. The waterfall model is a sequential design process in which progress is seen as flowing steadily downwards through the phases of software development such as requirements specification, software analysis and design, implementation, testing, etc. Development only goes on to the following phase when the preceding phase is finished, reviewed and verified.
  2. Iterative development. The basic idea of this method is to develop a system iteratively through repeated cycles in smaller portions at a time. At each iteration, design modifications are made and new functional capabilities are added. This approach interleaves the activities of the specification, development, and validation. An initial system is rapidly developed from very abstract specifications. The goal for this initial implementation is to create a product to which the user can react. The initial system is then refined with customer input to produce a system that satisfies the customer’s needs.
  3. Component-based software engineering. It is a reuse-based approach of software development. This technique assumes that parts of the system already exist. The system development process focuses on integrating these parts into a system. #

3_software_development

სტატიაში აღწერილი ინსტრუმენტებიდან, კონკრეტული მეთოდოლოგიის შერჩევა ან მათი კომბინირება, დამოკიდებულია  პროექტის თავისებურებებზე  და მის განმახორციელებელი კონკრეტული ორგანიზაციის მატერიალური და არამატერიალური რესურსების კონფიგურაციაზე.

პროგრამული უზრუნველყოფის (S -Software) შექმნის პროექტების  თავისებურებები

რეალურ სამყაროში Software-ს  ქმნიან როგორც კერძო ინდივიდუალები ასევე მსხვილი კომპანიები.  თუ წარმოვიდგენთ ასეთი სუბიექტების სიმრავლეს გლობალურად, ცხადი გახდება რამდენად განსხვავებული შეიძლება იყოს მათი პროგრამული კოდი და მისი შექმნის ინსტრუმენტები. აღნიშნული განსხვავება შესაძლებელია მისაღები იყოს მცირე კომპანიებისთვის, მაგრამ აბსოლიტურად მაღალი რისკების წყაროა კორპორატიული და სამთავრობო პროექტებისთვის, რადგან პროგრამული უზრუნველყოფის ინჟინერიიის მეთოდოლოგიის გარეშე შექმნილი პროგრამული უზრუნველყოფა, მისი შექმნის დროს არსტანდარტული პროცესების გამოყენების და დოკუმენტაციის არარსებობის გამო, სისტემის შემდეგი მომსახურეობის და განვითარებისთვის, დიდ ორგანიზაციულ და ფინანსურ ხარჯებს მოითხოვს.

როგორც ზემოთ ითქვა, პროგრამული პროდუტების ინჟინერიის (Software Engineering) საგანი  სწორედ პროფესიონალური პროგრამული უზრუნველყოფის შექმნაა. იგი შეიცავს ინსტრუმენტებს რომელიც უზრუნველყოფს პროგრამული უზრუნველყოფის სპეციფიკაციებს, დიზაინს, არქიტექტურას, დანერგვას და დანერგვის შემდეგ მომსახურეობას. როგორც წესი აღნიშნული ინსტრუმენტების სრული მაშტაბით გათვალისწინება იშვიათად ხდება კერძო შემთხვევებში.

თავის მხრივ, დიდი, კომპლექსური პროგრამული პროდუქტების შექმნის პროექტები ხასიათდებიან შემდეგნაირად:

  1. საჭიროებს დიდ მატერიალურ, ფინანსურ და ადამიანურ რესურსებს;
  2. შესასრულებელი ამოცანების აქვთ მაღალი ფასი;
  3. აქვთ შესრულების  დიდი პერიოდი;
  4. პროექტის მიმდინარეობის ხანგრძლივი პერიოდი, ხშირად იწვევს სისტემის დამკვეთის და მიმხმარებლების მოთხოვნების ცვალებებობას, ოპერირების გარემოს სწრაფი ცვლილების გამო;
  5. პროგრამული უზრუნველყოფის კომპლექსურობა იწვევს, პროექტის წარუმატებლობის, შესრულებული სამუშაოს დამკვეთის მიერ მიღების, საბოლოო პროდუქტის წარმადობის, სისტემის დანერგვის შემდეგი მომსახურეობის მარალი რისკებს.

აღნიშნული პრობლემების გადასაწყვეტად გამოიყენება პროგრამული უზრუნველყოფის ინჟინერიის მეთოდები. მარტივ, არაკორპორატიულ სისტემებში, რომელშიც სისტემის ავტორი და მომხმარებელი ერთიდაიგივე პიროვნებაა აღნიშნული საკითხები ნაკლებად აქტუალურია მაგრამ  რადიკალურად იზრდება მის გავლენა კომპანიის განვითარების კვალდაკვალ.

hardwaresoftware

მნიშვნელოვანია, სისტემის შექმნის დროს განვიხილოთ სისტემის როგორც შექმნის ასევე მისი მომსახურეობის და განვითარების ხარჯები.

ამ კონტექსტში უნდა განვიხილოთ  რეალურ დროში მოქმედი ციფრული  სიტემები (Real-Time Software systems) –  რომელთა ფუნქციონირების შედეგებზე, დროის ზუსტად დადგენილ საზღვრებში, დამოკიდებულია მთლიანად სისტემის ფუნქციონირება. სისტემა შეიძლება სწორად ფუნქციონირებდეს, მაგრამ სხვადასხვა მიზეზით დროის პარამეტრების დარღვევამ (დაგვიანებული რეაქცია, მონაცემების დადგენილზე ნელა ან სწრაფად დამუშავება და ა.შ …)  შესაძლებელია გამოიწვიოს მთლიანი სისტემის კატასტროფა.

SЕ – ს პრინციპების დაცვის მნიშვნელობა შეიძლება წარმოვიდგინოთ,  თუ განვიხილავთ მატარებლების ან ავიახომალდების მართვის სისტემის შექმნის ამოცანას. ამ შემთხვევაში შეცდომების  დაშვების რისკი მაღალია და შესაბამისაც მოსალოდნელი შედეგებიც კატასტროფული. რომელ მიდგომას გამოვიყენებთ, ცალკეული დამოუკიდებელ სპეციალისტების მიერ შექმნილს თუ SЕ – ს პრინციპების დაცვით შექმნილს ? ცხადია ამ უკანასკნელში შეცდომების დაშვების რისკი მაინც არსებობს მაგრამ, ტექნიკური დავალების ანალიზის ჩატარების შედეგად მისი მოხდენა მინიმიზირებულია, რადგან ამ შემთხვევაში წინასწარ ხდება შესაძლო სცენარების (Use Case) დამუშავება, ასევე მომდინარეობს სისტემის ექსპლოატაციის მონიტორინგი და მისი შედეგების მიხედვით ახალი შესაძლებლობების რეალიზაციის დაგეგმვა და გამოვლენილი ხარვეზების შესწორება.

პროგრამული უზრუნველყოფის წარმატების დადგენა –  Successful software systems

პეოგრამული უზრუნველყოფის შექმნის პროექტების შეფასებისთვის გამოიყენება შემდეგი კრიტერიუმები:

  1. შექმნილია დადგენილ დროში;
  2. შექმნილია გამოყოფილ ბიუჯეტში;
  3. შეესაბამება შემკვეთის და შემსრულებლის მიერ წინასწარ შეთანხმებულ სპეციფიკაციებს.

პრაქტიკაში, ამ კრიტერიუმების მიხედვით შემდეგი სტატისტიკაა:

softwaresucessrate

პროგრამული უზრუნველყოფის შექმნის წარმატება დამოკიდებულია, მისი შექმნის და დანერგვის ოპერირების გარემოს, ორგანიზაციის ორგანიზაცული კულტურის, ადამიანურ თუ კონკრეტული პროექტის უნიალურ ფაქტორებზე.

მნიშვნელოვანია ასევე, პროგრამული პროდუქტის შექმნის დროს,  პროექტში ჩართული მხარეების გამოცდილება, რადგან უკვე არსებულს გამოცდილების გათვალისწინებით შესაძლებელია აცილებული იქნეს წინა დანერგვებში გამოვლენილი ხარვეზები, გამოყენებული იქნეს უკვე შექმნილი ინსტრუმენტები, პროგრამული მოდულები, დოკუმენტაცია და გამოცდილი ადამიანი რესურსები.

Source: IBM  – (For source data read – Making change work#1
Type of survey: Survey of 1,500 change management executives
IBM survey in the success/failure rates of “change” projects finds;

  • Only 40% of projects met schedule, budget and quality goals;
  • Best organizations are 10 times more successful than worst organizations;
  • Biggest barriers to success listed as people factors: Changing mindsets and attitudes – 58%. Corporate culture – 49%.  Lack of senior management support – 32%;
  • Underestimation of complexity listed as a factor in 35% of projects.

ზოგადად შეგვიძლი ვთქვათ შემდეგი: თუ ადგილი აქვს ერთხელ უკვე დანერგილი სისტემის ახალ გარემოში შემუშავებას და დანერგვას, პროექტის წარმატების ალბათობა მაღალი.  მეორე მხრივ დაბალია ახალი ინოვაციური პროდუქტების შექმნის ალბათობა, მასზე მომუშავე სამუშაო ჯგუფის ნცირე გამოცდილების გამო.  წარმატების ხარისხზე მოქმედებს სისტემის დანერგვის სპეციფიური ადამიანური თუ გარემო ფაქტორები.

პროგრამული უზრუნველყოფის შეფასება

პროგრამული უზრუნველყოფის ინჟინერიის მიხედვით,  პროგრამული პროდუქტების შეფასება ხდება შემდეგი კრიტერიუმებით:

  • ადაპტირებადობა – (Maintainability) – შესაძლებელი უნდა იყოს პროგრამული უზრუნველყოფის მისი მომხმარებლის  ახალ საჭიროებებთან შესაბამისობაში მოყვანა;
  • მდგრადობა და უსაფრთხოება – (Dependability and security) – პროგრამული უზრუნველყოფის  ცალკეული მოდულის დაზიანებამ ან შეჩერებამ  არ უნდა გამოიწვიოს, სხვა სისტემების ფუნქციონირების შეფერხება ან უსაფრთხოების შემცირება;
  • ეფექტურობა – (Efficiency) – პროგრამული უზრუნველყოფა ოპტიმალურად უნდა იყენებდეს ინფორმაციულ რესურსებს , არ ახდენდეს მათ უმიზნო ხარჯვას;
  • შესაბამისობა – (Acceptability) – პროგრამული უზრუნველყოფა შესაბამისია, სისტემის დიზაინში (System Design) გათვალისწინებულ მომხმარებლის მოთხოვნებთან.

Essential attributes of good software (#1)

  • Maintainability – Software should be written in such a way so that it can evolve to meet the changing needs of customers. This is a critical attribute because software change is an inevitable requirement of a changing business environment.
  • Dependability and security – Software dependability includes a range of characteristics including reliability, security, and safety. Dependable software should not cause physical or economic damage in the event of system failure. Malicious users should not be able to access or damage the system.
  • Efficiency – Software should not make wasteful use of system resources such as memory and processor cycles. Efficiency, therefore, includes responsiveness, processing time, memory utilization, etc.
  • Acceptability – Software must be acceptable to the type of users for which it is designed. This means that it must be understandable, usable and compatible with other systems that they use.

პროგრამული ინჟინერიის ეთიკის კოდექსი –  Software engineering ethics

მნიშვნელოვანია ვიცოდეთ, რომ პროგრამული ინჟინერიის ეთიკის კოდექსის თანახმად, პროცესში ჩართულმა მხარეები უნდა აღიარებდნენ შემდეგ წესებს:

  • IT რესურსების მიზნობრივად გამოყენება – (Computer misuse) არ გამოიყენონ სხვა მიზნებისთვის, პროცესისთვის გამოყოფილი საინფორმაციო რესურსები.
  • ინტელექტუალური საკუთრება –  (Intellectual property rights) იუხედავად ოფიციალურად არსებული რეგულაცის არსებობისა, დაიცვან ინტელექტუალური საკუთრების დაცვის ზოგადი წესები;
  • კომპეტენცია – (Competence) – ჩართულმა მხარეებმა ცხადად უნდა აღიარონ საკუთარი კომპეტენცია, შესასრულებელ სამუშაოსთან მიმართებაში;
  • კონფიდენციალუობა – (Confidentiality) – მიუხედავად ოფიციალური შეთანხმების არსებობისა, დაიცვან მოპოვებული ინფორმაციის კონფიდენციალობა;

Some issues of professional responsibility:

  • Confidentiality – You should normally respect the confidentiality of your employers or clients irrespective of whether or not a formal confidentiality agreement has been signed.
  • Competence – You should not misrepresent your level of competence. You should not knowingly accept work that is outside your competence.
  • Intellectual property rights – You should be aware of local laws governing the use of intellectual property such as patents and copyright. You should be careful to ensure that the intellectual property of employers and clients is protected.
  • Computer misuse – You should not use your technical skills to misuse other people’s computers. Computer misuse ranges from relatively trivial (game playing on an employer’s machine, say) to extremely serious (dissemination of viruses or other malware). #1

Software Engineering Code of Ethics and Professional Practice

პროგრამული უზრუნველყოფის  გლობალური ბაზრის ტენდეციები:

software-revenue-2011-2019

საკითხავი მასალა:

  1. Software Engineering by Ian Sommerville – #1, #2, #3; #4
  2. Software Engineering by Prof.N.L. Sarda – #1#2#3;
  3. Introduction to the SE  by Dr. Stan Kurkovsky and Zsolt Dr. Ulbert – #1,  #2;
  4. Software Product Management Specialization (University of ALBERTA – Via www.Coursera.org) – #1, #2;
  5. Hardware vs. Software – #1;
  6. Use Case Examples – #1, #2;
  7. Real-Time Software systems – #1;

კითხვები:

  1. რას წარმოადგენს ინფორმაციული სისტემის მართვის პროგრამული უზრუნველყოფა (Software)?
  2. Generic software – სტანდარტული პროგრამული უზრუნველყოფის შემთხვევაში, რატომ არის მომხმარებლის მიერ ახალი საჭირობის დადგენის შემთხვევაში, მისი მოდიფიცრება ძალიან რთულია და ზოგ შემთხვევასი შეუძლებელი ? მოიყვანეთ მაგალითი.
  3. არასტანდარტული პროგრამული უზრუნველყოფის შემთხვევაში, მომხმარებლის მიერ ახალი საჭირობის დადგენის შემთხვევაში,   მარტივად შესაძლებელია მისი მოდიფიცრება? ოიყვანეთ მაგალითი.
  4. რას წარმოადგენს  პროგრამული პროდუქტების შექმნის ინჟინერია ?
  5. რით განსხვავდება  პროგრამული პროდუქტების შექმნის ინჟინერია, პროგრამული უზრუნველყოფისგან ?
  6. რატომ მოითხოვს პროგრამული უზრუნველყოფის ინჟინერიიის მეთოდოლოგიის გარეშე შექმნილი პროგრამული უზრუნველყოფა, სისტემის შემდეგი მომსახურეობის და განვითარებისთვისთვის, დიდ ორგანიზაციულ და ფინანსურ ხარჯებს? მოიყვანეთ მაგალითი.
  7. რატომ იწვევს პროექტის მიმდინარეობის ხანგრძლივი პერიოდი, სისტემის დამკვეთის და მიმხმარებლების მოთხოვნების ცვალებებს ? მოიყვანეთ მაგალითი.
  8. რა საფრთხეები შეიძლება გამოიწვიოს, პროგრამული უზრუნველყოფის კომპლექსურობამ , მისი შექმნის და დანერგვის შემდგომი მომსახურეობის თვალსაზრისით?
  9. რატომ არის მნიშვნელოვანი პროგრამული ინჯინერიის მეთოდების დანერგვა,  კომპანიის  მდგრადი განვითარების ხელშეწყობისთვის ?  მოიყვანეთ მაგალითი.
  10. რით განსხვავდება ერთმანეთისგან ახალი ინოვაციური პროექტის განხორციელება და უკვე  განხორციელებული პროექტის ხელმეორედ დანერგვა ? მოიყვანეთ მაგალითები.
Advertisements

One thought on “SE#1.1 Introduction to Software Engineering

  1. Pingback: SE#10.1 System Dependability | IN@TIMES

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s