一、程序及其质量
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