软件工程考试速通

弄明白可行性研究是写什么的,干什么的,里面通常包括哪些要素。

可行性研究的目的 不是解决方案,而是确定问题是否值得去解决。

可行性研究得实质 是要进行一次大大压缩简化了的系统分析和设计过程,在较高层次上以比较抽象的方式进行系统分析和设计过程。

可行性研究的任务

  • 进一步分析和澄清问题定义,导出系统的逻辑模型(DFD)

  • 从系统逻辑模型出发,探索若干可选择的主要解法(系统实现方案)

  • 对每种解法都研究它的可行性

问题定义

它是指在对拟研发软件进行可行性分析和立项之前,对相关主要需求问题进行初步调研、确认和描述的过程。

  • 主要包括:提出问题、初步调研、定义问题、完成 "问题定义报告" 等。

  • 目的是弄清用户需要计算机解决的问题根本所在,以及项目所需的资源和经费。

经济可行性是按照什么去分析的。

  • 市场经济及竞争实力及投资分析;

  • 新软件开发成功后所带来的经济效益分析与预测

  • 对软件项目开发的成本以及效益进行估算,确定项目是否值得开发

技术可行性可以从哪几个角度去考虑。

  1. 开发风险:在已有的条件下,能否实现软件项目的功能和性能。

  2. 资源风险:现有的资源是否满足软件项目开发的需求。

  3. 技术风险:新技术的引进是否可以达到软件项目的需要。

  4. 对要开发软件项目的功能、限制条件和技术特点进行分析。

  5. 确定在现有的资源条件下(包括硬件和软件资源、技术人员和管理人员水平等),项目是否能够开发。

操作可行性是做什么的?

它是指软件项目在具体实施前及过程中的组织管理程序,方法在运用起来是否好用、是否流畅,以至于最后项目得以实现,操作的可行性更侧重于组织管理。

  1. 原业务与新系统流程的相近程度和差异。

  2. 业务处理的专业化程度,功能、性能、安全性、可靠性及接口等。

  3. 对用户操作方式及具体使用要求。

  4. 新软件界面的友好程度以及操作的便捷程度。

  5. 用户的具体实际应用能力及存在的问题等。

随便给你个任务,分析技术可行性的时候你要找出来这个任务中可能有哪些技术,针对这些技术目前状况,去分析它的技术。

初步设计

总体设计的主要任务

  • 把分析阶段得到的数据模型映射成数据库设计

  • 数据流图映射成软件功能结构

  • 行为模型可以用于详细设计阶段的流程、算法设计。

总体设计的过程

九个步骤
  1. 设想供选择的方案

  2. 选取合理的方案

  3. 推荐最佳方案

  4. 功能分解

  5. 设计软件结构

  6. 设计数据库

  7. 制定测试计划

  8. 书写文档

  9. 审查和复审

两个主要阶段组成

1)系统设计阶段:确定系统的具体实现方案,设想方案,选取合理方案,推荐最佳方案。

2)结构设计阶段:确定软件的结构,确定每个程序是由哪些模块组成的,以及这些模块之间的关系。

什么是软件危机,软件危机有哪些表现形式,是怎么产生

  • 软件危机是指:在计算机软件开发和维护时所遇到的一系列问题。

  • 如何开发软件以满足社会对软件日益增长的需求

  • 如何维护数量不断增长的已有软件

软件危机产生的根源

对软件这样一类复杂和特殊系统的认知不清。特点、规律性、复杂性

没有找到支持软件系统开发的有效方法,基础理论、关键技术、开发过程、支撑工具。

缺乏成功软件开发实践 以及相应的开发经验。系统总结、认真分析、充分借鉴、吸取教训。

软件危机的表现形式

  • 进度经常延迟

  • 质量无法保证

  • 成本超出预算

  • 软件维护困难

  • 失败风险很大

结构化程序设计和面向对象程序设计有什么中心思想(结构化是自顶向下,逐步求精)

