【学习笔记】软件工程概述

简介

程序是人们为了完成特定的功能编制的一组指令集,它由计算机的语言描述,并且能在计算机系统上执行。而软件不仅包括程序,还包括程序的处理对象——数据,以及与程序开发、维护和使用相关的图文资料。

软件有以下几个特点:
(1)软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。
(2)软件的生成与硬件不同,他没有明显的制造过程。要提高软件的智联个,必须在软件开发方面下功夫。
(3)在软件的运行和试用期间,不会出现硬件中出现的机械磨损、老化问题,然而它存在退化问题,必须对其进行多次的修改和维护,直至退役。
(4)计算机软件的开发与运行常常收到计算机系统的制约,它对计算机系统有着不同程度的依赖性。为了解决这种依赖性,在软件开发中提出了软件移植问题。
(5)软件开发至今尚未完全摆脱人工的开发方式。
(6)软件本身是复杂的。软件的复杂性可能来自它反映实际问题的复杂性,也可能来自程序逻辑结构的复杂性。
(7)软件的成本相当昂贵。
(8)相当多的软件工程设计社会因素。许多软件的开大和运行涉及机构、体制及管理方式等问题,它们直接决定项目的成败。

分类

按照功能的不同,软件可以分为系统软件、支撑软件和应用软件。基于规模的不同,软件可以划分为微型、小型、中型、大型和超大型软件。根据工作方式的不同,划分为实时软件、分时软件、交互式软件和批处理软件。

软件危机

软件危机是指人们在开发软件和维护软件过程中遇到的一系列问题。在20世纪60年代中期,随着软件规模的扩大,复杂性的增加,功能的增强,高质量的软件开发变得越来越困难。在软件开发的过程中,会经常出现不能按时完成任务、产品质量得不到保证、工作效率地下和开发经费严重超支等问题。
普遍出现的严重问题有:
(1)开发的软件产品不能满足用户的 需求,即产品的功能或特性与需求不符合。
(2)相比越来越廉价的硬件,软件代价过高。
(3)软件质量难以得到保证,且难易发挥硬件潜能。
(4)难易准确估计软件开发、维护的费用以及开发周期。
(5)软件产品修改维护困难,集成遗留系统更困难。

软件危机出现的原因

(1)忽视软件开发前期的需求分析。
(2)开发过程缺乏统一的、规范化的方法论指导。软件开发是一项复杂的工程,人们需要用科学的、工程化的思想来组织和指导软件开发的各个阶段。
(3)文档资料不齐全或不准确。
(4)忽视与用户之间、开发组成员之间的交流。
(5)忽视测试的重要性。
(6)不重视维护或由于上述原因造成维护工作困难。
(7)从事软件开发的专业人员对这个产业认识不充分,缺乏经验。
(8)没有完善的质量保证体系。

软件工程的知识体系

  1. 软件需求(Software Requirement)
  2. 软件设计(Software Design)
  3. 软件构建(Software Construction)
  4. 软件测试(Software Testing)
  5. 软件维护(Software Maintenance)
  6. 软件配置管理(Software Configuration Management)
  7. 软件工程管理(Software Engineering Management)
  8. 软件工程过程(Software Engineering Process)
  9. 软件工程模型和方法(Software Engineering Models and Methods)
  10. 软件质量(Software Quality)
  11. 软件工程职业实践(Software Engineering Professional Practice)
  12. 软件工程经济学(Software Engineering Economics)
  13. 计算基础(Computing Foundations)涉及解决问题的技巧、抽象、编程基础、编程语言的基础知识、调试工具和技术、数据结构和表示、算法和复杂度、系统的基本概念、计算机的组织结构、变异基础知识,操作系统基础知识、数据库基础知识和数据管理、网络通信基础知识、并行和分布式计算、基本的用户认为因素、基本的开发人员认为因素和安全的软件开发和维护等方面内容
  14. 数学基础(Mathematical Foundations)涉及集合、关系和函数,基本的逻辑、证明技巧、计算的基础知识、图和树、离散概率、有限状态机、语法,数值精度、准确性和错误,数论和代数结构等方面的内容。
  15. 工程基础(Engineering Foundations)涉及实现方法和实验技术、统计分析、度量、工程设计,建模、模拟和建立原型,标准和影响因素分析等方面内容。

软件开发方法

  1. 结构化方法
  2. 面向数据结构方法
  3. 面向对象方法
  4. 形式化方法

软件工程工具

(1)按照功能划分:功能是对软件进行分类最常用的标准,软件工程工具可以分为可视化建模工具、程序开发工具、自动化测试工具、文档编辑工具、配置管理工具、项目管理工具等。
(2)按照支持的过程划分:可分为设计工具、编程工具、维护工具等。
(3)按照支持的范围划分:窄支持、较宽支持和一般支持工具。窄支持工具支持软件过程中的特定任务,一般将其称之为工具;较宽支持工具支持特定的过程阶段,一般由多个工具集合而成,称之为工作台;一般支持工具支持覆盖软件过程的全部或大部分阶段,包含多个不同的工作台,称之为环境。

软件开发模型

瀑布模型
凯苏原型模型
增量模型
螺旋模型
喷泉模型
基于组件的开发模型
统一软件开发过程模型
敏捷过程与极限编程

软件结构化设计

  1. 数据库结构设计

  2. 用户界面设计
    (1)设计驱动开发
    (2)目标用户群体
    (3)间接与清晰
    (4)实现模型与心智模型
    (5)设计的规范性
    (6)设计的可用性和易用性
    (7)设计的一致性
    (8)设计的容错性

  3. 结构化设计和结构化分析

  4. 体系结构设计
    (1)表示软件结构的图形工具
    (2)面向数据流的设计方法
    (3)面向数据结构的设计方法

  5. 接口设计

  6. 数据设计

  7. 过程设计
    (1)程序流程图
    (2)N-S图
    (3)PAD图
    (4)过程设计语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值