Lecture 1 - Introduction

ewillwin·2023년 10월 15일
0

Software

What is Software?

[Program <= Software]

  • Program: A collection of istructions

  • Software: Not only programs (codes), but all associatd documentation

[Software In Academia]
ICSE (International Conference on Software Engineering)
-> The premier software engineering conference in the world.

  1. A README file: A main file describing what the software does.

  2. A REQUIREDMENTS file: This file should cover aspects of hardware environment requirements and software environments.

  3. A LICENSE file: the file describing the distribution rights.

  4. An INSTALL file: These installation istructions should include notes illustrating a very basic usage example or a method to test the installation.

Software Costs

  • Software costs more to maintain than it does to develop. (maintenance cost가 더 비쌈!)
    • Debugging takes up half of the time in SW development. (debugging이 개발 단계에서 절반 차지)

SW Project Failure Reason

  • Increasing system complexity

    • The size of software is increasing rapidly.
  • Failure to use software engineering methods (software engineering methods를 쓰지 않아서)

    • It is fairly easy for people (including me) to write computer programs without using software engineering methods and techniques.




Software Engineering

Software Engineering

[Software engineering]

  • An engineering discipline that is concerned with from the early stages of system specification all aspects of software production through to maintaining the system after it has gone into use.

[Engineering discipline]

  • Using appropriate theories and methods to solve problems bearing in mind organizational and financial constraints.

[All aspects of software production]

  • Not just technical process of development.
  • Also, project management and the development of tools, methods

[Topics in Software engineering]

  • AI and software engineering

    • Machine learning with and for SE, Program synthesis, Program repair
  • Testing and anlaysis

    • Software testing, Program analysis, Debugging and Fault localization
  • Software evolution

    • Evolution and maintenance, Software reuse, Refactoring
  • Social aspects of software engineering

    • Agile methods and software processes, Ethics in software engineering
  • Requirements, modeling, and design

    • Requirements engineering, Modeling and model-driven engineering

Importance of SW engineering

  • Dependency of Software

    • More and more, individuals and society rely on complex software systems.
    • We need to be able to produce reliable and trustworthy systems economically and quickly.
  • Cost Saving

    • It is usually cheaper, in the long run, to use software engineering methods and techniques for software systems rather than just write the programs as if it was a personal programming project.
    • For most types of system, most costs are the costs of changing the software after it has gone into use.




About Developing SW

Software Process 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.

General Issues that Affect SW

  • Heterogeneity (이질)

    • Increasingly, systems are required to operate as distributed systems across networks that include different types of computer and mobile devices.
  • Business and social change

    • Buisiness and society are changing incredibly quickly as emerging economies develop and new technologies become available.
    • They need to be able to change their existing software and to rapidly develop new software.
  • Security and trust

    • As software is intertwined(얽혀) with all aspects of our lives, it is essential that we can trust that software.




Details of SW Engineering

Question to understand SE

[What is software?]

  • Computer programs and associated documentation.

[What are the attributes of good software?]

  • Good software should deliver the required functionality and performance to the user and should be maintainable, dependable and usable.

[What is software engineering?]

  • Software engineering is an engineering discipline that is concerned with all aspects of software production.

[What are the fundamental software engineering activities?]

  • Software specification, software development, software validation and software evolution.

  • s -> d -> v -> e

[What are the key challenges facing software engineering?]

  • Coping with increasing diversity, demands for reduced delivery times and developing trustworthy software.

[What are the costs of software engineering?]

  • Roughly 60% of software costs are development costs, 40% are testing cost.

  • For custom software, evolution costs often exceed development costs.

[What are the best software engineering techniques and methods?]

  • Different techniques are appropriate for different types of system.

  • Games vs Safety critical systems

    • 게임은 더 flexible한 software process (accommodates rapid change)가, Safety critical systems는 V model (A complete specification to be developed)가 적합함

Software products

  • Generic products

    • Stand-alone systems that are marketed and sold to any customer who wishes to by them.

    • Examples - PC software such as word processors, drawing packages, and project management tools.

  • Customized products

    • Software that is commissioned by a specific customer to meet their own needs.
    • Examples - air traffic control software, traffic monitoring systems, embedded control systems.

Product specification

  • Generic products

    • The specification of what the software should do is owned by the software developer and decisions on software change are made by the developer.
  • Customized products

    • The specification of what the software should do is owned by the customer for the software and they make decisions on software changes that are required.
  • -> The distinction between these product types is becoming increasingly blurred.

