软件工程的真谛是设计和划分模块阶段要完全和技术分离开?

2015-05-13 23:46:03 +08:00
 Hyperion

本学期我校某位编书神教授给我们上软件工程, 期间布置了一套软件工程实践作业.

万分艰难的从一堆烂题目里选了一个看起可以做的比较贴近现实的东西: ftp文件检索系统.

我之前实习(三个, 均非外包, 没有大公司经验) 和 接活(基本都是前端或者后端开发, 也有各种为各种烂系统善后的经验)

都没接触过用这种看起来很"正规", 好像很"规范"的大型项目, 从需求分析开始, 到详细设计云云.

到上个月底, 教授要搞PPT 交流, 遂, 做了从需求设计到详细设计, 憋了一份出来.

分成下面三大块

遂, 到了要“分享”的那天, 瞄了一眼同学的ppt, 哇, 全是流程图, 数据流图, 数据库er图, 完全不涉及任何技术相关问题, 只有干巴巴的结构.

原来要这样?!

意料之中, 或者又在意料之外, 老师赠与以下几点评价:

事后几节课, 可能是听者有意, 应该是在说别人吧:

至此, 我至今为止经历的猎奇冒险到此结束.


问题, 所以软件工程在实际工作时候到底是怎么个样子? 所以我上面的设计是偏离软工的吗?

软件工程的真谛是设计和划分模块阶段要完全和技术分离开?

问题的出发点是好奇, 个人看法是, 这套东西实用度很低..

5588 次点击
所在节点    问与答
88 条回复
Hyperion
2015-05-14 21:28:07 +08:00
@wy315700 -_- 只是单纯的蛋疼, 人类文明也是无聊推动嘛... 求同存异.

@birdgu 感谢回复.

1/2. 受教, 谢谢. 下学期可能还有这方面的东西要写, 我一定注意.

关于"这么早编程", 对, 我也很好奇... 我没有写任何一行源码, 完全没有.

谢谢, 可能表述上让老师觉得我在编程吧... 我真的纳闷很久...

ER图, 据老师说这个还是必要的东西, 不能缺项..


3. 对, 很同意. 但听老师的意思, 这方面属于实现部分, 课程并不关注.


4. 了解. 好像有那么点清楚软件工程的现实意义了.


谢谢! 我以为以前实习时候师傅告诉我的都是错的...
birdgu
2015-05-14 21:41:28 +08:00
@Hyperion 从你的描述看,你是把搜索服务器和索引服务器设计为两个分布式的子系统,那么这两个子系统间的接口设计是详细设计部分的重要内容。即使传统软件工程也不会认为这属于实现部分。不知道是你们老师没有理解你的设计,还是你误解了你们老师的话。
birdgu
2015-05-14 21:51:11 +08:00
即使是一个由几十人参加的大系统,也完全可以用敏捷的方法去做。

由一个总体设计小组负责根据需求做总体设计、子系统划分,然后每个子系统交给一个采用敏捷方法的团队去做。而需求、总体设计也可以是一个反复迭代的过程。关于在大系统开发中采用敏捷方法的研究还是不少的。

而实践已经证明,采用敏捷方法完全可能比传统软件工程需要更少的人员。
kxxoling
2015-05-14 21:57:41 +08:00
@Hyperion 1. “可扩展性差”我没仔细炼,想表达的是“scalability”差,相信你能理解。就是说,如果项目更大、参与的人数更广泛,涉及的角色更多的时候即使修修补补也无济于事,肯定得换个思路了。

2. 这种情况很正常,陈皓的文章中也说了,越是差的团队越是教条主义、不知变通,差的代码跟差的流程的生产者重合度很大。当然也有野路子,我现在的经验就是,虽然学院派不是银弹,但野路子很不靠谱。

3. 软件工程更重视什么?这一点不需要太纠结,结果永远是最重目的,工程化是手段:只有工程化才能把过往经验更有效地传递下去,坏处是盲目相信会降低灵活性,但错不在工程而在开发者。
学习和使用工程化的思维是为你未来更大的挑战做准备的,不必太拘泥于现在。

举个例子吧,陈皓还介绍过“撞大运调试法”,如果我们把有条理的调试流程比作工程化,那么作坊式就是撞大运,在小项目中凭借经验和个人能力你可以一眼看出问题,当项目十倍百倍增大时就难以运作了。

