第一章1.1什么是软件?软件和程序的区别是什么?答:⑴软件是程序、数据以及开发、使用和维护程序需要的所有文档的完整集合。
软件的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必须的数据。
⑵软件不是程序,程序是软件的一部分。
程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。
它是由软件开发人员设计和编码的。
程序执行时一般要输入一定的数据,也会输出运行的结果。
没有相关文档,仅有程序是不能称之为软件产品的。
1.2什么是软件生存周期?划分生存周期的主要原则是什么?答:(1)软件的生存周期是指某一软件项目被提出并着手实现开始,直到该软件报废或停止使用为止所经历的时间。
(2)主要原则:各阶段的任务彼此间尽可能相对独立,同一个阶段各项任务的性质尽可能相同,从而降低每个阶段任务的复杂性,简化不同阶段之间的联系,有利于软件开发过程的组织管理。
1.3什么是软件危机?它有哪些主要表现?为什么会产生软件危机?答:(1)软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
(2)主要表现:对软件开发成本和研制进度的估计常常很不精确,导致经费预算经常突破,进度超时完成;由于开发人员常常对用户需求只有模糊的了解以及开发人员和用户又未能及时交换意见,导致已完成的软件不能满足用户的需要;软件产品质量差,可靠性得不到保证;软件产品可维护性差;软件成本在计算机系统总成本中所占的比例逐年上升,软件的发展跟不上硬件的发展;软件开发生产率提高的速度远远跟不上计算机应用速度普及深入趋势,软件发展跟不上用户的要求。
(3)产生软件危机的原因:造成软件危机的原因与软件自身的特点有关,也与软件开发人员在开发和维护时采用的生产方式、方法、技术有关。
软件是计算机系统中的逻辑部件,软件产品往往规模庞大,结构复杂。
给软件的开发和维护带来客观的困难;软件开发的管理困难。
由于软件规模大、结构复杂、又具有无形性,导致管理困难,进度控制困难,可靠性无法保证;软件开发费用不断增加,维护费用急剧上升,直接威胁计算机应用的扩大;软件开发技术落后;生产方式落后;开发工具落后,生产效率提高缓慢。
另外软件开发人员忽视需求分析的重要性,轻视软件维护也是造成软件危机的原因。
1.4什么是软件工程?怎样利用软件工程消除软件危机?答:(1)软件工程是指导计算机软件开发和维护的一门学科(2)首先应该对计算机软件有一个正确的认识,彻底清除“软件就是程序” 的错误观念;要使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法;要有良好的组织、严密的管理,各类人员要相互配合,共同完成任务,充分认识软件开发不是某种个体劳动的神秘技巧;应该开发和使用好的软件工具,从而有效提高软件生产率。
采用“工程化”的思想做指导来解决软件研究中面临的困难和混乱。
1.5何谓面向对象软件工程?简述它和传统软件工程的区别与联系?答:(1)以面向对象程序设计为基础的软件工程。
(2)传统软件工程是以结构化程序设计为基础,而面向对象软件工程是以面向对象程序设计为基础。
与面向过程的软件工程的开发思想相比,面向对象开发方法不再是以功能划分为导向,而是以对象作为整个问题分析的中心,围绕对象展开系统的分析与设计工作。
在开发过程方面,面向对象软件工程和传统软件工程一样也是把软件开发划分为分析、设计、编码和测试等几个阶段,但各个阶段的具体工作不同,除了在编码阶段使用的语言不同外,面向对象软件工程为待开发软件确定“类与对象”一般在需求分析阶段进行,设计阶段则主要完成对象内部的详细设计;而在传统软件工程中,将软件设计划分为“总体设计”和“详细设计”,分别完成软件的总体结构图的设计和各个模块内部算法的详细设计。
即:传统软件工程开发过程包括需求分析、总体设计、详细设计、面向过程的编码和测试;面向对象软件工程开发过程包括需求分析与对象抽取、对象详细设计、面向对象的编码和测试。
1.6什么是软件生存周期模型?试比较本章介绍的四种模型的优缺点,说明每种模型的使用范围答:(1)软件生存周期模型即为软件开发模型,是描述软件开发过程中各种活动如何执行的模型,是软件过程、活动、任务的结构框架。
2.1 在软件开发早期阶段为什么要进行可行性研究?可行性研究的任务是什么?应该从哪几个方面研究目标系统的可行性?答:(1)避免或者减轻项目开发后期可能出现的困境。
(2)其主要任务是,首先需要进行概要的分析研究,初步确定项目的规模和目标,确定项目的约束和限制,必须分析几种可能解法的利弊,从而判定原定系统的目标和规模是否现实,系统完成后带来的效益是否大到值得投资开发这个系统的程度。
(3)经济可行性、技术可行性、操作可行性、法律可行性。
2.2成本—效益分析可用哪些指标进行度量?答:成本方面包括开发成本和运行维护成本;效益方面包括经济效益和社会效益,经济效益可以用货币的时间价值、投资回收期、纯收入来度量。
2.3有人认为,只懂技术的分析员不一定能圆满完成可行性研究的任务。
你同意这种看法吗?为什么?答:同意。
因为可行性研究的任务包括三个方面,除了技术可行性之外,还需要进行经济可行性、操作可行性、社会和法律方面的可行性研究,而只懂技术的分析员对其他方面的研究有可能不满足用户的要求,所以只懂技术的分析员不一定能圆满完成可行性研究的任务。
2.4在【例 2.2】中,把投资改为 6000 元,每年节约金额改为 2000 元,年利率为6%,试计算投资回收期和纯收入。
解:如下表8518.78-6000=2518.78(元)2.5为方便旅客,某航空公司拟开发一个飞机票预定系统。
旅游公司把预定机票的旅客信息(姓名、年龄、工作单位、身份证号码、旅游时间、旅游目的地等)输入进该系统,系统为旅客安排航班,打印出取票通知和账单,旅客在飞机起飞前的 3 天之内凭取票通知和账单交款取机票,系统校对无误即打印出飞机票给旅客。
请写出开发此系统的问题定义,并通过可行性研究分析此系统的可行性。
答:问题定义:飞机票预定系统主要实现以下功能:查询功能:把旅游时间、旅游目的地等输入进该系统,系统显示符合要求的航班。
预定机票:把预定机票的旅客信息(姓名、年龄、工作单位、身份证号码、旅游时间、旅游目的地等)输入进该系统,系统为旅客安排航班,打印出取票通知和账单,并更新记录。
校对并打印机票:旅客在飞机起飞前的 3 天之内凭取票通知和账单交款取机票,系统校对无误即打印出飞机票给旅客。
可行性研究应从经济可行性、技术可行性、操作和社会、法律的角度阐述其可行性,这部分省略……2.6 试为习题 2.5 写可行性研究报告的主要内容。
(本题略)第三章3.1 为什么要进行需求分析?需求分析要经过哪些步骤?答:(1)可行性研究阶段粗略了解了用户的需求,甚至还提出了一些可行的方案,但是可行性研究的基本目的是最小的代价在尽可能短的时间内确定问题是否存在可行的解法,因此许多细节都被忽略了,可行性研究并不能代替需求分析,它实际上并没有准确地回答“系统必须做什么”这个关键问题。
(2)步骤:1.需求获取:调查研究。
从分析当前系统包含的数据开始,分析当前信息处理的方法与存储的不足,用户希望改进的主要问题及其迫切性等。
2. 需求提炼:分析建模。
需求提炼的主要任务是建立分析模型。
把来自用户的信息加以分析,通过抽象建立起目标系统的分析模型。
3.需求描述:编写 SRS。
为了使需求描述具有统一的风格,可以采用已有的且可满足项目需要的模板,也可以根据项目特点和软件开发小组的特点,对标准进行适当的改动,形成自己的 SRS 模板。
4. 需求验证。
由分析员和用户一起对需求分析结果进行严格的审查、验证。
确保需求说明可作为软件设计和最终系统验收的依据。
3.2 需求分析阶段的基本任务是什么?怎样理解分析阶段的任务是决定“做什么”,而不是“怎样做”?答:(1)1.确定对系统的综合需求。
分析员和用户双方确定对软件系统的综合要求,具体有功能需求、性能需求、环境需求、接口要求、用户界面需求,另外还有可靠性、安全性、保密性、约束、可移植性和可维护性等方面的需求,这些需求通常可以通过双方交流、调查研究来获取,并达到共同的理解。
2.分析系统的数据需求。
因为绝大多数软件系统本质上都是信息处理系统,系统必须处理的信息和系统应该产生的信息在很大程度上决定了系统的面貌。
3.建立软件的逻辑模型。
4.编写软件需求规格说明书。
目的是使用户和开发者能对未来软件有共同的理解,明确定义未来软件的需求、系统的构成及有关的接口。
需求说明相当于用户和开发者之间的一份技术合同,是测试验收阶段对软件进行确认和验收的基准,是软件开发的基础。
5.需求分析评审(2)需求分析实际上是调查、评价以至肯定用户对软件需求的过程,其目的在于精化软件的作用范围,也是分析和确认软件系统构成的过程,以确定未来系统的主要成分及它们之间的接口细节。
因此需求分析实际上是一个对用户意图不断进行揭示和判断的过程,它并不考虑系统的具体实现,而是完整地、严密地描述应当“做什么”的一种过程。
3.3 什么是结构化分析方法?该方法使用什么描述工具?答:(1)结构化分析方法是一种从问题空间到某种表示的映射方法,软件功能由数据流图表示,是结构化方法中重要的,被普遍采用的方法,它由数据流图和数据字典构成系统的逻辑模型。
(2)数据流图、数据字典、结构化语言、判定树和判定表。
3.4 什么是数据流图?其作用是什么?其中的基本符号各表示什么含义?答:(1)数据流图是 SA 方法中用于表示系统逻辑模型的一种工具。
(2)它描述系统由哪几部分组成,各部分之间的联系等,以直观的图形清晰地描述了系统数据的流动和处理过程。
(3)→箭头,表示数据流;○圆或椭圆,表示变换数据的处理;□方框,表示数据的三原点或终点;= 双杠或单杠,表示数据存储(文件)。
除上述 4 种基本符号之外,有时也使用几种附加符号,星号(*)表示数据之间的关系(同时存在);加号(+)表示“或”关系,⊕号表示只能从中选一个(互斥的关系)。
3.5 画数据流图的步骤是什么?应该注意什么事项?答:(1)第一步,先找外部实体(可以是人、物或其他软件系统),找到了外部实体,则系统与外部世界的界面就得以确定,系统的源点和终点也就找到了;第二步,找出外部实体的输入和输出数据流;第三步,在图的边上画出系统的外部实体;第四步,从外部实体的输出流(源点)出发,按照系统的逻辑需要,逐步画出一系列变换数据的加工,直到找到外部实体处所需的输入流(终点),形成数据流的封闭;第五步,按照上述原则进行检查和修改。
最后按照上述步骤画出所有子图。
(2)①画数据流图时,只考虑数据流的静态关系,不考虑其动态关系(如启动、停止等与时间有关的问题),也不考虑出错处理问题。