Essential attributes of good Software

  • Maintainability

    • Software should be written in such a way so that it can evolve to meet the changing needs of customers.
    • This is 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 utilisation, etc
  • Acceptability (수용성)

    • Software must be acceptable to the type of users for which it is designed.

    • This means that is must be understandable, usable and compatible with other systems that they use.





SW engineering ethics

SW engineering ethics

  • Software engineering involves wider responsibilities than simply the application of technical skills.

  • Software engineers must behave in an honest and ethically responsible way if they are to be respected as professionals.

  • Ethical behavior is more than simply upholding(받치다) the law but involves following a set of principles that are morally correct.

Issues of professional responsibility

  • Confidentiality (기밀 유지)

    • Engineers should normally respect the confidentiality of their employers or clients irrespective of whether a formal confidentiality agreement has been signed. (client의 기밀 유지)
  • Competence (능력)

    • Engineers should not misrepresent their level of competence.

    • They should not knowingly accept work which is outwith their competence. (엔지니어들은 자기 능력을 outwith 하면 안됨)

  • Intellectual property rights

    • Engineers should be aware of local laws governing the use of intellectual property such as patents, copyright, etc.

    • They should be careful to ensure that the intellectual property of employers and clients is protected.

  • Computer misuse

    • Software engineers should not use their 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).

ACM / IEEE Code of Ethics

  • Members of these organisations such as ACM, IEEE sign up to the code of practice when they join.

    • ACM: Association for Computing Machinery

    • IEEE: Institute of Electrical and Electronics Engineers

  • Software engineers shall adhere to the eight principles.

    1. 공익 (Public): 소프트웨어 엔지니어는 공공 이익과 일관되게 행동해야 합니다. 즉, 사회적 책임을 다하고 대중의 이익을 고려해야 합니다.

    2. 고객 및 고용주 (Client and employer): 소프트웨어 엔지니어는 고객과 고용주의 이익을 고려하여 행동해야 합니다. 이때, 공공 이익을 해치지 않는 범위에서 그들의 이익을 존중해야 합니다.

    3. 제품 (Product): 소프트웨어 엔지니어는 자신의 제품과 관련 수정 사항이 최고의 전문적 표준을 준수하도록 보장해야 합니다.

    4. 판단 (Judgement): 소프트웨어 엔지니어는 전문적인 심사에서 무결성과 독립성을 유지해야 합니다. 다른 이해관계자의 영향을 받지 않고 윤리적 판단을 내려야 합니다.

    5. 관리 (Management): 소프트웨어 엔지니어 관리자와 리더는 소프트웨어 개발과 유지 관리의 윤리적 접근 방식을 지지하고 홍보해야 합니다.

    6. 직업 (Profession): 소프트웨어 엔지니어는 직업의 품위와 평판을 공공 이익과 일관되게 향상시켜야 합니다.

    7. 동료 (Colleagues): 소프트웨어 엔지니어는 동료에게 공정하고 지원적이어야 합니다. 협력과 상호 지원을 촉진해야 합니다.

    8. 자기 (Self): 소프트웨어 엔지니어는 자신의 전문 분야에 대한 평생 학습에 참여해야 하며, 직업 수행에 대한 윤리적 접근 방식을 촉진해야 합니다.





Case Study

  • 인슐린 펌프 제어 시스템 (An Insulin Pump Control System): 당뇨병 환자가 혈당을 조절하기 위해 사용하는 인슐린 펌프의 내장 시스템

    • Key roles

      1. Collect information from a blood sugar sensor.
      2. Calculate the amount of insulin required to be injected.
      3. Deliver a controlled dose of insulin to a user.
    • Essential high-level requirements

      • The system shall be available to deliver insulin only when required.
      • The system shall perform reliably and deliver the correct amount of insulin to counteract the current level of blood sugar.
      • The system must therefore be designed and implemented to ensure that the system always meets these requirements.
  • 정신 건강 환자 관리 시스템 (Mentcare - A Mental Health Case Patient Management System): 정신 건강 문제를 가진 환자의 기록을 유지하고 관리하는 시스템

  • 야외 날씨 관측소 (A Wilderness Weather Station): 원격 지역에서 날씨 조건에 관한 데이터를 수집하는 데이터 수집 시스템

  • iLenar: 디지털 학습 환경 (a Digital Learning Environment): 학교에서 학습을 지원하기 위한 시스템으로, 디지털 학습 환경을 제공

profile
💼 Software Engineer @ LG Electronics | 🎓 SungKyunKwan Univ. CSE

0개의 댓글