软件工程基础知识

软件工程基础知识部分分为五部分,如下图所示:

1. 软件工程概述

软件工程

1)含义:指使用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件问题的工程
2)目的;提高软件生产效率、提高软件质量、降低软件成本
又称渐增模型,开发软件时将软件产品作一系列增量构件设计、编码、集成和测试。
特点:瀑布和快速原型模型是一次把满足所有需求产品提交给用户。增量模型是分批向用户提交产品。
优点:
①较短时间向用户提交可完成有用工作产品;
②用户有充裕时间学习适应产品;
③软件结构必须开放,方便向现有产品加入新构件。
④很好地解决了线性模型中的人员阻塞问题,尤其是在项目开始初期开发人员不足的时候,能有效地规避技术风险。
缺点:
如何不破坏已经开发的构件将新的构件集成到一个产品中是增量模型的一个难点。

计算机软件

含义:计算机系统中的程序及其任务

程序

含义:是计算任务的处理对象和处理规则的描述

计算机软件分类

1)系统软件
2)应用软件(工程/科学软件、嵌入式软件、产品线软件、web应用软件、人工智能软件、开放计算软件、网络资源、开源软件)

软件工程的基本原理

① 用分阶段的生命周期计划严格管理
②坚持进行阶段评审,
③实行严格的产品控制
④采用现代程序设计技术
⑤结果可以清楚地审查
⑥开发小组成员少而精
⑦承认不断改进软件工程实践的必要性

软件生命周期

含义:软件定义、软件开发、软件维护每个阶段需要完成的任务和需要完成的文档。其中软件定义包括:可行性研究和需求分析,软件开发包括:总体设计、详细设计、实现和测试。
软件的生命周期分为七部分:
(1)问题定义
(2)可行性研究与计划–《可行性研究报告》、《项目开发计划》
解决问题是什么?有行得通解决方法?粗略计划
(3)需求分析–《需求规格说明书》
目标系统必须作什么?
(4)概要设计–《概要设计说明书》
怎样实现目标系统,根据需求方案设计软件结构。
(5)详细设计–《详细设计说明书》
该怎样具体实现系统设计每个模块的算法和数据结构。
(6)编码和单元测试–《程序清单、单元测试报告》
选择语言、工具翻译详细设计结果、测试模块
(7)综合测试–《测试报告》
发现项目中的错误。
(8)维护
通过必要维护活动使系统持久满足用户要求。
定义:“在交付使用后,为改正错误或满足新需要而修改软件的过程!”
进行软件维护的原因
(1)在运行中发现测试阶段未发现的潜在软件错误和设计缺陷;
(2)需要改进软件设计以增强软件的功能,提高软件的性能;
(3)要求已运行软件适应特定的硬件、软件、外部设备和通信设备等新的工作环境,或适应已变动的数据或文件;
(4)为预防软件系统的失效而对软件系统实施修改。
软件维护分类
①改正性维护
对在测试阶段未能发现的、在软件投入使用后才逐渐暴露出来的错误的测试、诊断、定位、纠错,以及验证、修改的回归测试过程,称为改正性维护。
②完善性维护(所占比例最高)
为了满足用户在使用过程中对软件提出的新的功能与性能要求,需要对原来的软件的功能进行修改或扩充。
③适应性维护
使软件适应外部新的软硬件环境或者数据环境发生的变化,而进行修改软件的过程。
④预防性维护
为了提高软件未来的可维护性、可靠性等,或为了给未来的改进奠定更好的基础而修改软件的过程。

软件过程

含义:
①个体含义:指产品、系统在什么周期中的某一类活动的集合,如开发过程、管理过程
②整体含义:软件产品、系统在所有上述含义下的软件过程的总体
③工程含义: 解决软件过程的工程
模型
1)能力成熟度模型(CMM):对软件组织进化阶段的描述,分为初始级、可重复级、已定义级、已管理级、优化级五个成熟度级别
2)能力成熟度模型集成(CMMI):阶段是模型(和CMM阶段一致)和连续式模型(六个过程域能力:未完成、已执行、已管理、已定义、定了管理、优化级)
3)统一过程(UP):为复杂软件项目的开发提供的成熟、统一、系统、广泛适用的方法。(四个阶段:起始阶段【目标】–专注于项目初创活动、精化阶段【架构】–进行需求分析和架构演进、构建阶段【初试运作功能】–系统构建、产生实现的模型、移交阶段【产品发布】)

