SE

SE#1.1 Introduction to Software Engineering

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

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

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

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

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.

ზოგადად S 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

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

პროგრამული პროდუქტების ინჟინერია (SE – Software Engineering)

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

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

SE-ს მიხედვით, პროგრამული პროდუქტი არ  წარმოადგენს ცალკე მდგომ კოდს, არამედ ის არის:

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

S სისტემების შექმნის პროცესი

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

  1. Software specification- შემკვეთის და შემსრულებლის ერთობლივი მუშაობით განისაზღვრება სისტემის ფუნქციონალური მახასიათებლები და შესრულების საზღვრები;
  2. Software development – პროდუქტის დიზაინის და კოდის შექმნა;
  3. Software validation- შექმნილი პროდუქტის შედარება შეტანხმებულთან;
  4. 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

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

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კონკრეტული მეთოდოლოგიის შერჩევა დამოკიდებულია კონკრეტული ორგანიზაციის ან პროექტის ხასიათზე. შესაძლებელია მათი კომბინირებაც. აღნიშნული ინსტრუმენტები განხილულია- Software Engineering  Approaches.

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

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

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

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

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

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

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

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

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

S სისტემების შექმნის პროცესის შეფასება –  Successful software systems

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

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

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

softwaresucessrate

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

 

Source : IBM  – (For source data read – Making change work)
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.

წარმატებული განხორციელების მიხედვით S სისტემები, მათი ხასიათის მიხედვით ასე ნაწილდება (წყარო #1):

  • არსებული სისტემის განახლებები – Updates to legacy Sowtware systems – 78%;
  • ახალი სისტემის შექმნა – New Software Systems development – 76%;
  • არსებულ სისტემაში ახალი მოდულის დამატება – Package implementations – 71%;
  • ბიზნეს საჭიროებებზე ორიენტირებული ახალი სისტემები – Data warehouse /business intelligence (DW/BI) – 69%.

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

S პროდუქტების შეფასება

SE – ს მიხედვით შესრულებული S პროდუქტების შეფასება ძირითადად ხდება შემდეგი კრიტერიუმებით:

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

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

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

  • 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

სტატისტიკა SE გლობალური ბაზრის ტენდეციების შეფასებისთვის:

software-revenue-2011-2019

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

  1. Software Engineering by Ian Sommerville – #1, #2, #3;
  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;
Advertisements

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