• 2024. 3. 7.

    by. 플로픽

    [관련글]

    2024.03.06 - [컴퓨터공학] - 컴퓨터공학이란? 컴퓨터공학의 정의, 역사, 주요 연구 분야, 사회적 역할, 미래

    소프트웨어공학의 정의

     

     

    소프트웨어공학은 소프트웨어의 개발과 운영, 유지보수, 소멸에 대한 체계적인 접근 방법을 연구하는 컴퓨터공학의 하위분야 학문이다. 소프트웨어 공학자는 프로그래머와 동의어로 사용되는 오해가 있지만, 소프트웨어 엔지니어란 엔지니어링 설계 프로세스를 적용하여 소프트웨어의 평가, 설계, 테스트, 개발, 유지보수하는 사람을 말합니다. 설계보다 소프트웨어 구현을 더 중점을 두는 경우가 많습니다. 소프트웨어의 생명주기와 개발 프로세스를 연구한다. 소프트웨어 설계, 개발, 운영에 관한 전체 그림을 이해해야 한다. 소프트웨어 개발 프로젝트를 관리한다. 소프트웨어 개발 프로젝트에서 사용자의 요구를 파악, 다양하게 소프트웨어를 모형화하거나 기본적인 소프트웨어 설계 원리, 개념을 이해한다. 품질을 높이기 위한 개발 방법, 검증, 평가 등을 연구한다. 소프트웨어 개발에 대한 기술적, 관리적 이슈를 다룬다.

     

    소프트웨어공학의 역사

     

    소프트웨어공학의 역사는 컴퓨터공학이 등장한 뒤 초기 단계부터 시작되었다. 1940년대~1950년대 소프트웨어공학이 등장한 시기이다. 소프트웨어공학의 역사는 1940년대 전자 컴퓨터가 등장하면서 대두되었다. 컴퓨터공학 역사의 초반에는 ENIAC와 UNIVAC와 같은 초기 컴퓨터의 등장으로 하드웨어를 중심이 되었다. 그 후 폰 노이만 구조가 개발되면서 하드웨어와 소프트웨어가 구분되고, 각각의 개발 필요성이 요구되었다. 1950년대~1960년대 소프트웨어 개념이 정립되었다. 컴퓨터 소프트웨어에 대한 개념은 1950년대와 1960년대에 정립되었습니다. 이 시기에 프로그래밍 언어인 포트란(FORTRAN)과 COBOL의 등장으로 추상화란 개념이 시작되었다. 하드웨어를 관리하는 소프트웨어인 운영체제가 등장했다. 1960년대에는 본격적으로 소프트웨어공학이 등장했다. 소프트웨어를 개발하는 게 더욱 복잡해지면서 이를 효율적으로 개발할 수 있는 학문이 연구되면서 소프트웨어공학이라는 개념이 등장했습니다. 소프트웨어공학이란 용어는 마거릿 해밀턴이 아폴로라는 프로그램을 통해 홍보하면서 소프트웨어도 하드웨어처럼 구조적으로 개발되어야 한다는 의미로 처음 사용되었다. 1970년대에 이르러 소프트웨어 공학은 소프트웨어 개발 방법론이 개발되면서 크게 발전한다. 1970년대 소프트웨어의 발전과 함께 컴퓨터 하드웨어의 발전으로 컴퓨터가 대중화되면서 소프트웨어공학이 확대된다. 1970년대 중반 마이크로컴퓨터가 등장하고 일반 사람들도 소프트웨어를 개발하는 것이 가능해졌다. 그로 인해 개인용 컴퓨터, 마이크로소프트 윈도우 등이 등장한다. 1970년대 말과 1980년대 초 C++, 스몰토크, 오브젝티브-C 등 새로운 객체 지향 프로그래밍 언어가 나타났다. 1980년대에는 객체지향 프로그래밍 등의 새로운 개념과 방법론이 소프트웨어공학에 도입되었습니다. 또한, 2000년대에는 Agile과 같은 비즈니스 환경에 맞는 새로운 개발 방법이 제안되었다. 현재 클라우드 컴퓨팅, 빅데이터, 머신러닝, 딥러닝 등과 같이 컴퓨터공학의 확대와 더불어 소프트웨어공학의 중요성이 더욱 증가하였다. 소프트웨어공학의 역사는 컴퓨터 기술과 함께 끊임없이 발전하고 있다. DevOps, CI/CD 등의 신규 개발 방법론이 적용되며 소프트웨어 개발은 더욱 빠르고 유연한 방향으로 진화하고 있다.

     

    소프트웨어공학의 기본 원리

     

    소프트웨어 공학은 소프트웨어 시스템을 효과적이고 체계적으로 개발, 운영하기 위한 기술의 집합이다. 소프트웨어 요구사항 분석, 설계, 개발, 검증, 유지보수, 형상 관리, 공학관리가 기본 원리이다. 우선 소프트웨어 개발의 시작은 요구사항 분석이다. 사용자의 요구사항, 시스템의 요구 사항을 분석, 정리하고 체계화하여 이후 개발 단계에 대한 가이드를 제공한다. 설계 단계에서는 시스템의 구성요소와 구조를 선택한다. 추상화, 모듈화, 상속 등의 기술을 이용해서 효율적으로 시스템을 구현한다. 그로 인해 이후 발생할 수 있는 변화에 대응할 수 있는 유연성을 제공한다. 개발 단계에서는 실제로 시스템을 구현한다. 이때 코드의 가독성이나 재사용성, 확장성 등을 고려하여 소프트웨어의 품질을 향상하는 것이 중요하다. 검증 단계에서는 요구사항이 잘 반영되었는지 확인하고 소프트웨어 개발의 목표에 도달했는지 확인한다. 이때 오류를 찾기 위해 다양한 방법과 도구를 활용하여 테스트한다. 이후 유지 보수는 소프트웨어 수명 주기에 큰 영향을 미치는 단계이다. 사용 중 발생한 시스템 문제를 해결하고 새로운 요구사항에 따른 시스템 업데이트가 이루어진다. 시스템을 지속해서 관리한다. 이러한 기본 원리를 통해 효율적이고 품질이 뛰어난 소프트웨어 시스템을 개발하고 유지한다.

     

    소프트웨어공학의 목표

    컴퓨터공학 - 소프트웨어공학

     

    소프트웨어공학의 목표는 효율적, 효과적인 방식으로 소프트웨어를 개발하고 유지보수하는 것에 있다. 안정적이며 고품질의 소프트웨어 시스템을 개발하기 위해 노력한다. 소프트웨어공학의 목표는 품질 향상, 품질 보증, 비용 및 일정 관리, 요구사항 충족, 프로세스 향상, 생명주기 관리 등이 있다. 소프트웨어의 기능, 성능, 신뢰성, 사용자 경험 등 다양한 측면에서 소프트웨어 시스템은 신뢰할 수 있고 기능적으로 동작하는 소프트웨어의 품질은 사용자의 만족도에 크게 영향을 미친다. 소프트웨어 공학자는 품질을 보증하고 지속해서 향상하기 위해 노력한다. 프로젝트 진행 시 예산과 일정을 효율적으로 관리해야 프로젝트에 성공할 수 있다. 자원을 효율적으로 활용하고 일정을 관리하여 비용을 최소화한다. 변화에 유연하게 대응하고, 소프트웨어 개발에 성공하기 위해서는 요구사항을 정확하게 파악하는 게 중요하다. 요구사항을 정확하게 이해하여 최종적으로 기대치를 충족하는 소프트웨어를 완성한다. 소프트웨어 개발 프로세스를 프로세스의 효율성과 효과성을 개선하며, 지속해서 향상해 최신의 개발 방법과 도구를 적용하여 개발 생산성을 증가시킨다. 적절한 유지보수 전략을 수립하고, 지속적인 관리와 유지보수가 변경 사항 및 새로운 요구사항에 대응하여 소프트웨어의 수명 주기 동안 필요하다. 이러한 목표들을 달성하기 위해 노력해서 함으로써 소프트웨어공학은 안정적이고 혁신적인 소프트웨어를 개발하는 현대 사회에서 빠르게 진화하는 기술 환경에서의 핵심 역할하고 있다.