2.软件过程模型

瀑布模型(使用最早应用最广泛)
特点
①阶段具有顺序性和依赖性
前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段输入文档。
②推迟实现观点
瀑布模型在编码前设置系统分析、系统设计,推迟程序物理实现,保证前期工作扎实。
③质量保证观点
瀑布模型每阶段坚持两个重要做法:
一是每阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据。
二是每阶段结束前对文档评审。
优点
提高软件质量,降低维护成本,缓解软件危机。
缺点
实现的项目很少顺序执行;用户难以给出具体正确、完整的要求;开发人员“阻塞”状态严重
瀑布模型是一个变体的V模型
优点:相对于瀑布模型,V模型测试能够尽早的进入到开发阶段。
缺点:虽然测试尽早的进入到开发阶段,但是真正进行软件测试是在编码之后,这样忽视了测试对需求分析,系统设计的验证,时间效率上也大打折扣。
明确标注了测试过程中存在不同的测试类型,明确表示出了开发阶段与测试各阶段的对应关系。
单元测试:是否满足详细设计的要求
集成测试:验证已测试过的部分是否可以很好地结合在一起
系统测试:检验系统功能、性能是否达到系统的要求。
验收测试:确定软件的时限是否满足用户需求或合同需求

增量模型
又称渐增模型,开发软件时将软件产品作一系列增量构件设计、编码、集成和测试。
特点:瀑布和快速原型模型是一次把满足所有需求产品提交给用户。增量模型是分批向用户提交产品。
优点
①较短时间向用户提交可完成有用工作产品;
②用户有充裕时间学习适应产品;
③软件结构必须开放,方便向现有产品加入新构件。
④很好地解决了线性模型中的人员阻塞问题,尤其是在项目开始初期开发人员不足的时候,能有效地规避技术风险。
缺点
如何不破坏已经开发的构件将新的构件集成到一个产品中是增量模型的一个难点。

原型模型
快速原型过程模型:是一个快速开发的过程,首先和用户沟通进行主要功能的需求分析和快速设计,然后建立一个原型,再请用户进行评价和反馈。开发人员根据用户的反馈进一步细化需求,改进原型系统的设计,如此反复直至用户满意。
特点
①出品速度快。
②逐步求精。
③开发阶段迭代。
优点
① 确定需求上优于瀑布模型(通过原型与用户交互);
② 提供学习手段,通过开发原型和演示原型对开发者和使用者了解系统都有积极作用;
③ 有的软件原型可以成为最终产品的一部分。
缺点
① 实现过程中不应有的折衷方案。
② 开发者急于完成原型而忽略了整体设计和可维护性;
③ 用户的参与过多也造成了软件开发管理的混乱。

螺旋模型
特点
加入风险分析,常指导大型软件项目;
优点
大型软件开发项目有较好的风险控制;
缺点
① 需要风险评估的经验;
②契约开发通常需要事先指定过程模型和发布产品;
③ 普及程度较低;

喷泉模型(是面向对象生命周期模型)
·特点·
迭代和无缝特性。
迭代:求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统。
无缝:分析、设计、编码各阶段间不存在明显边界。
优点
无缝,可同步开发,提高开发效率,节省开发时间,适应面向对象软件。
缺点
可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大。

基于构建的开发模型
基于构建的开发模型是利用预先包装的构建来构建应用系统,应用于工程和应用系统工程领域。
统一过程模型
Rational统一过程模型(了解即可):该过程强调以迭代和渐增方式开发软件。
特点
是一个二维生命周期模型
优点
①不断的版本发布成为一种团队日常工作的真正驱动力;
②将发现问题、制定方案和解决过程集成到下一次迭代;
③迭代开发,降低风险;
④更好地安排产品开发的辅助过程。
缺点
RUP只是一个开发的过程,并没有涵盖软件过程的全部内容。