结构化程序设计(Structured Programming, SP)有三个基本特点

  1. 结构化程序设计采用自顶向下、逐步求精的程序设计方法。

  2. 结构化程序设计的定义是:只使用顺序、选择和循环三种基本控制结构来构造程序。

  3. 采用主程序员组的组织形式,用经验多、能力强、技术好的程序员作为主程序员

基本思想

不管是现实世界(应用问题) 还是计算机世界(软件系统),它们都是由多样化的对象所构成 的,每个对象都有其状态并可提供功能和服务 ,不同对象之间通过交互来开展协作来实现功能和提供服务。

基本思想

面向对象软件工程提供对象、类、属性、操作、消息、继承等概念 来抽象表示现实世界的应用,分析其软件需求特征 ,建立起软件需求模型 ,描述软件需求

  1. 基于类、包、关联等概念来分析应用系统的构成。

  2. 借助类的方法等概念来描述对象所具有的行为。

  3. 利用对象间的消息传递等概念来分析多个不同对象如何通过协作来实现应用功能。

面向对象需求分析方法学还提供了可视化的建模语言,帮助需求工程师建立多试点的软件需求模型。如用例模型、交互模型、分析类模型等等。

软件生命周期有哪些阶段,每个阶段的任务是什么,有哪些注意事项

1)

要解决得问题是什么

2)

对于上一个阶段所确定的问题有行得通得解决办法吗?

3)

为了解决这个问题,目标系统必须做什么

4)

概括地说,应该怎么实现目标系统

5)

应该怎样具体地实现这个系统呢?

6)

这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。

7)

这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。

8)

维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户地需要。

提高软件可维护性需要注意什么(要谈谈你对每一项的理解),想要提高软件可维护性,有哪些方法可以去想。

软件的可维护性

软件的可维护性 定性地定义为:维护人员理解、改正、改动或改进这个软件的难易程度。

提高可维护性是支配软件工程方法学所有步骤的关键目标。

决定软件可维护性的因素主要有下述 5 个

可理解性

它表现为外来读者理解软件的结构、功能、接口和内部处理过程的难易程度,可以以下方面提高软件的可理解性:

  • 模块化(模块结构良好,高内聚,松耦合)

  • 详细的设计文档

  • 结构化设计

  • 程序内部的文档

  • 良好的高级程序设计语言等

可测试性

诊断和测试的容易程度取决于软件容易理解的程序,什么样的软件是容易理解的。

  • 良好的文档

  • 合适的软件结构

  • 可用的软件结构

  • 可用的测试工具

  • 调试工具

  • 以前设计的测试过程

  • 开发阶段用过的测试方案,以便维护人员进行回归测试

  • 在设计阶段应该尽力把软件设计成容易测试和容易诊断的。

对于程序模块

  • 可以用程序复杂度来度量它的可测试性

  • 模块的环形复杂度越大,可执行的路径就越多,全面测试它的难度就越高。

可修改性

  • 软件容易修改的程度和本书第 5 章讲过的设计原理和启发规则直接有关。

  • 耦合、内聚、信息隐藏、局部化、控制域与作用域的关系等,都影响软件的可修改性。

可移植性

  • 它是指的是:把程序从一种计算环境(硬件配置和操作系统)转移到另一种计算环境的难易程度。

  • 把与硬件、操作系统以其其他外部设备有关的程序代码集中放到特定的程序模块中,可以把因环境变化而必须修改的程序局限在少数程序模块中,从而降低修改的难度。

可重用性

所谓重用(reuse)是指同一事物不做修改或稍加改动就在不同环境中多次重复使用。大量使用可重用的软件构件来开发软件,可以从下述两个方面提高软件的可维护性。

  1. 可重用的软件构件在开发时都经过很严格的测试,可靠性比较高,且在每次重用过程中都会发现并清除一些错误,随着实践推移,这样的构建将变成实质上无错误的。软件中使用的可重用构建越多,软件的可靠性越高,改正性维护需求就越少

  2. 很容易修改可重用的软件构件使之再次应用在新环境中,因此,软件中使用的可重用构件越多,适应性和完善性维护也就越容易。

数据流图:数据词典概念,有什么作用;

数据字典

  • 数据字典(Data Dictionary, DD) 是结构化分析的另一种有力的工具。

  • 数据流图描述了系统的分解,但没有对图中各个成分进行说明。

  • 数据字典的作用是在软件分析和设计过程提供数据描述,是数据流必不可少的辅助资料。

  • 数据流和数据字典共同构成系统的逻辑模型,两者缺一不可。

  • 数据字典是为数据流图中的每个数据流、数据存储、数据处理以及组成数据流或文件的数据项做出说明

数据流图的用法,怎么样用分层的数据流图做设计。

数据流图

  • 数据流图(Data Flow Diagram, DFD) 是一种图形化建模工具,也是结构化分析的最基本的工具。

  • 它描述系统由哪几部分组成,各部分之间有什么联系以及描绘信息流和数据从输入移动到输出的过程中所经历的变换(加工/处理)

  • 数据流图是软件系统逻辑功能的图形表示 ,在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程

  • 在设计数据流图时**只需要考虑系统必须完成的基本逻辑功能,**完全不需要考虑怎样地具体地实现这些功能,所以数据流图也是今后进行软件设计很好的出发点。

设计数据流图的步骤

简单概括为:由外向内,自顶向下,逐层细化,完善求精。

  • 数据流图的基本要点是描述"做什么",而不考虑"怎么做"。

  • 通常数据流图要忽略出错处理,也不包括诸如打开文件和关闭文件之类的内部处理。

  • 绘制数据流图的原则是由外向里,自顶向下描述问题的处理过程,通过一系列的分解步骤,逐步求精地表达出整个系统功能的内部关系。

明白软件工程中常见工具缩略词的含义(SA、PAD图)流程图,数据框架图,数据流图应该怎么画详见

会算投资回报率,算投资回报的时间

McCabe 方法

1)流图中线性无关的区域数等于环形复杂度。

2)流图 G 的环形复杂度 V(G) = E - N + 2,其中,E 是流图中边的条数,N 是结点数。

3)流图 G 的环形复杂度 V(G) = P + 1,其中,P 是流图中判定结点的数据。

Halsted 方法

预测的长度 H 与实际长度 N 非常接近。

Halstead 还给出了预测程序中包含错误的个数的公式如下:

测试部分考一点:在设计任务时要会设计他的测试,比如我们要达到会设计哪一级别的测试:你是语句覆盖,还是路径覆盖,还是判定覆盖等,然后设计对应的测试方案或叫测试用例,你这个测试用例能完成什么样的覆盖。

逻辑覆盖

逻辑覆盖是对一系列测试过程的总称,这组测试过程逐渐进行越来越完整的通路测试。

语句覆盖

语句覆盖是很弱的逻辑覆盖标准

  • 语句覆盖对程序的逻辑覆盖很少,在上面例子中两个判定条件都只测试了条件为真的情况,如果条件为假时处理有错误,显然不能发现。

  • 语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况,为了执行 sacbed 路径,以测试每个语句,只需两个判定表达式(A > 1) AND (B = 0) OR (X > 1) 都取真值,因此使用上述一组测试数据就够了。

  • 如果程序中把第一个判定表达式中的逻辑运算符 AND 错写成 OR,或把第二个判定表达式中的条件 X > 1 误写成 X < 1,使用上面的测试数据并不能查出这些错误。

判定覆盖

  • 它又叫分支覆盖,它的含义是,不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次,也就是每个判定的每个分支都至少执行一次。

  • 对于上述例子来说,能够分别覆盖路径 sacbed 和 sabd 的两组测试数据,或者可以分别覆盖路径 sacbd 和 sabed 的两组测试数据,都满足判定覆盖标准。例如,以下两组测试数据就可做到判定覆盖:

  1. A = 3,B = 0,X = 1(覆盖 sacbd)

  2. A = 2,B = 1, X = 3(覆盖 sabed)

  • 判定覆盖比语句覆盖强,但是对程序逻辑的覆盖程度仍然不高,例如,上面的测试数据只覆盖了程序全部路径的一半。

