Panimula sa Software Engineering
Ang software engineering ay isang sangay ng computer science na nagsasangkot ng pagbuo at pagpapanatili ng mga software system. Pinagsasama ng disiplinang ito ang mga prinsipyo mula sa computer science at engineering upang magdisenyo, bumuo, sumubok, at mamahala ng mga software application. Ang layunin ng software engineering ay upang makabuo ng mataas na kalidad na software sa isang cost-effective na paraan.
Pag-unawa sa Software Development Life Cycle (SDLC)
Ang Software Development Life Cycle (SDLC) ay isang balangkas na nagbabalangkas sa mga yugtong kasangkot sa proseso ng pagbuo ng software. Kasama sa mga yugtong ito ang:
- Pagsusuri ng Kinakailangan: Pag-unawa at pagdodokumento kung ano ang kailangang gawin ng software.
- Disenyo: Pagpaplano ng arkitektura at mga bahagi ng software.
- Pagpapatupad: Pagsusulat ng code ayon sa disenyo.
- Pagsubok: Ang pag-verify ng software ay gumagana ayon sa nilalayon.
- Deployment: Ginagawang available ang software para magamit.
- Pagpapanatili: Pag-aayos ng mga isyu at pag-update ng software sa paglipas ng panahon.
Mga Pangunahing Prinsipyo ng Software Engineering
Ang software engineering ay ginagabayan ng ilang pangunahing prinsipyo, kabilang ang:
- Modularity: Paghahati sa software sa mas maliit, mapapamahalaang mga piraso.
- Abstraction: Pinapasimple ang mga kumplikadong realidad sa pamamagitan ng pagmomodelo ng mga bahagi ng software sa mas mataas na antas.
- Encapsulation: Pag-bundle ng data sa mga pamamaraan na gumagana sa data na iyon.
- Pamana: Pagkuha ng mga bagong klase mula sa mga dati nang klase upang i-promote ang muling paggamit ng code.
- Polymorphism: Pagpapahintulot sa mga bagay ng iba't ibang klase na ituring bilang mga bagay ng isang karaniwang super class.
Mga Pattern ng Disenyo ng Software
Ang mga pattern ng disenyo ng software ay pangkalahatan, magagamit muli na mga solusyon sa mga karaniwang problema sa disenyo ng software. Ang ilang mga sikat na pattern ng disenyo ay kinabibilangan ng:
- Singleton Pattern: Tinitiyak na ang isang klase ay mayroon lamang isang instance at nagbibigay ng pandaigdigang punto ng pag-access dito.
- Pattern ng Paraan ng Pabrika: Tinutukoy ang isang interface para sa paglikha ng isang bagay, ngunit hinahayaan ang mga subclass na magpasya kung aling klase ang i-instantiate.
- Observer Pattern: Isang one-to-many na dependency sa pagitan ng mga object upang kapag ang isang object ay nagbago ng estado, lahat ng mga dependent nito ay aabisuhan at awtomatikong na-update.
- Pattern ng Diskarte: Tinutukoy ang isang pamilya ng mga algorithm, isinasama ang bawat isa, at ginagawang mapagpalit ang mga ito.
Agile Software Development
Ang Agile software development ay isang hanay ng mga metodolohiya batay sa umuulit na pag-unlad, kung saan nagbabago ang mga kinakailangan at solusyon sa pamamagitan ng pakikipagtulungan sa pagitan ng mga self-organizing cross-functional team. Ang mga pangunahing halaga ng agile software development ay kinabibilangan ng:
- Mga indibidwal at pakikipag-ugnayan sa mga proseso at tool.
- Gumagamit ng software sa komprehensibong dokumentasyon.
- Pakikipagtulungan ng customer sa negosasyon sa kontrata.
- Pagtugon sa pagbabago sa pagsunod sa isang plano.
Quality Assurance sa Software Engineering
Kasama sa Quality Assurance (QA) ang sistematikong pagsubaybay at pagsusuri ng iba't ibang aspeto ng isang proyekto, serbisyo, o pasilidad upang matiyak na ang mga pamantayan ng kalidad ay natutugunan. Sa software engineering, nakatuon ang QA sa pagpapabuti ng proseso ng pagbuo ng software at pagpigil sa mga depekto sa produkto ng software. Kasama sa mga kasanayan sa QA ang:
- Pagsusuri ng Code: Ang sistematikong pagsusuri ng source code ng computer na nilalayon upang mahanap at ayusin ang mga pagkakamaling hindi napapansin sa paunang yugto ng pag-unlad, pagpapabuti ng parehong pangkalahatang kalidad ng software at mga kasanayan ng mga developer.
- Patuloy na Pagsasama at Paghahatid (CI/CD): Isang paraan upang madalas na maghatid ng mga app sa mga customer sa pamamagitan ng pagpapakilala ng automation sa mga yugto ng pag-develop ng app. Ang mga pangunahing konsepto na iniuugnay sa CI/CD ay ang tuluy-tuloy na pagsasama, tuluy-tuloy na paghahatid, at tuluy-tuloy na pag-deploy.
- Awtomatikong Pagsubok: Paggamit ng mga tool sa software upang magpatakbo ng mga pagsubok sa software na binuo upang matiyak na kumikilos ito tulad ng inaasahan.
Mga Sukatan at Pagsukat ng Software
Ang mga sukatan ng software ay mga pamantayan ng pagsukat na nagbibigay ng dami ng batayan para sa pagbuo at pagpapatunay ng mga modelo ng mga proseso ng software, produkto, at serbisyo. Kasama sa mga karaniwang sukatan ng software ang:
- Code Complexity: Sinusukat kung gaano kahirap maunawaan ang istraktura ng isang programa. Kasama sa mga halimbawa ang Cyclomatic Complexity, na maaaring tukuyin para sa isang module na may \(n\) binary na mga desisyon bilang \(M = n + 1\) .
- Lines of Code (LOC): Sinusukat ang laki ng isang software program sa pamamagitan ng pagbibilang ng mga linya ng text sa source code ng program.
- Function Points (FP): Sinusukat ang functionality na inihatid sa user, batay sa bilang at pagiging kumplikado ng mga input, output, query, file, at interface file.
Ang software engineering ay isang kumplikado, multifaceted na disiplina na sumasaklaw sa conception, design, development, testing, at maintenance ng software. Ang larangan ay hindi lamang nangangailangan ng mga teknikal na kasanayan at kaalaman sa mga programming language at mga pamamaraan ng pagbuo ng software kundi pati na rin ng pag-unawa sa mga pattern ng disenyo ng software, katiyakan sa kalidad, pakikipagtulungan ng koponan, at pamamahala ng proyekto. Ang kakayahang epektibong ilapat ang mga konsepto at kasanayang ito sa huli ay tumutukoy sa tagumpay ng mga proyekto ng software.