3.软件项目需求分析

软件需求

①目的:“确定系统必须做什么?”
②主要任务:
(1)确定对系统的综合要求(功能需求、性能需求、可靠性和可用性需求、出错性处理需求、接口需求、约束、逆向需求、将来可能提出的需求。)
(2)分析系统的数据要求
(3)导出系统的逻辑模型
描述方法:数据流图、数据字典、实体-联系图、和主要的处理算法。
(4)修正系统的开发计划。
(5)需求分析评审:验证一致性、完整性、现实性、有效性
③需求分析原则
1)必须能表示和理解问题的信息域
2)必须能定义软件将完成什么任务
3)必须表示软件的行为
4)必须划分描述数据、功能和行为的模型
5)分析过程应该从要素信息移向细节信息

4.软件项目系统设计

①主要内容:
总体结构设计、代码设计、输入设计、输出设计、处理过程设计、数据存储设计、用户界面设计和安全控制设计
②设计方法:面向数据流的结构化设计方法(SD)、面向对象的设计方法(OOD)
③步骤:概要设计、详细设计
概要设计:软件系统总体结构设计、数据结构及数据库设计、编写概要设计文档(概要设计说明书、数据库设计说明书、用户手册及修订测试计划)、评审
详细设计:对每个模块进行详细设计、对模块内部的数据结构进行设计、对数据库进行物理设计、其他设计、编写详细设计说明书、评审。

5.软件项目系统测试

系统测试与调试

系统测试:软件测试、硬件测试、网络测试
测试目的:以最少的人力和时间发现潜在的各种错误和缺陷

软件测试策略

单元测试
测试每个模块是否能够正确运行。往往发现的是编码和详细设计的错误。
子系统测试(集成测试)
把经过单元测试的模块行形成一个子系统测试。往往发现的是模块接口错误。
非增量集成:测试各个模块,最后组合起来测试
增量集成【自顶向下集成、自底向上集成、回归测试、冒烟测试】:以小增量的方式逐步进行构造和测试
系统测试
把经过测试的子系统装配成一个完整的系统来测试。往往发现的是软件设计中的错误。
回归测试
每当一个新的模块结合进来,进行一次新的测试,观察是否带来了副作用。
验收测试(确认测试)
把软件系统作为单一的实体进行测试,测试内容与系统测试基本相同。系统需求说明中的错误。
平行运行
与旧的系统进行比较:稳定性、可靠性、使用性等等。

测试方法

白盒测试(结构测试、逻辑驱动、基于程序的测试)
白盒测试以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。
黑盒测试(功能测试、数据驱动测试、基于规格说明书的测试)
它是一种从用户观点出发的测试。用这种方法进行测试时,把被测程序看做一个黑盒,不考虑内部结构和特性,测试者只考虑程序输入输出和程序功能,根据需求规格说明书来设计测试用例,推断测试结果的正确性。通常被用来验证软件功能的正确性和可操作性。

6.软件项目管理

  1. 范围
    四点:人员、产品、过程、项目

  2. 项目估算
    ①醒目进行估算
    ②基于分解技术进行估算
    ③基于经验估算模型进行估算

  3. 成本估算方法
    自顶向下估算、自底向上估算、差别估算、其他估算(专家、类推、算式)

  4. 进度管理
    ①方法:甘特图和项目计划评审技术图
    ②软件评审:
    设计质量评审、程序质量评审、与运行环境的借口

7.软件度量

软件复杂性度量参数:规模、难度、结构、智能度
软件复杂性包括:程序复杂性和文档复杂性

