软件工程选择题复习笔记
一、软件工程学概述
- 用户使用不当、硬件可靠性差、对软件的错误认识属于软件危机的表现,不是原因
- 软件危机,1960年以来,软件工程1968提出
- 软件工程着重于建造一个软件系统
- 八个阶段可以归纳为计划(定义)阶段,开发阶段和运行阶段
- 原型的使用和开发过程,叫作原型生存期
- RUP获取需求采用的技术是Use &Case
- 可把软件生存周期中可能执行的活动分为基本过程、支持过程和组织过程
- 软件质量是软件特性的总和,是软件满足规定或潜在用户需求的能力。包括内部质量、外部质量和使用质量
- 统一过程UP初启阶段的里程碑是生命周期目标,精化阶段的里程碑是生命周期架构
- 软件的四种基本活动:软件规格说明、软件开发、软件确认、软件演进
- 瀑布模型:文档驱动,严格顺序性,不能适应变化
- (快速)原型模型:本质是快速,质量差点,能适应变化
- 增量模型:较短时间提交部分产品,可分为渐增模型和原型模型。
- 螺旋模型:风险驱动,大规模项目,吸收了“演化”的概念
- 喷泉模型:面向对象开发过程迭代和无缝
- RUP:二维面向对象,适用大型需求不断变化,用况驱动,体系结构为中心,迭代、增量式开发
- 敏捷过程:商业小项目竞争有限资源,其中最重要的是XP极限编程
- 极限编程:快速的过程中可持续
- 微软过程:商业竞争,有争议
二、可行性研究 (先定义问题)
- 可行性研究阶段使用DFD和数据字典导出新系统的高层逻辑模型
- 可行性研究阶段使用系统流程图描绘物理模型,习惯画法是从顶向下或从左到右
- 数据字典:=是定义为;+是连接两个分量;[ ]是选择其中之一;{ }是可以重复;()是可有可无
- 成本/效益分析时假设生命周期为5年
操作可行性是看用户能不能操作好这一个系统。
三、需求分析(系统做什么)
- 需求分析最终结果是产生需求规格说明书
- DFD数据流图是软件需求分析阶段过程中采用的工具,用于描述系统的分解,即描述系统由哪几个部分组成,各部分之间有什么联系等等。
- DFD的基本符号是加工、数据流、数据存储和外部实体(数据源和数据池)
- DFD中每个加工至少有一个输入输出流
- 加工是以数据结构或数据内容作为加工对象的,加工是数据的变换单元
- 结构化分析方法就是面向数据流自顶向下逐步求精的进行需求分析的方法
- 需求分析过程中,数据字典记录了有关数据元素的信息,IPO图记录了对算法的简明描述
- 在应用规格说明技术中,小型规格说明是对列表中单词或短语的准确说明
- 描述了系统是什么的模型是概念模型
- E-R图建立数据模型(信息模型),DFD是建立功能模型的基础,状态转换图描述行为模型
- E-R图的数据对象只封装了数据而没有对施加于数据上的操作的引用
- 联系也可能有属性
- 一个状态图中只能有一个初态,终态可以有0到多个
- 整个需求的主体是功能需求
- 需求规约基本性质①重要性和稳定性程度。 ②可修改的。 ③完整的。 ④一致的。
- 三种用于需求分析的图形工具:层次方框图、Warnier图、IPO图
四、形式化说明技术 (需求说明方法)
- 为了消除自然语言书写软件需求规格说明书的缺点,提出形式化说明技术
- 有穷状态机、petri图、Z语言是三种典型的形式化方法
五、总体设计(怎么做)
- 总体设计有两个主要阶段:系统设计阶段和结构设计阶段
- 结构设计阶段的功能分解使得DFD图进一步细化,同时要用IPO图描述算法
- 耦合口诀:数标控制外部公共内容;内聚口诀:偶逻时过通顺功
- 重用率高的扇入较大,即有很多上级模块调用它
- 模块的作用域应该在控制域之中
- 总体设计工具有层次图、HIPO图、结构图
- 模块化互联语言是一种结构设计语言
- 结构化设计方法一般也称为面向数据流的设计,程序设计语言的基本成分是数据成分、运算成分、控制成分和( 传输成分 )。结构化设计方法是面向过程的设计方法
- 数据流的类型主要包括事务型和变换型
- OLAP与OLTP(联机事务处理)是数据库中的两种操作模式。OLAP主要处理分析型查询,支持复杂的分析和操作,侧重决策支持,并且数据可以来自不同的地方;而OLTP则主要处理日常的事务,例如银行交易,侧重基本的、日常的事务处理,例如查询、插入、更新和删除等。
-
概要设计的任务是决定系统中各个模块的外部特性 ,即其( 功能和输入输出数据 )。
六、详细设计
- 结构化设计方法(SD)在软件开发中,用于概要设计(注:概要设计实现相对独立且具有单一功能的模块组成的结构)
- 结构化程序设计技术(SP)是详细设计的逻辑基础,主要强调的是程序的易读性。
- 详细设计主要确定每个模块的具体设计过程,也称过程设计。
- 结构程序设计(SP)三种控制结构是:顺序、选择(分支)和循环(重复)。程序应该只有一个入口和一个出口
- 详细描述处理过程的三种工具:图形、表格和语言
- 结构化程序设计方法:采用自顶向下、逐步求精,主程序员组的组织形式。
- 问题分析图(PAD)是由程序流程图演化而来,用二维树形结构的图来表示程序的控制流,将其翻译成程序代码比较容易。它既可以用来表示程序逻辑,也可以用来描述数据结构,支持结构化程序设计方法,仅具有顺序、选择和循环三类基本成分。在程序流程图中,箭头代表的是控制流。
- 盒图(N-S图)可以表示模块的层次结构,提出了用方框图来代替传统的程序流程图。
- 过程设计语言PDL是一种伪码,是结构化语言
- 当多重嵌套的条件选择、描述条件组合时用判定树、判定表
- jackson(JSP)方法是面向数据结构,适用数据处理系统的开发,将数据结构映射成软件的程序结构。
- 模块之间的层次关系有嵌套和并列两种
- 环形复杂度V(G)=1是模块规模的合理上限
-
第一个体现结构化编程思想的程序设计语言是( Pascal语言)
七、实现(编码与测试)
- Prolog是不适合作为科学工程计算的程序设计语言,而适用于表达知识和推理
- 单元测试的测试用例主要依据详细设计的结果来设计,
- 人工检测属于静态检测方法
- 静态测试包括:代码检查法、静态结构分析法和静态质量度量法。( 静态测试 )实际上是确认在的外部环境中软件的逻辑正确性,它应该包括需求规格说明和程序等的确认。
- 软件测试按照功能可以划分为黑盒测试和白盒测试。它们都是动态测试。
- Alpha测试:用户在开发者的场所进行,在开发者的指导下进行测试。是在受控的环境下进行的
- Beta测试:用户在一个或多个客户场所进行,开发者通常不在现场。类似游戏中的测试服。
- 与测试用例无关的文档是项目开发计划
-
单元测试阶段主要涉及( 编码和详细设计)的文档
-
与确认测试阶段有关的文档是(需求规格说明书)
-
( 因果图)能够有效地检测输入条件的各种组合可能会引起的错误
-
属于维护阶段的文档是( 软件问题报告 )
-
单元测试是发现编码错误,集成测试是发现模块的接口错误,确认测试是为了发现功能错误,那么系统测试是为了发现( 性能、质量不合要求 )的错误
-
强行排除法是一种常用的简单方法,下列选项中( )不属于强行排除法。
输出内存储器的信息
进行回归测试
在程序中插入打印语句
利用自动调试工具
B
-
软件调试的方法中,( )是从一般原理或前提出发,经过排除和细化的过程,推导出结论的方法。
回溯法
归纳法
二分查找法
演绎法
D
-
下列不属于软件调试技术的是( )。
强行排错法
集成测试法
回溯法
原因排除法
B
-
单独测试一个模块时,有时需要一个驱动程序驱动被测试的模块。有时还要有一个或几个( )模块模拟由被测试模块调用的模块。
子(Sub)
仿真(Initation)
栈(Stack)
桩(Stub)
D
-
下列选项中不属于单元测试的内容的是( )。
模块接口测试
局部数据结构测试
路径测试
数据测试
D
-
在软件测试过程的4个步骤中,测试依据是需求规格说明的是( )。
单元测试
集成测试
确认测试
系统测试
C
黑盒测试,别名功能测试
黑盒测试把程序看作一个黑盒子,完全不考虑程序的内部结构和处理过程。 黑盒测试是在程序接口进行的测试,只检查程序功能是否能按照需求规格说明书的规定正常使用。
白盒测试,别名结构测试
白盒测试把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。
八、维护
- 结构化维护和非结构化维护的主要区别在于软件配置是否完整
- 软件维护的副作用是指因修改软件而造成的错误
- 适应性维护:适应软硬件变化
- 完善性维护:适应新的功能
-
软件维护的副作用主要有以下哪几种(编码副作用、数据副作用、文档副作用)
-
可维护性的特性中,相互矛盾的是(效率和可修改性 )
九、面向对象方法学引论
- 面向对象方法把对象作为最基本的元素 、
- UML又称统一建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括需求分析到规格,到构造和配置。
- 封装是手段,它的目的是达到信息隐蔽
十、面向对象分析
- 面向对象分析是对系统进行需求建模的一种方法。
十一、面向对象设计
- 面向对象设计是建立求解域模型的过程
十二、面向对象实现
十三、软件项目管理
- 工作量估算模型COCOMO2的层次结构中,估算选择有:对象点,功能点和代码行
- 成本估算工具就是一种典型的项目管理工具
-
Putnam 成本估算模型是一个(动态多变量 )模型
-
ISO 的软件质量评价模型由 3 层组成,其中用于评价设计质量的准则是( SQDC)
-
不属于序言性注释的有( 语句功能)
-
进度安排的好坏往往会影响整个项目的按期完成,下列属于软件进度的方法有(工程网络图 )
十四、中英文翻译
Software development refers to that the software to meet the specification must be produced.软件开发指的是生产出满足规格说明书要求的软件
E-commerce has become a fact of modern life, with millions of people now shopping online.电子商务已经成为现代生活的一个事实,现在已有数百万人在线购物。
Data management possesses the functionalities of updating data in a database and retrieving data from a database.数据管理具有更新数据库中的数据以及从数据库中检索数据等功能。
TCP/IP protocols serve as the fundamental standards for the development of the Internet.TCP/IP协议是互联网开发的基础标准。
C++ fully supports object-oriented programming, encompassing encapsulation, data hiding, inheritance, and polymorphism as its four key features.C++完全支持面向对象编程,包括封装、数据隐藏、继承和多态这四种特性。
HTML and CSS are the fundamental technologies for building websites, responsible for structure and styling respectively.
HTML和CSS是构建网站的基础技术,分别负责结构和样式。
Python is renowned for its simplicity and readability, making it a popular choice for beginners in programming.
Python以其简单性和可读性而闻名,成为编程初学者的热门选择。
Machine learning algorithms enable computers to learn from data and make predictions or decisions without explicit programming.
机器学习算法使计算机能够从数据中学习,并在没有明确编程的情况下进行预测或决策。
The field of artificial intelligence encompasses various techniques, including natural language processing, computer vision, and robotics.
人工智能领域涵盖了各种技术,包括自然语言处理、计算机视觉和机器人学。
The concept of blockchain technology revolutionizes data management, providing a secure and transparent way to store and transfer information.
区块链技术的概念革新了数据管理,提供了一种安全、透明的方式来存储和传输信息。
Quantum computing promises unprecedented computing power, potentially revolutionizing fields like cryptography and material science.
量子计算有望带来前所未有的计算能力,可能会革新密码学和材料科学等领域。
Virtual reality technology creates immersive experiences, allowing users to interact with three-dimensional environments.
虚拟现实技术创造了沉浸式体验,使用户能够与三维环境进行交互。
The field of cryptography ensures secure communication by employing algorithms that protect data from unauthorized access.
密码学领域通过使用算法来保护数据免受未经授权的访问,确保通信安全。
Cloud computing enables on-demand access to shared computing resources, such as servers, storage, and databases, through the internet.
云计算通过互联网提供对共享计算资源的按需访问,如服务器、存储和数据库。
The development of artificial intelligence has significantly improved the efficiency of computer-assisted decision-making.
人工智能的发展极大地提高了计算机辅助决策的效率。
The rise of cloud computing has transformed the way businesses store and access data.
云计算的兴起改变了企业存储和访问数据的方式。
The introduction of quantum computing has the potential to revolutionize the field of computer science.
量子计算的引入有可能彻底改变计算机科学领域。
Cybersecurity has become a crucial aspect of computer technology, protecting users from various online threats.
网络安全已成为计算机技术的一个关键方面,保护用户免受各种网络威胁。
The integration of big data analytics with machine learning has led to significant insights in various industries.
大数据分析与机器学习的结合为各行各业带来了重要的见解。
The advancement of computer graphics has enabled realistic simulations and animations in various fields.
计算机图形学的进步使得各个领域能够进行逼真的模拟和动画制作。
The evolution of software development methodologies has improved the quality and efficiency of computer programs.
软件开发方法论的演变提高了计算机程序的质量和效率。
The popularity of mobile computing has led to the development of numerous innovative mobile applications.
移动计算的普及催生了许多创新的移动应用程序。
The use of blockchain technology in computer systems has provided a secure and transparent way to handle transactions.
区块链技术在计算机系统中的应用为处理交易提供了一种安全、透明的方式。
The development of high-performance computing has enabled faster and more accurate simulations in scientific research.
高性能计算的发展使得科学研究中的模拟更快、更准确。
Application architecture specifies the technologies to be used to implement one or more information systems. It serves as an outline for detailed design, construction, and implementation. Given the models and details, including logical data flow diagrams and entity-relationship diagrams, we can distribute data and processes to create a general design of application architecture.
The design will normally be constrained by architecture standards, project objectives, and the feasibility of the technologies used. The first physical DFD to be drawn is the network architecture data flow diagram. The next step is to distribute data stores to different processors.
Data partitioning and replication are two types of distributed data which most RDBMSs support. There are many distribution options used in data distribution. In the case of storing specific tables on different servers, we should record each table as a data store on the physical DFD and connect each to the appropriate server.
应用架构说明了实现一个或多个信息系统所使用的技术,它作为详细设计、构造和实现的一个大纲。给定了包括逻辑数据流图和实体联系图在内的模型和详细资料,我们可以分配数据和过程以创建应用架构的一个概要设计。概要设计通常会受到架构标准、项目目标和所使用技术的可行性的制约。需要绘制的第一个物理数据流图是网络架构数据流图。接下来是分配数据存储到不同的处理器。数据分区和复制是大多数关系型数据库支持的两种分布式数据形式。有许多分配方法用于数据分布。在不同服务器上存储特定表的情况下,我们应该将每个表记为物理数据流图中的一个数据存储,并将其连接到相应的服务器。
Cloud computing is a phrase used to describe a variety of computing concepts that involve a large number of computers connected through a real-time communication network such as the Internet. In science, cloud computing is a paradigm for distributed computing over a network, and means the ability to run a program or application on many connected computers at the same time. The architecture of a cloud is developed at three layers: infrastructure, platform, and application. The infrastructure layer is built with virtualized computing, storage, and network resources. The platform layer is for general-purpose and repeated usage of the collection of software resources. The application layer is formed with a collection of all needed software modules for SaaS applications. The infrastructure layer serves as the foundation for building the platform layer of the cloud. In turn, the platform layer is the foundation for implementing the application layer for SaaS applications.
云计算是一个术语,用于描述涉及通过互联网等实时通信网络连接的大量计算机的各种计算概念。在科学领域,云计算是网络分布式计算的一种范式,意味着同时在许多相连的计算机上运行程序或应用程序的能力。云的结构分为三层:基础设施、平台和应用。基础设施层由虚拟化的计算、存储和网络资源构建而成。平台层用于通用和重复使用软件资源集合。应用层由为SaaS应用程序所需的所有软件模块集合组成。基础设施层是构建云平台层的基础。反过来,平台层又是实现SaaS应用程序应用层的基础。
At a basic level, cloud computing is simply a means of delivering IT resources as a cloud service. Almost all IT resources can be delivered as a cloud service: applications, compute power, storage capacity, networking, programming tools, even communication services and collaboration tools. Cloud computing began as large-scale Internet service providers such as Google, Amazon, and others built out their infrastructure. An architecture emerged: massively scaled, horizontally distributed system resources, abstracted as virtual IT services and managed as continuously configured, pooled resources. In this architecture, the data is mostly resident on servers "somewhere on the Internet" and the application runs on both the "cloud servers" and the user's browser. Both clouds and grids are built to scale horizontally very efficiently. Both are built to withstand failures of individual elements or nodes. Both are charged on a per-use basis. But while grids typically process batch jobs, with a defined start and end point, cloud services can be continuous. What's more, clouds expand the types of resources available,file storage, databases, and Web services,and extend the applicability to Web and enterprise applications.
从基础层面来说,云计算就是将IT资源作为云服务进行交付的一种方式。几乎所有的IT资源都可以作为云服务提供:应用程序、计算能力、存储容量、网络、编程工具,甚至是通信服务和协作工具。云计算起源于Google、Amazon等大规模Internet服务提供商构建的基础设施。一种架构应运而生:大规模、水平分布的系统资源,被抽象为虚拟IT服务,并作为持续配置的资源池进行管理。在这种架构中,数据主要存储在Internet上某个地方的服务器上,应用程序在“云服务器”和用户的浏览器上运行。云和网格都是为高效水平扩展而构建的。两者都是为了防止单个元素或节点的故障。两者都是按使用量收费。虽然网格通常处理具有明确定义起点和终点的批处理作业,但云服务可以是连续的。此外,云扩展了可用资源的类型,包括文件存储、数据库和Web服务,并将适用性扩展到Web和企业应用。
An architectural Style defines as a family of such systems in terms of a common principle, of structural organization. More specifically, an architectural style defines a vocabulary of components and connector types, and a set of rules on how they can be combined. For many styles there may also exist one or more methods that specify how to determine a system's overall properties from the properties of its parts. Many architectural styles have been developed over the years. The best-known examples of shell-based architectures are programs written in the Unix shell.
架构风格指的是遵循共同原则和结构组织的一系列系统的集合。更具体地说,架构风格定义了一组组件和连接器类型的术语,以及一组关于这些组件和连接器如何组合的规则。对于许多架构风格来说,可能还存在一种或多种方法,用以确定系统整体属性如何从各个部分属性推导出来。多年来,已经发展出了许多不同的架构风格。基于shell的架构风格最著名的例子是那些使用Unix shell编写的程序。