[课业] 08 | 软工 | 软件工程基础

什么是软件

信息

  1. 信息的记录
  2. 信息的交流
  3. 信息的存储
  4. Information => Computer => Digital Computer => Software

软件的发展

数字基础——30年代

  1. 硬件:各种原型机
    微分计算机、继电器式计算机、ABC原型计算机、Harvard Mark 1等
  2. 理论:
    Alan Turing,《论可计算数及其在判定问题上的应用》
    Claude Elwood Shannon,电子继电器可以实现布尔符号逻辑
    Alonzo Church,Lambda演算

Digital Computer——40年代

ENIAC
  1. 人们认为软件是硬件的一部分
  2. 软件运行场景,如图
    ENIAC机器

    蹲着的拨开关,站着的看图check
  3. 工作流程:
    得到问题——映射到机器上——画出纸——拨开关
    从得到问题到画出纸往往要几星期,根据纸拨开关也要好几天
  4. 调试方法:单步调试
EDVAC
  1. 由冯诺依曼提出冯诺依曼架构,分成五部分:输入、输出、主存、控制单元、计算逻辑单元
  2. 理念:stored-programming concept
    指令存在内存里,每次主存中既有数据又有指令,可被反复利用
  3. 冯诺依曼架构图示

软件工程==硬件工程——50年代

  1. 商用计算机的出现(如Ferranti Mark I,UNIVAC I,LEO I,IBM 701,IBM 650)
  2. 编程语言的出现(FORTRAN,LISP,COBAL)
  3. software一词出现于1958

软件!=硬件——60年代

  1. 大变革:
    美国信息交换标准码(ASCII码)
    ATM机
    IBM的应用管理系统IMS应用于阿波罗航天器
    软件咨询业务
    IBM S/360
    信用卡
    DEC PDP-1小型机
    ——充分接触了商业项目
  2. 软件特性被发现
    软件与现实世界关系更加密切,对需求的规格化更加困难
    软件比硬件容易修改的多,并且不需要昂贵的生产线复制产品
    软件没有损耗
    软件不可见

Program = Algorithm + Data Structure——70年代~80年代

  1. Program = Algorithm + Data Structure的概念由Niklaus Wirth在1976年的书中提出

软件开发远不止编程——90年代

  1. 软件规模越大,编程以外的其他工作越多
软件工作量随应用程序规模变化的情况


注:KLOC为千行代码

大型软件系统(规模位100万LOC)的成本因素排序

软件类型

系统软件

系统软件有:操作系统,数据库,嵌入式设备,安全软件

应用软件
  1. 针对编程的应用软件有:IDE,持续集成,建模,度量
  2. 针对大众的商业应用软件有:商业,政府,休闲,医疗,教育,国防,个人,专业,科学
  3. 应用软件层次示意图
  4. 应用软件基于现实又高于显示
    应用软件被开发的目的和意图来源于现实世界的问题
    应用软件必须基于显示才能解决问题
    软件最终要被用于现实并改进现实
    最终在现实世界中观察到新的问题,循环往复,继续解决问题
    如图

Summary

  1. 软件独立于硬件
  2. 软件是工具
  3. 软件不同于编程,是程序、文档、知识、数据等的集合
  4. 软件开发比编程复杂得多
  5. 应用软件来源于生活,用来提高现实生活的水平

什么是软件工程

软件工程的定义

  1. 针对系统、有规则的、可量化的方法的应用,对他们的软件开发、操作、维护
  2. 对这类方法的研究

软件工程之工程

  1. 关键词:creative application
  2. 目的:一定的限制范围内(如考虑到经济因素、对生命财产安全因素等),实现功能
  3. 工程师要:
    做决策,折衷与妥协
    使用工具
    善于重用

工程学科的发展

软件工程原则

综述

  1. 教普通人做软件的按部就班的基本方法,保证下限,即能做出来
  2. 限制条件:考虑成本效益
  3. 工具:应用科学知识指导工程活动(做到可学习性,可重复性等)
  4. 客观条件:构建机器或事物,利用实物工具来解决问题
  5. 开发动机:以服务人类为目的

软件工程的注意问题

  1. 真实世界更杂乱
    If the state of the real world do not accord with our expectation, then there’s a problem
  2. 涉及面很广阔:软件工程可能涉及其他所有人类涉及的领域,其他工程就不会有这个问题
  3. 问题和需求不明确:问题和需求不明确,往往需要特地去发现需求,其他工程的问题大都是清晰明确的
  4. Engineering Idea
    Objectives (Know what you want to)

Scientific Knowledge

  1. 计算科学(基础;包括基于数学和逻辑的能力们)
  2. 系统性的技能们(方法、语言、工具等)

对软件工程的理解

  1. 软件工程是一种工程活动
  2. 软件工程的动机是解决实际问题
  3. 软件工程是科学性、实践性和工艺性并重的
  4. 软件工程追求足够好,不是最好
  5. 软件工程真正的产品是基于虚拟计算机的软件方案
  6. 软件工程的最终目的是要促进整个社会的进步

软件工程知识域

SWEBOK

The Software Engineering Body of Knowledge



软件开发活动

TargetArtifact
Software RequirementWhatSRS(软件规格说明)
Software DesignHowSDD(软件设计描述)
Software ConstructionBuildCode and executable file(代码与可执行文件)
Software TestingAre you building the “right” thing?
Are you building it “right”?
Test Report(测试报告)
Software DeliverInstallUser Document and System Document(用户文档、系统文档)
Software MaintenanceRevolutionNew version software

角色分工

  1. 需求工程师,又称为需求分析师:承担需求开发任务;软件产品的需求开发工作通常由多个需求工程师来完成,他们共同组成一个需求工程师小组,在首席需求工程师的领导下开展工作;通常一个团队只有一个需求工程师小组
  2. 软件体系结构师:承担软件体系结构设计任务;通常也是由多人组成一个小组,并在首席软件体系结构师的领导下开展工作;通常一个团队只有一个软件体系结构师小组
  3. 软件设计师:承担详细设计任务;在软件体系结构设计完成之后,可以将其部件分配给不同的开发小组;开发小组中负责所分配部件详细设计工作的人员就是软件设计师;一个团队可能有一个或多个开发小组;一个小组可能有一个或多个软件设计师
  4. 程序员:承担软件构造任务,程序员与设计师通常是同一批人,也是根据其所分配到的任务开展工作
  5. 人机交互设计师:承担人机交互设计任务;人机交互设计师与软件设计师可以是同一批人,也可以是不同人员;在有多个小组的软件工程团队中,可以有一个单独的人机交互设计师小组,也可以将人机交互设计师分配到各个小组
  6. 软件测试人员:承担软件测试任务;软件测试人员通常需要独立于其他的开发人员角色;一个团队可能有一个或多个测试小组;一个小组可能有一个或多个软件测试人员
  7. 项目管理人员:负责计划、组织、领导、协调和控制软件开发的各项工作;相比于传统意义上的管理者,他们不完全是监控者和控制者,更多的是协调者;通常一个团队只有一个项目管理人员
  8. 软件配置管理人员:管理软件开发中产生的各种制品,具体工作是对重要制品进行标识、变更控制、状态报告等;通常一个团队只有一个软件配置管理人员
  9. 质量保障人员:在生产过程中监督和控制软件产品质量的人会员;通常一个团队有一个质量保障小组,由一个或多个人员组成
  10. 培训和支持人员:负责软件移交与维护任务;他们可以是其他开发人员的一部分,也可以是独立的人员
  11. 文档编写人员:专门负责写作软件开发各种文档的人员;他们的存在是为了充分利用部分宝贵的人力资源(例如需求工程师和软件体系结构师),让这些人力资源从繁杂的文档化工作中解放出来




     
     

___Fin___
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值