第一章软件工程概论
一、软件
软件:程序、数据及其相关文档
特点:抽象性、无明显制造过程、无老化、对硬件依赖性。
分类:系统软件、支持软件、应用软件
软件设计过程中,随着时间的推移,软件比硬件投入逐渐增大。
发展阶段:设计-系统-工程
过程:软件规格说明、软件开发、软件确认、软件改进
特性:易理解性、可见性、可支持性、可接受性、可靠性、健壮性、可维护性、速度等。
步骤:
1.制定计划:总目标、功能性能可靠性接口要求、可行性研究
2.需求分析和定义:需求定义图表表示、软件需求说明书。
3.软件设计:概要设计,划分模块;详细设计,确定模块内结构及接口。
4.程序编写
5.软件测试:单元测试、组装测试。
6.运行维护:改正性维护、适应性维护、完善性维护。
二、软件开发模型
第一次实验探索开发,再进行进一步的开发。
渐增模型,基于原型。
螺旋模型:制定计划,风险分析,实施工程,客户评估。四个象限轮转,每转一圈产生一个原型。
喷泉模型:可迭代
三、软件生存周期
系统开发生命期:计划阶段,分析阶段,设计阶段,实现阶段,支持阶段。
四、软件工程
软件工程定义:软件工程是开发、运行、维护和修复软件的系统方法。
软件工程三要素:方法、工具、过程。
软件工程项目基本目标:低成本,达到要求,较好性能,易于移植,维护费用低,按时交付。
软件工程七条原理:
1. 分阶段的生存周期计划严格管理。
2. 坚持进行阶段评审。
3. 实行严格的产品控制。
4. 采用现代程序设计技术。
5. 结果应能清楚地审查。
6. 合理安排软件开发小组的人(少而精)。
7. 承认不断改进软件工程的必要性。
软件工程基本原则:
1. 分解
2. 独立性
3. 一致性
4. 确定性
第二章 软件计划
可行性研究报告
一、问题定义
问题背景,开发系统现状,开发的条件与理由,总体要求。
定义步骤
系统分析员到问题现场
1)听取用户要求
2)调查开发背景
3)查看用户报告
4)加工整理
5)与用户讨论
6)改正错误
7)撰写双方满意的问题定义报告文档
8)确定双方是否可进行深入系统可行性研究方向意向
二、可行性研究
五个方向:
1. 经济可行性
2. 技术可行性
3. 操作可行性
4. 法律可行性
5. 时间可行性
具体内容:问题初步认识,市场调查,分析准备,环境分析。
可行性研究步骤:
三、软件计划内容
软件范围,环境资源(重点:人力资源)
四、软件价格估计
2. 代码行价格估算技术
①源代码行②劳动量③软件生产率④LOC计算方法
3. 任务分解方法
分解若干独立任务,分别估计各个开发任务成本,最后累加。
4. 自动估计成本方法
减轻劳动,但要大量经验做基础,良好数据库系统支持。
五、成本/收益分析
六、项目开发计划
6.专题计划要点
测试计划、质量保证计划、配置管理计划、人员培训计划、系统安装计划等。
第三章 软件需求分析
一、任务
1深入描述软件性能
2确定约束和接口
3定义软件的其他有效性
需求分析阶段的任务
确定对系统的综合需求
分析系统的数据需求
导出系统的逻辑模型
修正系统开发计划
开发原型系统
二、过程
问题识别:建立分析所需要的通信途径,保证对问题的顺利分析
软件的需求包括:
常用分析方法:
三、原则
1.确定问题与功能
2.对问题进行分解和细化
四、面向数据流分析方法
结构化分析方法
面向数据流进行需求分析的方法
原型化方法
探索性,实验型,进化型。
原型使用策略:废弃策略,追加策略。
动态分析方法:状态迁移图、时序图、Petri网
第四章 面向过程的软件设计方法
一、软件设计的目标和任务
数据设计、系统结构设计、过程设计
软件设计任务:概要设计、详要设计
软件设计过程:
二、软件设计基础
软件结构:模块结构和数据结构
程序结构:树状结构、网状结构
模块化:把比较大的软件划分为简单的模块结构。划分的时候要抽象。
抽象化:软件系统设计中有不同的抽象层次。
数据抽象:在不同层次上描述数据对象的细节。
三、模块独立性
模块三个基本属性:功能、逻辑、状态。
划分模块准则:耦合、内聚。
1.模块间的耦合性
数据耦合:传输的简单数据
标记耦合:参数表传递记录信息,就是标记耦合。
控制耦合:模块间传递的控制变量。
外部耦合:与外部设备相连
公共耦合:松散公共耦合和紧密公共耦合
内容耦合:进入另一模块内部或模块代码重迭
尽量使用数据耦合,少用控制耦合,限制公共耦合,完全不用内容耦合
2.模块内聚
功能内聚10分:按功能划分,不可分割的模块
信息内聚9分:完成多个功能,各个功能在同一数据结构上操作,每一项功能有一个唯一的入口点。
通信内聚7分:模块内功能用相同数据
过程内聚5分:模块按一定顺序
时间内聚3分:模块任务必须在统一时间段内执行。
逻辑内聚1分:把几种相关功能组合在一起
巧合内聚0分:模块内部之间没有联系
四、结构化设计方法
1.研究、分析、审查数据流图
2.数据流图决定问题类型:变换型、事务型。
系统结构图的模块:传入模块、传出模块、变换模块、协调模块。
变换型系统结构图:取得数据->变换数据->给出数据。
变换分析方法:重画数据流图;区分有效输入、有效输出和中心变换部分;一级分解;二级分解。
选择模块设计的次序:一个模块全部直接下属模块都设计完成,考虑下层模块的耦合和内聚,黑箱,一个模块的直接下属模块5个左右。
事务型系统结构图:可处理多条事务
事务分析过程
1.识别事务源,
2.规定适当事务型结构,
3.识别各种事务和他们定义的操作
软件模块结构改进:
模块功能的完善:执行规定的功能的部分,出错处理的部分,给它的调用者返回一个结束标志。
消除重复功能,改善软件结构:完全相似,局部相似。
模块的作用范围应在控制范围之内:控制范围包括所有从属模块
尽可能减少高扇出结构,随着深度增大扇入。
避免或减少使用病态联接:直接病态联接,公共数据域病态联接,通信模块联接。
模块大小适中:语句行数50~100,保持在一页之内,罪过不超过500行
设计功能可预测的模块,但要避免过分受限制的模块,软件包应满足设计约束和可移植性
设计的后处理
五、数据设计和文件设计
数据设计的原则:
文件设计:
两个阶段:文件设计,物理设计
索引顺序文件:
分区文件:
虚拟存储文件:
倒排文件:
6.确定文件的存储介质
7.确定文件的记录格式
8.估算存取时间和存储容量
六、过程设计(详细设计)
详细设计工具:图形工具,表格工具,语言工具
程序流程图基本控制结构:顺序,选择,循环。
DO-while 先判断后循环
DO-until 先循环后判断
N-S图
问题分析图(PAD)
判定表
第五章 程序编码
一、程序设计语言
1.分类
汇编语言和高级语言
语言内在特征分类:系统实现语言,静态高级语言,块结构高级语言,动态高级语言。
2.语言的选择
按应用领域
系统用户的要求决定
可以使用的编译程序
程序员的经验知识
软件可移植要求
工程规模大,可编一个专用语言
算法与计算复杂性、软件的可靠性
数据结构的复杂性,软件的可维护性
效率
语言的发展前景
二、结构化程序设计
两方面:使用集中基本控制结构,由粗到细,一步步展开
原则
基本控制结构,控制结构只允许有一个入口和一个出口,复杂结构用基本控制结构组合嵌套。
自顶向下,逐步求精。
三、程序设计风格
1.源程序文档化
标识符的命名,安排注释,程序的视觉组织。
2.数据说明
次序规范化,变量有序化,注释复杂数据结构
3.语句结构
力求简单,直接。
1一行内只写一条语句,
2程序编写首先考虑清晰性,
3程序要直截了当说明程序用意;
4清晰地一,效率第二;
5保证正确,提高速度;
6.避免使用临时变量而使可读性下降。
7.让编译程序简单优化
8.尽可能使用库函数
9.避免不必要的转移。
10.尽量只采用三种基本控制结构编写程序
11.避免使用空的ELSE语句和IF...THEN IF语句
12.避免采用过于复杂的条件测试
13.尽量减少使用“否定”条件的条件语句。
四、程序复杂性度量
代码行度量法
McCabe度量法,环路复杂性度量,复杂度小于10
V(G)=m-n+p 弧长-结点数+强联通分量个数
Halstead软件科学
来源:CSDN
作者:张建业-Snail
链接:https://blog.csdn.net/weixin_40048951/article/details/103963472