软件工程——第一章(从程序到软件)

一、程序及其质量

1.1 何为程序

  • 是由程序设计语言所描述的,能为计算机所理解和处理的一组语句序列
  • 严格遵循程序设计语言的各种语法和语义规定
  • 程序代码可表现为两种形式(源代码、可执行代码)

1.2 程序组成

1.2.1 语句

1) 程序中的语句

  • 声明、定义、控制、计算等
  • 实现特定功能
  • 用程序设计语言来描述

2) 计算机可以理解

  • 可编译成二进制代码
  • 最终可执行

1.2.2 模块

1 )由诸多相互交互的模块组成(包、类、方法)

2)每个模块实现特定功能

1.3 程序如何编写

  • 要实现的功能
  • 采用编程语言
  • 逻辑思考推理
  • 程序设计经验

(程序的编辑、编译、部署和运行)

1.4 程序的二类利益相关者

1)用户

  • 程序的运行展示功能和性能
  • 满足和实现用户的需求

2)程序员

  • 编写、阅读和维护程序
  • 发现和修改程序中的缺陷

3)对程序的不同质量需求

用户角度:正确性、高效性、可靠性……

程序员角度:可理解、易修改、可维护……

1.5 程序质量的内在和外在体现

1)外部质量

  • 用户视点
  • 对外可展示、用户可直接感触到、所关心的
  • 使用流畅性、响应速度、界面美观、操作简易性、运行可靠性……

2)内部质量

  • 程序员视点
  • 体现在程序的内在方面,程序员可以感触到的,所关心的
  • 易于理解、结构清晰、易于修改、可重用好

二、程序质量保证方法

2.1 程序质量的语法和语义体现

1)代码风格规范—语法

  • 语法和结构层次
  • 明确如何来规范程序的书写
  • 表现为是否易于阅读和理解

2)代码设计规范—语义

  • 语义和内涵层次,外在的
  • 明确如何来组织和封装程序语句
  • 表现为良好的结构和易于重用

3) 程序质量保证方法

  • 遵循编码风格——良好的编程行为
  • 采用程序设计方法——模块化设计;高内聚、低耦合原则
  • 开展代码重用
  • 进行结对编码

三、程序质量分析方法

3.1 程序代码中潜在的质量问题

1)质量问题

  • 编写不合理——没有遵循编码规范
  • 设计不合理——没有遵循设计规范
  • 代码有错误——代码编写的不正确

2)代码质量分析的常用方法

  • 人工代码审查
  • 自动化工具审查——代码静态分析(无需运行代码;SonarQube工具)
  • 软件测试技术

四、软件

4.1 从程序到软件工程开发的启发

  • 通过一个步骤就将程序写出来不现实
  • 编写高质量的程序需要循序渐进地展开工作

4.2 何为软件

  • 软件 = 程序 + 数据 +文档
  • 指令的集合(计算机程序):通过执行这些指令可以满足预期的特征、功能和性能的需求
  • 数据:程序的加工处理对象和结果
  • 软件描述信息(文档):记录软件开发活动和阶段性成果、软件配置以及变更的阐述性资料

4.3 软件生命周期

软件生命周期:指一个软件从提出开发开始,到开发完成交付用户使用,及至最后退役不再使用的全过程。

(软件生存周期示意图)

4.4 软件特点

  • 1)逻辑性——逻辑产品,思维活动的结果
  • 2)设计开发——是设计开发的,而不是生产制造的
  • 3)易变性——需求经常变,影响软件的开发过程
  • 4)复杂性——规模大(代码行、模块、接入人员等数量大);运行复杂(状态难以追踪)
  • 5)缺陷的隐蔽性——隐藏再抽象代码和复杂的逻辑中

4.5 软件质量

软件质量:指软件满足给定需求的程度,它是产品生命线。

1)operation

  • 正确性——在预定环境下正确地完成预期功能和非功能需求
  • 可靠性——在规定条件下,完成功能,不引起故障
  • 可用性——使用和操作软件系统难易程度
  • 健壮性——在故障时,发生意外情况下,仍能做出适当响应
  • 有效性——利用计算机资源和存储资源实现功能

2)revision

  • 可维护性——是否易于更改,增加功能
  • 可理解性——软件开发者理解该软件系统的容易程度

3)transition

  • 可移植性——从一种运行环境转移到另一种运行环境的难以程度
  • 可重用性——软件模块、设计方案在其他软件开发中再次被使用的程度
  • 互操作性——软件系统与其他的系统进行协同工作的能力

4.6 软件形态

1)人机物共生系统:由人、社会组织、物理设备、过程等要素共同组成和相互作用的。

2)系统之系统:由一组面向任务、服务于不同对象的子系统构成。

3)分布式异构系统:拥有大量多样、地理或者逻辑是分布的,分散部署在互联网上的软件实体。

五、开源软件

5.1 闭源软件

1)闭源软件:软件代码不对用户开放的一类软件,购买软件时只提供可运行软件或服务,没有提供源代码。

2)以许可证的方式授权用户使用软件

3)示例:微软、IBM、Oracle

5.2 开源软件

1)开源软件:一种源代码可以自由获取和传播的计算机软件,其拥有者通过开源许可证赋予被许可人对软件进行使用、修改和传播

2)开源软件的推动者:

  • 政府组织:MASA(美国)
  • 开源组织:Apache基金会、Linux基金会、Eclipse基金会、Open Source Initiative
  • 企业:Google、IBM 、Microsoft、Oracle
  • 个人开发者:Github、Linus Torvalds

3)开源软件托管平台

Github、SourceForge、Gitee、Stack Overflow

5.3 开源软件许可证

1)开源软件许可证:声明获得开源代码后拥有的权利,界定对别人的开源作品进行何种操作、何种操作是被禁止的。规范开源代码的使用要求和约束

2)二类许可证

  • 宽松式开源许可证(对用户限制少,用户自己承担风险,BSD、Apache、MIT)
  • Copyleft式开源许可证(可随意复制,更多限制,带有许多条件,GPL、MPL)

3)Apache开源许可证

  • 衍生品继续使用许可协议、修改源代码需要声明
  • Hadoop、Apache HTTP Server、MongoDB

4)GPL开源许可证

  • 自由传播、复制、修改、收费,但需注明可免费获得和依旧采用GPL
  • Linux

  • 44
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值