4. 关于老师。这个大家都懂的,没必要讨论了。
kxxoling
2015-05-14 21:59:46 +08:00
@birdgu 演进是需要时间的嘛~
birdgu
2015-05-14 22:06:50 +08:00
@kxxoling 对软件开发过程来说,工程,或者建筑工程并不是一个好的比喻。建议读一下《软件工艺》(Software Craftsmanship》)

比如,在建筑工程中不可能在你盖完一个三层小别墅以后,再变更需求要改建成小高层的公寓楼。但在软件项目中,这太常见了。关键是在实际的商业环境下,用户这样的需求可能是完全合理的!
Hyperion
2015-05-14 22:20:25 +08:00
@birdgu 翻了下当初他发下来的模板, 我应该没有理解错, 他的书, 认为技术选型是之后的事情, 很明确.

@kxxoling 了解, 谢谢.

@seki 谢谢! 受教.

@jun4rui 是的, 以及今天听到了老师这么一段话:

"""
国外有个TIOBE 的排行榜, 11年时候, 你们看 第一名是Java, 第二名是c, 第三名是c++. 说明这些语言肯定@#!@$!%#@^.

我前面备课去查了一下 15年4月的排行, 第一名是Java, 第二名是c, 第三名是obj-c. obj-c是什么? 是苹果的那个语言. @!#!$%^

然后, 后面就不用看了.
"""

不用看了... 用看了... 看了... 了...
wy315700
2015-05-14 22:25:12 +08:00
@Hyperion

后面还是要看的 5月份 C++还是第三名

May 2015 May 2014 Change Programming Language Ratings Change
1 2 change Java 16.869% -0.04%
2 1 change C 16.847% -0.08%
3 4 change C++ 7.875% +1.89%
4 3 change Objective-C 5.393% -6.40%
5 6 change C# 5.264% +1.52%
6 8 change Python 3.725% +0.67%
birdgu
2015-05-14 22:27:43 +08:00
@Hyperion 不明白你们老师想说明啥。排名后面的语言没有学习价值?
Hyperion
2015-05-14 22:29:44 +08:00
@wy315700 嗯, 我下课之后查了下, 老师数据引用的不对. 不过从来没有专门去查TIOBE 的数据, 平时也是从各种论战里看到才了解一下.

不过, 我也无话可说. 决定讲课内容的是他...
Hyperion
2015-05-14 22:30:33 +08:00
@birdgu 如果我揣摩的没错的话, 是的...
kxxoling
2015-05-14 23:00:40 +08:00
@birdgu 我的理解,软件开发是一个工程化很浓的工作,地基敲定后就不可变这一特性是建筑行业的特色而非工程的通性。硬要举个例子的话,你可想想一下现在想要替换 IP 协议会怎样?
wy315700
2015-05-14 23:01:54 +08:00
@kxxoling IPV6这么多年不能普及就是这个原因
min
2015-05-14 23:14:10 +08:00
我最头疼solution design review的时候只拿一个数据库表结构来跟我讲的
napsterwu
2015-05-14 23:50:34 +08:00
@Septembers 一直在想密码里面带@的要怎么办 git也同理。。
wy315700
2015-05-14 23:52:11 +08:00
@napsterwu 转义符吧
birdgu
2015-05-15 08:28:15 +08:00
@wy315700 IPV6不能普及主要还是因为有大量硬件需要更要、地址需要重新分配、大量的系统配置工作要做…而对大量现有系统的拥有者来说并没而改变的迫切感,在无数自治系统组成的互联网上又没人迫使大家来做。So……
birdgu
2015-05-15 08:38:22 +08:00
@kxxoling 对设计良好的软件来说,更换IP协议根本不是大问题。传统的软件工程希望通过大量的文档和评审来固化每个阶段的工作,尽量减少变化,特别是需求变化。对变化采取的是消极的态度。敏捷方法则是认识到变化是永恒的,因此只有想办法使软件和开发去积极地去适应变化。
casparchen
2015-05-15 09:40:34 +08:00
讨论这么多有意义吗?你上的是软件工程这门课,老师上课按照软件工程常规的来不对吗?你觉得敏捷开发更适合你更好,跟这门课有什么关系?你选了我这门课,我就得按照这门课的内容公平地评价所有的学生。就好像美术系的学生画画不行,我该因为他唱歌好给他好评,搞笑一样呢。
wy315700
2015-05-15 09:50:46 +08:00
@birdgu 本质的原因就是 IPV6和IPV4 不 兼 容。

如果兼容,那就没有什么问题了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/190895

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX