【Mark】软件工程_自

Content

    • 初识软件工程
    • 编写高质量的代码

  • 链接 软件工程(82讲)清华大学软件学院刘强.

初识软件工程


  • 软件无处不在
  • 软件的本质特性
  • 软件工程的产生与发展
  • 软件工程的基本概念
  • 软件质量实现
  • 业界人士谈软件工程

什么是软件?

  • 软件 = 程序 + 数据 + 文档;是嵌入式的数字化知识
    程序:后台代码,提供功能
    数据:软件运行需要的各种数据信息,以及数据结构
    文档:描述开发细节的文档和系统使用的用户文档

软件的四个本质特性,固有的内在特性:
复杂性、一致性、可变性、不可见性 (是软件开发困难的根本原因;软件开发过程难以控制)

  • 可变性,软件只要投入使用,就一直在变,而且是随心而变
    人们总是认为软件很容易修改,但是修改是有副作用的,不断地修改会导致软件退化
    成功的软件都是会发生演化的;控制变更,从而保持高质量
  • 不可见性,软件是一种逻辑实体,缺乏合适的几何表达方式
    开发人员太像 皇帝的新衣 里的裁缝

软件工程 发展历史

  • 史前时代 (1956 ~ 67)
  • 瀑布过程模型 (68 ~ 82)
  • 质量标准体系 (83 ~ 95)
  • 敏捷开发 (90年代至今)

什么是软件工程?

  • 将系统性的、规范化的、可定量的方法,应用于软件的开发、运行和维护 即工程化思想应用到软件上
    目的:创建 足够好 的软件(低成本、按时、功能实现、维护低费用、具有良好性质)

软件开发策略
软件复用、分而治之、逐步演进,优化折中
软件工程的 Wasserman 规范
为开发高质量的软件产品提供一个工程框架

软件工程三个基本要素过程方法工具

  • 过程:向下翻
  • 方法:面向过程、面向对象、面向构件、面向服务
  • 工具:建模工具、构造工具、测试工具、重构工具、管理工具

理解知识点和思想,无需死记硬背

下载并学会使用,Axure RP 9
网络上免费的Axure 注册码、license+key,使用有风险
链接 学Axure. 20.3.2

软件质量
包括 过程质量、内外部质量、使用质量
质量,就是软件产品对于某个(些)人的价值,通常指用户
正确的软件,软件的正确运行;是两个概念

  • David Garvin 质量维度,通用的 (不止软件)
    ISO9126 质量模型,用来评价软件质量,包括
    功能性、可靠性、易用性、效率、可维护性、可移植性
    质量不是测出来的,是开发过程中一步步构建出来的
    商业目标决定质量目标 (未必非要零缺陷) 20.3.3

开发人员
极强的代码阅读理解以及书写能力
极强的责任心、职业道德、社会协调能力

编写高质量的代码


  • 编码过程与规范
  • 良好的编程实践
  • Python集成开发环境
  • 代码静态检查
  • 代码性能分析
  • 结对编程实践
  • 刘贺谈软件工程

高质量的代码应该是 可读性强、易于维护、简洁高效的

软件编程规范,就编写代码的规则的集合
链接 Google的软件编码规范.

注释

  • 写好注释并不容易
    学会只编写够用的注释,过犹不及,重视质量而不是数量

命名

  • 好的名字一目了然,不需要读者去猜,甚至不需要注释
    编写自文档化的代码,其本身简单易懂

应该 编写自文档化的程序,让代码本身易于理解

看 问 练

过程
是一组相互关联或相互作用的活动,能将输入转化为输出
客户需求 —输入–> 过程 —输出–> 客户满意的产品
管理过程,实现过程,支持过程

过程方法
是系统地识别和管理组织内所使用的过程,
保证更有效地获得期望的结果

软件工程过程
软件开发活动

  • 问题定义,问题提出 > 可行性研究 > 可行性分析报告
  • 需求开发,获取需求 > 分析 > 文档化 > 确认 > 软件需求规格说明
  • 软件设计,设计体系结构、接口、组件、数据库 > 软件设计说明
  • 软件构造,系统模型 > 编写代码、单元测试、代码审查、集成调试、系统构建、代码优化(循环迭代)> 源代码
  • 软件测试,单元测试、子系统集成测试、系统集成测试、验收测试
  • 软件维护,和软件开发是一个连续的过程(循环往复)
  • 软件开发管理
    项目管理,计划、组织、领导、控制
    配置管理,版本管理、系统构建、变更管理、发布版本管理 20.3.5

软件过程模型,就是对软件过程的抽象描述
优缺点,特点,适用场景

  • 瀑布模型,线性的,是由文档驱动的
    用户只有在整个过程结束时才能看到成果,阶段固定,已很少使用
    适用于 需求明确
  • 原型化模型,先实现产品部分的一个原型,可以是纸上原型
    获取用户需求
  • 迭代式开发,迭代循环开发版本,分为增量模型、迭代模型(螺旋模型?)
  • 可转换模型,采用形式化的数学方法描述系统,并最终转换为可交付使用的系统 (喷泉模型?)

软件开发具有迭代性,需要不断的反复尝试,通过比较和选择不同的设计,最终确定令人满意的解决方案

版权问题?什么版权?


  • P13

你可能感兴趣的:(Conclusion(总结))