软件工程实践者的研究方法(中文版第七版)课后习题答案

更新时间:2023-05-06 11:56:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

作业答案。

2.1

a.设计者对于用户要问的问题:

项目的目标是什么?做到什么程度就成功了?谁会对项目的成功做最后的评判?项目的使用者包括那些?

b. 用户对设计者应该问的问题:

目前问题有哪些解决方案,项目完成有哪些难点,在时间范围内能否完成?

c. 软件问题用户自问?

还有其他解决方案吗?哪些功能是必须的?乙方资质和能力够吗?

d. 软件过程问题自问?

用敏捷还是用瀑布?质量检查点分别有哪些?有几个MileStone?

2.2 为沟通活动设计一系列动作,选定其一并设计任务集。

(批作业的时候,以合理为目标,不一定要一样)

需求获取、需求规范说明(建模)、需求协商、需求确认等。

例如,书上page 23。

2.7 详细描述三个适合用于瀑布模型的软件项目。

(要求学生不仅仅列出项目的名称,而要说明为什么适合)

瀑布模型适合于项目开发而不是产品开发。信息管理系统一般适合于用瀑布模型。因为这类系统业务功能较为明确,架构比较单一,技术难点较少。图书馆系统、销售管理系统都是。

3.11 重构:已经写好的正确的代码,不断修正,使得代码更加精简并易读。

结对编程:两个人同时编写一段代码,一般一个人负责实现,一个人负责检查代码质量。

3.16 利用FDD,为“Web浏览器”定义一系列特征集合与特征。

特征集合模板: an 如:出售一件商品

特征定义模板: the a(n)

特征集合:展示Web页面内容。

特征:

1)本地解析HTML页面

2)展示HTML页面

3)从网络上下载页面相关图片

4)在浏览器上展示图片

附加:统一过程模型的图。

(要求有图有说明)

5.9 为如下活动开发一个完整的规约

注意按照书本59页格式,包括用例名称,参与者,场景,异常等等。

5.10 用例异常代表什么

1)非正常输入。

2)环境状态不满足要求。

3)备选方案

。。。。

5.13 在需求工程活动的谈判情境中,“双赢”意味着什么?

1)找到了双方赢的条件。

2)合适的折衷。(在满足利益相关者要求的同时,反映软件团队所处真实世界的限制,如时间、人员,预算)

3)后续开展软件活动的关键。

JUNIT,SVN, Maven,RedMine分别是什么工具,完成什么功能?

这四个工具都是软件工程辅助工具。JUNIT是单元测试工具、SVN是版本管理工具,Maven 是构建工具,Redmine是项目管理与变更管理工具。

1)JUnit是基于面向对象构建的java单元测试框架。JUnit是开放源代码项目。使用这个工具可以快速构建测试用例。可以和Maven等构建工具集成,在持续集成过程中不断进行测试。

2)svn(subversion)是一个版本管理工具。与GITHubGit这种分布式版本管理工具不同,这是集中式代码管理工具。SVN的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器获取代码,然后开发,最后解决冲突,提交。所有的版本信息都放在服务器上。SVN支持分支与合并,支持标签管理等。

3)Maven 是一个构建工具,可以通过撰写配置文件,自动构建一个项目。构建过程包括从服务器上checkout出源代码,编译、运行单元测试、生成文档、打包和部署等工作,在maven 的帮助下,这些工作可以自动进行。另外,maven还有依赖管理、自动生成项目站点等特性。7bba9044b5360b4c2e3f5727a5e9856a561226fb/view/80e4c3136edb6f1aff001fdd

4)redmine Redmine是用Ruby开发的基于web的项目管理软件。这种Web 形式的项目管理系统通过“项目(Project)”的形式把成员、任务(问题)、文档、讨论以及各种形式的资源组织在一起,大家参与更新任务、文档等内容来推动项目的进度,同时系统利用时间线索和各种动态的报表形式来自动给成员汇报项目进度。另外,软件还提供wiki、新闻台等,也可以集成其他版本管理系统和BUG跟踪系统,例如SVN、CVS、TD等等。

6.6 PHTRS的用例图与类模型

坑洼查询

类包含:坑洼/上报人/工单/维护人员/维护设备/维护材料等等

注意到这几个之间的关联,上报人和坑洼的关系,工单和其他所有类的关系。等等。

6.8 与类图相关。

7.1 结构化分析与面向对象分析的本质区别。

答:结构化分析的核心是“处理”,而面向对象分析的核心是“对象/类”。前者以“计算”为核心,而后者以“结构”为核心

7.5 什么是控制规格说明?

答:控制规格说明使用两种不同的方式表现系统的行为,1)一个状态图,是行为的序列说明。2)程序激活表,即行为的组合说明,或者说是当有事件发生时,会引入流程模型的哪个处理。

7.6 PSPEC和用例是同一事物吗?如果不是,请解释区别。