软件设计师(五)——软件工程基础知识相关推荐

  1. 软件设计师-5.软件工程基础知识

    5.1 软件工程概述 5.1.1 软件生存周期 软件:包含程序.数据及相关文档. 软件工程:涉及到软件开发.维护.管理等多方面的原理.工具与环境.最终的目的是开发高质量的软件. 目的:提高软件生产率. ...

  2. 软件设计师-4.操作系统基础知识

    4.1 操作系统相关概念 主要掌握一些概念层级的内容 ➣ 考点1:操作系统的作用 ➣考点2:特殊的操作系统 4.1.1 操作系统-基本概念. 操作系统作用: 管理系统的硬件.软件.数据资源 控制程序运 ...

  3. 软件设计师17-网络基础知识

    一 计算机概念 1 计算机网络定义: 1)将异地的具有独立功能(平等)的多台计算机及外部设备 2)通过网络线路连接起来, 3)在网络操作系统. 网络管理软件. 网络通信协议的管理和协调下 4)实现资源 ...

  4. 【软考-软件设计师】计算机系统基础知识

  5. 软件设计师教程(九)计算机系统知识-软件工程基础知识

    软件设计师教程 软件设计师教程(一)计算机系统知识-计算机系统基础知识 软件设计师教程(二)计算机系统知识-计算机体系结构 软件设计师教程(三)计算机系统知识-计算机体系结构 软件设计师教程(四)计算 ...

  6. 软件工程基础知识--软件过程模型

    软件过程模型习惯上也称为软件开发模型,它是软件开发全部过程.活动和任务的结构框架.典型的软件过程模型有瀑布模型.增量模型.演化模型(原型模型.螺旋模型).喷泉模型.基于构件的开发模型和形式化方法模型等 ...

  7. 软件工程基础知识--运行和维护

    在系统测试.调试中,使用的是系统测试数据,有些实际运行中可能出现的问题很难通过这些数据被发现.所以,一个系统开发后,让它实际运行一段时间,是对系统最好的检验和测试方法. 系统转换 系统试运行阶段的主要 ...

  8. 2015年上半年 软件设计师 上午试卷 综合知识-2

    2015年上半年 软件设计师 上午试卷 综合知识-2 与算术表达式"(a+(b-c))*d" 对应的树是(21). 答案: B 本题考查程序语言与数据结构基础知识. 对算术表达式& ...

  9. 软件工程基础知识--认识软件工程

    计算机软件 计算机软件是指计算机系统中的程序及其文档.程序是计算任务的处理对象和处理规则的描述.任何以计算机为处理工具的任务都是计算任务.处理对象是数据(如数字.文字.图形.图像.声音等,它们只是表示 ...

最新文章

  1. Activity管理(二):adj内存管理机制
  2. hibernate lazy加载
  3. python插入排序_python 插入排序,选择排序
  4. dz论坛发html乱码,发帖时出现乱码 - Discuz!-安装使用 - Discuz! 官方站 - Powered by Discuz!...
  5. Centos6.8操作防火墙
  6. SpringBoot使用@Transactional
  7. RHEL/Centos7下使用EPEL和REMI源
  8. C# Frequently Asked Questions From The C# team
  9. HTML+CSS纯静态页面布局的理解(一)
  10. Coursera视频无法播放问题解决
  11. Prometheus安装配置及其相关组件的应用
  12. Android 针对华为手机调用裁剪出现圆形裁剪框的处理
  13. 【Python画图】不显示x、y坐标
  14. 语义分割|学习记录(4)膨胀卷积(空洞卷积 )
  15. R7000P进入ubuntu18.04黑屏问题
  16. wps斜杠日期格式_使用WPS处理日期数据格式的方法
  17. 推荐一个临时邮箱生成网站,专门用于各种注册用途
  18. 【Hive】窗口函数详解
  19. calico 打通研发电脑到POD的访问
  20. DeepFashion服装检索及代码实现

热门文章

  1. 移动app测试的多样性_移动可用性测试(四):远程测试
  2. c 服务器来源组件,服务器C/S 组件模式的调研
  3. python time limit exceeded_Python 的leecode问题
  4. xp系统怎样启动搜索服务器,xp系统怎么启动ftp服务器
  5. Mac快捷键大全(转)
  6. 微信小游戏游戏圈处理(cocos creator处理)
  7. 怎么关闭win10防火墙
  8. 基于以太坊智能合约开发
  9. firefox快捷键搜索类
  10. Go web框架 Echo