条件覆盖

  • 条件覆盖的含义是,不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。
  • 上例中共有两个判定表达式,每个表达式中有两个条件,为了做到条件覆盖,应该选取测试数据满足下面的要求。

判定/条件覆盖

  • 判定/条件覆盖是一种能同时满足判定覆盖和条件覆盖的逻辑覆盖,它的含义是,选取足够多的测试数据,使得判定表达式中的每个条件都取到各种可能的值,而且每个判定表达式也都取到各种可能的结果。

  • 对于上例而言,下述两组测试数据满足判定/条件覆盖标准:

    1. A = 2, B = 0, X = 4

    2. A = 1, B = 1, X = 1

  • 这两组测试数据也就是为了满足条件覆盖标准最初选取的两组数据,因此,有时判定/条件覆盖也并不比条件覆盖更强。

条件组合覆盖

它是更强的逻辑覆盖标准,它要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。

  • 满足条件组合覆盖标准的测试数据,也一定满足判定标准、条件覆盖和判定/条件覆盖标准 ,条件组合覆盖是前述几种覆盖标准中最强的,但是,满足条件组合覆盖标准的测试数据并不一定能使程序中每条路径都执行到。上述 4 组测试数据都没有测试到路径 sacbd

点覆盖

  • 如果连通图 G 的子图 G 是联通的,而且包含 G 的所有结点,则称 G 是 G 的点覆盖。

  • 在正常情况下流图是联通的有向图,满足点覆盖标准要求选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次,由于流图的每个结点与一条或多条语句相对应。点覆盖标准和语句覆盖标准是相同的

边覆盖

如果连通图 G 的子图 G 是连通的,而且包含 G 的所有边,则称 G 是 G 的边覆盖,为了满足覆盖的测试标准,要求选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次,通常边覆盖和判定覆盖是一致的

路径覆盖

路径覆盖的含义是,选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。

用来表示算法的方式:用图,伪代码表示,不会用程序表示算法

下面是一个用 PDL 语言描述的统计单词数目的例子

复制代码
统计空格seq
    打开文件
    读入字符串
    Totalsum = 0
    程序体 iter unti1 文件结束
    
    程序体end
    打印总数 seq
    打印出空格总数
    打印总数 end
    关闭文件
    停止
    统计空格 end
    
程序首先是顺序结构,共 7 条语句,其中程序体是循环结构,PDL 可以很好地表示嵌套结构。
相关推荐
while(1){yan}1 天前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
盛世宏博北京1 天前
高效环境管控:楼宇机房以太网温湿度精准监测系统方案
开发语言·数据库·php·以太网温湿度变送器
运维行者_1 天前
2026 技术升级,OpManager 新增 AI 网络拓扑与带宽预测功能
运维·网络·数据库·人工智能·安全·web安全·自动化
gfdhy1 天前
【C++实战】多态版商品库存管理系统:从设计到实现,吃透面向对象核心
开发语言·数据库·c++·microsoft·毕业设计·毕设
Elastic 中国社区官方博客1 天前
Elasticsearch:上下文工程 vs. 提示词工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小唐同学爱学习1 天前
如何解决海量数据存储
java·数据库·spring boot·mysql
wWYy.1 天前
详解redis(15):缓存雪崩
数据库·redis·缓存
zzcufo1 天前
多邻国第五阶段第13部分
java·开发语言·数据库
这周也會开心1 天前
Redis相关知识点
数据库·redis·缓存
搞科研的小刘选手1 天前
【数字经济专题会议】第三届粤港澳大湾区数字经济与人工智能国际学术会议(DEAI 2026)
人工智能·aigc·软件工程·电子商务·数字经济·经济学·学术会议