答:不是。处理规格说明用于描述出现在求精过程中最终层次的所有流程模型的处理,通常是在详细设计的时候用到,是系统某个功能的具体实现方法。而用例描述了一个用户如何使用系统的,并不涉及到系统的内部的行为,通常在需求分析阶段用到。

7.8 如何从状态图区分顺序图?它们有何相似之处?

答:状态图描述一个对象状态的变迁,而顺序图描述几个对象之间交互的顺序。

对象状态的变迁,通常是由事件激发的,这个事件和顺序图当中的消息有关。可以由多个对象的状态图,组合成多个对象交互组成的序列图。

9.1 用一个房屋或建筑物的结构做比喻,与软件体系结构做对照分析。经典建筑与软件体系结构的原则有什么相似之处?又有何区别?

答:建筑物也是由各种部件通过不同方式搭建而成。如不同的房子都有墙、顶、地基等等,搭建方法的不同构成了不同风格的房子。软件体系结构也一样,不同的部件通过不同的方式的组装,形成了不同的软件系统。

不同点:1)一个比较实际,一个比较抽象。

2)房屋或建筑物可变化的空间比较小,软件体系结构变化跨度更大一点。

9.2 举出一两个例子,说明9.3.1节中提到的每一种体系结构的应用。

答:1)以数据为中心的体系结构以数据库为核心的企业信息系统

2)层次体系结构OSI, MVC

3)调用/返回体系结构远程消息调用(RPC),科学计算。

4)数据流体系结构编译器

9.39.3.1节中提到的一些体系结构风格具有层次性,而另外一些则没有。列出每种类型。没有层次的体系结构风格如何实现?

答:很难绝对地说那些体系结构没有层次。

1)层析性体系结构肯定有层次。

2)调用/返回的话,有主程序,也有1层调用,2层调用。

层次不明显的:

1)以数据为中心的体系结构,通过所有软件访问公共的数据库实现数据共享。

2)面向对象体系结构,通过将对象组装成模块,体现某种层次。

3)数据流体系结构,数据可以通过管道,流到更细的管道里去。

9.6 研究ATAM,并对9.5.1节提出的6个步骤进行详细讨论。

此题目暂时不批。

10.3 OCP原则的核心是容易扩充,但是不需要修改已有代码。(对外延具有开放性,对修改具有封闭性)

代码如:

探测器类读取不同的Sensor,用interface 定义Sensor,然后HeatSensor实现之,如果想扩充一种Sensor,则直接实现Sensor接口,Detector不需要修改。

//Detector Sensor

public class Detector {

Sensor sensor;

public Detector(Sensor sensor){

this.sensor =sensor;

}

public void detectSensor(Sensor sensor){

System.out.println(sensor.read());

}

}

//Sensor 接口

public interface Sensor {

public String read();

}

//HeatSensor

public class HeatSensor implements Sensor{

public String read(){

return"heatSensor";

}

}

//扩充一个Sensor

public class SmokeSensor implements Sensor {

public String read(){

return"smoke";

}

}

10.4 DIP含义是:1、上层不应该依赖于下层模块,二者都应该依赖于抽象。

2、抽象不应该依赖于细节,细节应该依赖于抽象。

如果如果以电灯为例子,开关可以打开电灯。如果开关直接调用电灯,那么,当

(和OCP的例子中有所不同,如果其他物体都继承电灯,也满足OCP原则,即可以扩充,无需修改代码,而DIP直接指出了依赖于抽象的意义)

代码如下:

public class Light {

public String turnOn(){

return"Turn on the light";

}

public String turnOff(){

return"Turn off the light";

}

}

public class Switch {

public String Toggle(Light light){

return light.turnOn();

}

}

public class Test {

public static void main(String argv[]){

Switch sw =new Switch();

Light light = new Light();

System.out.println( sw.Toggle(light));

}

// 如果将TV作为子类,虽然从程序上可以,但理解不合理。

public class TV extends Light{

public String turnOn(){

return"Turn on the TV";

}

public String turnOff(){

return"Turn off the TV";

}

}

所以,增加一个接口,叫Switchable

10.5 选择3个你最近开发的构件,评估每个构件的内聚类型。

此题目暂时不批。

10.6 选择3个…………………………….,评估每个构件的耦合类型。

此题目暂时不批。

10.7 问题领域构件不会存在外部耦合的说法有道理吗?如果你认为没有道理,那么哪种类型的构件存在着外部耦合?

没有道理。

例如:1)嵌入式软件应用中的构件,与操作系统耦合

2)数据库应用中POS构建,与数据库耦合。

3)文件传输构件,会和通信功能耦合。

10.8 完成(1)一个细化的设计类;(2)接口描述(3)该类中包含的某一操作的活动图。例如,书上的printJob(Page 197),有7个操作,2个接口。

CheckPriority的活动图。(注意,批作业的时候,一定要是活动图)

可复制、编制,期待你的好评与关注)

本文来源:https://www.bwwdw.com/article/zdie.html

Top